You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

531 lines
18 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}
}