|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Data;
|
|
|
using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Reflection;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Windows.Forms;
|
|
|
using DevComponents.DotNetBar;
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
using Newtonsoft.Json;
|
|
|
using POSV.Component;
|
|
|
using POSV.Entity.ReportPrint;
|
|
|
using POSV.Helper;
|
|
|
using POSV.Printer;
|
|
|
using POSV.ShoppingCart;
|
|
|
using POSV.Utils;
|
|
|
|
|
|
namespace POSV.Report
|
|
|
{
|
|
|
public partial class DesktopReport : BusinessForm
|
|
|
{
|
|
|
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
public int orderType = -1;
|
|
|
|
|
|
private List<DesktopReportEntity> list = null;
|
|
|
|
|
|
public DesktopReport()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
|
|
|
this.controlBox1.Text = "桌台订单汇总查询";
|
|
|
this.controlBox1.ShowApplicationVersion = false;
|
|
|
|
|
|
list = new List<DesktopReportEntity>();
|
|
|
}
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
if (this.DesignMode) return;
|
|
|
DefaultGridStyle.setDefaultGridStyle(this.desktopTable);
|
|
|
|
|
|
//半角输入
|
|
|
this.ImeMode = ImeMode.OnHalf;
|
|
|
|
|
|
this.startPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.StartTimeSimple);
|
|
|
this.endPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.EndTimeSimple);
|
|
|
|
|
|
this.checkBoxX1.Checked = true;
|
|
|
|
|
|
//第一步获取订单列表
|
|
|
QueryTicket();
|
|
|
|
|
|
}
|
|
|
|
|
|
private void OnQueryTableNameClick(object sender, EventArgs e)
|
|
|
{
|
|
|
DeskNoSelect deskNoSelect = new DeskNoSelect();
|
|
|
deskNoSelect.OnSelected -= OnTableSelected;
|
|
|
deskNoSelect.OnSelected += OnTableSelected;
|
|
|
deskNoSelect.ShowDialog();
|
|
|
}
|
|
|
|
|
|
private void OnTableSelected(Entity.Table table)
|
|
|
{
|
|
|
if(table != null)
|
|
|
{
|
|
|
this.txtTableName.Text = table.Name;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void OnControlBoxKeyboardClick(object sender, EventArgs e)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
KeyboardType keyboardType = KeyboardType.英文;
|
|
|
Type type = this.ActiveControl.GetType();
|
|
|
PropertyInfo pinfo = type.GetProperty("Keyboard");
|
|
|
if (pinfo != null)
|
|
|
{
|
|
|
keyboardType = (KeyboardType)pinfo.GetValue(this.ActiveControl, null);
|
|
|
}
|
|
|
|
|
|
var keyboard = Application.OpenForms["VirtualKeyboard"];
|
|
|
if (keyboard == null)
|
|
|
{
|
|
|
keyboard = new VirtualKeyboard(keyboardType);
|
|
|
}
|
|
|
|
|
|
((VirtualKeyboard)keyboard).ShowVirtualKeyboard(this, keyboardType);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
LOGGER.Error(ex, "打开屏幕键盘异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 营业模式变化
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void cb_change_click(object sender, EventArgs e)
|
|
|
{
|
|
|
var obj = sender as CheckBoxX;
|
|
|
var indexT = obj.Tag as string;
|
|
|
if ("全部".Equals(indexT))
|
|
|
{
|
|
|
orderType = -1;
|
|
|
}
|
|
|
if ("堂食".Equals(indexT))
|
|
|
{
|
|
|
orderType = 0;
|
|
|
}
|
|
|
if ("外带".Equals(indexT))
|
|
|
{
|
|
|
orderType = 1;
|
|
|
}
|
|
|
if ("电话外卖".Equals(indexT))
|
|
|
{
|
|
|
orderType = 2;
|
|
|
}
|
|
|
if ("餐桌".Equals(indexT))
|
|
|
{
|
|
|
orderType = 3;
|
|
|
}
|
|
|
if ("美团外卖".Equals(indexT))
|
|
|
{
|
|
|
orderType = 4;
|
|
|
}
|
|
|
if ("饿了么".Equals(indexT))
|
|
|
{
|
|
|
orderType = 5;
|
|
|
}
|
|
|
if ("百度外卖".Equals(indexT))
|
|
|
{
|
|
|
orderType = 6;
|
|
|
}
|
|
|
if ("微信点餐".Equals(indexT))
|
|
|
{
|
|
|
orderType = 7;
|
|
|
}
|
|
|
|
|
|
//QueryTicket();
|
|
|
}
|
|
|
|
|
|
public void QueryTicket()
|
|
|
{
|
|
|
//获取选择的订单
|
|
|
List<DesktopReportEntity> detail = getBusTicketList(this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
desktopTable.PrimaryGrid.DataSource = detail;
|
|
|
}
|
|
|
|
|
|
|
|
|
public List<DesktopReportEntity> getBusTicketList(string startTime, string endTime)
|
|
|
{
|
|
|
list.Clear();
|
|
|
|
|
|
try
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
StringBuilder sqlBuld = new StringBuilder();
|
|
|
sqlBuld.Append("select o.tableName ,o.orderType, i.displayName,sum(quantity) as totalQuantity from (select * from pos_order_item where finishDate>= '{0}' and finishDate<= '{1}') i left join pos_order o on o.id = i.orderId ");
|
|
|
sqlBuld.Append(" where o.orderStatus in(2, 4) ");
|
|
|
|
|
|
if (orderType >= 0)
|
|
|
{
|
|
|
sqlBuld.Append(" and orderType = " + orderType + " ");
|
|
|
}
|
|
|
|
|
|
var tableName = this.txtTableName.Text.Trim();
|
|
|
if (!string.IsNullOrEmpty(tableName))
|
|
|
{
|
|
|
sqlBuld.Append(" and tableName like '%" + tableName + "%' ");
|
|
|
}
|
|
|
|
|
|
var dishName = this.txtDishName.Text.Trim();
|
|
|
if (!string.IsNullOrEmpty(dishName))
|
|
|
{
|
|
|
sqlBuld.Append(" and displayName like '%" + dishName + "%' ");
|
|
|
}
|
|
|
|
|
|
sqlBuld.Append(" group by tableName,displayName ");
|
|
|
|
|
|
string sql = string.Format(sqlBuld.ToString(), startTime, endTime);
|
|
|
|
|
|
this.list = db.Query<DesktopReportEntity>(sql).ToList();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
LOGGER.Error(ex);
|
|
|
}
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
private void btn_print_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
this.ShowToastNotify(this, "开始打印");
|
|
|
|
|
|
//每桌对应菜品归类
|
|
|
var map = new Dictionary<string, List<DesktopReportEntity>>();
|
|
|
foreach (var item in this.list)
|
|
|
{
|
|
|
var tableName = item.TableName;
|
|
|
if (!map.ContainsKey(tableName))
|
|
|
{
|
|
|
map.Add(tableName, new List<DesktopReportEntity>());
|
|
|
}
|
|
|
map[tableName].Add(item);
|
|
|
}
|
|
|
|
|
|
int lastIndex = map.Keys.Count;
|
|
|
foreach (var obj in map)
|
|
|
{
|
|
|
lastIndex--;
|
|
|
|
|
|
//构建收银小票模版参数
|
|
|
var vars = this.BuilderPayVariable(obj.Key,obj.Value);
|
|
|
|
|
|
Tuple<bool, string> result = null;
|
|
|
|
|
|
result = ReportHelper.PrinterTicket("桌台单打", vars, true, false, 0, lastIndex > 0 ? 0 : 3);
|
|
|
//延迟200毫秒
|
|
|
Thread.Sleep(200);
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btn_print_all_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
this.ShowToastNotify(this, "开始打印");
|
|
|
|
|
|
//每桌对应菜品归类
|
|
|
var map = new Dictionary<string, List<DesktopReportEntity>>();
|
|
|
foreach (var item in this.list)
|
|
|
{
|
|
|
var tableName = item.TableName;
|
|
|
if (!map.ContainsKey(tableName))
|
|
|
{
|
|
|
map.Add(tableName, new List<DesktopReportEntity>());
|
|
|
}
|
|
|
map[tableName].Add(item);
|
|
|
}
|
|
|
|
|
|
var newList = new List<DesktopReportEntity>();
|
|
|
|
|
|
foreach (var obj in map)
|
|
|
{
|
|
|
newList.AddRange(obj.Value);
|
|
|
}
|
|
|
|
|
|
|
|
|
//构建收银小票模版参数
|
|
|
var vars = this.BuilderPayVariable(newList);
|
|
|
|
|
|
//如果不允许切纸,自动走纸3行
|
|
|
var allowCutPager = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_CASHIER_ALLOW_CUT_PAGER);
|
|
|
|
|
|
Tuple<bool, string> result = ReportHelper.PrinterTicket("桌台汇总", vars, true, false, 0, allowCutPager ? 0 : 3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
public List<Printer.VariableValue> BuilderPayVariable(List<DesktopReportEntity> lists)
|
|
|
{
|
|
|
var vars = new List<Printer.VariableValue>();
|
|
|
|
|
|
var v = new Printer.VariableValue();
|
|
|
|
|
|
v.Key = "汇总列表";
|
|
|
v.DataType = DataType.List;
|
|
|
|
|
|
//餐桌名称只打印第一行
|
|
|
var map = new Dictionary<string,string>();
|
|
|
|
|
|
decimal sum = 0;
|
|
|
var list = new List<Dictionary<string, string>>();
|
|
|
foreach (var item in lists)
|
|
|
{
|
|
|
sum += item.TotalQuantity;
|
|
|
|
|
|
|
|
|
|
|
|
var row = new Dictionary<string, string>();
|
|
|
row.Add("@餐桌@", map.ContainsKey(item.TableName) ? "" : item.TableName);
|
|
|
row.Add("@菜品@", item.DisplayName);
|
|
|
row.Add("@数量@", string.Format("{0}", item.TotalQuantity));
|
|
|
list.Add(row);
|
|
|
|
|
|
if (!map.ContainsKey(item.TableName))
|
|
|
{
|
|
|
map.Add(item.TableName, item.TableNo);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
v.Value = JsonUtils.Serialize(list);
|
|
|
vars.Add(v);
|
|
|
|
|
|
v = new Printer.VariableValue();
|
|
|
v.Key = "默认数据源";
|
|
|
v.DataType = DataType.Simple;
|
|
|
|
|
|
var data = new Dictionary<string, string>();
|
|
|
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
|
|
|
data.Add("@门店编码@", Global.Instance.Worker.StoreInfo.No);
|
|
|
data.Add("@收银员编码@", Global.Instance.Worker.No);
|
|
|
data.Add("@收银员名称@", Global.Instance.Worker.Name);
|
|
|
data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@开始时间@", this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@结束时间@", this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@总数量@", string.Format("{0}", sum));
|
|
|
|
|
|
v.Value = JsonUtils.Serialize(data);
|
|
|
vars.Add(v);
|
|
|
|
|
|
|
|
|
return vars;
|
|
|
}
|
|
|
|
|
|
public List<Printer.VariableValue> BuilderPayVariable(string tableName,List<DesktopReportEntity> lists)
|
|
|
{
|
|
|
var vars = new List<Printer.VariableValue>();
|
|
|
|
|
|
var v = new Printer.VariableValue();
|
|
|
|
|
|
v.Key = "汇总列表";
|
|
|
v.DataType = DataType.List;
|
|
|
|
|
|
decimal sum = 0;
|
|
|
var list = new List<Dictionary<string, string>>();
|
|
|
foreach (var item in lists)
|
|
|
{
|
|
|
sum += item.TotalQuantity;
|
|
|
|
|
|
var row = new Dictionary<string, string>();
|
|
|
row.Add("@餐桌@", item.TableName);
|
|
|
row.Add("@菜品@", item.DisplayName);
|
|
|
row.Add("@数量@", string.Format("{0}", item.TotalQuantity));
|
|
|
list.Add(row);
|
|
|
}
|
|
|
|
|
|
v.Value = JsonUtils.Serialize(list);
|
|
|
vars.Add(v);
|
|
|
|
|
|
v = new Printer.VariableValue();
|
|
|
v.Key = "默认数据源";
|
|
|
v.DataType = DataType.Simple;
|
|
|
|
|
|
var data = new Dictionary<string, string>();
|
|
|
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
|
|
|
data.Add("@门店编码@", Global.Instance.Worker.StoreInfo.No);
|
|
|
data.Add("@收银员编码@", Global.Instance.Worker.No);
|
|
|
data.Add("@收银员名称@", Global.Instance.Worker.Name);
|
|
|
data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@开始时间@", this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@结束时间@", this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
data.Add("@总数量@", string.Format("{0}", sum));
|
|
|
data.Add("@桌台名称@", tableName);
|
|
|
|
|
|
v.Value = JsonUtils.Serialize(data);
|
|
|
vars.Add(v);
|
|
|
|
|
|
|
|
|
return vars;
|
|
|
}
|
|
|
|
|
|
private void btn_time_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
var obj = sender as ButtonX;
|
|
|
var typeStr = obj.Tag as string;
|
|
|
var type = (ReportQuickDate)Enum.Parse(typeof(ReportQuickDate), typeStr);
|
|
|
var res = DateTimeUtils.CalculateBusinessPlanDate(type, this.startPicker.Value, this.endPicker.Value);
|
|
|
this.startPicker.Value = res.Item1;
|
|
|
this.endPicker.Value = res.Item2;
|
|
|
QueryTicket();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 查询按钮
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void btn_query_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
QueryTicket();
|
|
|
}
|
|
|
|
|
|
private void btn_exit_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
}
|
|
|
|
|
|
private void OnControlBoxCloseClick(object sender, EventArgs e)
|
|
|
{
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
}
|
|
|
|
|
|
private void OnCloseTouchClick(object sender, EventArgs e)
|
|
|
{
|
|
|
//先关闭父窗体
|
|
|
if (this.Owner != null)
|
|
|
{
|
|
|
this.Owner.Close();
|
|
|
}
|
|
|
//再关闭当前窗体
|
|
|
this.Close();
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
[Serializable]
|
|
|
public class DesktopReportEntity
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 餐桌号
|
|
|
/// </summary>
|
|
|
[JsonProperty(PropertyName = "tableNo")]
|
|
|
public string TableNo { get; set; } = string.Empty;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 餐桌号
|
|
|
/// </summary>
|
|
|
[JsonProperty(PropertyName = "tableName")]
|
|
|
public string TableName { get; set; } = string.Empty;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 菜品名称
|
|
|
/// </summary>
|
|
|
[JsonProperty(PropertyName = "displayName")]
|
|
|
public string DisplayName { get; set; } = string.Empty;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 菜品数量
|
|
|
/// </summary>
|
|
|
[JsonProperty(PropertyName = "totalQuantity")]
|
|
|
public int TotalQuantity { get; set; }
|
|
|
|
|
|
}
|
|
|
}
|