|
|
using JwKdsV.Business;
|
|
|
using JwKdsV.Component;
|
|
|
using JwKdsV.Core;
|
|
|
using JwKdsV.Core.DisplaySetting;
|
|
|
using JwKdsV.Core.MessageEvent;
|
|
|
using JwKdsV.Core.SocketMessage;
|
|
|
using JwKdsV.Core.Utils;
|
|
|
using JwKdsV.Entity;
|
|
|
using JwKdsV.Entity.Normal;
|
|
|
using JwKdsV.Entity.OrderPackage;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Data;
|
|
|
using System.Diagnostics;
|
|
|
using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows.Forms;
|
|
|
using System.Threading;
|
|
|
|
|
|
|
|
|
using System.Management;
|
|
|
using System.Net;
|
|
|
|
|
|
|
|
|
|
|
|
using System.IO;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Web;
|
|
|
|
|
|
|
|
|
|
|
|
namespace JwKdsV
|
|
|
{
|
|
|
public partial class MainForm : BaseForm
|
|
|
{
|
|
|
|
|
|
private int _itemSpace = 5;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 分类展示空间集合
|
|
|
/// </summary>
|
|
|
private Dictionary<string, ItemPanel> categoryItemDic = new Dictionary<string, ItemPanel>();
|
|
|
|
|
|
/// <summary>
|
|
|
/// 单品展示控件
|
|
|
/// </summary>
|
|
|
private ItemPanel productItemPanel = new ItemPanel();
|
|
|
|
|
|
/// <summary>
|
|
|
/// 初始显示方式,便于发生显示变化,提示重启
|
|
|
/// </summary>
|
|
|
private string _initDisplayWay = null;
|
|
|
|
|
|
private bool _showChupin = false;
|
|
|
|
|
|
//private System.Timers.Timer perSecTimer = new System.Timers.Timer(10000);
|
|
|
private System.Windows.Forms.Timer perSecTimer = new System.Windows.Forms.Timer();
|
|
|
|
|
|
private Size _containerSize = new Size(600, 400);
|
|
|
|
|
|
public MainForm()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
|
|
|
this.Text = string.Format("巨为厨显({0})", Application.ProductVersion);
|
|
|
|
|
|
KeyboardUtils.Instance.RegisterHook(this.AppHookKeyDown);
|
|
|
|
|
|
//显示今日统计
|
|
|
var showToday = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_MAINSHOWTODAY, "true");
|
|
|
todayPanel.Visible = showToday == "true";
|
|
|
//Yao 2023/08/03 增加线程部份 subin 2023-08-04 修改 start
|
|
|
//// 创建两个线程
|
|
|
//Thread readerThread = new Thread(ReadData);
|
|
|
|
|
|
//// 启动线程
|
|
|
//readerThread.Start();
|
|
|
//subin 2023-08-04 修改 end
|
|
|
}
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
_containerSize = this.containerPanel.Size;
|
|
|
|
|
|
//样式变更事件
|
|
|
MsgEvent.Receive(Constant.STYLECHANGED, SettingStyleChanged);
|
|
|
//出品
|
|
|
MsgEvent.Receive(Constant.ORDERCHUPIN, OrderChupin);
|
|
|
//Yao 2023/08/05 增加一个划菜上加一个叫号
|
|
|
MsgEvent.Receive(Constant.CALLORDERTTS, CallOrderTTS);
|
|
|
//新订单
|
|
|
MsgEvent.Receive(Constant.NEWORDER, NewOrder);
|
|
|
|
|
|
//新出品菜品事件
|
|
|
MsgEvent.Receive(Constant.NEWHUACAIITEM, NewHuacaiItem);
|
|
|
|
|
|
RefreshUI();
|
|
|
|
|
|
//显示状态信息
|
|
|
this.storeNameLabel.Text = string.Format(this.storeNameLabel.Text, "(" + Global.Instance.StoreInfo.TenantId + "-" + Global.Instance.StoreInfo.StoreNo + ")" + Global.Instance.StoreInfo.StoreName);
|
|
|
this.posNoLabel.Text = string.Format(this.posNoLabel.Text, Global.Instance.StoreInfo.PosNo);
|
|
|
|
|
|
//加载历史订单
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "product":
|
|
|
case "category":
|
|
|
LoadData(false, 1, pagerControl1.PageSize);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
//时间显示定时任务
|
|
|
//perSecTimer.Elapsed += PerSecTimer_Elapsed;
|
|
|
//perSecTimer.Start();
|
|
|
perSecTimer.Interval = 10000;
|
|
|
perSecTimer.Tick += PerSecTimer_Elapsed;
|
|
|
perSecTimer.Start();
|
|
|
|
|
|
//当前时间
|
|
|
this.nowTimelabel.Text = string.Format(this.nowTimelabel.Tag.ToString(), DateUtils.GetNowFormat("yyyy-MM-dd HH:mm"));
|
|
|
//刷新统计
|
|
|
RefreshTodayStatistics();
|
|
|
//刷新待处理统计信息
|
|
|
RefreshWaitStatistics();
|
|
|
//刷新连接状态
|
|
|
RefreshWebSocketInfo();
|
|
|
//异步处理日志文件
|
|
|
AsyncWorker.DeleteHistoryLogFile();
|
|
|
}
|
|
|
//Yao 2023/08/03
|
|
|
private static int sharedData = 0;
|
|
|
private static object lockObject = new object();
|
|
|
public static string[] share_Array = new string[1000];
|
|
|
|
|
|
public static void ReadData()
|
|
|
{
|
|
|
int bak = 0;
|
|
|
int num = 250;
|
|
|
while (true)
|
|
|
{
|
|
|
// 使用 lock 关键字保护对共享变量的读取
|
|
|
lock (lockObject)
|
|
|
{
|
|
|
int data = sharedData;
|
|
|
if ((bak != data) && (num == 1))
|
|
|
{
|
|
|
if (((data != 0) && (bak < data)) || (data == 0))
|
|
|
{
|
|
|
Console.WriteLine($"bak数据1:{bak}");
|
|
|
bak++;
|
|
|
if (bak > 999)
|
|
|
bak = 0;
|
|
|
|
|
|
|
|
|
// JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound_TD(share_Array[bak]);
|
|
|
JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound_Queue(share_Array[bak]);
|
|
|
//Task.Factory.StartNew(() =>
|
|
|
// {
|
|
|
// JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound_Queue(share_Array[bak]);
|
|
|
// });
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//Task.Factory.StartNew(() =>
|
|
|
//{
|
|
|
// Thread.Sleep(4000);
|
|
|
// Console.WriteLine($"2数据:{bak}");
|
|
|
//});
|
|
|
//Thread.Sleep(4000);
|
|
|
//
|
|
|
//Console.WriteLine($"读取的数据:{share_Array[bak]}");
|
|
|
}
|
|
|
if (num > 0)
|
|
|
{
|
|
|
num--;
|
|
|
if (num == 0)
|
|
|
{
|
|
|
num = 550;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
Thread.Sleep(10);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void AppHookKeyDown(object sender, KeyEventArgs e)
|
|
|
{
|
|
|
switch (e.KeyCode)
|
|
|
{
|
|
|
case Keys.Enter:
|
|
|
this.OnEnterClick();
|
|
|
break;
|
|
|
case Keys.Escape:
|
|
|
//this.OnCloseClick(sender, e);
|
|
|
break;
|
|
|
default:
|
|
|
{
|
|
|
if (this.ActiveControl != this.huadanNoCom)
|
|
|
{
|
|
|
this.huadanNoCom.Focus();
|
|
|
var key = (char)e.KeyValue;
|
|
|
if (key > 0 && key < 10)
|
|
|
{
|
|
|
this.huadanNoCom.Text = key + "";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void OnEnterClick()
|
|
|
{
|
|
|
//加载历史订单
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
if (displayWay == "order")
|
|
|
{
|
|
|
var no = (int)this.huadanNoCom.IntegerValue;
|
|
|
if (no > 0)
|
|
|
{
|
|
|
var list = this.containerPanel.Controls;
|
|
|
if (no <= list.Count)
|
|
|
{
|
|
|
var panel = list[no - 1] as OrderPanel;
|
|
|
OrderChupin(null, new MsgEventArgs(Constant.ORDERCHUPIN) { Data = panel });
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
this.huadanNoCom.Text = string.Empty;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新连接状态
|
|
|
/// </summary>
|
|
|
private void RefreshWebSocketInfo()
|
|
|
{
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
//刷新服务中心状态
|
|
|
string statusInfo = string.Empty;
|
|
|
if (WebSocketEnter.Instance.GetWebSocketStatus() == "正常")
|
|
|
{
|
|
|
statusInfo = string.Format("<font color='green'>正常</font>");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
statusInfo = string.Format("<font color='yellow'>离线</font>");
|
|
|
}
|
|
|
this.serviceStatusLabel.Text = string.Format(this.serviceStatusLabel.Tag.ToString(), statusInfo);
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
int i = 1, j = 1;
|
|
|
private void PerSecTimer_Elapsed(object sender, EventArgs e)
|
|
|
{
|
|
|
Stopwatch watch = Stopwatch.StartNew();
|
|
|
logger.Info("开始刷新界面.");
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
this.nowTimelabel.Text = string.Format(this.nowTimelabel.Tag.ToString(), DateUtils.GetNowFormat("yyyy-MM-dd HH:mm"));
|
|
|
}));
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
//刷新订单时间
|
|
|
RefreshOrderTime();
|
|
|
logger.Info("刷新订单时间..");
|
|
|
//刷新单品制作时长
|
|
|
RefreshProductTime();
|
|
|
logger.Info("刷新单品制作时长...");
|
|
|
//刷新今日统计信息
|
|
|
RefreshTodayStatistics();
|
|
|
logger.Info("刷新今日统计信息....");
|
|
|
//刷新待处理统计信息
|
|
|
RefreshWaitStatistics();
|
|
|
logger.Info("刷新待处理统计信息.....");
|
|
|
//刷新连接状态信息
|
|
|
RefreshWebSocketInfo();
|
|
|
logger.Info("刷新连接状态信息......");
|
|
|
}));
|
|
|
});
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
if (j == 30)
|
|
|
{
|
|
|
//发送KDS工作状态
|
|
|
HttpClientUtils.PosMonitor();
|
|
|
j = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
j++;
|
|
|
}
|
|
|
}));
|
|
|
|
|
|
});
|
|
|
logger.Info("主页定时任务执行时长<{0}>", watch.ElapsedMilliseconds);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新今日统计
|
|
|
/// </summary>
|
|
|
private void RefreshTodayStatistics()
|
|
|
{
|
|
|
var sql = @"select p.[productName], cast(sum(case when p.huacaiTime is null then p.quantity else 0 end) as text) as waitHuacai,
|
|
|
cast(sum(case when p.huacaiTime is not null then p.quantity else 0 end) as text) as huacai
|
|
|
from [pos_order_item] p where p.[saleDate] >= '{0}' group by p.[productId];";
|
|
|
var set = SQLiteUtils.Query(string.Format(sql, DateTime.Now.ToString("yyyy-MM-dd 00:00:00")), "data");
|
|
|
var table = set.Tables["data"];
|
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
todayGridView.DataSource = table;
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新待处理统计
|
|
|
/// </summary>
|
|
|
private void RefreshWaitStatistics()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
List<ServiceOrderItem> itemList = null;
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
itemList = db.Query<ServiceOrderItem>("where huacaiTime is null").ToList();
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
itemList = db.Query<ServiceOrderItem>("where chupinTime is null").ToList();
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
if (itemList != null && itemList.Count > 0)
|
|
|
{
|
|
|
List<string> tradeNos = new List<string>();
|
|
|
foreach (var item in itemList)
|
|
|
{
|
|
|
var tradeNo = item.TradeNo;
|
|
|
if (!tradeNos.Contains(tradeNo))
|
|
|
{
|
|
|
tradeNos.Add(tradeNo);
|
|
|
}
|
|
|
}
|
|
|
var totalQuantity = itemList.Sum(x => x.Quantity);
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
this.tongjiLabel.Text = string.Format("待出品 订单:{0} 产品:{1}", tradeNos.Count, totalQuantity);
|
|
|
}));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
this.tongjiLabel.Text = string.Format("待出品 订单:{0} 产品:{1}", 0, 0);
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "刷新统计信息异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取分页数据
|
|
|
/// </summary>
|
|
|
/// <param name="isChupin"></param>
|
|
|
/// <param name="pageNum"></param>
|
|
|
/// <param name="pageSize"></param>
|
|
|
private ListPagerResponse<ServiceOrder> GetPagerData(bool isChupin, int pageNum, int pageSize)
|
|
|
{
|
|
|
ListPagerResponse<ServiceOrder> pager = new ListPagerResponse<ServiceOrder>();
|
|
|
try
|
|
|
{
|
|
|
//获取显示指定时间内的数据
|
|
|
int timeMiddle = 30;
|
|
|
if (isChupin)
|
|
|
{
|
|
|
//历史订单
|
|
|
var history = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_CHUPINHISTORYDATATIME, "30");
|
|
|
|
|
|
int.TryParse(history, out timeMiddle);
|
|
|
if (timeMiddle > 300)
|
|
|
{
|
|
|
timeMiddle = 300;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//待出品订单
|
|
|
var wait = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_WAITCHUPINDATATIME, "30");
|
|
|
int.TryParse(wait, out timeMiddle);
|
|
|
if (timeMiddle > 300)
|
|
|
{
|
|
|
timeMiddle = 300;
|
|
|
}
|
|
|
}
|
|
|
var saleDateMin = DateTime.Now.AddMinutes(timeMiddle * -1).ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
Dictionary<string, ServiceOrder> orderDic = new Dictionary<string, ServiceOrder>();
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
List<ServiceOrderItem> itemList = null;
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
string sql = @"where huacaiTime is null and saleDate >= @0 order by saleDate";
|
|
|
if (isChupin)
|
|
|
{
|
|
|
sql = @"where huacaiTime is not null and saleDate >= @0 order by saleDate desc";
|
|
|
}
|
|
|
itemList = db.Query<ServiceOrderItem>(sql, saleDateMin).ToList();
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
string sql = @"where chupinTime is null and saleDate >= @0 order by saleDate";
|
|
|
if (isChupin)
|
|
|
{
|
|
|
sql = @"where chupinTime is not null and saleDate >= @0 order by saleDate desc";
|
|
|
}
|
|
|
itemList = db.Query<ServiceOrderItem>(sql, saleDateMin).ToList();
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
if (itemList != null && itemList.Count > 0)
|
|
|
{
|
|
|
foreach (var item in itemList)
|
|
|
{
|
|
|
var serviceId = item.ServiceId;
|
|
|
if (serviceId != null && !orderDic.ContainsKey(serviceId))
|
|
|
{
|
|
|
var order = db.FirstOrDefault<ServiceOrder>("where id = @0", serviceId);
|
|
|
if (order != null)
|
|
|
{
|
|
|
order.Items = itemList.FindAll(x => x.ServiceId == serviceId);
|
|
|
|
|
|
orderDic.Add(serviceId, order);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
pager.Status = 1;
|
|
|
|
|
|
//int tmpCount = 9;
|
|
|
pager.TotalCount = orderDic.Count();
|
|
|
//pager.TotalCount = tmpCount;
|
|
|
pager.List = new List<ServiceOrder>();
|
|
|
for (int i = (pageSize * (pageNum - 1)); i < (pageSize * pageNum) && i < orderDic.Count(); i++)
|
|
|
//for (int i = (pageSize * (pageNum - 1)); i < (pageSize * pageNum) && i < tmpCount; i++)
|
|
|
{
|
|
|
pager.List.Add(orderDic.ElementAt(i).Value);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "加载分页数据异常");
|
|
|
pager.Status = 0;
|
|
|
}
|
|
|
return pager;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 加载历史数据
|
|
|
/// </summary>
|
|
|
private void LoadData(bool isChupin, int pageNum, int pageSize)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var pager = GetPagerData(isChupin, pageNum, pageSize);
|
|
|
if (pager.Status == 1)
|
|
|
{
|
|
|
pagerControl1.TotalCount = pager.TotalCount;
|
|
|
foreach (var order in pager.List)
|
|
|
{
|
|
|
MsgEvent.Send(Constant.NEWORDER, order);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "加载历史数据异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 新划菜菜品通知
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="args"></param>
|
|
|
protected virtual void NewHuacaiItem(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
logger.Debug("划菜通知...");
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
RefreshUI();
|
|
|
}));
|
|
|
}
|
|
|
//==============================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";
|
|
|
//增加早餐时间段,及其是否声音打开
|
|
|
int wav_file_exist = 0;
|
|
|
string strTwo = "";
|
|
|
string kds_sound_breakfast_open = "0";
|
|
|
string kds_breakfast_start_time = "6:30";
|
|
|
string kds_breakfast_end_time = "10:30";
|
|
|
|
|
|
string kds_sound_lunch_open = "0";
|
|
|
string kds_lunch_start_time = "11:30";
|
|
|
string kds_lunch_end_time = "15:00";
|
|
|
|
|
|
string kds_sound_diner_open = "0";
|
|
|
string kds_diner_start_time = "17:00";
|
|
|
string kds_diner_end_time = "20:30";
|
|
|
|
|
|
DateTime dt_breakfast_start_time;
|
|
|
DateTime dt_breakfast_end_time;
|
|
|
|
|
|
DateTime dt_lunch_start_time;
|
|
|
DateTime dt_lunch_end_time;
|
|
|
|
|
|
DateTime dt_diner_start_time;
|
|
|
DateTime dt_diner_end_time;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 新订单通知
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="args"></param>
|
|
|
protected virtual void NewOrder(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
logger.Debug("开始显示新订单...");
|
|
|
if (args.Data is ServiceOrder)
|
|
|
{
|
|
|
var order = args.Data as ServiceOrder;
|
|
|
//判断是否需要展示美团外卖订单
|
|
|
var showWaiMai = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_SHOWWAIMAI);
|
|
|
if (showWaiMai == "true" && (order.OrderType == OrderType.美团外卖 || order.OrderType == OrderType.饿了么))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
//校验当前订单是否超时
|
|
|
//待出品订单
|
|
|
int timeMiddle = 30;
|
|
|
var wait = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_WAITCHUPINDATATIME, "30");
|
|
|
int.TryParse(wait, out timeMiddle);
|
|
|
|
|
|
var saleDateMin = DateTime.Now.AddMinutes(timeMiddle * -1).ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
if (order.SaleDate.CompareTo(saleDateMin) >= 0)
|
|
|
{
|
|
|
AddOrderToScreen(order);
|
|
|
//Yao 2023-06-16 读取文件,到第六个打印机打印外带单。
|
|
|
if (wav_file_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_time.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strTwo = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
wav_file_exist = 1;
|
|
|
kds_sound_breakfast_open = ContentReader(strTwo, "kds_sound_breakfast_open", "");
|
|
|
kds_breakfast_start_time = ContentReader(strTwo, "kds_breakfast_start_time", "");
|
|
|
kds_breakfast_end_time = ContentReader(strTwo, "kds_breakfast_end_time", "");
|
|
|
|
|
|
kds_sound_lunch_open = ContentReader(strTwo, "kds_sound_lunch_open", "");
|
|
|
kds_lunch_start_time = ContentReader(strTwo, "kds_lunch_start_time", "");
|
|
|
kds_lunch_end_time = ContentReader(strTwo, "kds_lunch_end_time", "");
|
|
|
|
|
|
kds_sound_diner_open = ContentReader(strTwo, "kds_sound_diner_open", "");
|
|
|
kds_diner_start_time = ContentReader(strTwo, "kds_diner_start_time", "");
|
|
|
kds_diner_end_time = ContentReader(strTwo, "kds_diner_end_time", "");
|
|
|
|
|
|
dt_breakfast_start_time = Convert.ToDateTime(kds_breakfast_start_time);
|
|
|
dt_breakfast_end_time = Convert.ToDateTime(kds_breakfast_end_time);
|
|
|
|
|
|
dt_lunch_start_time = Convert.ToDateTime(kds_lunch_start_time);
|
|
|
dt_lunch_end_time = Convert.ToDateTime(kds_lunch_end_time);
|
|
|
|
|
|
dt_diner_start_time = Convert.ToDateTime(kds_diner_start_time);
|
|
|
dt_diner_end_time = Convert.ToDateTime(kds_diner_end_time);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (ip_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_ip.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strOne = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
ip_exist = 1;
|
|
|
kds_print_ip1 = ContentReader(strOne, "kds_print_ip1", "");
|
|
|
kds_print_ip2 = ContentReader(strOne, "kds_print_ip2", "");
|
|
|
kds_print_ip3 = ContentReader(strOne, "kds_print_ip3", "");
|
|
|
kds_print_ip4 = ContentReader(strOne, "kds_print_ip4", "");
|
|
|
kds_print_ip5 = ContentReader(strOne, "kds_print_ip5", "");
|
|
|
kds_print_ip6 = ContentReader(strOne, "kds_print_ip6", "");
|
|
|
kds_print_open = ContentReader(strOne, "open_print", "");
|
|
|
kds_print_number = ContentReader(strOne, "number_print", "");
|
|
|
kds_WaiDai_Print = ContentReader(strOne, "open_waidai_print", "");
|
|
|
if (kds_print_number == "1")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
else if (kds_print_number == "2")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip2;
|
|
|
}
|
|
|
else if (kds_print_number == "3")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip3;
|
|
|
}
|
|
|
else if (kds_print_number == "4")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip4;
|
|
|
}
|
|
|
else if (kds_print_number == "5")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip5;
|
|
|
}
|
|
|
else if (kds_print_number == "6")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip6;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
if ((kds_print_open == "1") && (ip_exist == 1) && (kds_WaiDai_Print == "1"))
|
|
|
JwKdsV.Core.Utils.HsPrinter.Hs_WaiDai_Printer(kds_print_ip6, order);
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("订单<{0}>已超过显示时间阀值<{1}>分钟,不予显示", order.Id, timeMiddle);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private bool AddOrderToScreen(ServiceOrder order)
|
|
|
{
|
|
|
|
|
|
//厨显方式
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "order":
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return false;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
AddOrderToOrderScreen(order);
|
|
|
}));
|
|
|
break;
|
|
|
case "product":
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return false;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
AddOrderToProductScreen(order);
|
|
|
}));
|
|
|
break;
|
|
|
case "category":
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return false;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
AddOrderToCategoryScreen(order);
|
|
|
}));
|
|
|
break;
|
|
|
}
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新订单记时
|
|
|
/// </summary>
|
|
|
private void RefreshOrderTime()
|
|
|
{
|
|
|
if (this.containerPanel != null)
|
|
|
{
|
|
|
var items = this.containerPanel.Controls;
|
|
|
foreach (var item in items)
|
|
|
{
|
|
|
if (item is OrderPanel)
|
|
|
{
|
|
|
var pan = item as OrderPanel;
|
|
|
pan.RefreshTimer();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新商品计时
|
|
|
/// </summary>
|
|
|
private void RefreshProductTime()
|
|
|
{
|
|
|
//厨显方式
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "product":
|
|
|
{
|
|
|
if (this.productItemPanel != null)
|
|
|
{
|
|
|
var items = this.productItemPanel.Items;
|
|
|
foreach (var item in items)
|
|
|
{
|
|
|
if (item is TilePanel)
|
|
|
{
|
|
|
var tile = item as TilePanel;
|
|
|
var sourceDic = tile.Tag as Dictionary<string, string>;
|
|
|
var saleDate = Convert.ToDateTime(sourceDic["saleDate"]);
|
|
|
TimeSpan span = DateTime.Now - saleDate;
|
|
|
sourceDic["@制作时长@"] = (int)span.TotalMinutes + "分钟";
|
|
|
//制作时长更新
|
|
|
if (tile.IsDisposed || !tile.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
tile.TitleText = KdsBusiness.DisplayContentReplace(sourceDic, tile.TitleTag.ToString());
|
|
|
tile.ContentText = KdsBusiness.DisplayContentReplace(sourceDic, tile.ContentTag.ToString());
|
|
|
tile.BottomText = KdsBusiness.DisplayContentReplace(sourceDic, tile.BottomTag.ToString());
|
|
|
}));
|
|
|
//超时处理
|
|
|
var timeoutWarn = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_TIMEOUTWARN, "true");
|
|
|
var makeDuration = DecimalUtils.GetInt(sourceDic["makeDuration"]);
|
|
|
if (timeoutWarn == "true" && makeDuration > 0)
|
|
|
{
|
|
|
var warnColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ONEWARNCOLOR, "Red");
|
|
|
var startDate = DateTime.Now;
|
|
|
DateTime.TryParse(sourceDic["saleDate"], out startDate);
|
|
|
if (startDate.AddMinutes(makeDuration).CompareTo(DateTime.Now) < 0)
|
|
|
{
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
tile.BackColor = ColorTranslator.FromHtml(warnColor);
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case "category":
|
|
|
{
|
|
|
if (categoryItemDic.Keys.Count > 0)
|
|
|
{
|
|
|
foreach (var panel in categoryItemDic.Values)
|
|
|
{
|
|
|
foreach (var item in panel.Items)
|
|
|
{
|
|
|
var tile = item as TilePanel;
|
|
|
var sourceDic = tile.Tag as Dictionary<string, string>;
|
|
|
var saleDate = Convert.ToDateTime(sourceDic["saleDate"]);
|
|
|
TimeSpan span = DateTime.Now - saleDate;
|
|
|
sourceDic["@制作时长@"] = (int)span.TotalMinutes + "分钟";
|
|
|
if (tile.IsDisposed || !tile.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
tile.TitleText = KdsBusiness.DisplayContentReplace(sourceDic, tile.TitleTag.ToString());
|
|
|
tile.ContentText = KdsBusiness.DisplayContentReplace(sourceDic, tile.ContentTag.ToString());
|
|
|
tile.BottomText = KdsBusiness.DisplayContentReplace(sourceDic, tile.BottomTag.ToString());
|
|
|
}));
|
|
|
//超时处理
|
|
|
var timeoutWarn = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_TIMEOUTWARN, "true");
|
|
|
var makeDuration = DecimalUtils.GetInt(sourceDic["makeDuration"]);
|
|
|
if (timeoutWarn == "true" && makeDuration > 0)
|
|
|
{
|
|
|
var warnColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ONEWARNCOLOR, "Red");
|
|
|
var startDate = DateTime.Now;
|
|
|
DateTime.TryParse(sourceDic["saleDate"], out startDate);
|
|
|
if (startDate.AddMinutes(makeDuration).CompareTo(DateTime.Now) < 0)
|
|
|
{
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
tile.TitleBackColor = ColorTranslator.FromHtml(warnColor);
|
|
|
tile.ContentBackColor = ColorTranslator.FromHtml(warnColor);
|
|
|
tile.BottomBackColor = ColorTranslator.FromHtml(warnColor);
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 新来订单显示到屏幕上(单品)
|
|
|
/// </summary>
|
|
|
/// <param name="order"></param>
|
|
|
/// <returns></returns>
|
|
|
private bool AddOrderToProductScreen(ServiceOrder order)
|
|
|
{
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return false;
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERITEMSTYLE);
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
int width = 120, height = 120;
|
|
|
if (!string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
var style = JsonUtils.Deserialize<ProductShowStyle>(styleStr);
|
|
|
width = style.Width;
|
|
|
height = style.Height;
|
|
|
|
|
|
foreach (var item in order.Items)
|
|
|
{
|
|
|
TilePanel tile = new TilePanel();
|
|
|
tile.Width = width;
|
|
|
tile.Height = height;
|
|
|
var title = style.Title;
|
|
|
if (title != null)
|
|
|
{
|
|
|
tile.TitleRatio = title.Ratio;
|
|
|
tile.TitleForeColor = ColorTranslator.FromHtml(title.FontColor);
|
|
|
tile.TitleFont = Global.Instance.GetFont(title.FontSize);
|
|
|
tile.TitleBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var content = style.Content;
|
|
|
if (content != null)
|
|
|
{
|
|
|
tile.ContentRatio = content.Ratio;
|
|
|
tile.ContentForeColor = ColorTranslator.FromHtml(content.FontColor);
|
|
|
tile.ContentFont = Global.Instance.GetFont(content.FontSize);
|
|
|
tile.ContentBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var bottom = style.Bottom;
|
|
|
if (bottom != null)
|
|
|
{
|
|
|
tile.BottomRatio = bottom.Ratio;
|
|
|
tile.BottomForeColor = ColorTranslator.FromHtml(bottom.FontColor);
|
|
|
tile.BottomFont = Global.Instance.GetFont(bottom.FontSize);
|
|
|
//Yao 2023-06-16 更改外带时,显示其它色
|
|
|
if ((order.OrderType == OrderType.外带) || (order.OrderNo[0] == 'D'))
|
|
|
tile.BottomBackColor = Color.Purple;
|
|
|
else
|
|
|
tile.BottomBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
|
|
|
//组装关键字信息
|
|
|
Dictionary<string, string> sourceDic = new Dictionary<string, string>();
|
|
|
//sourceDic.Add("@票号@", KdsBusiness.TicketNoDisplay(order.TradeNo));
|
|
|
//sourceDic.Add("@票号@", "票号:" + KdsBusiness.TicketNoDisplay(order.TradeNo));//2023/05/24 Yao
|
|
|
sourceDic.Add("@票号@", "单号:" + order.OrderNo);//Yao 2023-06-23
|
|
|
//Yao 2023-06-23 增加显示 微信堂食 微信外带
|
|
|
if (order.OrderNo[0] == 'T')
|
|
|
sourceDic.Add("@营业模式@", "微信堂食" + "");//"堂吃" "微信堂食" + "\r\n";//微信堂食
|
|
|
else if (order.OrderNo[0] == 'D')
|
|
|
sourceDic.Add("@营业模式@", "微信外带" + "");//微信外带
|
|
|
else
|
|
|
sourceDic.Add("@营业模式@", order.OrderType + "");//"堂吃"
|
|
|
//sourceDic.Add("@桌号@", order.TableNo);
|
|
|
//if (char.IsDigit(order.TableNo[0]))
|
|
|
//{
|
|
|
// int number = Convert.ToInt16(order.TableNo);
|
|
|
// sourceDic.Add("@桌号@", "桌号:" + HsPrinter.Desk_ChuPing_Number_Data[number]);//2023/05/24 Yao
|
|
|
//}
|
|
|
//else if (char.IsLetter(order.TableNo[0]) && (order.TableNo[0] == 'A' || order.TableNo[0] == 'B' || order.TableNo[0] == 'C'))
|
|
|
//{
|
|
|
// sourceDic.Add("@桌号@", "桌号:" + order.TableNo);//2023/05/24 Yao
|
|
|
//}
|
|
|
sourceDic.Add("@桌号@", "桌号:" + order.TableNo);//2023/05/24 Yao
|
|
|
sourceDic.Add("@菜品数量@", item.Quantity + "");
|
|
|
var name = item.ProductName;
|
|
|
if (item.IsSuit == 3)
|
|
|
{
|
|
|
//套餐明细
|
|
|
name = "[套]" + name;
|
|
|
}
|
|
|
sourceDic.Add("@菜品名称@", name);
|
|
|
sourceDic.Add("@做法@", item.MakeDesc);
|
|
|
var saleDate = Convert.ToDateTime(item.SaleDate);
|
|
|
TimeSpan span = DateTime.Now - saleDate;
|
|
|
sourceDic.Add("@制作时长@", (int)span.TotalMinutes + "分钟");
|
|
|
sourceDic.Add("@桌号分配时间@", "");
|
|
|
sourceDic.Add("saleDate", item.SaleDate);
|
|
|
sourceDic.Add("tradeNo", order.TradeNo);
|
|
|
sourceDic.Add("itemId", item.ItemId);
|
|
|
sourceDic.Add("makeDuration", item.MakeDuration + "");//制作时长
|
|
|
sourceDic.Add("chupinDuration", item.ChupinDuration + "");//出品时长
|
|
|
//标题
|
|
|
StringBuilder bs = new StringBuilder();
|
|
|
tile.TitleText = KdsBusiness.DisplayContentReplace(sourceDic, style.Title.Content);
|
|
|
tile.TitleTag = style.Title.Content;
|
|
|
tile.TitleAlignment = ContentAlignment.MiddleCenter;
|
|
|
tile.ContentText = KdsBusiness.DisplayContentReplace(sourceDic, style.Content.Content);
|
|
|
tile.ContentTag = style.Content.Content;
|
|
|
tile.BottomVisible = true;
|
|
|
tile.BottomAlignment = StringAlignment.Far;
|
|
|
tile.BottomText = KdsBusiness.DisplayContentReplace(sourceDic, style.Bottom.Content);
|
|
|
tile.BottomTag = style.Bottom.Content;
|
|
|
tile.Name = item.Id;
|
|
|
|
|
|
tile.ItemClick += OnTileClick;
|
|
|
tile.Tag = sourceDic;
|
|
|
this.productItemPanel.Items.Add(tile);
|
|
|
|
|
|
}
|
|
|
this.productItemPanel.RefreshView();
|
|
|
}
|
|
|
}));
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 新来订单显示到屏幕上(分类)
|
|
|
/// </summary>
|
|
|
/// <param name="order"></param>
|
|
|
/// <returns></returns>
|
|
|
private bool AddOrderToCategoryScreen(ServiceOrder order)
|
|
|
{
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_CATEGORYSTYLE);
|
|
|
var itemStyleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERITEMSTYLE);
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
int width = 120, height = 120;
|
|
|
if (!string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
var style = JsonUtils.Deserialize<CategoryShowStyle>(styleStr);
|
|
|
width = style.Width;
|
|
|
height = style.Height;
|
|
|
|
|
|
var itemStyle = JsonUtils.Deserialize<ProductShowStyle>(itemStyleStr);
|
|
|
|
|
|
foreach (var item in order.Items)
|
|
|
{
|
|
|
TilePanel tile = new TilePanel();
|
|
|
tile.Width = width;
|
|
|
tile.Height = height;
|
|
|
var title = itemStyle.Title;
|
|
|
if (title != null)
|
|
|
{
|
|
|
tile.TitleRatio = title.Ratio;
|
|
|
tile.TitleForeColor = ColorTranslator.FromHtml(title.FontColor);
|
|
|
tile.TitleFont = Global.Instance.GetFont(title.FontSize);
|
|
|
tile.TitleBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var content = itemStyle.Content;
|
|
|
if (content != null)
|
|
|
{
|
|
|
tile.ContentRatio = content.Ratio;
|
|
|
tile.ContentForeColor = ColorTranslator.FromHtml(content.FontColor);
|
|
|
tile.ContentFont = Global.Instance.GetFont(content.FontSize);
|
|
|
tile.ContentBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var bottom = itemStyle.Bottom;
|
|
|
if (bottom != null)
|
|
|
{
|
|
|
tile.BottomRatio = bottom.Ratio;
|
|
|
tile.BottomForeColor = ColorTranslator.FromHtml(bottom.FontColor);
|
|
|
tile.BottomFont = Global.Instance.GetFont(bottom.FontSize);
|
|
|
tile.BottomBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
|
|
|
//组装关键字信息
|
|
|
Dictionary<string, string> sourceDic = new Dictionary<string, string>();
|
|
|
//sourceDic.Add("@票号@", KdsBusiness.TicketNoDisplay(order.TradeNo));
|
|
|
sourceDic.Add("@票号@", "票号:" + KdsBusiness.TicketNoDisplay(order.TradeNo));//2023/05/24 Yao
|
|
|
|
|
|
//Yao 2023-06-22 增加显示 微信堂食 微信外带
|
|
|
|
|
|
//if (order.OrderNo[0] == 'T')
|
|
|
// strBuff = "微信堂食" + "\r\n";//微信堂食
|
|
|
//else if (order.OrderNo[0] == 'D')
|
|
|
// strBuff = "微信外带" + "\r\n";//微信外带
|
|
|
//else
|
|
|
// strBuff = order.OrderType + "\r\n";//堂食
|
|
|
|
|
|
sourceDic.Add("@营业模式@", order.OrderType + "");//"堂吃"
|
|
|
|
|
|
|
|
|
//if (char.IsDigit(order.TableNo[0]))
|
|
|
//{
|
|
|
// int number = Convert.ToInt16(order.TableNo);
|
|
|
// if (number <= 54)
|
|
|
// sourceDic.Add("@桌号@", "桌号:" + HsPrinter.Desk_ChuPing_Number_Data[number]);//2023/05/24 Yao
|
|
|
// else
|
|
|
// sourceDic.Add("@桌号@", "桌号:" + " ");//2023/05/24 Yao
|
|
|
//}
|
|
|
//else if (char.IsLetter(order.TableNo[0]) && (order.TableNo[0] == 'A' || order.TableNo[0] == 'B' || order.TableNo[0] == 'C'))
|
|
|
//{
|
|
|
// sourceDic.Add("@桌号@", "桌号:" + order.TableNo);//2023/05/24 Yao
|
|
|
//}
|
|
|
sourceDic.Add("@桌号@", "桌号:" + order.TableNo);//2023/05/24 Yao
|
|
|
sourceDic.Add("@菜品数量@", item.Quantity + "");
|
|
|
var name = item.ProductName;
|
|
|
if (item.IsSuit == 3)
|
|
|
{
|
|
|
//套餐明细
|
|
|
name = "[套]" + name;
|
|
|
}
|
|
|
sourceDic.Add("@菜品名称@", name);
|
|
|
sourceDic.Add("@做法@", item.MakeDesc);
|
|
|
var saleDate = Convert.ToDateTime(item.SaleDate);
|
|
|
TimeSpan span = DateTime.Now - saleDate;
|
|
|
sourceDic.Add("@制作时长@", (int)span.TotalMinutes + "分钟");
|
|
|
sourceDic.Add("@桌号分配时间@", "");
|
|
|
sourceDic.Add("saleDate", item.SaleDate);
|
|
|
sourceDic.Add("categoryId", item.TypeId);
|
|
|
sourceDic.Add("tradeNo", order.TradeNo);
|
|
|
sourceDic.Add("itemId", item.ItemId);
|
|
|
sourceDic.Add("makeDuration", item.MakeDuration + "");//制作时长
|
|
|
sourceDic.Add("chupinDuration", item.ChupinDuration + "");//出品时长
|
|
|
//标题 桌号+单号
|
|
|
tile.TitleText = KdsBusiness.DisplayContentReplace(sourceDic, itemStyle.Title.Content);
|
|
|
tile.TitleTag = itemStyle.Title.Content;
|
|
|
tile.TitleAlignment = ContentAlignment.MiddleCenter;
|
|
|
tile.ContentText = KdsBusiness.DisplayContentReplace(sourceDic, itemStyle.Content.Content);
|
|
|
tile.ContentTag = itemStyle.Content.Content;
|
|
|
tile.BottomVisible = true;
|
|
|
tile.BottomAlignment = StringAlignment.Far;
|
|
|
tile.BottomText = KdsBusiness.DisplayContentReplace(sourceDic, itemStyle.Bottom.Content);
|
|
|
tile.BottomTag = itemStyle.Bottom.Content;
|
|
|
tile.Tag = sourceDic;
|
|
|
tile.Name = item.Id;
|
|
|
|
|
|
tile.ItemClick += OnTileClick;
|
|
|
|
|
|
if (categoryItemDic.ContainsKey(item.TypeId))
|
|
|
{
|
|
|
categoryItemDic[item.TypeId].Items.Add(tile);
|
|
|
}
|
|
|
}
|
|
|
foreach (var p in this.categoryItemDic.Values)
|
|
|
{
|
|
|
p.RefreshView();
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 显示订单(订单)
|
|
|
/// </summary>
|
|
|
/// <param name="order"></param>
|
|
|
private bool AddOrderToOrderScreen(ServiceOrder order)
|
|
|
{
|
|
|
Stopwatch sw = Stopwatch.StartNew();
|
|
|
try
|
|
|
{
|
|
|
sw.Restart();
|
|
|
var pager = GetPagerData(_showChupin, this.pagerControl1.CurrentPage, this.pagerControl1.PageSize);
|
|
|
logger.Info("展示数据1<{0}>", sw.ElapsedMilliseconds);
|
|
|
sw.Restart();
|
|
|
if (pager.Status == 1)
|
|
|
{
|
|
|
//刷新分页信息
|
|
|
pagerControl1.TotalCount = pager.TotalCount;
|
|
|
}
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERSTYLE);
|
|
|
int row = 2, column = 4;
|
|
|
Color foreColor = Color.White;
|
|
|
Font font = Constant.BIG_FONT;
|
|
|
int perRows = 8;//每块显示的行数
|
|
|
if (!string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
var style = JsonUtils.Deserialize<OrderShowStyle>(styleStr);
|
|
|
row = style.Row;
|
|
|
column = style.Column;
|
|
|
foreColor = ColorTranslator.FromHtml(style.FontColor);
|
|
|
font = Global.Instance.GetFont(style.FontSize);
|
|
|
perRows = style.PerRows;
|
|
|
}
|
|
|
//普通色
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
var huadanColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_HUADANCOLOR);
|
|
|
|
|
|
var ch = _containerSize.Height;
|
|
|
var cw = _containerSize.Width;
|
|
|
//计算每单占用的size
|
|
|
var itemSize = new Size((cw - this._itemSpace * column) / column, (ch - _itemSpace * row) / row);
|
|
|
|
|
|
var controls = this.containerPanel.Controls;
|
|
|
if (controls.Count < (row * column))
|
|
|
{
|
|
|
//还有空间可以添加
|
|
|
List<OrderPanel> panelList = new List<OrderPanel>();
|
|
|
int totalPage = 0;
|
|
|
for (int j = 0; j < order.Items.Count; j++)
|
|
|
{
|
|
|
OrderPanel orderPanel = new OrderPanel(order, ++totalPage);
|
|
|
//Yao 2023-06-16 更改外带时,显示其它色
|
|
|
if ((order.OrderType == OrderType.外带) || (order.OrderNo[0] == 'D'))
|
|
|
orderPanel.BackColor = Color.Purple;
|
|
|
else
|
|
|
orderPanel.BackColor = IsHuacaiOrder(order) ? ColorTranslator.FromHtml(huadanColor) : ColorTranslator.FromHtml(normalColor);
|
|
|
orderPanel.ForeColor = foreColor;
|
|
|
orderPanel.PanelFont = font;
|
|
|
orderPanel.Size = itemSize;
|
|
|
j = orderPanel.InitOrderItem(j);
|
|
|
if (j > 0)
|
|
|
{
|
|
|
j--;
|
|
|
}
|
|
|
orderPanel.Tag = order;
|
|
|
//寻找最后一个位置
|
|
|
if (controls.Count > 0)
|
|
|
{
|
|
|
//寻找最后一个位置
|
|
|
var con = controls[controls.Count - 1];
|
|
|
if (con is OrderPanel)
|
|
|
{
|
|
|
if ((con.Location.X + con.Size.Width * 2 + this._itemSpace) <= cw)
|
|
|
{
|
|
|
//不用换行,直接后续增加
|
|
|
orderPanel.Location = new Point((con.Location.X + itemSize.Width + this._itemSpace), con.Location.Y);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//换行
|
|
|
orderPanel.Location = new Point(0, con.Location.Y + this._itemSpace + itemSize.Height);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//第一个位置
|
|
|
orderPanel.Location = new Point(0, 0);
|
|
|
}
|
|
|
|
|
|
this.containerPanel.Controls.Add(orderPanel);
|
|
|
|
|
|
panelList.Add(orderPanel);
|
|
|
}
|
|
|
foreach (var pan in panelList)
|
|
|
{
|
|
|
pan.RefreshPageInfo(totalPage);
|
|
|
}
|
|
|
logger.Info("展示数据2<{0}>", sw.ElapsedMilliseconds);
|
|
|
this.containerPanel.Invalidate();
|
|
|
logger.Info("新的订单已展示");
|
|
|
return true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("订单展示已满,暂时无法加载订单");
|
|
|
//没有空间展示了
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "显示新订单异常");
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 是否已划菜订单
|
|
|
/// </summary>
|
|
|
/// <param name="order"></param>
|
|
|
/// <returns></returns>
|
|
|
private bool IsHuacaiOrder(ServiceOrder order)
|
|
|
{
|
|
|
bool result = true;
|
|
|
if (Global.Instance.kdsCategory == POSV.Common.KDSCategory.出品)
|
|
|
{
|
|
|
foreach (var item in order.Items)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(item.HuacaiTime))
|
|
|
{
|
|
|
result = false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = false;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
protected virtual void SettingStyleChanged(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
//RefreshUI();
|
|
|
}
|
|
|
|
|
|
|
|
|
private void RefreshUI()
|
|
|
{
|
|
|
//kds背景
|
|
|
var kdsColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_KDSBACKGROUNDCOLOR);
|
|
|
this.BackColor = ColorTranslator.FromHtml(kdsColor);
|
|
|
|
|
|
//厨显方式
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
|
|
|
if (_initDisplayWay == null)
|
|
|
{
|
|
|
_initDisplayWay = displayWay;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (_initDisplayWay != displayWay)
|
|
|
{
|
|
|
MessageBox.Show("切换显示方式,请重启厨显程序!");
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "order":
|
|
|
{
|
|
|
RefreshOrderUI();
|
|
|
}
|
|
|
break;
|
|
|
case "product":
|
|
|
{
|
|
|
RefreshProductUI();
|
|
|
}
|
|
|
break;
|
|
|
case "category":
|
|
|
{
|
|
|
RefreshCategoryUI();
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新订单UI
|
|
|
/// </summary>
|
|
|
private void RefreshOrderUI()
|
|
|
{
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERSTYLE);
|
|
|
int row = 2, column = 4;
|
|
|
Color foreColor = Color.White;
|
|
|
Font font = Constant.BIG_FONT;
|
|
|
int perRows = 8;//每块展示的行数
|
|
|
if (!string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
var style = JsonUtils.Deserialize<OrderShowStyle>(styleStr);
|
|
|
row = style.Row;
|
|
|
column = style.Column;
|
|
|
foreColor = ColorTranslator.FromHtml(style.FontColor);
|
|
|
font = Global.Instance.GetFont(style.FontSize);
|
|
|
perRows = style.PerRows;
|
|
|
}
|
|
|
|
|
|
//分页每页数量
|
|
|
pagerControl1.PageSize = row * column;
|
|
|
//kds背景
|
|
|
var kdsColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_KDSBACKGROUNDCOLOR);
|
|
|
this.BackColor = ColorTranslator.FromHtml(kdsColor);
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
var huadanColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_HUADANCOLOR);
|
|
|
|
|
|
|
|
|
//this.OrderContainer.Controls.Clear();
|
|
|
var ch = this.containerPanel.Height;
|
|
|
var cw = this.containerPanel.Width;
|
|
|
//计算每单占用的size
|
|
|
var itemSize = new Size((cw - this._itemSpace * column) / column, (ch - _itemSpace * row) / row);
|
|
|
int tempX = 0, tempY = 0, tempRow = 1;
|
|
|
|
|
|
//判断是否需要加载新订单
|
|
|
if (this.containerPanel.Controls.Count < row * column)
|
|
|
{
|
|
|
//加载当前页应显示数据 进行对比
|
|
|
var pager = GetPagerData(_showChupin, this.pagerControl1.CurrentPage, this.pagerControl1.PageSize);
|
|
|
if (pager.Status == 1)
|
|
|
{
|
|
|
pagerControl1.TotalCount = pager.TotalCount;
|
|
|
//pagerControl1.TotalCount = 9;
|
|
|
var list = pager.List;
|
|
|
var extendOrderList = new List<ServiceOrder>();
|
|
|
foreach (var order in list)
|
|
|
{
|
|
|
bool existOrderFlag = false;
|
|
|
foreach (var control in this.containerPanel.Controls)
|
|
|
{
|
|
|
if (control is OrderPanel)
|
|
|
{
|
|
|
var orderPanel = control as OrderPanel;
|
|
|
var exOrder = orderPanel.Tag as ServiceOrder;
|
|
|
if (exOrder != null && exOrder.Id == order.Id)
|
|
|
{
|
|
|
existOrderFlag = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (!existOrderFlag)
|
|
|
{
|
|
|
extendOrderList.Add(order);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
foreach (var inOrder in extendOrderList)
|
|
|
{
|
|
|
int totalPage = 0;
|
|
|
List<OrderPanel> panelList = new List<OrderPanel>();
|
|
|
for (int j = 0; j < inOrder.Items.Count; j++)
|
|
|
{
|
|
|
OrderPanel orderPanel = new OrderPanel(inOrder, ++totalPage);
|
|
|
|
|
|
orderPanel.BackColor = IsHuacaiOrder(inOrder) ? ColorTranslator.FromHtml(huadanColor) : ColorTranslator.FromHtml(normalColor);
|
|
|
orderPanel.ForeColor = foreColor;
|
|
|
orderPanel.PanelFont = font;
|
|
|
orderPanel.Size = itemSize;
|
|
|
j = orderPanel.InitOrderItem(j);
|
|
|
if (j > 0)
|
|
|
{
|
|
|
j--;
|
|
|
}
|
|
|
orderPanel.Tag = inOrder;
|
|
|
this.containerPanel.Controls.Add(orderPanel);
|
|
|
panelList.Add(orderPanel);
|
|
|
}
|
|
|
|
|
|
foreach (var pan in panelList)
|
|
|
{
|
|
|
pan.RefreshPageInfo(totalPage);
|
|
|
}
|
|
|
|
|
|
|
|
|
//var perRowHeight = (itemSize.Height - 55) / perRows;
|
|
|
//var pageSize = perRows;//每个panel最大展示订单项数目
|
|
|
//int totalPageNum = 1;
|
|
|
//if (pageSize > 0)
|
|
|
//{
|
|
|
// var dataCount = inOrder.Items.Count;
|
|
|
// if (dataCount % pageSize == 0)
|
|
|
// {
|
|
|
// totalPageNum = inOrder.Items.Count / pageSize;
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// totalPageNum = inOrder.Items.Count / pageSize + 1;
|
|
|
// }
|
|
|
// if (totalPageNum == 0)
|
|
|
// {
|
|
|
// totalPageNum = 1;
|
|
|
// }
|
|
|
//}
|
|
|
//for (int j = 0; j < totalPageNum; j++)
|
|
|
//{
|
|
|
// OrderPanel orderPanel = new OrderPanel(inOrder, j + 1, totalPageNum);
|
|
|
// orderPanel.Size = itemSize;
|
|
|
// //orderPanel.InitOrderItem(j * pageSize, pageSize);
|
|
|
// orderPanel.Tag = inOrder;
|
|
|
// this.containerPanel.Controls.Add(orderPanel);
|
|
|
//}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int i = 0;
|
|
|
foreach (var control in this.containerPanel.Controls)
|
|
|
{
|
|
|
if (control is OrderPanel)
|
|
|
{
|
|
|
var orderPanel = control as OrderPanel;
|
|
|
var order = orderPanel.Tag as ServiceOrder;
|
|
|
//更新Item
|
|
|
List<ServiceOrderItem> newItemList = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
newItemList = db.Fetch<ServiceOrderItem>("where serviceId = @0", order.Id);
|
|
|
}
|
|
|
order.Items = newItemList;
|
|
|
//Yao 2023-06-16 更改外带时,显示其它色
|
|
|
if ((order.OrderType == OrderType.外带) || (order.OrderNo[0] == 'D'))
|
|
|
orderPanel.BackColor = Color.Purple;
|
|
|
else
|
|
|
orderPanel.BackColor = IsHuacaiOrder(order) ? ColorTranslator.FromHtml(huadanColor) : ColorTranslator.FromHtml(normalColor);
|
|
|
|
|
|
orderPanel.ForeColor = foreColor;
|
|
|
orderPanel.PanelFont = font;
|
|
|
orderPanel.Size = itemSize;
|
|
|
if (i == column * tempRow)
|
|
|
{
|
|
|
tempRow++;
|
|
|
tempX = 0;
|
|
|
tempY += orderPanel.Height + this._itemSpace;
|
|
|
}
|
|
|
orderPanel.Location = new Point(tempX, tempY);
|
|
|
tempX += orderPanel.Width + this._itemSpace;
|
|
|
|
|
|
i++;
|
|
|
}
|
|
|
}
|
|
|
this.containerPanel.Invalidate();
|
|
|
this.containerPanel.Refresh();
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新单品UI
|
|
|
/// </summary>
|
|
|
private void RefreshProductUI()
|
|
|
{
|
|
|
if (this.containerPanel.Controls.Count > 0)
|
|
|
{
|
|
|
if (this.containerPanel.Controls.Count == 1)
|
|
|
{
|
|
|
var p = this.containerPanel.Controls[0];
|
|
|
if (p is ItemPanel)
|
|
|
{
|
|
|
var itemP = p as ItemPanel;
|
|
|
if (itemP.Name != "productPanel")
|
|
|
{
|
|
|
//非单品展示界面,是分类展示
|
|
|
this.containerPanel.Controls.Clear();
|
|
|
productItemPanel = new ItemPanel();
|
|
|
productItemPanel.Name = "productPanel";
|
|
|
productItemPanel.TitleVisible = false;
|
|
|
productItemPanel.Dock = DockStyle.Fill;
|
|
|
this.containerPanel.Controls.Add(productItemPanel);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//非单品展示界面,是分类展示
|
|
|
this.containerPanel.Controls.Clear();
|
|
|
productItemPanel = new ItemPanel();
|
|
|
productItemPanel.Name = "productPanel";
|
|
|
productItemPanel.TitleVisible = false;
|
|
|
productItemPanel.Dock = DockStyle.Fill;
|
|
|
this.containerPanel.Controls.Add(productItemPanel);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
productItemPanel = new ItemPanel();
|
|
|
productItemPanel.Name = "productPanel";
|
|
|
productItemPanel.TitleVisible = false;
|
|
|
productItemPanel.Dock = DockStyle.Fill;
|
|
|
this.containerPanel.Controls.Add(productItemPanel);
|
|
|
}
|
|
|
|
|
|
//分页每页数量
|
|
|
pagerControl1.PageSize = 1000;
|
|
|
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERITEMSTYLE);
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
if (!string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
int width = 120, height = 120;
|
|
|
var style = JsonUtils.Deserialize<ProductShowStyle>(styleStr);
|
|
|
width = style.Width;
|
|
|
height = style.Height;
|
|
|
foreach (var item in this.productItemPanel.Items)
|
|
|
{
|
|
|
if (item is TilePanel)
|
|
|
{
|
|
|
var tile = item as TilePanel;
|
|
|
tile.Width = width;
|
|
|
tile.Height = height;
|
|
|
var title = style.Title;
|
|
|
if (title != null)
|
|
|
{
|
|
|
tile.TitleRatio = title.Ratio;
|
|
|
tile.TitleForeColor = ColorTranslator.FromHtml(title.FontColor);
|
|
|
tile.TitleFont = Global.Instance.GetFont(title.FontSize);
|
|
|
tile.TitleBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var content = style.Content;
|
|
|
if (content != null)
|
|
|
{
|
|
|
tile.ContentRatio = content.Ratio;
|
|
|
tile.ContentForeColor = ColorTranslator.FromHtml(content.FontColor);
|
|
|
tile.ContentFont = Global.Instance.GetFont(content.FontSize);
|
|
|
tile.ContentBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
var bottom = style.Bottom;
|
|
|
if (bottom != null)
|
|
|
{
|
|
|
tile.BottomRatio = bottom.Ratio;
|
|
|
tile.BottomForeColor = ColorTranslator.FromHtml(bottom.FontColor);
|
|
|
tile.BottomFont = Global.Instance.GetFont(bottom.FontSize);
|
|
|
tile.BottomBackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 刷新分类UI
|
|
|
/// </summary>
|
|
|
private void RefreshCategoryUI()
|
|
|
{
|
|
|
|
|
|
categoryItemDic = new Dictionary<string, ItemPanel>();
|
|
|
|
|
|
var styleStr = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_CATEGORYSTYLE);
|
|
|
var style = JsonUtils.Deserialize<CategoryShowStyle>(styleStr);
|
|
|
|
|
|
var normalColor = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_ORDERNORMALCOLOR);
|
|
|
//分类信息
|
|
|
var categoryList = GetCategoryList();
|
|
|
|
|
|
var showCategorys = style.ShowCategorys;
|
|
|
//处理只显示的分类和排序
|
|
|
List<ProductType> typeList = new List<ProductType>();
|
|
|
if (categoryList != null && categoryList.Count > 0 && showCategorys != null && showCategorys.Count > 0)
|
|
|
{
|
|
|
foreach (var cat in showCategorys)
|
|
|
{
|
|
|
var category = categoryList.Find(x => x.Id == cat);
|
|
|
typeList.Add(category);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//分页每页数量
|
|
|
pagerControl1.PageSize = 1000;
|
|
|
|
|
|
if (typeList != null && !string.IsNullOrEmpty(styleStr))
|
|
|
{
|
|
|
int width = 120, height = 120;
|
|
|
int row = 2, column = 4;
|
|
|
row = style.Row;
|
|
|
column = style.Column;
|
|
|
width = style.Width;
|
|
|
height = style.Height;
|
|
|
var ch = _containerSize.Height;//容器高
|
|
|
var cw = _containerSize.Width;//容器宽
|
|
|
|
|
|
//计算每列的宽度
|
|
|
var customWidth = style.LaneWidthCustom;
|
|
|
if (string.IsNullOrEmpty(customWidth))
|
|
|
{
|
|
|
customWidth = "1";
|
|
|
}
|
|
|
var widArray = customWidth.Split(':');
|
|
|
var screenWid = cw - this._itemSpace * column;
|
|
|
|
|
|
var totalWid = widArray.Sum(x => Convert.ToDecimal(x));
|
|
|
if (widArray.Count() < column)
|
|
|
{
|
|
|
totalWid += column - widArray.Count();
|
|
|
}
|
|
|
|
|
|
decimal[] colWid = new decimal[column];
|
|
|
for (int j = 0; j < column; j++)
|
|
|
{
|
|
|
if (widArray.Count() > j)
|
|
|
{
|
|
|
colWid[j] = screenWid * (DecimalUtils.GetDecimal(widArray[j]) / totalWid);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
colWid[j] = screenWid * DecimalUtils.GetDecimal(1.00M / totalWid);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//var itemSize = new Size((cw - this._itemSpace * column) / column, (ch - _itemSpace * row) / row);//单个分类的size
|
|
|
int tempX = 0, tempY = 0, tempRow = 1;
|
|
|
for (int i = 0; i < row * column && i < typeList.Count(); i++)
|
|
|
{
|
|
|
var category = typeList[i];
|
|
|
if (category == null)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
ItemPanel itemPanel = new ItemPanel();
|
|
|
//itemPanel.BackColor = ColorTranslator.FromHtml(normalColor);
|
|
|
//itemPanel.ForeColor = foreColor;
|
|
|
//itemPanel.PanelFont = font;
|
|
|
itemPanel.TitleFont = Global.Instance.GetFont(style.CategoryFontSize);
|
|
|
itemPanel.TitleFontColor = ColorTranslator.FromHtml(style.CategoryFontColor);
|
|
|
itemPanel.TitleBackColor = ColorTranslator.FromHtml(style.CategoryBackColor);
|
|
|
itemPanel.Size = new Size(Convert.ToInt16(colWid[i - (tempRow - 1) * column]), (ch - _itemSpace * row) / row);
|
|
|
itemPanel.TitleText = category.Name;
|
|
|
itemPanel.TitleVisible = true;
|
|
|
if (i == column * tempRow)
|
|
|
{
|
|
|
tempRow++;
|
|
|
tempX = 0;
|
|
|
tempY += itemPanel.Height + this._itemSpace;
|
|
|
}
|
|
|
itemPanel.Location = new Point(tempX, tempY);
|
|
|
tempX += itemPanel.Width + this._itemSpace;
|
|
|
|
|
|
categoryItemDic.Add(category.Id, itemPanel);
|
|
|
|
|
|
this.containerPanel.Controls.Add(itemPanel);
|
|
|
}
|
|
|
this.containerPanel.Invalidate();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private List<ProductType> productTypeList = null;
|
|
|
private List<ProductType> GetCategoryList()
|
|
|
{
|
|
|
if (productTypeList == null)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
productTypeList = db.Query<ProductType>().ToList();
|
|
|
}
|
|
|
}
|
|
|
return productTypeList;
|
|
|
}
|
|
|
|
|
|
//Yao 2023/08/02 增加一个队列方式进行语音播报
|
|
|
//Queue<string> queue = new Queue<string>();
|
|
|
|
|
|
|
|
|
//// 进行排队的方法
|
|
|
//public static void EnqueueCustomer(Queue<string> queue, string customerName)
|
|
|
//{
|
|
|
// queue.Enqueue(customerName);
|
|
|
//}
|
|
|
|
|
|
// 打印队列中的内容
|
|
|
//public static void PrintQueue(Queue<string> queue)
|
|
|
//{
|
|
|
// if (queue.Count == 0)
|
|
|
// return;
|
|
|
// foreach (var item in queue)
|
|
|
// {
|
|
|
// JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound_Queue(item);
|
|
|
// queue.Dequeue();
|
|
|
// }
|
|
|
//}
|
|
|
protected virtual void CallOrderTTS(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (args.Data is OrderPanel)
|
|
|
{
|
|
|
var orderPanel = args.Data as OrderPanel;
|
|
|
|
|
|
var order = orderPanel.Tag as ServiceOrder;
|
|
|
|
|
|
//Yao 2023-06-15 订单出品 整单出品
|
|
|
if (ip_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_ip.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strOne = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
ip_exist = 1;
|
|
|
kds_print_ip1 = ContentReader(strOne, "kds_print_ip1", "");
|
|
|
kds_print_ip2 = ContentReader(strOne, "kds_print_ip2", "");
|
|
|
kds_print_ip3 = ContentReader(strOne, "kds_print_ip3", "");
|
|
|
kds_print_ip4 = ContentReader(strOne, "kds_print_ip4", "");
|
|
|
kds_print_ip5 = ContentReader(strOne, "kds_print_ip5", "");
|
|
|
kds_print_ip6 = ContentReader(strOne, "kds_print_ip6", "");
|
|
|
kds_print_open = ContentReader(strOne, "open_print", "");
|
|
|
kds_print_number = ContentReader(strOne, "number_print", "");
|
|
|
kds_WaiDai_Print = ContentReader(strOne, "open_waidai_print", "");
|
|
|
if (kds_print_number == "1")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
else if (kds_print_number == "2")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip2;
|
|
|
}
|
|
|
else if (kds_print_number == "3")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip3;
|
|
|
}
|
|
|
else if (kds_print_number == "4")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip4;
|
|
|
}
|
|
|
else if (kds_print_number == "5")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip5;
|
|
|
}
|
|
|
else if (kds_print_number == "6")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip6;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
//Yao 2023-06-16 读取文件,到第六个打印机打印外带单。
|
|
|
if (wav_file_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_time.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strTwo = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
wav_file_exist = 1;
|
|
|
kds_sound_breakfast_open = ContentReader(strTwo, "kds_sound_breakfast_open", "");
|
|
|
kds_breakfast_start_time = ContentReader(strTwo, "kds_breakfast_start_time", "");
|
|
|
kds_breakfast_end_time = ContentReader(strTwo, "kds_breakfast_end_time", "");
|
|
|
|
|
|
kds_sound_lunch_open = ContentReader(strTwo, "kds_sound_lunch_open", "");
|
|
|
kds_lunch_start_time = ContentReader(strTwo, "kds_lunch_start_time", "");
|
|
|
kds_lunch_end_time = ContentReader(strTwo, "kds_lunch_end_time", "");
|
|
|
|
|
|
kds_sound_diner_open = ContentReader(strTwo, "kds_sound_diner_open", "");
|
|
|
kds_diner_start_time = ContentReader(strTwo, "kds_diner_start_time", "");
|
|
|
kds_diner_end_time = ContentReader(strTwo, "kds_diner_end_time", "");
|
|
|
|
|
|
dt_breakfast_start_time = Convert.ToDateTime(kds_breakfast_start_time);
|
|
|
dt_breakfast_end_time = Convert.ToDateTime(kds_breakfast_end_time);
|
|
|
|
|
|
dt_lunch_start_time = Convert.ToDateTime(kds_lunch_start_time);
|
|
|
dt_lunch_end_time = Convert.ToDateTime(kds_lunch_end_time);
|
|
|
|
|
|
dt_diner_start_time = Convert.ToDateTime(kds_diner_start_time);
|
|
|
dt_diner_end_time = Convert.ToDateTime(kds_diner_end_time);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
DateTime dt_str = DateTime.Now;
|
|
|
if ((kds_print_open == "1") && (ip_exist == 1))
|
|
|
{
|
|
|
//Yao 2023-06-24 新增加打印出品单 使用线程的方法
|
|
|
//Yao 2023-07-16 测试声音
|
|
|
|
|
|
if ((dt_str > dt_breakfast_start_time) && (dt_str < dt_breakfast_end_time) && (kds_sound_breakfast_open == "1"))//增加在早餐时间段就工作
|
|
|
{
|
|
|
//Task.Factory.StartNew(new Action(() =>
|
|
|
//{
|
|
|
// JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound(order);
|
|
|
//}));
|
|
|
|
|
|
#region subin 2023-08-04 修改
|
|
|
#region 原始
|
|
|
//lock (lockObject)
|
|
|
//{
|
|
|
// sharedData++;
|
|
|
// if (sharedData > 999)
|
|
|
// {
|
|
|
// sharedData = 0;
|
|
|
// }
|
|
|
// //order.OrderNo
|
|
|
// share_Array[sharedData] = order.OrderNo;//order.OrderNo
|
|
|
// //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
//}
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
}));
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
else if ((dt_str > dt_lunch_start_time) && (dt_str < dt_lunch_end_time) && (kds_sound_lunch_open == "1"))//增加在早餐时间段就工作
|
|
|
{
|
|
|
//Task.Factory.StartNew(new Action(() =>
|
|
|
//{
|
|
|
// JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound(order);
|
|
|
//}));
|
|
|
#region subin 2023-08-04 修改
|
|
|
#region 原始
|
|
|
//lock (lockObject)
|
|
|
//{
|
|
|
// sharedData++;
|
|
|
// if (sharedData > 999)
|
|
|
// {
|
|
|
// sharedData = 0;
|
|
|
// }
|
|
|
// //order.OrderNo
|
|
|
// share_Array[sharedData] = order.OrderNo;//order.OrderNo
|
|
|
// //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
//}
|
|
|
#endregion
|
|
|
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
}));
|
|
|
#endregion
|
|
|
}
|
|
|
else if ((dt_str > dt_diner_start_time) && (dt_str < dt_diner_end_time) && (kds_sound_diner_open == "1"))//增加在早餐时间段就工作
|
|
|
{
|
|
|
//Task.Factory.StartNew(new Action(() =>
|
|
|
//{
|
|
|
// sharedData++;
|
|
|
// EnqueueCustomer(queue, order.TableNo);
|
|
|
// PrintQueue(queue);
|
|
|
|
|
|
//}));
|
|
|
#region subin 2023-08-04 修改
|
|
|
#region 原始
|
|
|
//lock (lockObject)
|
|
|
//{
|
|
|
// sharedData++;
|
|
|
// if (sharedData > 999)
|
|
|
// {
|
|
|
// sharedData = 0;
|
|
|
// }
|
|
|
// //order.OrderNo
|
|
|
// share_Array[sharedData] = order.OrderNo;//order.TableNo
|
|
|
// //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
//}
|
|
|
#endregion
|
|
|
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
}));
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "订单叫号异常");
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 订单出品 整单出品
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="args"></param>
|
|
|
protected virtual void OrderChupin(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
|
|
|
try
|
|
|
{
|
|
|
if (args.Data is OrderPanel)
|
|
|
{
|
|
|
var orderPanel = args.Data as OrderPanel;
|
|
|
|
|
|
var order = orderPanel.Tag as ServiceOrder;
|
|
|
|
|
|
//Yao 2023-06-15 订单出品 整单出品
|
|
|
if (ip_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_ip.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strOne = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
ip_exist = 1;
|
|
|
kds_print_ip1 = ContentReader(strOne, "kds_print_ip1", "");
|
|
|
kds_print_ip2 = ContentReader(strOne, "kds_print_ip2", "");
|
|
|
kds_print_ip3 = ContentReader(strOne, "kds_print_ip3", "");
|
|
|
kds_print_ip4 = ContentReader(strOne, "kds_print_ip4", "");
|
|
|
kds_print_ip5 = ContentReader(strOne, "kds_print_ip5", "");
|
|
|
kds_print_ip6 = ContentReader(strOne, "kds_print_ip6", "");
|
|
|
kds_print_open = ContentReader(strOne, "open_print", "");
|
|
|
kds_print_number = ContentReader(strOne, "number_print", "");
|
|
|
kds_WaiDai_Print = ContentReader(strOne, "open_waidai_print", "");
|
|
|
if (kds_print_number == "1")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
else if (kds_print_number == "2")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip2;
|
|
|
}
|
|
|
else if (kds_print_number == "3")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip3;
|
|
|
}
|
|
|
else if (kds_print_number == "4")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip4;
|
|
|
}
|
|
|
else if (kds_print_number == "5")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip5;
|
|
|
}
|
|
|
else if (kds_print_number == "6")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip6;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
//Yao 2023-06-16 读取文件,到第六个打印机打印外带单。
|
|
|
if (wav_file_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_time.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strTwo = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
wav_file_exist = 1;
|
|
|
kds_sound_breakfast_open = ContentReader(strTwo, "kds_sound_breakfast_open", "");
|
|
|
kds_breakfast_start_time = ContentReader(strTwo, "kds_breakfast_start_time", "");
|
|
|
kds_breakfast_end_time = ContentReader(strTwo, "kds_breakfast_end_time", "");
|
|
|
|
|
|
kds_sound_lunch_open = ContentReader(strTwo, "kds_sound_lunch_open", "");
|
|
|
kds_lunch_start_time = ContentReader(strTwo, "kds_lunch_start_time", "");
|
|
|
kds_lunch_end_time = ContentReader(strTwo, "kds_lunch_end_time", "");
|
|
|
|
|
|
kds_sound_diner_open = ContentReader(strTwo, "kds_sound_diner_open", "");
|
|
|
kds_diner_start_time = ContentReader(strTwo, "kds_diner_start_time", "");
|
|
|
kds_diner_end_time = ContentReader(strTwo, "kds_diner_end_time", "");
|
|
|
|
|
|
dt_breakfast_start_time = Convert.ToDateTime(kds_breakfast_start_time);
|
|
|
dt_breakfast_end_time = Convert.ToDateTime(kds_breakfast_end_time);
|
|
|
|
|
|
dt_lunch_start_time = Convert.ToDateTime(kds_lunch_start_time);
|
|
|
dt_lunch_end_time = Convert.ToDateTime(kds_lunch_end_time);
|
|
|
|
|
|
dt_diner_start_time = Convert.ToDateTime(kds_diner_start_time);
|
|
|
dt_diner_end_time = Convert.ToDateTime(kds_diner_end_time);
|
|
|
}
|
|
|
}
|
|
|
int print_state = 0;
|
|
|
DateTime dt_str = DateTime.Now;
|
|
|
if ((kds_print_open == "1") && (ip_exist == 1))
|
|
|
{
|
|
|
//Yao 2023-06-24 新增加打印出品单 使用线程的方法
|
|
|
//Yao 2023-07-16 测试声音
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
print_state = JwKdsV.Core.Utils.HsPrinter.Hs_ChuPing_Printer(kds_print_ip, order);
|
|
|
}));
|
|
|
//if ((dt_str > dt_breakfast_start_time) && (dt_str < dt_breakfast_end_time)&& (kds_sound_breakfast_open == "1"))//增加在早餐时间段就工作
|
|
|
//{
|
|
|
// //Task.Factory.StartNew(new Action(() =>
|
|
|
// //{
|
|
|
// // JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound(order);
|
|
|
// //}));
|
|
|
|
|
|
// #region subin 2023-08-04 修改
|
|
|
// #region 原始
|
|
|
// //lock (lockObject)
|
|
|
// //{
|
|
|
// // sharedData++;
|
|
|
// // if (sharedData > 999)
|
|
|
// // {
|
|
|
// // sharedData = 0;
|
|
|
// // }
|
|
|
// // //order.OrderNo
|
|
|
// // share_Array[sharedData] = order.OrderNo;//order.OrderNo
|
|
|
// // //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
// //}
|
|
|
// #endregion
|
|
|
|
|
|
|
|
|
// Task.Factory.StartNew(new Action(() =>
|
|
|
// {
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// }));
|
|
|
|
|
|
// #endregion
|
|
|
//}
|
|
|
//else if ((dt_str > dt_lunch_start_time) && (dt_str < dt_lunch_end_time) && (kds_sound_lunch_open == "1"))//增加在早餐时间段就工作
|
|
|
//{
|
|
|
// //Task.Factory.StartNew(new Action(() =>
|
|
|
// //{
|
|
|
// // JwKdsV.Core.Utils.HsPrinter.Play_JiaoHao_Sound(order);
|
|
|
// //}));
|
|
|
// #region subin 2023-08-04 修改
|
|
|
// #region 原始
|
|
|
// //lock (lockObject)
|
|
|
// //{
|
|
|
// // sharedData++;
|
|
|
// // if (sharedData > 999)
|
|
|
// // {
|
|
|
// // sharedData = 0;
|
|
|
// // }
|
|
|
// // //order.OrderNo
|
|
|
// // share_Array[sharedData] = order.OrderNo;//order.OrderNo
|
|
|
// // //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
// //}
|
|
|
// #endregion
|
|
|
|
|
|
// Task.Factory.StartNew(new Action(() =>
|
|
|
// {
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// }));
|
|
|
// #endregion
|
|
|
//}
|
|
|
//else if ((dt_str > dt_diner_start_time) && (dt_str < dt_diner_end_time) && (kds_sound_diner_open == "1"))//增加在早餐时间段就工作
|
|
|
//{
|
|
|
// //Task.Factory.StartNew(new Action(() =>
|
|
|
// //{
|
|
|
// // sharedData++;
|
|
|
// // EnqueueCustomer(queue, order.TableNo);
|
|
|
// // PrintQueue(queue);
|
|
|
|
|
|
// //}));
|
|
|
// #region subin 2023-08-04 修改
|
|
|
// #region 原始
|
|
|
// //lock (lockObject)
|
|
|
// //{
|
|
|
// // sharedData++;
|
|
|
// // if (sharedData > 999)
|
|
|
// // {
|
|
|
// // sharedData = 0;
|
|
|
// // }
|
|
|
// // //order.OrderNo
|
|
|
// // share_Array[sharedData] = order.OrderNo;//order.TableNo
|
|
|
// // //Console.WriteLine($"写入的数据:{sharedData}");
|
|
|
// //}
|
|
|
// #endregion
|
|
|
|
|
|
// Task.Factory.StartNew(new Action(() =>
|
|
|
// {
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// Global.VoPlayQueue.Enqueue(order.OrderNo);
|
|
|
// }));
|
|
|
// #endregion
|
|
|
|
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
string sql = @"update pos_order_item set huacaiTime = '{0}' where serviceId = '{1}'";
|
|
|
SQLiteUtils.Execute(string.Format(sql, DateUtils.GetNowFormat(), order.Id));
|
|
|
}
|
|
|
//出品通知服务中心
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
ChupinNotify.SendOrderChupinNotify(order.Id);
|
|
|
}));
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
string sql = @"update pos_order_item set chupinTime = '{0}' where serviceId = '{1}'";
|
|
|
SQLiteUtils.Execute(string.Format(sql, DateUtils.GetNowFormat(), order.Id));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
//删除该订单的所有显示
|
|
|
|
|
|
|
|
|
List<OrderPanel> delPanelList = new List<OrderPanel>();
|
|
|
foreach (var control in this.containerPanel.Controls)
|
|
|
{
|
|
|
if (control is OrderPanel)
|
|
|
{
|
|
|
var panel = control as OrderPanel;
|
|
|
if (panel.Order.Id == order.Id)
|
|
|
{
|
|
|
delPanelList.Add(panel);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
foreach (var panel in delPanelList)
|
|
|
{
|
|
|
///zhangy Add-----------2020-10-23----------
|
|
|
while (panel.Controls.Count > 0)
|
|
|
{
|
|
|
if (panel.Controls[0] != null)
|
|
|
{
|
|
|
var ctl = panel.Controls[0];
|
|
|
if (ctl is Panel)
|
|
|
{
|
|
|
while (ctl.Controls.Count > 0)
|
|
|
{
|
|
|
if (ctl.Controls[0] != null)
|
|
|
{
|
|
|
var subctl = ctl.Controls[0];
|
|
|
subctl.Dispose();
|
|
|
}
|
|
|
}
|
|
|
ctl.Controls.Clear();
|
|
|
}
|
|
|
ctl.Dispose();
|
|
|
}
|
|
|
}
|
|
|
panel.Controls.Clear();
|
|
|
///zhangy Add-----------2020-10-23----------
|
|
|
|
|
|
panel.Dispose();
|
|
|
|
|
|
this.containerPanel.Controls.Remove(panel);
|
|
|
}
|
|
|
RefreshUI();
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "订单出品 整单出品异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 出品(单品-含分类)
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnTileClick(object sender, EventArgs e)
|
|
|
{
|
|
|
if (sender is TilePanel)
|
|
|
{
|
|
|
var obj = sender as TilePanel;
|
|
|
//判断是否需要确认
|
|
|
var chupin = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_CHUPINCONFIRM);
|
|
|
//if (chupin == "true")
|
|
|
//{
|
|
|
// if (MessageBox.Show("确认出品?", "出品确认", MessageBoxButtons.OKCancel) == DialogResult.OK)
|
|
|
// {
|
|
|
|
|
|
// ProductChupin(obj);
|
|
|
// }
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// ProductChupin(obj);
|
|
|
//}
|
|
|
if (chupin == "true")
|
|
|
{
|
|
|
ProductChupin(obj);
|
|
|
//JwKdsV.Core.Utils.HsPrinter.Hs_Enable_Printer();
|
|
|
}
|
|
|
else
|
|
|
ProductChupin(obj);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 单品出品
|
|
|
/// </summary>
|
|
|
/// <param name="obj"></param>
|
|
|
private void ProductChupin(TilePanel obj)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (obj.Tag != null)
|
|
|
{
|
|
|
if (obj.Tag is Dictionary<string, string>)
|
|
|
{
|
|
|
var tag = obj.Tag as Dictionary<string, string>;
|
|
|
var itemId = tag["itemId"];
|
|
|
var tradeNo = tag["tradeNo"];
|
|
|
//Yao 2023-06-18 划菜如果打印机没联好,就不能划掉
|
|
|
string ip = @"192.168.123.99";
|
|
|
string order_type = tag["@营业模式@"];
|
|
|
string desk_no = tag["@桌号@"];
|
|
|
string product_name = tag["@菜品名称@"];
|
|
|
string quantity = tag["@菜品数量@"];
|
|
|
string model = tag["@营业模式@"];
|
|
|
string order_no = tag["@票号@"];
|
|
|
|
|
|
if (ip_exist == 0)
|
|
|
{
|
|
|
str = Application.StartupPath + "\\kds_ip.ini";
|
|
|
//此方法也可通过:str = System.AppDomain.CurrentDomain.BaseDirectory + @"ConnectString.ini";
|
|
|
strOne = System.IO.Path.GetFileNameWithoutExtension(str);
|
|
|
if (File.Exists(str))
|
|
|
{
|
|
|
ip_exist = 1;
|
|
|
kds_print_ip1 = ContentReader(strOne, "kds_print_ip1", "");
|
|
|
kds_print_ip2 = ContentReader(strOne, "kds_print_ip2", "");
|
|
|
kds_print_ip3 = ContentReader(strOne, "kds_print_ip3", "");
|
|
|
kds_print_ip4 = ContentReader(strOne, "kds_print_ip4", "");
|
|
|
kds_print_ip5 = ContentReader(strOne, "kds_print_ip5", "");
|
|
|
kds_print_ip6 = ContentReader(strOne, "kds_print_ip6", "");
|
|
|
kds_print_open = ContentReader(strOne, "open_print", "");
|
|
|
kds_print_number = ContentReader(strOne, "number_print", "");
|
|
|
kds_WaiDai_Print = ContentReader(strOne, "open_waidai_print", "");
|
|
|
if (kds_print_number == "1")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
else if (kds_print_number == "2")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip2;
|
|
|
}
|
|
|
else if (kds_print_number == "3")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip3;
|
|
|
}
|
|
|
else if (kds_print_number == "4")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip4;
|
|
|
}
|
|
|
else if (kds_print_number == "5")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip5;
|
|
|
}
|
|
|
else if (kds_print_number == "6")
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip6;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
kds_print_ip = kds_print_ip1;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int print_state = 0;
|
|
|
if ((kds_print_open == "1") && (ip_exist == 1))
|
|
|
{
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
print_state = JwKdsV.Core.Utils.HsPrinter.Hs_Enable_Printer(kds_print_ip, desk_no, product_name, quantity, order_type, order_no, model);
|
|
|
}));
|
|
|
Task.Factory.StartNew(new Action(() =>
|
|
|
{
|
|
|
Global.VoPlayQueue.Enqueue(order_no);
|
|
|
Global.VoPlayQueue.Enqueue(order_no);
|
|
|
}));
|
|
|
}
|
|
|
//if ((kds_print_open == "1") && (ip_exist == 1))
|
|
|
// print_state = JwKdsV.Core.Utils.HsPrinter.Hs_Enable_Printer(kds_print_ip, desk_no, product_name, quantity, order_type, order_no, model);
|
|
|
//if (print_state == 0)
|
|
|
//{
|
|
|
// return;
|
|
|
//}
|
|
|
|
|
|
//更新出品时间
|
|
|
switch (Global.Instance.kdsCategory)
|
|
|
{
|
|
|
case POSV.Common.KDSCategory.厨显:
|
|
|
{
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
string sql = @"update pos_order_item set huacaiTime = '{0}' where tradeNo = '{1}' and itemId = '{2}'";
|
|
|
SQLiteUtils.Execute(string.Format(sql, DateUtils.GetNowFormat(), tradeNo, itemId));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case POSV.Common.KDSCategory.出品:
|
|
|
{
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
string sql = @"update pos_order_item set chupinTime = '{0}' where tradeNo = '{1}' and itemId = '{2}'";
|
|
|
SQLiteUtils.Execute(string.Format(sql, DateUtils.GetNowFormat(), tradeNo, itemId));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (tag.ContainsKey("categoryId"))
|
|
|
{
|
|
|
var target = tag["categoryId"];
|
|
|
categoryItemDic[target].Items.Remove(obj);
|
|
|
categoryItemDic[target].RefreshView();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
|
|
|
if (productItemPanel != null)
|
|
|
{
|
|
|
this.productItemPanel.Items.Remove(obj);
|
|
|
this.productItemPanel.RefreshView();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (productItemPanel != null)
|
|
|
{
|
|
|
this.productItemPanel.Items.Remove(obj);
|
|
|
this.productItemPanel.RefreshView();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "单品出品异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 打开单品沽清
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnSaleClearClick(object sender, EventArgs e)
|
|
|
{
|
|
|
SaleClearForm form = new SaleClearForm();
|
|
|
form.ShowDialog(this);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 打开设置模板
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnSettingClick(object sender, EventArgs e)
|
|
|
{
|
|
|
SettingsForm form = new SettingsForm();
|
|
|
form.ShowDialog(this);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 最小化
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnMiniClick(object sender, EventArgs e)
|
|
|
{
|
|
|
if (this.WindowState == FormWindowState.Maximized)
|
|
|
{
|
|
|
this.WindowState = FormWindowState.Minimized;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.WindowState = FormWindowState.Maximized;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void OnClosing(CancelEventArgs e)
|
|
|
{
|
|
|
base.OnClosing(e);
|
|
|
//停止定时任务
|
|
|
//perSecTimer.Close();
|
|
|
if (this.perSecTimer != null)
|
|
|
{
|
|
|
this.perSecTimer.Stop();
|
|
|
//this.timer.Close();
|
|
|
this.perSecTimer = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void OnFormClosing(FormClosingEventArgs e)
|
|
|
{
|
|
|
base.OnFormClosing(e);
|
|
|
|
|
|
KeyboardUtils.Instance.UnRegisterHook(this.AppHookKeyDown);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 关闭厨显
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnCloseClick(object sender, EventArgs e)
|
|
|
{
|
|
|
if (MessageBox.Show("确定要关闭?", "系统提醒", MessageBoxButtons.OKCancel) == DialogResult.OK)
|
|
|
{
|
|
|
this.Close();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 最近划单信息
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void OnLastInfoClick(object sender, EventArgs e)
|
|
|
{
|
|
|
//厨显方式
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "order":
|
|
|
{
|
|
|
_showChupin = !_showChupin;
|
|
|
this.containerPanel.Controls.Clear();
|
|
|
LoadData(_showChupin, 1, pagerControl1.PageSize);
|
|
|
if (!_showChupin)
|
|
|
{
|
|
|
lastChupinButton.Text = "最近划单";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
lastChupinButton.Text = "关闭最近划单";
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case "product":
|
|
|
case "category":
|
|
|
{
|
|
|
var last = new LastProductPanel();
|
|
|
last.CancelButtonClick += (o, args) =>
|
|
|
{
|
|
|
this.flyout1.Close();
|
|
|
};
|
|
|
last.Height = this.containerPanel.Height - 20;
|
|
|
this.flyout1.Content = last;
|
|
|
|
|
|
Rectangle rect = new Rectangle(this.containerPanel.PointToScreen(Point.Empty), new Size(last.Width, this.containerPanel.Height));
|
|
|
|
|
|
this.flyout1.Show(rect, DevComponents.DotNetBar.Controls.ePointerSide.Bottom, 50, sender);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 换页
|
|
|
/// </summary>
|
|
|
/// <param name="obj"></param>
|
|
|
private void OnPageChange(object obj)
|
|
|
{
|
|
|
//厨显方式
|
|
|
var displayWay = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_DISPLAYWAY);
|
|
|
switch (displayWay)
|
|
|
{
|
|
|
case "order":
|
|
|
{
|
|
|
var page = obj as PagerControl;
|
|
|
var currentPage = page.CurrentPage;
|
|
|
var pageSize = page.PageSize;
|
|
|
this.containerPanel.Controls.Clear();
|
|
|
LoadData(_showChupin, currentPage, pageSize);
|
|
|
}
|
|
|
break;
|
|
|
case "product":
|
|
|
case "category":
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
//Yao 2023-06-24 增加打印机的线程
|
|
|
|
|
|
//private static void DoPrintWork(int i,int j)
|
|
|
//{
|
|
|
// // 在这里编写线程要执行的代码
|
|
|
// if(true)
|
|
|
// {
|
|
|
// if(true)
|
|
|
// {
|
|
|
|
|
|
|
|
|
// }
|
|
|
// Thread.Sleep(30); // 模拟耗时操作
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
//private static void Add_Printer_Thread()
|
|
|
//{
|
|
|
|
|
|
// Thread print_Thread = new Thread(() => DoPrintWork(2, 3));
|
|
|
// //print_Thread.IsBackground = true;
|
|
|
// print_Thread.Start();
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|