using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Windows; using System.Threading; using System.Text.RegularExpressions; namespace PosDataTest { public class Prints { #region 方法 -> 生成稽核结果单 /// /// 生成稽核单 /// /// 稽核工号 /// 稽核单号 public static void GetAuditResult(string code, string EndaccountCode) { try { List _PrintList = new List(); _PrintList.Add(PrintHelper.CreateCenterLine(QualityHelper.serverpartname + "稽查信息")); switch (code) { case "8000": case "8001": case "8002": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "公司稽查"));//公司稽查:8000、8001、8002 break; case "9501": case "9601": case "9701": case "zd9001": case "zd9002": case "zd9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙东]区域稽查"));//区域稽查:9501-9601-9701(浙东) break; case "9502": case "9602": case "9702": case "zn9001": case "zn9002": case "zn9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙南]区域稽查"));//区域稽查:9502-9602-9702(浙南) break; case "9503": case "9603": case "9703": case "zx9001": case "zx9002": case "zx9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙西]区域稽查"));//区域稽查:9503-9603-9703(浙西) break; case "9504": case "9604": case "9704": case "zb9001": case "zb9002": case "zb9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙北]区域稽查"));//区域稽查:9504-9604-9704(浙北) break; case "9505": case "9605": case "9705": case "zz9001": case "zz9002": case "zz9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙中]区域稽查"));//区域稽查:9505-9605-9705(浙中) break; case "9506": case "9606": case "9706": case "yh9001": case "yh9002": case "yh9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[沿海]区域稽查"));//区域稽查:9506-9606-9706(沿海) break; case "G9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "公司远程稽查"));//公司远程稽核:G9999 break; case "Q9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "区域远程稽核"));//区域远程稽核:Q9999 break; case "F9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "服务区远程稽查"));//服务区远程稽查:F9999 break; case "ZN9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "智能稽查"));//智能稽查:ZN9999 break; default: _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "服务区稽查")); break; } _PrintList.Add(PrintHelper.CreateSideLine("收银机号:", QualityHelper.machinecode)); _PrintList.Add(PrintHelper.CreateSideLine("稽查门店:", "[" + QualityHelper.shopcode + "]")); _PrintList.Add(PrintHelper.CreateRightLine(ESSupport.DataStorage.DataFunction.QueryShopName(QualityHelper.serverpartcode, QualityHelper.shopcode))); _PrintList.Add(PrintHelper.CreateSideLine("稽查人员", "[" + code + "]")); switch (code) { case "F9999": _PrintList.Add(PrintHelper.CreateRightLine("服务区远程稽查")); break; case "Q9999": _PrintList.Add(PrintHelper.CreateRightLine("区域远程稽查")); break; case "G9999": _PrintList.Add(PrintHelper.CreateRightLine("公司远程稽查")); break; case "ZN9999": _PrintList.Add(PrintHelper.CreateRightLine("智能稽查")); break; default: _PrintList.Add(PrintHelper.CreateRightLine(ESSupport.DataStorage.DataFunction.QueryPersonName(QualityHelper.serverpartcode, code))); break; } DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT STARTDATE,ENDDATE,ENDPERSON_CODE,CASHIER_CODE, CASHIER_NAME,ISNULL(CASHPAY,0) AS CASHPAY, ISNULL(CONTRIBUTION_AMOUNT,0) AS CONTRIBUTION_AMOUNT FROM T_ENDACCOUNT_NEW WHERE ENDACCOUNT_CODE ='{EndaccountCode}' ").Tables[0]; if (_DataTable.Rows.Count > 0) { _PrintList.Add(PrintHelper.CreateLeftLine("稽查时间:")); _PrintList.Add(PrintHelper.CreateRightLine(_DataTable.Rows[0]["ENDDATE"].ToString())); decimal.TryParse(_DataTable.Rows[0]["CASHPAY"].ToString(), out decimal _CashPay); decimal.TryParse(_DataTable.Rows[0]["CONTRIBUTION_AMOUNT"].ToString(), out decimal _ContributionAmount); if (_DataTable.Rows[0]["ENDPERSON_CODE"].ToString() == "ZN9999" && _ContributionAmount - _CashPay != 0) { _PrintList.Add(PrintHelper.CreateSideLine("稽查结果:", "[稽查信息保存成功]")); _PrintList.Add(PrintHelper.CreateSideLine("当班收银员:", "[" + _DataTable.Rows[0]["CASHIER_CODE"].ToString() + "]")); _PrintList.Add(PrintHelper.CreateRightLine(_DataTable.Rows[0]["CASHIER_NAME"].ToString())); _PrintList.Add(PrintHelper.CreateSideLine("稽查金额:", _ContributionAmount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateCenterLine("本次稽查有长短款")); _PrintList.Add(PrintHelper.CreateCenterLine("请等待管理员现场复核")); _PrintList.Add(PrintHelper.CreateLeftLine("管理员复核方式:")); _PrintList.Add(PrintHelper.CreateLeftLine("  1.打开系统菜单")); _PrintList.Add(PrintHelper.CreateLeftLine("  2.选择稽核选项")); _PrintList.Add(PrintHelper.CreateLeftLine("  3.选择智能稽核复核")); _PrintList.Add(PrintHelper.CreateLeftLine("  4.根据实际情况选择打印稽核报表或进行流水补录")); } else { _PrintList.Add(PrintHelper.CreateSideLine("稽查结果:", "[稽查信息保存成功]")); } } else { _PrintList.Add(PrintHelper.CreateSideLine("稽查结果:", "[稽查信息保存失败]")); } PrintHelper.PrintList(_PrintList, int.Parse(QualityHelper.xpprint_num), int.Parse(QualityHelper.paper_walk), false); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("稽查信息打印失败:" + ex.Message); } } #endregion #region 方法 -> 生成稽核单 /// /// 打印稽核单 /// /// 结账表编号 /// public static bool PrintAudit(string EndAccountCode, bool isCheckContribution = false) { try { DataTable _DataTable = new DataTable(); try { _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ENDPERSON_CODE,STARTDATE,ENDDATE,ISNULL(TICKET_COUNT,0) AS TICKET_COUNT, ISNULL(TOTAL_COUNT,0) AS TOTAL_COUNT,ISNULL(TOTAL_AMOUNT,0) AS TOTAL_AMOUNT, ISNULL(TOTAL_OFFAMOUNT,0) AS TOTAL_OFFAMOUNT,ISNULL(CASHPAY,0) AS CASHPAY, ISNULL(BANKPAY,0) AS BANKPAY,ISNULL(MEMBERPAY,0) AS MEMBERPAY, ISNULL(COUPONPAY,0) AS COUPONPAY,ISNULL(MOBILEPAY,0) AS MOBILEPAY, ISNULL(INTERNALPAY,0) AS INTERNALPAY,ISNULL(CONTRIBUTION_AMOUNT,0) AS CONTRIBUTION_AMOUNT, PAYMENT_DETAILS,CASHIER_CODE,CASHIER_NAME FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDACCOUNT_TYPE = 5 AND ENDACCOUNT_CODE = '{EndAccountCode}'").Tables[0]; } catch (Exception ex) { return false; } if (_DataTable.Rows.Count > 0) { List _PrintList = new List(); _PrintList.Add(PrintHelper.CreateCenterLine(QualityHelper.serverpartname + "稽查报表")); string EndPersonCode = _DataTable.Rows[0]["ENDPERSON_CODE"].ToString(); string str_CashierCode = _DataTable.Rows[0]["CASHIER_CODE"].ToString(); string str_CashierName = _DataTable.Rows[0]["CASHIER_NAME"].ToString(); switch (EndPersonCode) { case "8000": case "8001": case "8002": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "公司稽查"));//公司稽查:9000、9001、9002 break; case "9501": case "9601": case "9701": case "zd9001": case "zd9002": case "zd9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙东]区域稽查"));//区域稽查:9501-9601-9701(浙东) break; case "9502": case "9602": case "9702": case "zn9001": case "zn9002": case "zn9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙南]区域稽查"));//区域稽查:9502-9602-9702(浙南) break; case "9503": case "9603": case "9703": case "zx9001": case "zx9002": case "zx9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙西]区域稽查"));//区域稽查:9503-9603-9703(浙西) break; case "9504": case "9604": case "9704": case "zb9001": case "zb9002": case "zb9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙北]区域稽查"));//区域稽查:9504-9604-9704(浙北) break; case "9505": case "9605": case "9705": case "zz9001": case "zz9002": case "zz9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[浙中]区域稽查"));//区域稽查:9505-9605-9705(浙中) break; case "9506": case "9606": case "9706": case "yh9001": case "yh9002": case "yh9003": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "[沿海]区域稽查"));//区域稽查:9506-9606-9706(沿海) break; case "G9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "公司远程稽查"));//公司远程稽核:G9999 break; case "Q9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "区域远程稽核"));//区域远程稽核:Q9999 break; case "F9999": _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "服务区远程稽查"));//服务区远程稽查:F9999 break; default: _PrintList.Add(PrintHelper.CreateSideLine("稽查类型:", "服务区稽查")); break; } _PrintList.Add(PrintHelper.CreateSideLine("收银机号:", QualityHelper.machinecode)); _PrintList.Add(PrintHelper.CreateSideLine("稽查门店:", "[" + QualityHelper.shopcode + "]")); _PrintList.Add(PrintHelper.CreateRightLine(ESSupport.DataStorage.DataFunction.QueryShopName(QualityHelper.serverpartcode, QualityHelper.shopcode))); switch (EndPersonCode) { case "G9999": case "Q9999": case "F9999": case "ZN9999": //远程及智能稽核打印稽核时的当班收银人员信息 _PrintList.Add(PrintHelper.CreateSideLine("稽查人员:", "[" + EndPersonCode + "]")); _PrintList.Add(PrintHelper.CreateRightLine("智能稽查")); _PrintList.Add(PrintHelper.CreateSideLine("当班收银员:", "[" + str_CashierCode + "]")); _PrintList.Add(PrintHelper.CreateRightLine(str_CashierName)); break; default: //普通稽查打印实际操作人员及当班收银人员信息 _PrintList.Add(PrintHelper.CreateSideLine("稽查人员:", "[" + EndPersonCode + "]")); _PrintList.Add(PrintHelper.CreateRightLine(ESSupport.DataStorage.DataFunction.QueryPersonName(QualityHelper.serverpartcode, EndPersonCode))); _PrintList.Add(PrintHelper.CreateSideLine("当班收银员:", "[" + str_CashierCode + "]")); _PrintList.Add(PrintHelper.CreateRightLine(str_CashierName)); break; } _PrintList.Add("稽查开始时间:"); DateTime.TryParse(_DataTable.Rows[0]["STARTDATE"].ToString(), out DateTime StartTime); _PrintList.Add(PrintHelper.CreateRightLine(StartTime.ToString())); _PrintList.Add("稽查结束时间:"); DateTime.TryParse(_DataTable.Rows[0]["ENDDATE"].ToString(), out DateTime EndTime); _PrintList.Add(PrintHelper.CreateRightLine(EndTime.ToString())); TimeSpan _TimeSpan = EndTime.Subtract(StartTime).Duration(); string dateDiff = _TimeSpan.Hours.ToString() + "小时" + _TimeSpan.Minutes.ToString() + "分钟"; _PrintList.Add(PrintHelper.CreateSideLine("工班总时长:", dateDiff)); _PrintList.Add(" "); decimal.TryParse(_DataTable.Rows[0]["CASHPAY"].ToString(), out decimal cashpay); decimal.TryParse(_DataTable.Rows[0]["COUPONPAY"].ToString(), out decimal couponpay); decimal.TryParse(_DataTable.Rows[0]["BANKPAY"].ToString(), out decimal bankpay); decimal.TryParse(_DataTable.Rows[0]["MOBILEPAY"].ToString(), out decimal mobilepay); decimal.TryParse(_DataTable.Rows[0]["MEMBERPAY"].ToString(), out decimal memberpay); //decimal.TryParse(_DataTable.Rows[0]["ENDDATE"].ToString(), out decimal otherpay); decimal.TryParse(_DataTable.Rows[0]["INTERNALPAY"].ToString(), out decimal internalpay); decimal.TryParse(_DataTable.Rows[0]["TICKET_COUNT"].ToString(), out decimal ticketcount); decimal.TryParse(_DataTable.Rows[0]["TOTAL_OFFAMOUNT"].ToString(), out decimal offprice); decimal.TryParse(_DataTable.Rows[0]["TOTAL_AMOUNT"].ToString(), out decimal factamount); decimal.TryParse(_DataTable.Rows[0]["TOTAL_COUNT"].ToString(), out decimal sellcount); decimal.TryParse(_DataTable.Rows[0]["CONTRIBUTION_AMOUNT"].ToString(), out decimal money); _PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", cashpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("  稽查金额:", money.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("【稽查差额:】", (money - cashpay).ToString("F2") + "元")); _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", (cashpay + couponpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("  现金金额:", cashpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 消费券金额:", couponpay.ToString("F2") + "元")); _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("移动支付合计:", mobilepay.ToString("F2") + "元")); if (mobilepay > 0 && _DataTable.Rows[0]["PAYMENT_DETAILS"].ToString().Trim() != "") { string[] _strArrayList = _DataTable.Rows[0]["PAYMENT_DETAILS"].ToString().Trim().Split(','); for (int i = 0; i < _strArrayList.Count(); i++) { string[] _strArray = _strArrayList[i].Split(':'); if (_strArray.Count() > 1) { switch (_strArray[0].ToUpper()) { case "WECHATPAY": _PrintList.Add(PrintHelper.CreateSideLine("  微信支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "ALIPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 支付宝支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "QPAY": _PrintList.Add(PrintHelper.CreateSideLine("  QQ钱包:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "JDPAY": _PrintList.Add(PrintHelper.CreateSideLine("  京东钱包:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "BESTPAY": _PrintList.Add(PrintHelper.CreateSideLine("   翼支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "UNIONPAY": _PrintList.Add(PrintHelper.CreateSideLine("  银联支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; } } } } _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("其他支付合计:", (bankpay + memberpay + internalpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 银行卡金额:", bankpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 会员卡金额:", memberpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(QualityHelper.enterprisevip == "1" ? " 企业会员金额:" : " 内部消费金额:", internalpay.ToString("F2") + "元")); _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("交易合计金额:", (bankpay + memberpay + internalpay + mobilepay + couponpay + cashpay).ToString("F2") + "元")); _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add(PrintHelper.CreateSideLine("总客单数量:", ticketcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("总销售数量:", sellcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("总销售金额:", factamount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("总优惠金额:", offprice.ToString("F2"))); //智能稽核时校验是否存在长短款,存在长短款则增加等待复核的提示 if (isCheckContribution && money - cashpay != 0) { _PrintList.Add(PrintHelper.CreateCenterLine("本次稽核有长短款")); _PrintList.Add(PrintHelper.CreateCenterLine("请等待管理员现场复核")); } if (PrintHelper.PrintList(_PrintList, int.Parse(QualityHelper.xpprint_num), int.Parse(QualityHelper.paper_walk), false)) { return true; } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("稽核单打印失败:" + ex.Message); } return false; } #endregion #region 方法 -> 插入稽核数据 /// /// 插入稽核数据 /// /// 稽核工号 /// 缴款金额 /// 稽核时间 /// 输出:稽核数据唯一标识编码 public static bool InsertAudit(string personCode, decimal money, DateTime auditTime, out string EndAccountCode) { EndAccountCode = ""; try { DataTable table_EndAccount = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT MAX(STARTDATE) AS STARTDATE FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}'AND ENDACCOUNT_TYPE = 1 AND ENDDATE IS NULL").Tables[0]; //获取营收数据表ID序列 int _MaxId = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_ENDACCOUNT_NEW", "ENDACCOUNT_ID"); //获取当前账期开始时间 DateTime time_StartDate = (DateTime)table_EndAccount.Rows[0]["STARTDATE"]; //统计营收数据 DataTable table_SellMaster = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(1) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY,ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY,ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY,ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{time_StartDate.ToString()}') AND DATETIME('{auditTime.ToString()}')").Tables[0]; //定义营收数据字段变量 decimal ticketcount = 0; decimal totalcount = 0; decimal totalsellamount = 0; decimal totaloffamount = 0; decimal cashpay = 0;//现金 decimal couponpay = 0;//消费券 decimal bankpay = 0;//银行卡 decimal memberpay = 0;//会员 decimal mobilepay = 0;//移动支付 decimal internalpay = 0;//内部消费 decimal otherpay = 0;//其他消费 if (table_SellMaster.Rows.Count > 0) { ticketcount = decimal.Parse(table_SellMaster.Rows[0]["ticketcount"].ToString()); totalcount = decimal.Parse(table_SellMaster.Rows[0]["sellmaster_count"].ToString()); totaloffamount = decimal.Parse(table_SellMaster.Rows[0]["sellmaster_offprice"].ToString()); totalsellamount = decimal.Parse(table_SellMaster.Rows[0]["sellmaster_amount"].ToString()); cashpay = decimal.Parse(table_SellMaster.Rows[0]["cashpay"].ToString()); bankpay = decimal.Parse(table_SellMaster.Rows[0]["bankpay"].ToString()); memberpay = decimal.Parse(table_SellMaster.Rows[0]["memberpay"].ToString()); couponpay = decimal.Parse(table_SellMaster.Rows[0]["couponpay"].ToString()); mobilepay = decimal.Parse(table_SellMaster.Rows[0]["mobilepay"].ToString()); internalpay = decimal.Parse(table_SellMaster.Rows[0]["internalpay"].ToString()); otherpay = decimal.Parse(table_SellMaster.Rows[0]["otherpay"].ToString()); } //统计支付类型数据 DataTable table_Payment = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT SUM(MOBILEPAY) AS COUNT,PAYMENT_TYPE FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{time_StartDate.ToString()}') AND DATETIME('{auditTime.ToString()}') GROUP BY PAYMENT_TYPE").Tables[0]; string payment_details = ""; //拼接移动支付详情信息字符串 for (int i = 0; i < table_Payment.Rows.Count; i++) { if (table_Payment.Rows[i]["COUNT"].ToString() != "0") { payment_details += table_Payment.Rows[i]["PAYMENT_TYPE"] + ":" + table_Payment.Rows[i]["COUNT"] + ","; } } if (payment_details.Length > 0) { payment_details = payment_details.Substring(0, payment_details.Length - 1); } //生成账期表唯一标识编码 EndAccountCode = ESSupport.DataStorage.DataFunction.CreateUniqueCode(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode); //插入稽核数据到本地数据库 try { //保存稽核数据记录 ESSupport.Lib.SyBaseHelper.ExecuteSqlTran($@"INSERT INTO T_ENDACCOUNT_NEW(ENDACCOUNT_ID,STARTDATE,ENDDATE, SERVERPARTCODE,SHOPCODE,MACHINECODE,ENDPERSON_CODE,TICKET_COUNT, TOTAL_COUNT,TOTAL_AMOUNT,TOTAL_OFFAMOUNT,CASHPAY,BANKPAY,COUPONPAY, MEMBERPAY,MOBILEPAY,INTERNALPAY,CONTRIBUTION_AMOUNT,ENDACCOUNT_TYPE, TRANSFER_STATE,ENDACCOUNT_CODE,PAYMENT_DETAILS,CASHIER_CODE,CASHIER_NAME) VALUES({_MaxId},DATETIME('{time_StartDate.ToString()}'),DATETIME('{auditTime.ToString()}'),'{QualityHelper.serverpartcode}', '{QualityHelper.shopcode}','{QualityHelper.machinecode}','{personCode}',{ticketcount},{totalcount}, {totalsellamount},{totaloffamount},{cashpay},{bankpay},{couponpay},{memberpay},{mobilepay},{internalpay}, {money},5,0,'{EndAccountCode}','{payment_details}','{QualityHelper.sellworkercode}','{QualityHelper.sellworkername}')"); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"稽核数据写入本地失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};稽核时间:{auditTime.ToString("yyyy/MM/dd HH:mm:ss")}】"); return false; } return true; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("稽核数据写入失败:" + ex.Message); return false; } } #endregion #region 方法 -> 返回稽核数据 /// /// 查询稽核结果数据 /// /// public static DataTable GetAuditTable(DateTime auditTime) { DataTable _AuditTable = new DataTable(); try { DateTime time_StartDate = (DateTime)ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT MAX(STARTDATE) AS STARTDATE FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDDATE IS NULL AND ENDACCOUNT_TYPE = 1").Tables[0].Rows[0]["STARTDATE"]; _AuditTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"select a.sellworker_name as name,convert(decimal,count(*)) as counts, isnull(sum(a.sellmaster_count),0) as numcount, isnull(sum(a.sellmaster_amount),0) as pricrcount, isnull(sum(a.sellmaster_offprice),0) as ratecount, isnull(sum(a.cashpay), 0) as cashpay, isnull(sum(case a.payment_type when 'ALIPAY' then a.mobilepay else 0 end),0) as alipay, isnull(sum(case a.payment_type when 'WECHATPAY' then a.mobilepay else 0 end),0) as wechat, isnull(sum(case a.payment_type when 'UNIONPAY' then a.mobilepay else 0 end),0) as unionpay from t_sellmaster a where a.serverpartcode = '{QualityHelper.serverpartcode}' and a.shopcode = '{QualityHelper.shopcode}' and a.machinecode = '{QualityHelper.machinecode}' and a.sellmaster_date between datetime('{time_StartDate}') and datetime('{auditTime.ToString("yyyy/MM/dd HH:mm:ss")}') group by a.sellworker_name").Tables[0]; decimal tickectcout = (decimal)_AuditTable.Compute("sum(counts)", ""); decimal salecount = (decimal)_AuditTable.Compute("sum(numcount)", ""); decimal pricecount = (decimal)_AuditTable.Compute("sum(pricrcount)", ""); decimal repricecount = (decimal)_AuditTable.Compute("sum(ratecount)", ""); decimal cashpay = (decimal)_AuditTable.Compute("sum(cashpay)", ""); decimal alipay = (decimal)_AuditTable.Compute("sum(alipay)", ""); decimal wechat = (decimal)_AuditTable.Compute("sum(wechat)", ""); decimal unionpay = (decimal)_AuditTable.Compute("sum(unionpay)", ""); DataRow _DataRow = _AuditTable.NewRow(); _DataRow["name"] = "合计"; _DataRow["counts"] = tickectcout.ToString(); _DataRow["numcount"] = salecount.ToString(); _DataRow["pricrcount"] = pricecount.ToString(); _DataRow["ratecount"] = repricecount.ToString(); _DataRow["cashpay"] = cashpay; _DataRow["alipay"] = alipay; _DataRow["wechat"] = wechat; _DataRow["unionpay"] = unionpay; _AuditTable.Rows.InsertAt(_DataRow, _AuditTable.Rows.Count); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"稽核数据查询失败。原因:{ex.Message}"); } return _AuditTable; } #endregion #region 方法 -> 生成结账单小票 /// /// 生成结账单 /// /// 缴款金额 /// 结账人工号 /// 结账时间 /// 账期开始时间 public static void GetCheckOut(string EndaccountCode) { try { string _SelectSql = "SELECT ISNULL(TICKET_COUNT,0) AS TICKET_COUNT,ISNULL(TOTAL_COUNT,0) AS TOTAL_COUNT," + "ISNULL(TOTAL_OFFAMOUNT,0) AS TOTAL_OFFAMOUNT,ISNULL(TOTAL_AMOUNT,0) AS TOTAL_AMOUNT," + "ISNULL(CASHPAY,0) AS CASHPAY,ISNULL(BANKPAY,0) AS BANKPAY,ISNULL(MEMBERPAY,0) AS MEMBERPAY," + "ISNULL(COUPONPAY,0) AS COUPONPAY,ISNULL(MOBILEPAY,0) AS MOBILEPAY,ISNULL(INTERNALPAY,0) AS INTERNALPAY," + "ENDPERSON_CODE,ISNULL(CONTRIBUTION_AMOUNT,0) AS CONTRIBUTION_AMOUNT,STARTDATE,ENDDATE,PAYMENT_DETAILS " + "FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND ENDACCOUNT_CODE = '" + EndaccountCode + "'"; DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { List _PrintList = new List(); _PrintList.Add(PrintHelper.CreateCenterLine(QualityHelper.serverpartname)); _PrintList.Add(PrintHelper.CreateCenterLine("收银结账总单")); _PrintList.Add(PrintHelper.CreateSideLine("结账人员:", $"[{_DataTable.Rows[0]["ENDPERSON_CODE"].ToString()}]")); string EndPersonName = ESSupport.DataStorage.DataFunction.QueryPersonName(QualityHelper.serverpartcode, _DataTable.Rows[0]["ENDPERSON_CODE"].ToString()); _PrintList.Add(PrintHelper.CreateRightLine(EndPersonName)); _PrintList.Add(PrintHelper.CreateSideLine("结账门店:", $"[{QualityHelper.shopcode}]")); _PrintList.Add(PrintHelper.CreateRightLine(ESSupport.DataStorage.DataFunction.QueryShopName(QualityHelper.serverpartcode, QualityHelper.shopcode))); _PrintList.Add(PrintHelper.CreateSideLine("收银机号:", QualityHelper.machinecode)); _PrintList.Add("账期开始时间:"); DateTime.TryParse(_DataTable.Rows[0]["STARTDATE"].ToString(), out DateTime StartTime); _PrintList.Add(PrintHelper.CreateRightLine(StartTime.ToString("yyyy/MM/dd HH:mm:ss"))); _PrintList.Add("账期结束时间:"); DateTime.TryParse(_DataTable.Rows[0]["ENDDATE"].ToString(), out DateTime EndTime); _PrintList.Add(PrintHelper.CreateRightLine(EndTime.ToString("yyyy/MM/dd HH:mm:ss"))); decimal.TryParse(_DataTable.Rows[0]["CASHPAY"].ToString(), out decimal cashpay); decimal.TryParse(_DataTable.Rows[0]["COUPONPAY"].ToString(), out decimal couponpay); decimal.TryParse(_DataTable.Rows[0]["BANKPAY"].ToString(), out decimal bankpay); decimal.TryParse(_DataTable.Rows[0]["MOBILEPAY"].ToString(), out decimal mobilepay); decimal.TryParse(_DataTable.Rows[0]["MEMBERPAY"].ToString(), out decimal memberpay); //decimal.TryParse(_DataTable.Rows[0]["ENDDATE"].ToString(), out decimal otherpay); decimal.TryParse(_DataTable.Rows[0]["INTERNALPAY"].ToString(), out decimal internalpay); decimal.TryParse(_DataTable.Rows[0]["TICKET_COUNT"].ToString(), out decimal ticketcount); decimal.TryParse(_DataTable.Rows[0]["TOTAL_OFFAMOUNT"].ToString(), out decimal offprice); decimal.TryParse(_DataTable.Rows[0]["TOTAL_AMOUNT"].ToString(), out decimal factamount); decimal.TryParse(_DataTable.Rows[0]["TOTAL_COUNT"].ToString(), out decimal sellcount); decimal.TryParse(_DataTable.Rows[0]["CONTRIBUTION_AMOUNT"].ToString(), out decimal money); _PrintList.Add("交易总额:"); //_PrintList.Add(PrintHelper.CreateSideLine(" 现金交易:", (couponpay+cashpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 现金交易:", cashpay.ToString("F2") + "元")); if (mobilepay != 0) { _PrintList.Add(PrintHelper.CreateSideLine(" 移动支付:", mobilepay.ToString("F2") + "元")); } if (memberpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine(" 会员支付:", memberpay.ToString("F2") + "元")); } if (internalpay != 0 || bankpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine(" 其他支付:", (internalpay + bankpay).ToString("F2") + "元")); } _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("现金差额:", (money - cashpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 缴款金额:", money.ToString("F2") + "元")); //_PrintList.Add(PrintHelper.CreateSideLine(" 现金交易:",(couponpay+ cashpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 现金交易:", cashpay.ToString("F2") + "元")); if (QualityHelper.serverpartcode == "888888" || (QualityHelper.serverpartcode == "330005" && QualityHelper.shopcode == "021002")) { try { DataTable _MemberPayCheck = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(TICKET_CODE) AS TICKETCOUNT, SUM(TICKET_AMOUNT) AS TICKETAMOUNT FROM T_MEMBERSHIP_PAY WHERE MEMBERSHIPPAY_RESULT = 0 AND SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND MEMBERSHIPPAY_DATE BETWEEN DATETIME('{StartTime.ToString()}') AND DATETIME('{EndTime.ToString()}') ").Tables[0]; if (_MemberPayCheck.Rows.Count > 0) { _PrintList.Add(" "); _PrintList.Add("备注:"); decimal.TryParse(_MemberPayCheck.Rows[0]["TICKETCOUNT"].ToString(), out decimal _TicketCount); if (_TicketCount > 0) { _PrintList.Add(" 会员交易结果校验失败,会员支付结果请以管理平台为准。"); } else { _PrintList.Add(" 会员交易结果校验成功。"); } } } catch { } } _PrintList.Add("-".PadLeft(32, '-')); //_PrintList.Add(PrintHelper.CreateSideLine("现金交易:", (couponpay + cashpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", cashpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 现金金额:", cashpay.ToString("F2") + "元")); if (couponpay != 0) { string sql = "SELECT SUM(COUPONPAY) AS COUPONPAY,COUPON_TYPE FROM T_SELLMASTER " + "WHERE SERVERPARTCODE='" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND SELLMASTER_DATE BETWEEN DATETIME('" + StartTime.ToString() + "') AND DATETIME('" + EndTime.ToString() + "') GROUP BY COUPON_TYPE"; try { DataTable dt = ESSupport.Lib.SyBaseHelper.QueryOdbc(sql).Tables[0]; if (dt.Rows.Count > 0) { _PrintList.Add("优惠券合计:"); for (int i = 0; i < dt.Rows.Count; i++) { switch (dt.Rows[i]["coupon_type"].ToString()) { case "VipCoupon": _PrintList.Add(PrintHelper.CreateSideLine(" 电子优惠券:", decimal.Parse(dt.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; case "BusCoupons": _PrintList.Add(PrintHelper.CreateSideLine(" 大巴券:", decimal.Parse(dt.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; case "GroupPay": _PrintList.Add(PrintHelper.CreateSideLine(" 团队餐:", decimal.Parse(dt.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; case "MealVoucher": _PrintList.Add(PrintHelper.CreateSideLine(" 消费券:", decimal.Parse(dt.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; } } } } catch (Exception ex) { } } _PrintList.Add(PrintHelper.CreateSideLine("移动支付合计:", mobilepay.ToString("f2") + "元")); if (mobilepay != 0 && !string.IsNullOrWhiteSpace(_DataTable.Rows[0]["PAYMENT_DETAILS"].ToString())) { string[] _strPaymentList = _DataTable.Rows[0]["PAYMENT_DETAILS"].ToString().Trim().Split(','); for (int i = 0; i < _strPaymentList.Count(); i++) { string[] _strPayment = _strPaymentList[i].Split(':'); if (_strPayment.Count() > 1) { switch (_strPayment[0].ToUpper()) { case "WECHATPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 微信支付:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; case "ALIPAY": _PrintList.Add(PrintHelper.CreateSideLine("  支付宝:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; case "QPAY": _PrintList.Add(PrintHelper.CreateSideLine("  QQ钱包:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; case "JDPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 京东钱包:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; case "BESTPAY": _PrintList.Add(PrintHelper.CreateSideLine("  翼支付:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; case "UNIONPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 云闪付:", decimal.Parse(_strPayment[1]).ToString("F2") + "元")); break; } } } } _PrintList.Add(PrintHelper.CreateSideLine("会员支付合计:", memberpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("其他支付合计:", (bankpay + internalpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 银行卡金额:", bankpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(QualityHelper.enterprisevip == "1" ? " 企业会员金额:" : " 内部消费金额:", internalpay.ToString("F2") + "元")); //_PrintList.Add(PrintHelper.CreateSideLine(" 其他消费金额:", otherpay.ToString("F2") + "元")); _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("交易总金额:", (cashpay + couponpay + bankpay + mobilepay + internalpay + memberpay).ToString("F2") + "元")); _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add(PrintHelper.CreateSideLine("总客单数量:", ticketcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("总销售数量:", sellcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("总销售金额:", factamount.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("总优惠金额:", offprice.ToString("F2") + "元")); //付费会员折扣统计 try { DataTable _MemberRate = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT A.MEMBERSHIPPAY_TYPE,COUNT(1) AS TICKETCOUNT, ISNULL(SUM(A.TICKET_AMOUNT),0) AS TOTALAMOUNT FROM T_MEMBERSHIP_PAY A WHERE UPPER(A.MEMBERSHIPPAY_TYPE) = 'BENEFITS' AND A.SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND A.SHOPCODE = '{QualityHelper.shopcode}' AND A.MACHINECODE = '{QualityHelper.machinecode}' AND A.MEMBERSHIPPAY_DATE BETWEEN DATETIME('{StartTime.ToString()}') AND DATETIME('{EndTime.ToString()}') GROUP BY A.MEMBERSHIPPAY_TYPE").Tables[0]; if (_MemberRate.Rows.Count > 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("会员折扣明细:"); _PrintList.Add(PrintHelper.CreateSideLine(" 优惠客单数:", decimal.Parse(_MemberRate.Rows[0]["TICKETCOUNT"].ToString()).ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine(" 优惠总金额:", decimal.Parse(_MemberRate.Rows[0]["TOTALAMOUNT"].ToString()).ToString("F2") + "元")); } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("会员折扣打印异常:" + ex.Message); } try { DataTable _CouponRate = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COMMODITY_NAME AS COUPONNAME, SUM(TICKTE_COUNT) AS TICKETCOUNT, SUM(TOTAL_AMOUNT * -1) AS TOTALCOUPONAMOUNT FROM T_COMMODITYSALE_NEW WHERE COMMODITY_CODE IN ('99999996','99999997','99999998','99999999') AND ENDACCOUNT_CODE = '{EndaccountCode}' GROUP BY COMMODITY_CODE,COMMODITY_NAME").Tables[0]; if (_CouponRate.Rows.Count > 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("不计营收优惠明细:"); foreach (DataRow _CouponRow in _CouponRate.Rows) { _PrintList.Add($" {_CouponRow["COUPONNAME"].ToString()}:"); _PrintList.Add(PrintHelper.CreateSideLine("  使用数量:", decimal.Parse(_CouponRow["TICKETCOUNT"].ToString()).ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("  抵减金额:", decimal.Parse(_CouponRow["TOTALCOUPONAMOUNT"].ToString()).ToString("F2") + "元")); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("不计营收优惠打印异常:" + ex.Message); } try { DataTable _CouponTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT A.COUPONNAME,A.COUPONTEXT,COUNT(1) AS TICKETCOUNT, SUM(A.COUPONAMOUNT) AS TOTALCOUPONAMOUNT FROM T_COUPONPAY A WHERE A.SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND A.SHOPCODE = '{QualityHelper.shopcode}' AND A.MACHINECODE = '{QualityHelper.machinecode}' AND A.COUPONPAY_STATE = 1010 AND A.COUPONPAY_DATE BETWEEN DATETIME('{StartTime.ToString()}') AND DATETIME('{EndTime.ToString()}') GROUP BY A.COUPONNAME,A.COUPONTEXT").Tables[0]; if (_CouponTable.Rows.Count > 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("电子优惠券明细:"); foreach (DataRow _CouponRow in _CouponTable.Rows) { _PrintList.Add($" {_CouponRow["COUPONNAME"].ToString()}:"); _PrintList.Add(PrintHelper.CreateSideLine("  使用数量:", decimal.Parse(_CouponRow["TICKETCOUNT"].ToString()).ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("  抵减金额:", decimal.Parse(_CouponRow["TOTALCOUPONAMOUNT"].ToString()).ToString("F2") + "元")); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("电子优惠券打印异常:" + ex.Message); } try { _SelectSql = "SELECT ISNULL(SUM(TOTAL_COUNT),0) AS TOTAL_COUNT,ISNULL(SUM(TOTAL_AMOUNT),0) AS TOTAL_AMOUNT " + "FROM T_COMMODITYSALE_NEW WHERE COMMODITY_TYPE LIKE '%烟%' AND ENDACCOUNT_CODE = '" + EndaccountCode + "'"; DataTable _CommoditySaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleTable.Rows.Count > 0) { decimal _Count = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_COUNT"].ToString()); decimal _Amount = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_AMOUNT"].ToString()); if (_Count != 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("香烟类总计:"); _PrintList.Add(PrintHelper.CreateSideLine(" 销售数量:", _Count.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine(" 销售金额:", _Amount.ToString("F2") + "元")); _SelectSql = string.Format( @"SELECT ISNULL(SUM(TOTALCOUNT),0) AS TOTALCOUNT,ISNULL(SUM(TOTALSELLAMOUNT),0) AS TOTALSELLAMOUNT FROM T_COMMODITYSALE_EXTAR WHERE COMMODITY_TYPE LIKE '%烟%' AND FLAG = 5000 AND STARTDATE >= DATETIME('{0}') AND ENDDATE <= DATETIME('{1}') AND SERVERPARTCODE = '{2}' AND SHOPCODE = '{3}' AND MACHINECODE = '{4}'", StartTime.ToString(), EndTime.ToString(), QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode); DataTable _CommoditySaleMobile = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleMobile.Rows.Count > 0) { decimal _MobileAmount = decimal.Parse(_CommoditySaleMobile.Rows[0]["TOTALSELLAMOUNT"].ToString()); _PrintList.Add(PrintHelper.CreateSideLine(" 移动支付:", _MobileAmount.ToString("F2") + "元")); } } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("香烟打印异常:" + ex.Message); } try { _SelectSql = "SELECT ISNULL(SUM(TOTAL_COUNT),0) AS TOTAL_COUNT,ISNULL(SUM(TOTAL_AMOUNT),0) AS TOTAL_AMOUNT " + "FROM T_COMMODITYSALE_NEW WHERE COMMODITY_TYPE LIKE '%客房%' AND ENDACCOUNT_CODE = '" + EndaccountCode + "'"; DataTable _CommoditySaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleTable.Rows.Count > 0) { decimal _Count = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_COUNT"].ToString()); decimal _Amount = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_AMOUNT"].ToString()); if (_Count != 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("客房类总计:"); _PrintList.Add(PrintHelper.CreateSideLine(" 销售数量:", _Count.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine(" 销售金额:", _Amount.ToString("F2") + "元")); _SelectSql = string.Format( @"SELECT ISNULL(SUM(TOTALCOUNT),0) AS TOTALCOUNT,ISNULL(SUM(TOTALSELLAMOUNT),0) AS TOTALSELLAMOUNT FROM T_COMMODITYSALE_EXTAR WHERE COMMODITY_TYPE LIKE '%客房%' AND FLAG = 5000 AND STARTDATE >= DATETIME('{0}') AND ENDDATE <= DATETIME('{1}') AND SERVERPARTCODE = '{2}' AND SHOPCODE = '{3}' AND MACHINECODE = '{4}'", StartTime.ToString(), EndTime.ToString(), QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode); DataTable _CommoditySaleMobile = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleMobile.Rows.Count > 0) { decimal _MobileAmount = decimal.Parse(_CommoditySaleMobile.Rows[0]["TOTALSELLAMOUNT"].ToString()); _PrintList.Add(PrintHelper.CreateSideLine(" 移动支付:", _MobileAmount.ToString("F2") + "元")); } } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("客房打印异常:" + ex.Message); } try { DataTable _OnlineSaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(*) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY, ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY, ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY, ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{StartTime.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{EndTime.ToString("yyyy/MM/dd HH:mm:ss")}') AND UPPER(COUPON_TYPE) = 'ONLINEPAY'").Tables[0]; if (_OnlineSaleTable.Rows.Count > 0) { decimal _TicketCount = decimal.Parse(_OnlineSaleTable.Rows[0]["TICKETCOUNT"].ToString()); decimal _SaleCount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_COUNT"].ToString()); decimal _Amount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_AMOUNT"].ToString()); if (_SaleCount != 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("在线订单总计:"); _PrintList.Add(PrintHelper.CreateSideLine(" 订单笔数:", _TicketCount.ToString("F0"))); _PrintList.Add(PrintHelper.CreateSideLine(" 销售数量:", _SaleCount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine(" 销售金额:", _Amount.ToString("F2") + "元")); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("在线订单打印异常:" + ex.Message); } try { _SelectSql = "SELECT ISNULL(SUM(TOTAL_COUNT),0) AS TOTAL_COUNT,ISNULL(SUM(TOTAL_AMOUNT),0) AS TOTAL_AMOUNT " + "FROM T_COMMODITYSALE_NEW WHERE COMMODITY_CODE = '00000000' AND ENDACCOUNT_CODE = '" + EndaccountCode + "'"; DataTable _CommoditySaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleTable.Rows.Count > 0) { decimal _Count = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_COUNT"].ToString()); decimal _Amount = decimal.Parse(_CommoditySaleTable.Rows[0]["TOTAL_AMOUNT"].ToString()); if (_Count != 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("稽核补录总计:"); _PrintList.Add(PrintHelper.CreateSideLine(" 销售数量:", _Count.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine(" 销售金额:", _Amount.ToString("F2") + "元")); _SelectSql = string.Format( @"SELECT ISNULL(SUM(TOTALCOUNT),0) AS TOTALCOUNT,ISNULL(SUM(TOTALSELLAMOUNT),0) AS TOTALSELLAMOUNT FROM T_COMMODITYSALE_EXTAR WHERE COMMODITY_CODE LIKE '00000000' AND FLAG = 5000 AND STARTDATE >= DATETIME('{0}') AND ENDDATE <= DATETIME('{1}') AND SERVERPARTCODE = '{2}' AND SHOPCODE = '{3}' AND MACHINECODE = '{4}'", StartTime.ToString(), EndTime.ToString(), QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode); DataTable _CommoditySaleMobile = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_CommoditySaleMobile.Rows.Count > 0) { decimal _MobileAmount = decimal.Parse(_CommoditySaleMobile.Rows[0]["TOTALSELLAMOUNT"].ToString()); _PrintList.Add(PrintHelper.CreateSideLine(" 移动支付:", _MobileAmount.ToString("F2") + "元")); } } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("稽核补录打印异常:" + ex.Message); } _SelectSql = "SELECT STARTDATE,ENDDATE,SELLWORKER_CODE,ISNULL(TICKET_COUNT,0) AS TICKET_COUNT," + "ISNULL(TOTAL_COUNT,0) AS TOTAL_COUNT,ISNULL(TOTAL_AMOUNT,0) AS TOTAL_AMOUNT,ISNULL(TOTAL_OFFAMOUNT,0)" + " AS TOTAL_OFFAMOUNT,ISNULL(CASHPAY,0) AS CASHPAY,ISNULL(BANKPAY,0) AS BANKPAY,ISNULL(MEMBERPAY,0) AS MEMBERPAY," + "ISNULL(COUPONPAY,0) AS COUPONPAY,ISNULL(MOBILEPAY,0) AS MOBILEPAY,ISNULL(INTERNALPAY,0) AS INTERNALPAY," + "ISNULL(OTHERPAY,0) AS OTHERPAY,ISNULL(CONTRIBUTION_AMOUNT,0) AS CONTRIBUTION_AMOUNT,PAYMENT_DETAILS " + "FROM T_PERSONSELL_NEW WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND ENDACCOUNT_CODE = '" + EndaccountCode + "' ORDER BY WOKER_NUMBER"; DataTable PersonSellTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (PersonSellTable.Rows.Count > 0) { _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add("收银人员明细:"); for (int i = 0; i < PersonSellTable.Rows.Count; i++) { string SellWorkName = ESSupport.DataStorage.DataFunction.QueryPersonName(QualityHelper.serverpartcode, PersonSellTable.Rows[i]["SELLWORKER_CODE"].ToString()); decimal.TryParse(PersonSellTable.Rows[i]["CASHPAY"].ToString(), out cashpay); decimal.TryParse(PersonSellTable.Rows[i]["COUPONPAY"].ToString(), out couponpay); decimal.TryParse(PersonSellTable.Rows[i]["BANKPAY"].ToString(), out bankpay); decimal.TryParse(PersonSellTable.Rows[i]["MOBILEPAY"].ToString(), out mobilepay); decimal.TryParse(PersonSellTable.Rows[i]["MEMBERPAY"].ToString(), out memberpay); //decimal.TryParse(_DataTable.Rows[0]["ENDDATE"].ToString(), out decimal otherpay); decimal.TryParse(PersonSellTable.Rows[i]["INTERNALPAY"].ToString(), out internalpay); decimal.TryParse(PersonSellTable.Rows[i]["TICKET_COUNT"].ToString(), out ticketcount); decimal.TryParse(PersonSellTable.Rows[i]["TOTAL_OFFAMOUNT"].ToString(), out offprice); decimal.TryParse(PersonSellTable.Rows[i]["TOTAL_AMOUNT"].ToString(), out factamount); decimal.TryParse(PersonSellTable.Rows[i]["TOTAL_COUNT"].ToString(), out sellcount); decimal.TryParse(PersonSellTable.Rows[i]["CONTRIBUTION_AMOUNT"].ToString(), out money); //decimal.TryParse(_DataTable.Rows[0]["OTHERPAY"].ToString(), out decimal otherpay); _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add(PrintHelper.CreateSideLine("收银人员:", "[" + PersonSellTable.Rows[i]["SELLWORKER_CODE"] + "]" + SellWorkName)); _PrintList.Add(PrintHelper.CreateSideLine("客单数量:", ticketcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("销售数量:", sellcount.ToString("F2"))); _PrintList.Add(PrintHelper.CreateSideLine("销售金额:", factamount.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("优惠金额:", offprice.ToString("F2") + "元")); //_PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", (cashpay + couponpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", cashpay.ToString("F2") + "元")); if (mobilepay != 0) { _PrintList.Add(PrintHelper.CreateSideLine("移动支付合计:", mobilepay.ToString("F2") + "元")); } //if (bankpay != 0) //{ // _PrintList.Add(PrintHelper.CreateSideLine("银行卡合计:", bankpay.ToString("F2") + "元")); //} if (memberpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine("会员支付合计:", memberpay.ToString("F2") + "元")); } if (couponpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine("优惠券合计:", couponpay.ToString("F2") + "元")); } if (internalpay != 0 || bankpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine("其他支付合计:", (internalpay + bankpay).ToString("F2") + "元")); } //if (internalpay != 0) //{ // _PrintList.Add(PrintHelper.CreateSideLine(QualityHelper.enterprisevip == "1" ? "企业会员合计:" : "内部消费合计:", internalpay.ToString("F2") + "元")); //} _PrintList.Add(PrintHelper.CreateSideLine("现金差额:", (money - cashpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 缴款金额:", money.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 现金交易:", cashpay.ToString("F2") + "元")); _PrintList.Add("-".PadLeft(32, '-')); //_PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", (cashpay + couponpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("现金交易合计:", cashpay.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine(" 现金金额:", cashpay.ToString("F2") + "元")); if (couponpay != 0) { string sql = "SELECT ISNULL(SUM(COUPONPAY),0) AS COUPONPAY,COUPON_TYPE " + "FROM T_SELLMASTER WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND SELLMASTER_DATE BETWEEN DATETIME('" + PersonSellTable.Rows[i]["STARTDATE"] + "') AND DATETIME('" + PersonSellTable.Rows[i]["ENDDATE"] + "') GROUP BY COUPON_TYPE"; try { DataTable _datatable = ESSupport.Lib.SyBaseHelper.QueryOdbc(sql).Tables[0]; if (_datatable.Rows.Count > 0) { _PrintList.Add("优惠券合计:"); for (int l = 0; l < _datatable.Rows.Count; l++) { switch (_datatable.Rows[l]["COUPON_TYPE"].ToString().ToUpper()) { case "VIPCOUPON": _PrintList.Add(PrintHelper.CreateSideLine(" 电子优惠券:", decimal.Parse(_datatable.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; case "BUSCOUPONS": _PrintList.Add(PrintHelper.CreateSideLine(" 大巴券:", decimal.Parse(_datatable.Rows[l]["COUPONPAY"].ToString()).ToString("F2") + "元")); break; case "GROUPPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 团队餐:", decimal.Parse(_datatable.Rows[l]["COUPONPAY"].ToString()).ToString("F2") + "元")); break; case "MEALVOUCHER": _PrintList.Add(PrintHelper.CreateSideLine(" 消费券:", decimal.Parse(_datatable.Rows[i]["couponpay"].ToString()).ToString("F2") + "元")); break; } } } } catch (Exception ex) { } } _PrintList.Add(PrintHelper.CreateSideLine("移动支付合计:", mobilepay.ToString("F2") + "元")); if (mobilepay != 0 && !string.IsNullOrWhiteSpace(PersonSellTable.Rows[0]["PAYMENT_DETAILS"].ToString())) { string[] _strArrayList = PersonSellTable.Rows[i]["PAYMENT_DETAILS"].ToString().Trim().Split(','); for (int j = 0; j < _strArrayList.Count(); j++) { string[] _strArray = _strArrayList[j].Trim().Split(':'); if (_strArray.Count() > 1) { switch (_strArray[0].ToUpper()) { case "WECHATPAY": _PrintList.Add(PrintHelper.CreateSideLine("  微信支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "ALIPAY": _PrintList.Add(PrintHelper.CreateSideLine(" 支付宝支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "QPAY": _PrintList.Add(PrintHelper.CreateSideLine("  QQ钱包:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "JDPAY": _PrintList.Add(PrintHelper.CreateSideLine("  京东钱包:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "BESTPAY": _PrintList.Add(PrintHelper.CreateSideLine("   翼支付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; case "UNIONPAY": _PrintList.Add(PrintHelper.CreateSideLine("   云闪付:", decimal.Parse(_strArray[1]).ToString("F2") + "元")); break; } } } } _PrintList.Add(PrintHelper.CreateSideLine("其他支付合计:", (internalpay + bankpay).ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("  银行卡支付:", bankpay.ToString("F2") + "元")); if (internalpay != 0) { _PrintList.Add(PrintHelper.CreateSideLine(QualityHelper.enterprisevip == "1" ? "  企业会员支付:" : "  内部消费支付:", internalpay.ToString("F2") + "元")); } _PrintList.Add(" "); _PrintList.Add(PrintHelper.CreateSideLine("工班交易合计:", (cashpay + couponpay + bankpay + mobilepay + internalpay + memberpay).ToString("f2") + "元")); } } PrintHelper.PrintList(_PrintList, int.Parse(QualityHelper.jbprint_num), int.Parse(QualityHelper.paper_walk), false); } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("结账总单打印失败:" + ex.ToString()); } } #endregion #region 方法 -> 生成账期日结营收数据 /// /// 生成账期日结营收数据 /// /// 缴款金额 /// 结账人工号 public static bool CheckOutData(decimal Contribution, string EndpersonCode,DateTime endDate) { string _EndDate = endDate.ToString(); string _StartDate = ""; string _EndaccountCode = ""; string _ClassStartDate = ""; string _SellWorkerCode = EndpersonCode; string _EndAccountID = ""; string _PersonSellID = ""; try { //获取当前账期信息(账期唯一标识编码、账期开始时间) DataTable table_EndAccount = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ENDACCOUNT_ID,ENDACCOUNT_CODE,STARTDATE FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDACCOUNT_TYPE = 1 AND ENDDATE IS NULL").Tables[0]; _EndAccountID = table_EndAccount.Rows[0]["ENDACCOUNT_ID"].ToString(); _StartDate = table_EndAccount.Rows[0]["STARTDATE"].ToString(); _EndaccountCode = table_EndAccount.Rows[0]["ENDACCOUNT_CODE"].ToString(); //获取当前工班信息(收银员、工班开始时间) DataTable table_PersonSell = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT PERSONSELL_ID,STARTDATE,SELLWORKER_CODE FROM T_PERSONSELL_NEW WHERE ENDACCOUNT_CODE = '{_EndaccountCode}' AND SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDDATE IS NULL ORDER BY PERSONSELL_ID DESC").Tables[0]; _PersonSellID = table_PersonSell.Rows[0]["PERSONSELL_ID"].ToString(); _ClassStartDate = table_PersonSell.Rows[0]["STARTDATE"].ToString(); _SellWorkerCode = table_PersonSell.Rows[0]["SELLWORKER_CODE"].ToString(); //获取账期内已结束工班的缴款金额之和 decimal contributionAmount = 0; DataTable table_Contribution = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ISNULL(SUM(CONTRIBUTION_AMOUNT),0) AS CONTRIBUTION_AMOUNT FROM T_PERSONSELL_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDACCOUNT_CODE = '{_EndaccountCode}' AND ENDDATE IS NOT NULL").Tables[0]; decimal.TryParse(table_Contribution.Rows[0]["CONTRIBUTION_AMOUNT"].ToString(), out contributionAmount); //开始进行结账操作 if (!GetDateData(_EndaccountCode, _StartDate, _EndDate, EndpersonCode, Contribution, _EndAccountID)) { return false; } ESSupport.Lib.LogHelper.WriteServiceLog("日结账操作完成。\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};结账时间:{_EndDate}】\r\n" + $"///-----------------------------------记录完成----------------------------------///"); try { //统计账期内异常稽核情况 AbnormalRecord.GetCheckoutEx(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, Convert.ToDateTime(_StartDate), Convert.ToDateTime(_EndDate)); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"账期内异常稽核记录统计失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};结账时间:{_EndDate}】"); } try { //结账时生成账期相关数据文件压缩包 ESSupport.ZipFile.PosDataZipFile zip_PosDataZipFile = new ESSupport.ZipFile.PosDataZipFile( QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode); zip_PosDataZipFile.CreateEndDataZipFile(_EndaccountCode, DateTime.Parse(_StartDate), DateTime.Parse(_EndDate)); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"账期相关数据文件压缩包打包失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};结账时间:{_EndDate}】"); } return true; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"日结账操作失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};结账时间:{_EndDate}】"); return false; } } #endregion #region 方法 -> 生成单品报表 /// /// 生成单品报表 /// /// 开始时间 /// 结束时间 public static void GetProduct(string endaccount_code, string startdate, string enddate, string productType = "") { try { DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT A.WOKER_NUMBER,A.COMMODITY_NAME,A.COMMODITY_CODE, SUM(A.TOTAL_COUNT) AS TOTALCOUNT,SUM(A.TOTAL_AMOUNT) AS TOTALSELLAMOUNT FROM T_COMMODITYSALE_NEW A WHERE A.ENDACCOUNT_CODE = '{endaccount_code}' {(productType == "" ? "" : $@" AND A.COMMODITY_TYPE = '{productType}' ")} GROUP BY A.COMMODITY_NAME,A.COMMODITY_CODE,A.WOKER_NUMBER").Tables[0]; List _PrintList = new List(); _PrintList.Add(PrintHelper.CreateCenterLine("单品销售明细")); _PrintList.Add(PrintHelper.CreateSideLine("服务区名:", QualityHelper.serverpartname)); _PrintList.Add(PrintHelper.CreateSideLine("门店名称:", ESSupport.DataStorage.DataFunction.QueryShopName(QualityHelper.serverpartcode, QualityHelper.shopcode))); _PrintList.Add(PrintHelper.CreateSideLine("开始时间:", startdate)); _PrintList.Add(PrintHelper.CreateSideLine("结束时间:", enddate)); _PrintList.Add("-".PadLeft(32, '-')); decimal pricecount = 0; decimal count = 0; for (int i = 0; i < _DataTable.Rows.Count; i++) { _PrintList.Add("商品名称:" + _DataTable.Rows[i]["COMMODITY_NAME"].ToString()); _PrintList.Add(PrintHelper.CreateSideLine("销售数量:" + decimal.Parse(_DataTable.Rows[i]["TOTALCOUNT"].ToString()).ToString("F2") + "", "销售金额:" + decimal.Parse(_DataTable.Rows[i]["TOTALSELLAMOUNT"].ToString()).ToString("F2") + "元")); _PrintList.Add(" "); if (_DataTable.Rows[i]["TOTALSELLAMOUNT"].ToString() != "") { pricecount = pricecount + decimal.Parse(_DataTable.Rows[i]["TOTALSELLAMOUNT"].ToString()); } if (_DataTable.Rows[i]["TOTALCOUNT"].ToString() != "") { count = count + decimal.Parse(_DataTable.Rows[i]["TOTALCOUNT"].ToString()); } } _PrintList.Add("-".PadLeft(32, '-')); _PrintList.Add(PrintHelper.CreateSideLine("合计金额:", pricecount.ToString("F2") + "元")); _PrintList.Add(PrintHelper.CreateSideLine("合计数量:", count.ToString("F2"))); PrintHelper.PrintList(_PrintList, int.Parse(QualityHelper.xpprint_num), int.Parse(QualityHelper.paper_walk), false); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("单品报表打印失败:" + ex.Message); } //System.GC.Collect(); } #endregion #region 方法 -> 生成本地交班单文件 /// /// 生成本地交班单文件 /// /// 缴款金额 /// 上一工班缴款金额 /// 当班人员工号 /// 接班人员工号 /// 当班结束时间 /// 账期编号 /// 当班开始时间 public static void GetShift(decimal money, decimal contributionAmount, string person1, string person2, string time, string endaccountCode, string classStartDate) { try { //生成待打印的交班单信息 List _PrintList = new List { PrintHelper.CreateCenterLine("收银员交班单"), PrintHelper.CreateSideLine("当班收银员:", $"[{person1}]"), PrintHelper.CreateRightLine( ESSupport.DataStorage.DataFunction.QueryPersonName(QualityHelper.serverpartcode, person1)), PrintHelper.CreateSideLine("门店编号:", $"[{QualityHelper.shopcode}]"), PrintHelper.CreateRightLine( ESSupport.DataStorage.DataFunction.QueryShopName(QualityHelper.serverpartcode, QualityHelper.shopcode)), PrintHelper.CreateSideLine("", QualityHelper.machinecode), "当班开始时间:", PrintHelper.CreateRightLine(classStartDate), "当班结束时间:", PrintHelper.CreateRightLine(time), "-".PadLeft(32, '-'), PrintHelper.CreateSideLine("交班现金总额:", money.ToString("F2") + "元"), PrintHelper.CreateSideLine("  接班金额:", contributionAmount.ToString("F2") + "元"), PrintHelper.CreateSideLine("  当班金额:", (money - contributionAmount).ToString("F2") + "元"), "双方交接确认无误后请在下面签字", " ", PrintHelper.CreateLeftLine("当班人:", '_'), " ", PrintHelper.CreateLeftLine("接班人:", '_') }; //通过LPT打印机打印交班单 PrintHelper.PrintList(_PrintList, int.Parse(QualityHelper.jbprint_num), int.Parse(QualityHelper.paper_walk), false); } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("交班单打印失败:" + ex.Message); } } #endregion #region 方法 -> 生成收银交班数据 /// /// 生成收银交班数据 /// /// 缴款金额 /// 接班人员工号 public static bool ShiftData(decimal price, string preson) { try { string endtime = DateTime.Now.ToString(); DataTable _DataTable = new DataTable(); string _EndaccountCode = ""; string _ClassStartDate = ""; string _SellWorkerCode = preson; //获取当前账期唯一编号 string _SelectSql = "SELECT ENDACCOUNT_CODE FROM T_ENDACCOUNT_NEW WHERE STARTDATE = " + "( SELECT MAX(STARTDATE) FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE='" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND ENDACCOUNT_TYPE = 1 AND ENDDATE IS NULL )"; _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { _EndaccountCode = _DataTable.Rows[0]["ENDACCOUNT_CODE"].ToString(); } //获取当前班期开始时间收银员编号 _SelectSql = "SELECT PERSONSELL_ID,STARTDATE,SELLWORKER_CODE FROM T_PERSONSELL_NEW " + "WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE='" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND ENDDATE IS NULL ORDER BY PERSONSELL_ID DESC"; _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { _ClassStartDate = _DataTable.Rows[0]["STARTDATE"].ToString(); _SellWorkerCode = _DataTable.Rows[0]["SELLWORKER_CODE"].ToString(); } //获取之前班期缴款金额之和 _SelectSql = "SELECT SUM(CONTRIBUTION_AMOUNT) FROM T_PERSONSELL_NEW " + "WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND " + "MACHINECODE = '" + QualityHelper.machinecode + "' AND " + "ENDACCOUNT_CODE = '" + _EndaccountCode + "' AND " + "ENDDATE IS NOT NULL"; decimal contributionAmount = 0; _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { //contributionAmount = decimal.Parse(_DataTable.Rows[0][0].ToString()); decimal.TryParse(_DataTable.Rows[0][0].ToString(), out contributionAmount); } if (!GetShiftData(endtime, preson, price)) { return false; } return true; } catch { return false; } } #endregion #region 方法 -> 结账 /// /// 结账 /// /// 账期标识编码 /// 账期开始时间 /// 账期结束时间 /// 结账人工号 /// 缴款金额 /// 账期数据ID,用于账期数据文本备份 /// private static bool GetDateData(string EndaccountCode, string StartDate, string EndDate, string preson, decimal price, string endaccountID) { try { //开始正式结账交班前对已完成的工班进行交易数据校验更新,避免存在移动支付交易记录遗漏 PosReportHelper.UpdatePersonsell(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, EndaccountCode); //判断是否存在未交班信息 DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT 1 FROM T_PERSONSELL_NEW WHERE ENDACCOUNT_CODE='{EndaccountCode}' AND ENDDATE IS NULL").Tables[0]; if (_DataTable.Rows.Count > 0) { //存在未完成的交班信息,进行结账前交班操作 if (!GetShiftData(EndDate, preson, price)) { return false; } } #region 结账表 //获取账期总客单数、总销售数、总销售额、支付方式详情金额 _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(*) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY, ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY, ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY, ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{StartDate}') AND DATETIME('{EndDate}')").Tables[0]; decimal TicketCount = 0; decimal SellMasterCount = 0; decimal SellMasterOffprice = 0; decimal SellMasterAmount = 0; decimal CashPay = 0; decimal BankPay = 0; decimal MemberPay = 0; decimal CouponPay = 0; decimal MobilePay = 0; decimal InternalPay = 0; decimal OtherPay = 0; if (_DataTable.Rows.Count > 0) { decimal.TryParse(_DataTable.Rows[0]["ticketcount"].ToString(), out TicketCount); decimal.TryParse(_DataTable.Rows[0]["sellmaster_count"].ToString(), out SellMasterCount); decimal.TryParse(_DataTable.Rows[0]["sellmaster_offprice"].ToString(), out SellMasterOffprice); decimal.TryParse(_DataTable.Rows[0]["sellmaster_amount"].ToString(), out SellMasterAmount); decimal.TryParse(_DataTable.Rows[0]["cashpay"].ToString(), out CashPay); decimal.TryParse(_DataTable.Rows[0]["bankpay"].ToString(), out BankPay); decimal.TryParse(_DataTable.Rows[0]["memberpay"].ToString(), out MemberPay); decimal.TryParse(_DataTable.Rows[0]["couponpay"].ToString(), out CouponPay); decimal.TryParse(_DataTable.Rows[0]["mobilepay"].ToString(), out MobilePay); decimal.TryParse(_DataTable.Rows[0]["internalpay"].ToString(), out InternalPay); decimal.TryParse(_DataTable.Rows[0]["otherpay"].ToString(), out OtherPay); } //获取移动支付详情 _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ISNULL(SUM(MOBILEPAY),0) AS COUNT,PAYMENT_TYPE FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{StartDate}') AND DATETIME('{EndDate}') AND PAYMENT_TYPE IS NOT NULL GROUP BY PAYMENT_TYPE").Tables[0]; string payment_details = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { if (_DataTable.Rows[i]["payment_type"].ToString() != "") { payment_details += (payment_details == "" ? "" : ",") + _DataTable.Rows[i]["payment_type"] + ":" + _DataTable.Rows[i]["count"]; } } //if (payment_details.Length > 0) //{ // payment_details = payment_details.Substring(0, payment_details.Length - 1); //} try { DataTable _BusCouponTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(1) AS SELLMASTER_COUNT, ISNULL(SUM(B.SELLDETAILS_AMOUNT * -1),0) AS SELLMASTER_AMOUNT FROM T_SELLMASTER A,T_SELLDETAILS B WHERE A.SERVERPARTCODE='{QualityHelper.serverpartcode}' AND A.SHOPCODE='{QualityHelper.shopcode}' AND A.MACHINECODE='{QualityHelper.machinecode}' AND A.SELLMASTER_DATE BETWEEN DATETIME('{StartDate}') AND DATETIME('{EndDate}') AND A.SELLMASTER_CODE = B.SELLMASTER_CODE AND B.COMMODITY_NAME = '大巴券优惠'").Tables[0]; if (_BusCouponTable.Rows.Count > 0) { //decimal _TicketCount = decimal.Parse(_OnlineSaleTable.Rows[0]["TICKETCOUNT"].ToString()); decimal _SaleCount = decimal.Parse(_BusCouponTable.Rows[0]["SELLMASTER_COUNT"].ToString()); decimal _Amount = decimal.Parse(_BusCouponTable.Rows[0]["SELLMASTER_AMOUNT"].ToString()); if (_SaleCount != 0) { payment_details += (payment_details == "" ? "" : ",") + "BUSCOUPONS:" + _Amount.ToString("F2"); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("大巴券结账异常:" + ex.Message); } try { //获取账期内线上订单客单数、交易数量、交易金额 DataTable _OnlineSaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(*) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY, ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY, ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY, ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{StartDate}') AND DATETIME('{EndDate}') AND UPPER(COUPON_TYPE) = UPPER('ONLINEPAY')").Tables[0]; if (_OnlineSaleTable.Rows.Count > 0) { decimal _TicketCount = decimal.Parse(_OnlineSaleTable.Rows[0]["TICKETCOUNT"].ToString()); decimal _SaleCount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_COUNT"].ToString()); decimal _Amount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_AMOUNT"].ToString()); if (_SaleCount != 0) { payment_details += (payment_details == "" ? "" : ",") + "ONLINEPAY:" + _Amount.ToString("F2"); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("在线订单结账异常:" + ex.Message); } List SQLStringList = new List(); List DataTransferSaleList = new List(); if (ESSupport.Lib.SyBaseHelper.QueryOdbc($@"SELECT 1 FROM T_COMMODITYSALE_NEW WHERE ENDACCOUNT_CODE ='{EndaccountCode}'").Tables[0].Rows.Count == 0) { PosReportHelper.CommoditySale(EndaccountCode, QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(StartDate), DateTime.Parse(EndDate), out SQLStringList, out DataTransferSaleList); } int audit_state = 0; int cigarette_state = 0; int promotion_state = 0; int onlinebill_state = 0; //收银稽查记录检测 if (PosReportHelper.EndaccountAuditState(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(StartDate), DateTime.Parse(EndDate))) { audit_state = 1; } //香烟数据检测 if (PosReportHelper.EndaccountCigaretteState(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(StartDate), DateTime.Parse(EndDate))) { cigarette_state = 1; } //存在有效促销活动时检测促销记录 if (Common.PosControl.SalesPromoteList != null && Common.PosControl.SalesPromoteList.Count > 0 && PosReportHelper.EndaccountPromotionState(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(StartDate), DateTime.Parse(EndDate))) { promotion_state = 1; } //已开启在线订单功能时检测在线订单记录 if (QualityHelper.OnlineOrder == "1" && PosReportHelper.EndaccountOnlineBillState(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(StartDate), DateTime.Parse(EndDate))) { onlinebill_state = 1; } //生成结账数据更新保存语句 SQLStringList.Add($@"UPDATE T_ENDACCOUNT_NEW SET ENDDATE=DATETIME('{EndDate}'),ENDPERSON_CODE='{preson}', TICKET_COUNT={TicketCount},TOTAL_COUNT={SellMasterCount}, TOTAL_AMOUNT={SellMasterAmount},TOTAL_OFFAMOUNT={SellMasterOffprice}, CASHPAY={CashPay},BANKPAY={BankPay},MEMBERPAY={MemberPay}, COUPONPAY={CouponPay},MOBILEPAY={MobilePay},INTERNALPAY={InternalPay}, CONTRIBUTION_AMOUNT={price},PAYMENT_DETAILS='{payment_details}', AUDIT_STATE = {audit_state},CIGARETTE_STATE = {cigarette_state}, PROMOTION_STATE = {promotion_state},ONLINEBILL_STATE = {onlinebill_state} WHERE ENDACCOUNT_CODE='{EndaccountCode}'"); //执行结账数据保存语句 ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(SQLStringList); //结账完成,设置交班数据为待上传状态 ESSupport.Lib.SyBaseHelper.ExecuteSqlTran( $@"UPDATE T_PERSONSELL_NEW SET TRANSFER_STATE = 0 WHERE ENDACCOUNT_CODE = '{EndaccountCode}' "); #endregion } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"日结账操作失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};账期时间:{EndDate}】"); return false; } return true; //System.GC.Collect(); } #endregion #region 方法 -> 交班 /// /// 收银员交班 /// /// /// /// /// private static bool GetShiftData(string EndTime, string preson, decimal price) { try { string _SelectSql = ""; string _StartDate = ""; string _EndaccountCode = ""; string _EndAccountID = ""; List _DataCommoditySaleNewList = new List(); List _DataCommoditySaleExtarList = new List(); List _DataTransferSaleList = new List(); List _SQLStringList = new List(); DataTable _DataTable = new DataTable(); try { ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(new List { //对单品表数据扫描传输标识字段进行补全 @"UPDATE T_COMMODITYSALE_NEW A SET A.COMMODITY_SYMBOL = B.COMMODITY_SYMBOL FROM T_COMMODITYEX B WHERE A.COMMODITY_CODE = B.COMMODITY_CODE AND A.COMMODITY_SYMBOL IS NULL" , //对流水表数据扫描传输标识、商品类型字段进行补全 @"UPDATE T_SELLDETAILS A SET A.COMMODITY_TYPE = B.COMMODITY_TYPE, A.COMMODITY_SYMBOL = B.COMMODITY_SYMBOL FROM T_COMMODITYEX B WHERE A.COMMODITY_CODE = B.COMMODITY_CODE AND A.COMMODITY_SYMBOL IS NULL AND A.COMMODITY_TYPE IS NULL" }); } catch (Exception ex) { ESSupport.Lib.SyBaseHelper.QueryOdbc($"单品表及流水表商品类型、扫码传输标识字段补全失败。原因:{ex.Message}"); } #region 获取数据 //获取当前账期开始时间 DataTable table_EndAccount = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ENDACCOUNT_ID,ENDACCOUNT_CODE,STARTDATE FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDACCOUNT_TYPE = 1 AND ENDDATE IS NULL ").Tables[0]; if (table_EndAccount.Rows.Count > 0) { _EndAccountID = table_EndAccount.Rows[0]["endaccount_id"].ToString(); _StartDate = table_EndAccount.Rows[0]["STARTDATE"].ToString(); _EndaccountCode = table_EndAccount.Rows[0]["ENDACCOUNT_CODE"].ToString(); } string _PersonStartDate = ""; string _SellWorkerCode = ""; string _PersonSellID = ""; string _WokerNumber = ""; //获取当前班期收银员工号、工班开始时间、工班顺序号 DataTable table_PersonSell = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT PERSONSELL_ID,SELLWORKER_CODE, STARTDATE,WOKER_NUMBER FROM T_PERSONSELL_NEW WHERE ENDACCOUNT_CODE='{_EndaccountCode}' AND ENDDATE IS NULL ORDER BY PERSONSELL_ID ").Tables[0]; if (table_PersonSell.Rows.Count > 0) { _PersonSellID = table_PersonSell.Rows[0]["PERSONSELL_ID"].ToString(); _SellWorkerCode = table_PersonSell.Rows[0]["SELLWORKER_CODE"].ToString(); _PersonStartDate = table_PersonSell.Rows[0]["STARTDATE"].ToString(); _WokerNumber = table_PersonSell.Rows[0]["WOKER_NUMBER"].ToString(); } //获取当前账期已交班缴款金额 decimal _TotalContribution = 0; _SelectSql = "SELECT ISNULL(SUM(CONTRIBUTION_AMOUNT),0) AS CONTRIBUTION_AMOUNT FROM T_PERSONSELL_NEW " + "WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "' AND MACHINECODE = '" + QualityHelper.machinecode + "' AND ENDACCOUNT_CODE = '" + _EndaccountCode + "' AND ENDDATE IS NOT NULL "; _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { _TotalContribution = decimal.Parse(_DataTable.Rows[0]["CONTRIBUTION_AMOUNT"].ToString()); } #endregion if (ESSupport.Lib.SyBaseHelper.QueryOdbc($@"SELECT 1 FROM T_COMMODITYSALE_NEW WHERE ENDACCOUNT_CODE ='{_EndaccountCode}'").Tables[0].Rows.Count > 0) { PosReportHelper.CommoditySale(_EndaccountCode, QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Parse(_PersonStartDate), DateTime.Parse(EndTime), out _SQLStringList, out _DataTransferSaleList); } #region 交班表 //获取工班总客单数、总销售数、总销售额、支付方式详情金额 _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(*) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY,ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY,ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY,ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND UPPER(SELLWORKER_CODE)=UPPER('{_SellWorkerCode}')AND SELLMASTER_DATE BETWEEN DATETIME('{_PersonStartDate}') AND DATETIME('{EndTime}') ").Tables[0]; decimal TicketCount = 0; decimal SellMasterCount = 0; decimal SellMasterOffprice = 0; decimal SellMasterAmount = 0; decimal CashPay = 0; decimal BankPay = 0; decimal MemberPay = 0; decimal CouponPay = 0; decimal MobilePay = 0; decimal InternalPay = 0; decimal OtherPay = 0; if (_DataTable.Rows.Count > 0) { decimal.TryParse(_DataTable.Rows[0]["TICKETCOUNT"].ToString(), out TicketCount); decimal.TryParse(_DataTable.Rows[0]["SELLMASTER_COUNT"].ToString(), out SellMasterCount); decimal.TryParse(_DataTable.Rows[0]["SELLMASTER_OFFPRICE"].ToString(), out SellMasterOffprice); decimal.TryParse(_DataTable.Rows[0]["SELLMASTER_AMOUNT"].ToString(), out SellMasterAmount); decimal.TryParse(_DataTable.Rows[0]["CASHPAY"].ToString(), out CashPay); decimal.TryParse(_DataTable.Rows[0]["BANKPAY"].ToString(), out BankPay); decimal.TryParse(_DataTable.Rows[0]["MEMBERPAY"].ToString(), out MemberPay); decimal.TryParse(_DataTable.Rows[0]["COUPONPAY"].ToString(), out CouponPay); decimal.TryParse(_DataTable.Rows[0]["MOBILEPAY"].ToString(), out MobilePay); decimal.TryParse(_DataTable.Rows[0]["INTERNALPAY"].ToString(), out InternalPay); decimal.TryParse(_DataTable.Rows[0]["OTHERPAY"].ToString(), out OtherPay); } _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT ISNULL(SUM(MOBILEPAY),0) AS COUNT,PAYMENT_TYPE FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND UPPER(SELLWORKER_CODE)=UPPER('{_SellWorkerCode}') AND SELLMASTER_DATE BETWEEN DATETIME('{_PersonStartDate}') AND DATETIME('{EndTime}') AND PAYMENT_TYPE IS NOT NULL GROUP BY PAYMENT_TYPE").Tables[0]; string payment_details = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { if (_DataTable.Rows[i]["payment_type"].ToString() != "") { payment_details += (payment_details == "" ? "" : ",") + _DataTable.Rows[i]["payment_type"] + ":" + _DataTable.Rows[i]["count"]; } } try { DataTable _BusCouponTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(1) AS SELLMASTER_COUNT, ISNULL(SUM(B.SELLDETAILS_AMOUNT * -1),0) AS SELLMASTER_AMOUNT FROM T_SELLMASTER A,T_SELLDETAILS B WHERE A.SERVERPARTCODE='{QualityHelper.serverpartcode}' AND A.SHOPCODE='{QualityHelper.shopcode}' AND A.MACHINECODE='{QualityHelper.machinecode}' AND A.SELLMASTER_DATE BETWEEN DATETIME('{_PersonStartDate}') AND DATETIME('{EndTime}') AND A.SELLMASTER_CODE = B.SELLMASTER_CODE AND B.COMMODITY_NAME = '大巴券优惠'").Tables[0]; if (_BusCouponTable.Rows.Count > 0) { //decimal _TicketCount = decimal.Parse(_OnlineSaleTable.Rows[0]["TICKETCOUNT"].ToString()); decimal _SaleCount = decimal.Parse(_BusCouponTable.Rows[0]["SELLMASTER_COUNT"].ToString()); decimal _Amount = decimal.Parse(_BusCouponTable.Rows[0]["SELLMASTER_AMOUNT"].ToString()); if (_SaleCount != 0) { payment_details += (payment_details == "" ? "" : ",") + "BUSCOUPONS:" + _Amount.ToString("F2"); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("大巴券结账异常:" + ex.Message); } try { DataTable _OnlineSaleTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(*) AS TICKETCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLMASTER_COUNT, ISNULL(SUM(SELLMASTER_OFFPRICE),0) AS SELLMASTER_OFFPRICE, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS SELLMASTER_AMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY, ISNULL(SUM(BANKPAY),0) AS BANKPAY, ISNULL(SUM(MEMBERPAY),0) AS MEMBERPAY, ISNULL(SUM(COUPONPAY),0) AS COUPONPAY, ISNULL(SUM(MOBILEPAY),0) AS MOBILEPAY, ISNULL(SUM(INTERNALPAY),0) AS INTERNALPAY, ISNULL(SUM(OTHERPAY),0) AS OTHERPAY FROM T_SELLMASTER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND SHOPCODE='{QualityHelper.shopcode}' AND MACHINECODE='{QualityHelper.machinecode}' AND SELLMASTER_DATE BETWEEN DATETIME('{_PersonStartDate}') AND DATETIME('{EndTime}') AND UPPER(COUPON_TYPE) = UPPER('ONLINEPAY')").Tables[0]; if (_OnlineSaleTable.Rows.Count > 0) { //decimal _TicketCount = decimal.Parse(_OnlineSaleTable.Rows[0]["TICKETCOUNT"].ToString()); decimal _SaleCount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_COUNT"].ToString()); decimal _Amount = decimal.Parse(_OnlineSaleTable.Rows[0]["SELLMASTER_AMOUNT"].ToString()); if (_SaleCount != 0) { payment_details += (payment_details == "" ? "" : ",") + "ONLINEPAY:" + _Amount.ToString("F2"); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("在线订单结账异常:" + ex.Message); } //交班表插入数据 ESSupport.Lib.SyBaseHelper.ExecuteSqlTran( $@"UPDATE T_PERSONSELL_NEW SET ENDDATE = DATETIME('{EndTime}'),TICKET_COUNT = {TicketCount}, TOTAL_COUNT = {SellMasterCount},TOTAL_AMOUNT = {SellMasterAmount}, TOTAL_OFFAMOUNT = {SellMasterOffprice},CASHPAY = {CashPay}, BANKPAY = {BankPay},MEMBERPAY = {MemberPay}, COUPONPAY = {CouponPay},MOBILEPAY = {MobilePay}, OTHERPAY = {OtherPay},INTERNALPAY = {InternalPay}, CONTRIBUTION_AMOUNT = {(price - _TotalContribution)}, PAYMENT_DETAILS = '{payment_details}',TRANSFER_STATE = 1 WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDDATE IS NULL "); #endregion ESSupport.Lib.LogHelper.WriteServiceLog("交班操作完成。\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};交班时间:{EndTime}】\r\n" + $"///-----------------------------------记录完成----------------------------------///"); return true; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"交班操作失败。原因:{ex.Message}\r\n" + $"【服务区:{QualityHelper.serverpartname};门店:{QualityHelper.shopname};" + $"收银机号:{QualityHelper.machinecode};交班时间:{EndTime}】\r\n"); return false; } } #endregion #region 方法 -> 打印交班单结账单 /// /// 打印交班单结账单 /// /// 是否交班 /// 缴款金额 /// 接班金额 /// 结账人编号 /// 结账时间 /// 账期编号 /// 班期开始时间 /// 账期开始时间 /// 当班收银员工号 private static void PrintCheckoutSlip(bool IsShift, decimal Contribution, decimal takeOverPrice, string EndpersonCode, string _EndDate, string EndaccountCode, string _ClassStartDate, string _StartDate, string PersonCode) { GetShift(Contribution, takeOverPrice, PersonCode, EndpersonCode, _EndDate, EndaccountCode, _ClassStartDate); if (!IsShift) { GetCheckOut(EndaccountCode); PrintHelper.PrintList(PosReportHelper.CreateMobilePayAccount( QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, DateTime.Today.AddDays(-1)), 1, 6, false); } } #endregion } }