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.

2532 lines
111 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 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();
//}
}
}