|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Drawing;
|
|
|
using System.Data;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Windows.Forms;
|
|
|
using JwKdsV.Core;
|
|
|
using JwKdsV.Core.MessageEvent;
|
|
|
using JwKdsV.Entity.OrderPackage;
|
|
|
using JwKdsV.Core.Utils;
|
|
|
using NLog;
|
|
|
|
|
|
//using System.Management;
|
|
|
//using System.Net;
|
|
|
//using System.IO;
|
|
|
//using System.Runtime.InteropServices;
|
|
|
//using System.Web;
|
|
|
|
|
|
namespace JwKdsV.Component
|
|
|
{
|
|
|
public partial class OrderPanel : UserControl
|
|
|
{
|
|
|
private static ILogger logger = NLog.LogManager.GetCurrentClassLogger();//Yao 2023-06-21 增加日志
|
|
|
|
|
|
//==============================Yao 2023-06-16 读取文件使用
|
|
|
//string str;
|
|
|
//string strOne;
|
|
|
//int ip_exist = 0;
|
|
|
|
|
|
//[DllImport("kernel32")]
|
|
|
//private static extern int GetPrivateProfileString(
|
|
|
// string lpAppName,
|
|
|
// string lpKeyName,
|
|
|
// string lpDefault,
|
|
|
// StringBuilder lpReturnedString,
|
|
|
// int nSize,
|
|
|
// string lpFileName);
|
|
|
|
|
|
//public string ContentReader(string area, string key, string def)
|
|
|
//{
|
|
|
// StringBuilder stringBuilder = new StringBuilder(1024);
|
|
|
// GetPrivateProfileString(area, key, def, stringBuilder, 1024, str);
|
|
|
// return stringBuilder.ToString();
|
|
|
//}
|
|
|
|
|
|
//[DllImport("kernel32")]
|
|
|
//private static extern long WritePrivateProfileString(
|
|
|
// string mpAppName,
|
|
|
// string mpKeyName,
|
|
|
// string mpDefault,
|
|
|
// string mpFileName);
|
|
|
|
|
|
//string kds_print_ip;
|
|
|
//string kds_print_ip1;
|
|
|
//string kds_print_ip2;
|
|
|
//string kds_print_ip3;
|
|
|
//string kds_print_ip4;
|
|
|
//string kds_print_ip5;
|
|
|
//string kds_print_ip6;
|
|
|
//string kds_print_open = "0";
|
|
|
//string kds_print_number = "1";
|
|
|
//string kds_WaiDai_Print = "0";
|
|
|
//===================================================
|
|
|
|
|
|
private DateTime startDate;
|
|
|
|
|
|
public OrderPanel()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
}
|
|
|
|
|
|
public OrderPanel(ServiceOrder order, int currentPageNum)
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
|
|
|
Order = order;
|
|
|
|
|
|
CurrentPageNum = currentPageNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
public void RefreshPageInfo(int totalPageNum)
|
|
|
{
|
|
|
|
|
|
TotalPageNum = totalPageNum;
|
|
|
|
|
|
//标题 桌号+单号
|
|
|
StringBuilder bs = new StringBuilder();
|
|
|
if (totalPageNum > 1)
|
|
|
{
|
|
|
//大于1页,显示页编码
|
|
|
bs.Append(string.Format("({0}/{1}) ", CurrentPageNum, totalPageNum));
|
|
|
|
|
|
}
|
|
|
//营业模式
|
|
|
var orderType = Order.OrderType;
|
|
|
if (Order.Caution != null && !"".Equals(Order.Caution))
|
|
|
{
|
|
|
if (Order.Caution.IndexOf("收餐人隐私号") >= 0)
|
|
|
{
|
|
|
string caution = Order.Caution.Substring(0, Order.Caution.IndexOf("收餐人隐私号"));
|
|
|
if (caution != null && !"".Equals(caution))
|
|
|
{
|
|
|
this.label1.Text = caution;
|
|
|
this.label1.Visible = true;
|
|
|
}
|
|
|
else {
|
|
|
this.label1.Text = "";
|
|
|
this.label1.Visible = false;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else {
|
|
|
this.label1.Text = Order.Caution.Replace(",",",");
|
|
|
this.label1.Visible = true;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
this.label1.Visible = false;
|
|
|
}
|
|
|
switch (orderType) {
|
|
|
case OrderType.堂食:
|
|
|
case OrderType.餐桌:
|
|
|
case OrderType.外带:
|
|
|
case OrderType.电话外卖:
|
|
|
this.label2.Visible = false;
|
|
|
this.label2.ForeColor = Color.White;
|
|
|
this.label2.Text = "";
|
|
|
break;
|
|
|
case OrderType.微信点餐:
|
|
|
this.label2.Visible = true;
|
|
|
this.label2.ForeColor = Color.Green;
|
|
|
//Yao 2023-06-23
|
|
|
if (Order.OrderNo[0] == 'T')
|
|
|
this.label2.Text = "微信堂食" + "\r\n";//微信堂食
|
|
|
else if (Order.OrderNo[0] == 'D')
|
|
|
this.label2.Text = "微信外带" + "\r\n";//微信外带
|
|
|
else
|
|
|
this.label2.Text = orderType.ToString();
|
|
|
break;
|
|
|
case OrderType.百度外卖:
|
|
|
break;
|
|
|
case OrderType.美团外卖:
|
|
|
this.label2.Visible = true;
|
|
|
this.label2.ForeColor = Color.Red;
|
|
|
this.label2.Text = orderType.ToString();
|
|
|
break;
|
|
|
case OrderType.饿了么:
|
|
|
this.label2.Visible = true;
|
|
|
this.label2.ForeColor = Color.Blue;
|
|
|
this.label2.Text = orderType.ToString();
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
//桌号
|
|
|
var showDeskNo = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERSHOWDESKNO, "true");
|
|
|
if (showDeskNo == "true")
|
|
|
{
|
|
|
logger.Info("当前桌号:{0}",Order.TableNo);
|
|
|
//2023/06/21 Yao 更改显示为A01-A18等
|
|
|
//if (char.IsDigit(Order.TableNo[0]))
|
|
|
//{
|
|
|
// int number = Convert.ToInt16(Order.TableNo);
|
|
|
// if (number <= 54)
|
|
|
// bs.Append(string.Format("桌:{0}", HsPrinter.Desk_ChuPing_Number_Data[number]));//2023/05/24 Yao
|
|
|
// else
|
|
|
// bs.Append(string.Format("桌:{0}", " "));
|
|
|
//}
|
|
|
//else if (char.IsLetter(Order.TableNo[0]) && (Order.TableNo[0] == 'A' || Order.TableNo[0] == 'B' || Order.TableNo[0] == 'C'))
|
|
|
//{
|
|
|
// bs.Append(string.Format("桌:{0}", Order.TableNo));
|
|
|
//}
|
|
|
bs.Append(string.Format("桌:{0}", Order.TableNo));
|
|
|
}
|
|
|
//单号
|
|
|
var enableOrderNo = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ENABLE_ORDERNO, "true");
|
|
|
var ticketNo = string.Empty;
|
|
|
if (enableOrderNo == "true")
|
|
|
{
|
|
|
ticketNo = Order.OrderNo;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ticketNo = KdsBusiness.TicketNoDisplay(Order.TradeNo);
|
|
|
}
|
|
|
switch (orderType)
|
|
|
{
|
|
|
case OrderType.堂食:
|
|
|
case OrderType.餐桌:
|
|
|
case OrderType.外带:
|
|
|
case OrderType.电话外卖:
|
|
|
bs.Append(string.Format(" 单:{0}{1}", Order.PosName, ticketNo));
|
|
|
break;
|
|
|
case OrderType.微信点餐:
|
|
|
bs.Append(string.Format(" 单:{0}", ticketNo));
|
|
|
break;
|
|
|
case OrderType.百度外卖:
|
|
|
bs.Append(string.Format(" 单:{0}", ticketNo));
|
|
|
break;
|
|
|
case OrderType.美团外卖:
|
|
|
bs.Append(string.Format(" 单:{0}", ticketNo));
|
|
|
break;
|
|
|
case OrderType.饿了么:
|
|
|
bs.Append(string.Format(" 单:{0}", ticketNo));
|
|
|
break;
|
|
|
}
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(Order.Items[0].HuacaiTime))
|
|
|
{
|
|
|
if (CurrentPageNum == totalPageNum)
|
|
|
{
|
|
|
this.chudanLabel.Text = "出单";
|
|
|
this.chudanLabel.Visible = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.chudanLabel.Visible = false;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.chudanLabel.Text = "已出单";
|
|
|
this.chudanLabel.Visible = true;
|
|
|
this.orderTimeLabel.Visible = false;
|
|
|
bs.Append("\n" + Order.Items[0].HuacaiTime);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(Order.Items[0].ChupinTime))
|
|
|
{
|
|
|
if (CurrentPageNum == totalPageNum)
|
|
|
{
|
|
|
this.chudanLabel.Text = "出单";
|
|
|
this.chudanLabel.Visible = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.chudanLabel.Visible = false;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.chudanLabel.Text = "已出单";
|
|
|
this.orderTimeLabel.Visible = false;
|
|
|
bs.Append("\n" + Order.Items[0].ChupinTime);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
this.infoLabel.Text = bs.ToString();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 关联的订单
|
|
|
/// </summary>
|
|
|
public ServiceOrder Order { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 当前页
|
|
|
/// </summary>
|
|
|
public int CurrentPageNum { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 总页数
|
|
|
/// </summary>
|
|
|
public int TotalPageNum { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 显示订单项
|
|
|
/// </summary>
|
|
|
/// <param name="start"></param>
|
|
|
/// <param name="count"></param>
|
|
|
public int InitOrderItem(int start)
|
|
|
{
|
|
|
//营业模式
|
|
|
var orderType = Order.OrderType;
|
|
|
if (Order.Caution != null && !"".Equals(Order.Caution))
|
|
|
{
|
|
|
if (Order.Caution.IndexOf("收餐人隐私号") >= 0)
|
|
|
{
|
|
|
string caution = Order.Caution.Substring(0, Order.Caution.IndexOf("收餐人隐私号"));
|
|
|
if (caution != null && !"".Equals(caution))
|
|
|
{
|
|
|
this.label1.Visible = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.label1.Visible = false;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.label1.Visible = true;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.label1.Visible = false;
|
|
|
}
|
|
|
switch (orderType)
|
|
|
{
|
|
|
case OrderType.堂食:
|
|
|
case OrderType.餐桌:
|
|
|
case OrderType.外带:
|
|
|
case OrderType.电话外卖:
|
|
|
this.label2.Visible = false;
|
|
|
break;
|
|
|
case OrderType.微信点餐:
|
|
|
this.label2.Visible = true;
|
|
|
break;
|
|
|
case OrderType.百度外卖:
|
|
|
break;
|
|
|
case OrderType.美团外卖:
|
|
|
this.label2.Visible = true;
|
|
|
break;
|
|
|
case OrderType.饿了么:
|
|
|
this.label2.Visible = true;
|
|
|
break;
|
|
|
}
|
|
|
var items = Order.Items;
|
|
|
|
|
|
int num = start;
|
|
|
OrderItemPanel lastPan = null;
|
|
|
int useHeight = 0;
|
|
|
for (; num < items.Count; num++)
|
|
|
{
|
|
|
var item = items.ElementAt(num);
|
|
|
var pan = new OrderItemPanel();
|
|
|
pan.Width = itemsPanel.Width;
|
|
|
pan.Dock = DockStyle.Top;
|
|
|
pan.Font = this.PanelFont;
|
|
|
pan.SetOrderItem(orderType, item);
|
|
|
|
|
|
useHeight += pan.Height;
|
|
|
if(useHeight <= this.itemsPanel.Height)
|
|
|
{
|
|
|
this.itemsPanel.Controls.Add(pan);
|
|
|
pan.BringToFront();
|
|
|
|
|
|
lastPan = pan;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//超出可显示区域,不在进行
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if(lastPan != null)
|
|
|
{
|
|
|
lastPan.isLast = true;
|
|
|
}
|
|
|
|
|
|
|
|
|
return num;
|
|
|
}
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(Order.Items[0].HuacaiTime))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(Order.Items[0].ChupinTime))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
RefreshTimer();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 外围负责定时刷新
|
|
|
/// </summary>
|
|
|
public void RefreshTimer()
|
|
|
{
|
|
|
if (this.orderTimeLabel.Visible)
|
|
|
{
|
|
|
//以下单时间开始计时
|
|
|
startDate = Convert.ToDateTime(Order.SaleDate);
|
|
|
var span = DateTime.Now.Subtract(startDate);
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
int minutes = span.Hours * 60 + span.Minutes;
|
|
|
int seconds = span.Seconds;
|
|
|
this.orderTimeLabel.Text = string.Format("{0}:{1}",
|
|
|
minutes < 10 && minutes >= 0 ? "0" + minutes : minutes.ToString(),
|
|
|
seconds < 10 && seconds >= 0 ? "0" + seconds : seconds.ToString());
|
|
|
foreach(var control in this.itemsPanel.Controls)
|
|
|
{
|
|
|
if(control is OrderItemPanel)
|
|
|
{
|
|
|
var pan = control as OrderItemPanel;
|
|
|
pan.RefreshTimeOut();
|
|
|
}
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Font _font = Constant.BIG_FONT;
|
|
|
[Category("杂项"), Description("字体")]
|
|
|
public Font PanelFont
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this._font;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this._font = value;
|
|
|
//this.chudanLabel.Font = this._font;
|
|
|
//限制显示时间的最大字体
|
|
|
this.orderTimeLabel.Font = Constant.BIG_FONT;
|
|
|
this.infoLabel.Font = Constant.BIG_FONT;
|
|
|
this.panel1.Font = this._font;
|
|
|
this.itemsPanel.Font = this._font;
|
|
|
foreach (var control in this.itemsPanel.Controls)
|
|
|
{
|
|
|
if (control is OrderItemPanel)
|
|
|
{
|
|
|
var item = control as OrderItemPanel;
|
|
|
item.Font = this._font;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 点击出单
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnChudaClick(object sender, EventArgs e)
|
|
|
{
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(Order.Items[0].HuacaiTime))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(Order.Items[0].ChupinTime))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
//只有最后一页才允许出单
|
|
|
if(CurrentPageNum != TotalPageNum)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
//判断是否需要确认
|
|
|
var chupin = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_CHUPINCONFIRM);
|
|
|
//if(chupin == "true")
|
|
|
//{
|
|
|
// if(MessageBox.Show("确认出品?", "出品确认", MessageBoxButtons.OKCancel) == DialogResult.OK)
|
|
|
// {
|
|
|
// Chupin();
|
|
|
// }
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// Chupin();
|
|
|
//}
|
|
|
//2023/05/24 Yao
|
|
|
if (chupin == "true")
|
|
|
{
|
|
|
Chupin();
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//Yao 2023-06-24 增加打出品单
|
|
|
Chupin();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 出品
|
|
|
/// </summary>
|
|
|
private void Chupin()
|
|
|
{
|
|
|
MsgEvent.Send(Constant.ORDERCHUPIN, this);
|
|
|
}
|
|
|
|
|
|
private void Qucan()
|
|
|
{
|
|
|
//Yao 2023-08-05 增加打出品单
|
|
|
MsgEvent.Send(Constant.CALLORDERTTS, this);
|
|
|
}
|
|
|
private void JiaoHaoLabel_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
Qucan();
|
|
|
}
|
|
|
}
|
|
|
}
|