using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace PosDataTest
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
#region 属性
///
/// 账期唯一标识编码
///
public string EndAccountCode { get; set; }
///
/// 账期开始时间
///
public DateTime EndAccountStartDate { get; set; }
///
/// 商品信息清单
///
List CommodityModelList { get; set; }
///
/// 数据下载线程
///
System.Threading.Thread PosDataDownloadThread { get; set; }
///
/// 模拟交易数据添加线程
///
System.Threading.Thread AddDataThread { get; set; }
///
/// Socket客户端批量执行线程
///
System.Threading.Thread SocketThread { get; set; }
///
/// 数据下载实例
///
ESSupport.Transfer.PosDataDownload DataDownload { get; set; }
ESSupport.Transfer.PosDataUpload DataUpload { get; set; }
///
/// Socket客户端列表
///
System.Collections.Concurrent.ConcurrentDictionary PosSocketList { get; set; }
///
/// 界面日志记录
///
System.Collections.ObjectModel.ObservableCollection TransResultTable { get; set; }
#endregion
///
/// Socket客户端模拟连接身份标识信息
///
private class SocketConnectInfo
{
public string ServerpartCode { get; set; }
public string ShopCode { get; set; }
public string MachineCode { get; set; }
}
public MainWindow()
{
InitializeComponent();
if (string.IsNullOrWhiteSpace(EndAccountCode))
{
Sales.IsEnabled = false;
EndAccount.IsEnabled = false;
}
}
#region 模拟收银机登录及初始化
///
/// 登录及初始化
///
///
///
private void Login_Click(object sender, RoutedEventArgs e)
{
QualityHelper.GetConfiguration();
ESSupport.Lib.LogHelper.WriteServiceLog("正在通过云端接口获取服务区门店对应业主参数配置。");
//通过云端接口获取当前服务区门店对应的业主参数配置(软件名称、扫码上传数据地址、业主单位名称、业主单位ID标识)
//ESSupport.Pos.ThreadHelper.ConfigurationByCloud($"http://{QualityHelper.dbip}:{QualityHelper.serviceport}/Service.asmx");
//数据上传实例化
DataUpload = new ESSupport.Transfer.PosDataUpload(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, "10.103.1.8", "8001");
DataUpload.NotifyEvent += DataUpload_NotifyEvent;
//数据下发实例化
DataDownload = new ESSupport.Transfer.PosDataDownload(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, "http://pos.eshangtech.com:8900/webApi_publish");
DataDownload.NotifyEvent += DataDownload_NotifyEvent;
QualityHelper.sellworkercode = "0001";
int int_Result = PersonLogin("0001", out string sellWorkerCode);
if (int_Result == 0)
{
Sales.IsEnabled = true;
EndAccount.IsEnabled = true;
dp_Start.IsEnabled = false;
((Button)sender).Content = "登录成功";
}
else
{
MessageBox.Show($"登录失败,原因:{int_Result}");
}
}
#endregion
#region 批量模拟机器Socket通讯
///
/// 消息通知服务控制
///
///
///
private void Socket_Click(object sender, RoutedEventArgs e)
{
if (PosSocketList == null)
{
//初始化Socket客户端列表
PosSocketList = new System.Collections.Concurrent.ConcurrentDictionary();
}
#region Socket客户端机器列表
List list_SocketConnect = new List();
list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "888888", ShopCode = "042002", MachineCode = "9999" });
#endregion
#region 初始化Socket客户端
for (int i = 0; i < list_SocketConnect.Count; i++)
{
//
if (!PosSocketList.ContainsKey(list_SocketConnect[i].ServerpartCode + list_SocketConnect[i].ShopCode + list_SocketConnect[i].MachineCode))
{
ESSupport.Transfer.PosSuperSocketClient _SocketClient = new ESSupport.Transfer.PosSuperSocketClient(
$"ws://10.103.1.8:7199/?ServerpartCode={list_SocketConnect[i].ServerpartCode}&ShopCode={list_SocketConnect[i].ShopCode}&MachineCode={list_SocketConnect[i].MachineCode}",
list_SocketConnect[i].ServerpartCode, list_SocketConnect[i].ShopCode, list_SocketConnect[i].MachineCode, "10.103.1.8", "8001");
_SocketClient.NotifyEvent += PosSocket_NotifyEvent;
PosSocketList.TryAdd(list_SocketConnect[i].ServerpartCode + list_SocketConnect[i].ShopCode + list_SocketConnect[i].MachineCode, _SocketClient);
}
}
#endregion
#region Socket客户端连接启动线程
new System.Threading.Thread(() =>
{
foreach (KeyValuePair item in PosSocketList)
{
if (!item.Value.ClientRuning)
{
item.Value.Start();
}
}
})
{ IsBackground = true }.Start();
#endregion
#region 界面在线数量显示统计线程
if (SocketThread == null || !SocketThread.IsAlive)
{
SocketThread = new System.Threading.Thread(() =>
{
do
{
int int_Online = 0;
if (PosSocketList.Count > 0)
{
int_Online = PosSocketList.Values.Where(p => p.SocketState == 1).Count();
}
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (System.Threading.ThreadStart)delegate
{
//要执行的代码
txtSocketMessage.Text = $"收银机总数:{PosSocketList.Count};当前在线数:{int_Online}";
});
System.Threading.Thread.Sleep(5 * 1000);
} while (true);
})
{ IsBackground = true };
SocketThread.Start();
}
#endregion
}
#endregion
#region 模拟添加流水数据
///
/// 添加交易流水
///
///
///
private void Sales_Click(object sender, RoutedEventArgs e)
{
if (AddDataThread == null || !AddDataThread.IsAlive)
{
AddDataThread = new System.Threading.Thread(() =>
{
int int_AddCount = new Random(Guid.NewGuid().GetHashCode()).Next(1, 20);
for (int i = 0; i < int_AddCount; i++)
{
TransResultBeginInvoke(DateTime.Now, $"正在添加第{i + 1}条数据,共{int_AddCount}条。");
DateTime time_MasterTime = ESSupport.Method.DateTimeExtend.GetRandomTime(dp_Start.DateTime, dp_End.DateTime);
AddSellData(time_MasterTime);
AddException(new Random(Guid.NewGuid().GetHashCode()).Next(1, 100), time_MasterTime);
}
})
{ IsBackground = true };
AddDataThread.Start();
}
}
#endregion
#region 模拟上传压缩文件
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern void keybd_event
(
byte bVk,// 虚拟键值
byte bScan,// 硬件扫描码
uint dwFlags,// 动作标识
IntPtr dwExtraInfo// 与键盘动作关联的辅加信息
);
private void DataFileUpload_Click(object sender, RoutedEventArgs e)
{
//new System.Threading.Thread(() =>
//{
System.Windows.Forms.SendKeys.SendWait("{PRTSC}");
System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)System.Windows.Forms.Clipboard.GetDataObject().GetData(System.Windows.Forms.DataFormats.Bitmap);
if (bmp != null)
{
string str_Directory = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CustomerInfo", DateTime.Today.ToString("yyyy_MM_dd"));
if (!System.IO.Directory.Exists(str_Directory))
{
System.IO.Directory.CreateDirectory(str_Directory);
}
bmp.Save(System.IO.Path.Combine(str_Directory, $"Screen.png"));
}
//keybd_event((byte)0x2c, 0, 0x0, IntPtr.Zero);//down
// System.Windows.Forms.Application.DoEvents(); //添加引用system.windows.forms
// keybd_event((byte)0x2c, 0, 0x2, IntPtr.Zero);//up
// System.Windows.Forms.Application.DoEvents();
// System.Drawing.Bitmap bmp = null;
// System.Windows.Forms.Application.DoEvents();
// System.Windows.Forms.IDataObject newobject = System.Windows.Forms.Clipboard.GetDataObject();
// if (System.Windows.Forms.Clipboard.ContainsImage())
// {
// bmp = (System.Drawing.Bitmap)(System.Windows.Forms.Clipboard.GetImage().Clone());
// }
// if (bmp != null)
// {
// System.IO.Directory.CreateDirectory(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
// "CustomerInfo", DateTime.Today.ToString("yyyy_MM_dd")));
// bmp.Save(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
// "CustomerInfo", DateTime.Today.ToString("yyyy_MM_dd"), $"Screen.png"));
// }
//})
//{ IsBackground = true }.Start();
//foreach (KeyValuePair item in PosSocketList)
//{
// if (!item.Value.ClientRuning)
// {
// item.Value.Start();
// System.Threading.Thread.Sleep(1000);
// }
// item.Value.SendSocketMsg(ESSupport.Transfer.TableDataType.UploadZipFile);
//}
//DataFileUp();
}
#endregion
#region 模拟日结交班
///
/// 模拟日结交班
///
///
///
private void EndAccount_Click(object sender, RoutedEventArgs e)
{
if (dp_End.DateTime < dp_Start.DateTime)
{
TransResultBeginInvoke(DateTime.Now, $"结账失败,原因:账期结束时间小于账期开始时间。");
return;
}
int int_AddCount = new Random(Guid.NewGuid().GetHashCode()).Next(1, 10000);
CreateNaturalDay(dp_End.DateTime);
if (Prints.CheckOutData(int_AddCount, "9001", dp_End.DateTime))
{
TransResultBeginInvoke(DateTime.Now, $"结账成功。缴款金额:{int_AddCount}");
//MessageBox.Show($"结账成功。缴款金额:{int_AddCount}");
Login.Content = "登录系统";
EndAccountCode = "";
Sales.IsEnabled = false;
EndAccount.IsEnabled = false;
dp_Start.IsEnabled = true;
}
else
{
TransResultBeginInvoke(DateTime.Now, $"结账失败,原因:请查阅Log文件。缴款金额:{int_AddCount}");
//MessageBox.Show($"结账失败,原因:请查阅Log文件。缴款金额:{int_AddCount}");
}
}
#endregion
#region 模拟数据初始化下载
///
/// 模拟数据初始化下载
///
///
///
private void Shop_Click(object sender, RoutedEventArgs e)
{
new System.Threading.Thread(() =>
{
try
{
string str_SQL = $@"SELECT B.COMMODITYSALE_ID AS COMMODITYSALE_ID,
A.STARTDATE,A.ENDDATE,A.SERVERPARTCODE,A.SHOPCODE,
A.MACHINECODE,B.COMMODITY_TYPE,B.COMMODITY_CODE,
B.COMMODITY_BARCODE,B.COMMODITY_NAME,
B.TICKTE_COUNT AS TICKETCOUNT,B.TOTAL_COUNT AS TOTALCOUNT,
B.TOTAL_AMOUNT AS TOTALSELLAMOUNT,
B.TOTAL_OFFAMOUNT AS TOTALOFFAMOUNT
FROM T_ENDACCOUNT_NEW A,T_COMMODITYSALE_NEW B
WHERE A.ENDACCOUNT_CODE = B.ENDACCOUNT_CODE AND
A.ENDACCOUNT_CODE = '451304143004442720211124195212242041'";
//str_SQL = $@"UPDATE T_DATAFILEUPLOAD SET DATAFILEUPLOAD_STATE = 0
// WHERE DATAFILEUPLOAD_NAME = '620036032001351220211106155857_EndAccount.zip'";
//str_SQL = $@"INSERT INTO T_DATAFILEUPLOAD (DATAFILEUPLOAD_GUID,
// DATAFILEUPLOAD_NAME,DATAFILEUPLOAD_DATE,DATAFILEUPLOAD_STATE)
// VALUES ('{Guid.NewGuid().ToString("N")}','620036032001351220211106155857_EndAccount.zip',
// DATETIME('{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}'),0)";
//str_SQL = $@"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='620523' AND
// SHOPCODE='012001' AND MACHINECODE='3524' AND
// SELLMASTER_DATE BETWEEN DATETIME('2021/10/21 00:00:00') AND
// DATETIME('2021/10/21 23:59:59')";
string str_Serverpart = "620018012101,620018032101";
//str_SQL = "SELECT * FROM T_MOBILE_PAY WHERE MOBILEPAY_DATE BETWEEN DATETIME('2021/12/07 10:00:00') AND DATETIME('2021/12/07 10:30:00') ORDER BY MOBILEPAY_DATE";
//str_SQL = "Select AbnormalAudit_Guid From T_AbnormalAudit";
//str_SQL = "Select * From T_YsMobilePay Where MobilePay_Date >= 20220117000000";
str_SQL = "Delete From T_Promotion_New ";
//str_SQL = @"SELECT A.ABNORMALITY_TYPE,COUNT(1) FROM T_ABNORMALITY A
//WHERE A.ABNORMALITY_TIME BETWEEN DATETIME('2021/12/05') AND DATETIME('2021/12/07')
//GROUP BY A.ABNORMALITY_TYPE";
ESSupport.Lib.HttpHelper.HttpPost("{\"ServerpartShopCodeS\":\"" + str_Serverpart + "\",\"TableName\":\"" + "11" + "\",\"OperateTime\":\"" + DateTime.MinValue.ToString("yyyy/MM/dd HH:mm:ss") + "\",\"SocketContent\":\"" + str_SQL + "\"}",
"http://pos.eshangtech.com:7198/webApi_publish/WebSocket/sendSocketMsg", "application/json;charset=UTF-8");
return;
//TransResultBeginInvoke(DateTime.Now, str_Result);
str_SQL = "UPDATE T_ENDACCOUNT_NEW SET TRANSFER_STATE = 0 WHERE ENDACCOUNT_CODE = '62001811300445392021112517565096742'";
//str_SQL = @"INSERT INTO T_ENDACCOUNT_NEW ( ENDACCOUNT_ID,
// ENDACCOUNT_CODE,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,
// PAYMENT_DETAILS,TRANSFER_STATE)
//VALUES(0, '620523012001352420211021142325665910',
// DATETIME('2021/10/21 00:00:00'),
// DATETIME('2021/10/21 23:59:59'),
// '620523', '012001', '3524', '9001',
// 35, 81, 541.5, 0, 229.5, 0, 0, 0, 312,
// 0, 229.5, 2, 'ALIPAY:42.00,WECHATPAY:270.00', 0)";
//str_Serverpart = "515320131201,515320012201,515320032201,515320111201,515320013002,515320033002";6205230120013524
List list_TableName = new List() { "20" };
str_Serverpart = "510100031002,510100032201,510100033002,510200011002,510200012201,510200013002,510200031002,510200032201,510200033002,510300011002,510300012201,510300013002,510300031002,510300032201,510300033002,510400011002,510400012201,510400013002,510400031002,510400032201,510400033002,510500011002,510500013002,510500031002,510500033002,510600011002,510600012201,510600031002,510600032201,510600033002,510600133006,510700011002,510700012201,510700013002,510800011002,510800013002,510800031002,510800032201,510800033002,510900012201,510900013002,510900013101,510900032201,510900033002,510900033101,511000011002,511000012201,511000013002,511000014010,511000032201,511000033002,511000034010,511100011002,511100012201,511100013002,511100032201,511100033002,511100113902,511100133902,511200011301,511200012201,511200013002,511200013101,511200031301,511200032201,511200033002,511200033101,511300011002,511300012201,511300013002,511300031002,511300032201,511300033002,511400011002,511400012201,511400013002,511500011002,511500012201,511500013002,511500031002,511500032201,511500033002,511500034002,511800011002,511800012201,511800013002,511800031002,511800032201,511800033002,511900011002,511900012201,511900013002,511900031002,511900032201,511900033002,511900033005,513100011002,513100013002,513100031002,513100032201,513100033002";
//int int_Days = 60;
str_SQL = "";
DateTime date_End = DateTime.Today.AddDays(-1);
for (int i = 0; i < 60; i++)
{
if (date_End.AddDays(-1 * i) < DateTime.Today)
{
string str_Result = ESSupport.Lib.HttpHelper.HttpPost("{\"ServerpartShopCodeS\":\"" + str_Serverpart + "\",\"TableName\":\"" + "20" + "\",\"OperateTime\":\"" + date_End.AddDays(-1 * i).ToString("yyyy/MM/dd HH:mm:ss") + "\",\"SocketContent\":\"" + str_SQL + "\"}",
"http://pos.eshangtech.com:7198/webApi_publish/WebSocket/sendSocketMsg", "application/json;charset=UTF-8");
TransResultBeginInvoke(DateTime.Now, str_Result);
System.Threading.Thread.Sleep(5 * 1000);
}
}
return;
//区服PB系统数据上传指令内容示例:"{\"ServerpartShopCodeS\":\"510500000000\",\"TableName\":\"20\",\"OperateTime\":\"2021/09/24 19:00:00\",\"SocketContent\":\"510500|013002|003|20210919183627|20210920172808\"}"
List list = new List();
list.Add("510400|011002|1041|20210926214940|20210927212520");
for (int i = 0; i < list.Count; i++)
{
string str_Result = ESSupport.Lib.HttpHelper.HttpPost("{\"ServerpartShopCodeS\":\"" + str_Serverpart + "\",\"TableName\":\"20\",\"OperateTime\":\"" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "\",\"SocketContent\":\"" + list[i] + "\"}",
"http://pos.eshangtech.com:8900/webApi_publish/WebSocket/sendSocketMsg", "application/json;charset=UTF-8");
TransResultBeginInvoke(DateTime.Now, str_Result);
System.Threading.Thread.Sleep(3000);
}
}
catch (Exception ex)
{
}
})
{ IsBackground = true }.Start();
//bool b= DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueOnlineBillToMachine, DateTime.Now, "20200714-3300003748-001");
return;
if (PosDataDownloadThread == null || !PosDataDownloadThread.IsAlive)
{
PosDataDownloadThread = new System.Threading.Thread(() =>
{
//直连云端获取门店信息(获取门店ID、门店名称、业态编码、业态名称、门店状态、是否统一定价门店、是否上传营收数据、是否上传稽核数据、销售金额上限、销售数量上限、是否记录优惠折扣、所属业主单位ID、所属业主单位名称)
bool b_DownLoad = DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueShopInfoToMachine, DateTime.MinValue);
//直连云端获取商品信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueCommodityInfoToMachine, DateTime.MinValue);
//直连云端获取商品类别信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueCommodityTypeToMachine, DateTime.MinValue);
//直连云端获取商品自定义类别信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueCommodityUserTypeToMachine, DateTime.MinValue);
//直连云端获取收银员工号信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueSellWorkerInfoToMachine, DateTime.MinValue);
//直连云端获取智能稽核任务信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueAuditTaskInfoToMachine, DateTime.MinValue);
//直连云端获取促销活动信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssuePromotionToMachine, DateTime.MinValue);
//直连云端获取收银参数配置信息
DataDownload.DataDownload(ESSupport.Transfer.TableDataType.IssueConfigurationToMachine, DateTime.MinValue);
DataUpload.DataUpload(ESSupport.Transfer.TableDataType.UploadMachineInfo, DateTime.Now);
})
{
IsBackground = true
};
PosDataDownloadThread.Start();
}
}
#endregion
#region 方法 -> 模拟上传压缩文件
///
/// 压缩文件上传
///
private void DataFileUp()
{
new System.Threading.Thread(() =>
{
//上传数据前先立即上报心跳数据,解决定时心跳因关机导致本地数据版本未更新到服务器的问题
//ESSupport.Pos.ThreadHelper.StateFeedbackUpload($"http://{QualityHelper.dbip}:{QualityHelper.DataServicePort}/DataServices/Service.asmx");
//初始化压缩包上传实例
ESSupport.Transfer.ZipFileUpload zipFileUpload = new ESSupport.Transfer.ZipFileUpload();
zipFileUpload.NotifyEvent += ZipFileUpload_NotifyEvent;
TransResultBeginInvoke(DateTime.Now, $"开始上传压缩文件");
//上传全部压缩包文件至服务器
zipFileUpload.UploadDataZipFile($"http://{"10.103.1.8"}:{"7081"}/PosDataUpload");
})
{
IsBackground = true
}.Start();
}
#endregion
#region 方法 ->模拟生成流水数据
///
/// 模拟生成流水数据
///
///
private void AddSellData(DateTime masterTime)
{
try
{
#region 首次执行,缓存商品数据
if (CommodityModelList == null)
{
CommodityModelList = new List();
DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
$@"SELECT ROW_NUMBER() OVER (ORDER BY D.COMMODITYMULTI_CODE DESC,
CONVERT(INT,ISNULL(A.CONTAINER_CODE,'999999999')),A.COMMODITYEX_ID DESC) AS COLUMSLIST,
A.COMMODITY_BARCODE,A.COMMODITY_CODE,A.COMMODITY_TYPE,
A.COMMODITY_SYMBOL,A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
A.COMMODITY_UNIT,A.COMMODITY_RULE,A.COMMODITY_MEMBERPRICE,
ISNULL(C.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,
ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,
ISNULL(D.COMMODITYMULTI_CODE,A.COMMODITY_CODE) AS COMMODITYMULTI_CODE,
ISNULL(D.COMMODITYMULTI_NAME,A.COMMODITY_NAME) AS COMMODITYMULTI_NAME
FROM T_COMMODITYEX A
LEFT JOIN T_COMMODITYMULTI D ON A.COMMODITY_CODE = D.COMMODITY_CODE AND
A.BUSINESSTYPE = D.BUSINESSTYPE AND A.SERVERPARTCODE = D.SERVERPARTCODE
LEFT JOIN T_KITCHENCONFIG C ON A.COMMODITY_TYPE = C.COMMODITYTYPE
WHERE A.SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
A.SERVERPARTSHOP_ID = '{ESSupport.DataStorage.DataFunction.QueryShopID(QualityHelper.serverpartcode, QualityHelper.shopcode)}' AND
A.ISVALID = 1
ORDER BY D.COMMODITYMULTI_CODE DESC,
CONVERT(INT,ISNULL(A.CONTAINER_CODE,'999999999')),
A.COMMODITYEX_ID DESC").Tables[0];
foreach (DataRow _DataRow in _DataTable.Rows)
{
CommodityModelList.Add(new Model.CommodityModel
{
CommodityBarCode = _DataRow["COMMODITY_BARCODE"].ToString(),
CommodityCode = _DataRow["COMMODITY_CODE"].ToString(),
CommodityName = _DataRow["COMMODITY_NAME"].ToString(),
CommodityRule = _DataRow["COMMODITY_RULE"].ToString(),
CommodityUnit = _DataRow["COMMODITY_UNIT"].ToString(),
CommoditySymbol = _DataRow["COMMODITY_SYMBOL"].ToString(),
CommodityType = _DataRow["COMMODITY_TYPE"].ToString(),
PrintGoodsName = _DataRow["COMMODITY_NAME"].ToString(),
KitchenIndex = decimal.Parse(_DataRow["KITCHENCONFIG_INDEX"].ToString()),
MemberPrice = decimal.Parse(_DataRow["COMMODITY_MEMBERPRICE"].ToString()),
MeteringMethod = decimal.Parse(_DataRow["METERINGMETHOD"].ToString()),
MultiCode = _DataRow["COMMODITYMULTI_CODE"].ToString(),
MultiName = _DataRow["COMMODITYMULTI_NAME"].ToString(),
MultiPrice = decimal.Parse(_DataRow["COMMODITY_RETAILPRICE"].ToString()),
RetailPrice = decimal.Parse(_DataRow["COMMODITY_RETAILPRICE"].ToString())
});
}
}
#endregion
DataTable table_Goods = GoodsTableHelper.GetCommodityTableStructure();
int int_AddCount = new Random(Guid.NewGuid().GetHashCode()).Next(1, 100);
for (int i = 0; i < int_AddCount; i++)
{
int int_GoodIndex = new Random(Guid.NewGuid().GetHashCode()).Next(0, CommodityModelList.Count);
DataRow _goodsRow = GoodsAddHelper.IsVague(CommodityModelList[int_GoodIndex].CommodityBarCode, table_Goods, QualityHelper.WeighSign, out bool _bOverly);
if (_goodsRow != null)
{
GoodsTableHelper.TouchInputSale(_goodsRow, table_Goods, _bOverly, decimal.Parse(_goodsRow["count"].ToString()), false);
}
}
Model.PayAmountModel pay_PayAmountModel = new Model.PayAmountModel();
decimal sellcount = (decimal)table_Goods.Compute("SUM(COUNT)", "");
decimal _offprice = (decimal)table_Goods.Compute("SUM(DISCOUNT_RATE)", "");
decimal countprice = (decimal)table_Goods.Compute("SUM(PRICE)", "");
int int_InternalPay = new Random(Guid.NewGuid().GetHashCode()).Next(1, (int)countprice);
GoodsTableHelper.CouponAdd(table_Goods, countprice - int_InternalPay);
sellcount = (decimal)table_Goods.Compute("SUM(COUNT)", "");
_offprice = (decimal)table_Goods.Compute("SUM(DISCOUNT_RATE)", "");
countprice = (decimal)table_Goods.Compute("SUM(PRICE)", "");
pay_PayAmountModel.Wechat = new Random(Guid.NewGuid().GetHashCode()).Next(1, (int)countprice);
pay_PayAmountModel.CashPay = countprice - pay_PayAmountModel.Wechat;
pay_PayAmountModel.SellMasterCode = ESSupport.DataStorage.DataFunction.CreateUniqueCode(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode);
pay_PayAmountModel.CouponName = "企业会员优惠";
if (GetCashierData(table_Goods, GetTicketCode(), countprice, pay_PayAmountModel, countprice, masterTime, "", "",
_offprice, sellcount, pay_PayAmountModel.SellMasterCode, "", ""))
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran($@"INSERT INTO T_CUSTOMERINFO (CUSTOMERINFO_ID,SELLMASTER_CODE,
ACQUISITION_TIME,SERVERPARTCODE,SHOPCODE,MACHINECODE,SELLMASTER_AMOUNT,CUSTOMER_AGE,CUSTOMER_GENDER)
VALUES ({ESSupport.DataStorage.DataFunction.CreateNextSequence("T_CUSTOMERINFO", "CUSTOMERINFO_ID")},
'{pay_PayAmountModel.SellMasterCode}',DATETIME('{masterTime}'),'888888','042002','9999',{countprice},29,1)");
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran($@"INSERT INTO T_MOBILE_PAY (MOBILE_PAY_ID,
SERVERPARTCODE,SHOPCODE,MACHINECODE,WORKERCODE,MOBILEPAY_DATE,
MOBILEPAY_TYPE,TICKET_CODE,TICKET_AMOUNT,MOBILEPAY_RESULT,
MOBILEPAY_FEEDBACK,MOBILEPAY_STATE,MOBILEPAY_OPERATORS)
VALUES ({ESSupport.DataStorage.DataFunction.CreateNextSequence("T_MOBILE_PAY", "MOBILE_PAY_ID")},
'888888','042002','9999','0001',DATETIME('{masterTime}'),'ALIPAY',
'{$"8888880420029999{masterTime.ToString("yyyyMMddHHmmss")}"}',
{pay_PayAmountModel.Wechat},5,'',1,1005)");
TransResultBeginInvoke(DateTime.Now, $"交易流水添加成功。共{sellcount}件商品,销售金额:{countprice}元;\r\n" +
$"现金:{pay_PayAmountModel.CashPay}元;移动支付:{pay_PayAmountModel.Wechat}元;交易时间:{masterTime}");
//MessageBox.Show($"交易流水生成成功。共{sellcount}件商品,销售金额:{countprice}元");
}
else
{
TransResultBeginInvoke(DateTime.Now, $"交易流水保存失败,原因:请查阅Log文件。共{sellcount}件商品,销售金额:{countprice}元;交易时间:{masterTime}");
//MessageBox.Show($"交易流水保存失败,原因:请查阅Log文件。共{sellcount}件商品,销售金额:{countprice}元");
}
}
catch (Exception ex)
{
TransResultBeginInvoke(DateTime.Now, $"交易流水保存失败。原因:{ex.Message}");
// MessageBox.Show($"交易流水保存失败。原因[{ex.TargetSite}]:{ex.Message}");
}
}
#endregion
#region 方法 -> 模拟生成自然日数据
///
/// 自然日数据
///
///
private void CreateNaturalDay(DateTime endDate)
{
//实例化压缩文件处理传输类
ESSupport.ZipFile.PosDataZipFile zip_PosDataZipFile = new ESSupport.ZipFile.PosDataZipFile(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode);
zip_PosDataZipFile.NotifyEvent += Zip_PosDataZipFile_NotifyEvent;
int int_Days = endDate.Subtract(endDate.Date.AddDays(-7)).Days;
//补齐上一次自然日数据生成时间至当前时间的自然日结账数据
for (int i = int_Days; i > 0; i--)
{
if (ESSupport.Lib.SyBaseHelper.QueryOdbc(
$@"SELECT 1 FROM T_ENDACCOUNT_NEW
WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND
STARTDATE = DATETIME('{endDate.Date.AddDays(-1 * i).ToString("yyyy/MM/dd HH:mm:ss")}') AND
ENDACCOUNT_TYPE = {(int)Common.PosDictionary.EndaccountType.NaturalDayAccount}").Tables[0].Rows.Count == 0)
{
//生成自然日结账数据
PosReportHelper.CreateEndaccount(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode,
QualityHelper.sellworkercode, QualityHelper.sellworkercode, QualityHelper.sellworkername, 0, endDate.Date.AddDays(-1 * i),
endDate.Date.AddDays(-1 * (i - 1)).AddSeconds(-1), Common.PosDictionary.EndaccountType.NaturalDayAccount, false);
//生成自然日流水压缩文件
zip_PosDataZipFile.CreateDataZipFile(endDate.Date.AddDays(-1 * i), endDate.Date.AddDays(-1 * (i - 1)).AddSeconds(-1), ESSupport.ZipFile.PosDataZipFile.DateType.NaturalDay);
TransResultBeginInvoke(DateTime.Now, $"自然日流水文件生成成功。数据日期:{endDate.Date.AddDays(-1 * i)}");
}
}
}
#endregion
#region 方法 -> 模拟生成异常稽核数据
private void AddException(int exCount, DateTime operateDate)
{
List str_SQL = new List();
List list_AbnormalType = ESSupport.Lib.EnumHelper.EnumToList();
int int_max = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_ABNORMALITY", "ABNORMALITY_ID");
int int_maxd = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_ABNORMALITYDETAIL", "ABNORMALITYDETIL_ID");
int int_AbnormalType = new Random(Guid.NewGuid().GetHashCode()).Next(0, list_AbnormalType.Count);
string str_UniqueCode = ESSupport.DataStorage.DataFunction.CreateUniqueCode("888888", "042002", "9999");
decimal dec_Amount = 0;
for (int i = 0; i < exCount; i++)
{
int int_GoodIndex = new Random(Guid.NewGuid().GetHashCode()).Next(0, CommodityModelList.Count);
str_SQL.Add($@"INSERT INTO T_ABNORMALITYDETAIL (ABNORMALITYDETIL_ID,ABNORMALITY_CODE,
COMMODITY_CODE,COMMODITY_BARCODE,COMMODITY_TYPE,COMMODITY_NAME,
COMMODITY_COUNT,COMMODITY_PRICE,TOTALDISCOUNT,TOTALAMOUNT,LINENUM,OPERATEDATE,
ABNORMALITY_STATE,ABNORMALITYDETILS_DESC,TRANSFER_STATE,ABNORMALITYDETIL_CODE)
VALUES({int_maxd + i},'{str_UniqueCode}','{CommodityModelList[int_GoodIndex].CommodityCode}',
'{CommodityModelList[int_GoodIndex].CommodityBarCode}','{CommodityModelList[int_GoodIndex].CommodityType}',
'{CommodityModelList[int_GoodIndex].CommodityName}',3,{CommodityModelList[int_GoodIndex].RetailPrice},0,
{CommodityModelList[int_GoodIndex].RetailPrice * 3},1,DATETIME('{operateDate}'),1,NULL,1,
'{ESSupport.DataStorage.DataFunction.CreateUniqueCode("888888", "042002", "9999")}')");
dec_Amount += (CommodityModelList[int_GoodIndex].RetailPrice * 3);
}
str_SQL.Add($@"INSERT INTO T_ABNORMALITY (ABNORMALITY_ID,ABNORMALITY_CODE,ABNORMALITY_PCODE,
PROVINCE_ID,PROVINCE_CODE,PROVINCE_NAME,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,BUSINESSTYPE,
BUSINESS_NAME,SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME,MACHINECODE,MANAGER_CODE,SELLWORK_CODE,
ABNORMALITY_TIME,ABNORMALITY_TYPE,SERIAL_CODE,COMMODITY_ROWCOUNT,COMMOTITY_COUNT,TOTALAMOUNT,
ACTUALAMOUNT,ABNORMALITY_DESC,TRANSFER_STATE,ABNORMALITY_START)
VALUES({int_max},'{str_UniqueCode}',NULL,NULL,
'620000',NULL,NULL,'888888','驿商服务区','1000',NULL,7503,'042002','驿商门店商品测试','9999','','0001',DATETIME('{operateDate}'),
{list_AbnormalType[int_AbnormalType].EnumValue},'',{exCount},{exCount * 3},{dec_Amount},{dec_Amount},'',0,DATETIME('{operateDate}'))");
if (str_SQL.Count > 0)
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(str_SQL);
TransResultBeginInvoke(DateTime.Now, $"异常数据添加成功。数量:{str_SQL.Count}");
}
}
#endregion
#region 方法 -> 登录账期班期数据验证
///
/// 登录账期班期数据验证
///
/// 收银员工号
///
public int PersonLogin(string userWorkerCode, out string sellWorkerCode)
{
sellWorkerCode = userWorkerCode;
string _EndaccountCode;
try
{
//不带收银员进行查询
DataTable _EndaccountTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
$@"SELECT ENDACCOUNT_ID,ENDACCOUNT_CODE,STARTDATE
FROM T_ENDACCOUNT_NEW
WHERE ENDDATE IS NULL AND ENDACCOUNT_TYPE = 1 AND
SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
SHOPCODE='{QualityHelper.shopcode}' AND
MACHINECODE = '{QualityHelper.machinecode}'
ORDER BY ENDACCOUNT_ID DESC").Tables[0];
#region 已结账
if (_EndaccountTable.Rows.Count == 0)
{
DateTime _StartDate = dp_Start.DateTime;
int _MaxID = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_ENDACCOUNT_NEW", "ENDACCOUNT_ID");
_EndaccountCode = ESSupport.DataStorage.DataFunction.CreateUniqueCode(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode);
try
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(
$@"INSERT INTO T_ENDACCOUNT_NEW (ENDACCOUNT_ID,SERVERPARTCODE,SHOPCODE,
MACHINECODE,STARTDATE,ENDACCOUNT_CODE,ENDACCOUNT_TYPE,TRANSFER_STATE)
VALUES ({_MaxID},'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}',
'{QualityHelper.machinecode}',DATETIME('{_StartDate}'),'{_EndaccountCode}',1,0)");
EndAccountStartDate = _StartDate;
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"账期插入失败[{ex.TargetSite}]:{ex.Message}");
return -1;
}
//插入交班记录
int _MaxPid = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_PERSONSELL_NEW", "PERSONSELL_ID");
try
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(
$@"INSERT INTO T_PERSONSELL_NEW (PERSONSELL_ID,SERVERPARTCODE,SHOPCODE,
MACHINECODE,STARTDATE,SELLWORKER_CODE,ENDACCOUNT_CODE,WOKER_NUMBER,TRANSFER_STATE)
VALUES({_MaxPid},'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}','{QualityHelper.machinecode}',
DATETIME('{_StartDate}'),'{userWorkerCode}','{_EndaccountCode}',1,0)");
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"账期工班插入失败[{ex.TargetSite}]:{ex.Message}");
return -2;
}
}
#endregion
#region 未结账
else
{
_EndaccountCode = _EndaccountTable.Select("ENDACCOUNT_ID = MAX(ENDACCOUNT_ID)", "")[0]["ENDACCOUNT_CODE"].ToString();
DateTime.TryParse(_EndaccountTable.Select("ENDACCOUNT_ID = MAX(ENDACCOUNT_ID)", "")[0]["STARTDATE"].ToString(), out DateTime _STARTDATE);
EndAccountStartDate = _STARTDATE;
dp_Start.DateTime = _STARTDATE;
if (dp_End.DateTime < dp_Start.DateTime)
{
dp_End.DateTime = dp_Start.DateTime;
}
if (_STARTDATE > dp_Start.DateTime)
{
return -5;
}
//检测是否已经交班
try
{
DateTime _PersonStartDate = dp_Start.DateTime;
DataTable _PersonTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
$@"SELECT PERSONSELL_ID,SELLWORKER_CODE
FROM T_PERSONSELL_NEW
WHERE ENDDATE IS NULL AND STARTDATE IS NOT NULL AND
SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
SHOPCODE='{QualityHelper.shopcode}' AND
MACHINECODE = '{QualityHelper.machinecode}' AND
ENDACCOUNT_CODE = '{_EndaccountCode}'
ORDER BY PERSONSELL_ID DESC").Tables[0];
if (_PersonTable.Rows.Count == 0)
{
int _MaxID = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_PERSONSELL_NEW", "PERSONSELL_ID");
int woker_number = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_PERSONSELL_NEW", "WOKER_NUMBER", $"ENDACCOUNT_CODE='{_EndaccountCode}'");
try
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(
$@"INSERT INTO T_PERSONSELL_NEW (PERSONSELL_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,
STARTDATE,SELLWORKER_CODE,ENDACCOUNT_CODE,WOKER_NUMBER,TRANSFER_STATE)
VALUES({_MaxID},'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}','{QualityHelper.machinecode}',
DATETIME('{_PersonStartDate}'),'{userWorkerCode}','{_EndaccountCode}',{woker_number},0)");
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"账期工班插入失败[{ex.TargetSite}]:{ex.Message}");
return -2;
}
}
else
{
string _SellWokerCode = _PersonTable.Select("PERSONSELL_ID = MAX(PERSONSELL_ID)", "")[0]["SELLWORKER_CODE"].ToString().ToUpper();
if (_SellWokerCode != userWorkerCode)
{
sellWorkerCode = _SellWokerCode;
return -3;
}
}
}
catch (Exception ex)
{
return -4;
}
}
#endregion
}
catch (Exception ex)
{
TransResultBeginInvoke(DateTime.Now, "账期查询失败:" + ex.Message);
ESSupport.Lib.LogHelper.WriteServiceLog("账期查询失败:" + ex.Message);
return -1;
}
if (!string.IsNullOrWhiteSpace(_EndaccountCode))
{
EndAccountCode = _EndaccountCode;
}
return 0;
}
#endregion
#region 方法 -> 插入支付流水
///
/// 插入流水
///
/// 商品列表
/// 流水号
/// 总金额
/// 支付集合
/// 找零金额
/// 付款时间
/// 会员卡号
/// 会员ID
/// 优惠金额
/// 总数量
/// 销售流水编号
/// 移动支付订单号
/// 移动支付退款单号
/// 备注
///
public bool GetCashierData(DataTable commodityTable, string ticketCode, decimal masterAmount,
Model.PayAmountModel payModel, decimal payAmount, DateTime masterTime, string MemberCard,
string MemberId, decimal masterOffPrice, decimal sellCount, string sellMasterCode = "",
string mobilePayCode = "", string merchantOrder = "", string sellDesc = "")
{
try
{
#region 新版流水插入
decimal COUPONPAY = 0;
decimal MOBILEPAY = 0;
string PAYMENT_TYPE = "";
string COUPON_TYPE = "";
string SELLMASTER_DESC = sellDesc;
//优惠流水类型标识,用于判断本次交易是否需要记录优惠流水
PosReportHelper.DiscountSellMasterType dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.无;
DataRow[] _Rows = commodityTable.Select("TICKETPREFIX IS NOT NULL");
if (_Rows.Length > 0 && payModel.AliPay == 0 && payModel.Wechat == 0 && payModel.UnionPay == 0)
{
ticketCode = "(" + _Rows[0]["TICKETPREFIX"] + ")" + ticketCode;
}
if (payModel.AliPay != 0)
{
MOBILEPAY += payModel.AliPay;
ticketCode = (_Rows.Length > 0 ? ("(支-" + _Rows[0]["TICKETPREFIX"] + ")") : "(支)") + ticketCode;
PAYMENT_TYPE = "ALIPAY";
}
if (payModel.Wechat != 0)
{
MOBILEPAY += payModel.Wechat;
ticketCode = (_Rows.Length > 0 ? ("(微-" + _Rows[0]["TICKETPREFIX"] + ")") : "(微)") + ticketCode;
PAYMENT_TYPE = "WECHATPAY";
}
if (payModel.UnionPay != 0)
{
MOBILEPAY += payModel.UnionPay;
ticketCode = (_Rows.Length > 0 ? ("(银-" + _Rows[0]["TICKETPREFIX"] + ")") : "(银)") + ticketCode;
PAYMENT_TYPE = "UNIONPAY";
}
if (payModel.BusCoupon != 0)
{
COUPONPAY += payModel.BusCoupon;
COUPON_TYPE = "BusCoupons";
}
if (payModel.GroupPay != 0)
{
COUPONPAY += payModel.GroupPay;
COUPON_TYPE = "GroupPay";
}
//消费券
if (payModel.Coupon != 0)
{
COUPONPAY += payModel.Coupon;
//COUPON_TYPE = "GroupPay";
if (!String.IsNullOrWhiteSpace(payModel.CouponNum))
{
SELLMASTER_DESC = payModel.CouponNum;
}
COUPON_TYPE = "MealVoucher";
}
//会员电子券
if (payModel.VipCoupon != 0)
{
COUPONPAY += payModel.VipCoupon;
if (!String.IsNullOrWhiteSpace(payModel.CouponNum))
{
SELLMASTER_DESC = payModel.CouponNum;
}
COUPON_TYPE = "VipCoupon";
}
//在线订单支付
if (payModel.OnlinePay != 0)
{
COUPON_TYPE = "OnlinePay";
}
if (sellCount == 0)
{
sellCount = (decimal)commodityTable.Compute("SUM(COUNT)", "");
}
int _MaxCode = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_SELLMASTER", "SELLMASTER_ID");
int _MaxConsumId = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_CONSUMPTIONRECORD", "CONSUMPTIONRECORD_ID");
if (string.IsNullOrWhiteSpace(sellMasterCode))
{
sellMasterCode = ESSupport.DataStorage.DataFunction.CreateUniqueCode(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode);
payModel.SellMasterCode = sellMasterCode;
}
List _InsertList = new List();
string _InsertSql =
@"INSERT INTO T_SELLMASTER (SELLMASTER_ID,SELLMASTER_CODE,SERVERPARTCODE,
SERVERPART_NAME,SHOPCODE,SHOPNAME,MACHINECODE,SELLWORKER_CODE,
SELLWORKER_NAME,SELLMASTER_DATE,TICKET_CODE,SELLMASTER_COUNT,SELLMASTER_OFFPRICE,
SELLMASTER_AMOUNT,CASHPAY,BANKPAY,MEMBERPAY,COUPONPAY,MOBILEPAY,INTERNALPAY,
OTHERPAY,PAYMENT_TYPE,MOBILEPAY_CODE,MERCHANT_ORDER,SELLMASTER_DESC,TRANSFER_STATE,
COUPON_TYPE,PAY_AMOUNT) VALUES(" + _MaxCode + ",'" + sellMasterCode + "','" + QualityHelper.serverpartcode +
"','" + QualityHelper.serverpartname + "','" + QualityHelper.shopcode + "','" + QualityHelper.shopname +
"','" + QualityHelper.machinecode + "','" + QualityHelper.sellworkercode + "','" + QualityHelper.sellworkername +
"',DATETIME('" + masterTime + "'),'" + ticketCode + "'," + sellCount + "," + masterOffPrice + "," + masterAmount +
"," + payModel.CashPay + "," + payModel.BankPay + "," + payModel.MemberPay + "," + COUPONPAY +
"," + MOBILEPAY + "," + payModel.InternalPay + "," + payModel.OtherPay + ",'" + PAYMENT_TYPE +
"','" + mobilePayCode + "','" + merchantOrder + "','" + SELLMASTER_DESC + "',0,'" + COUPON_TYPE + "'," + payAmount + ")";
//备份数据流水主表
string _strDataSellMaster = _MaxCode + "|" + sellMasterCode + "|" + QualityHelper.serverpartcode +
"|" + QualityHelper.serverpartname + "|" + QualityHelper.shopcode + "|" + QualityHelper.shopname +
"|" + QualityHelper.machinecode + "|" + QualityHelper.sellworkercode + "|" + QualityHelper.sellworkername +
"|" + masterTime.ToString("yyyy/MM/dd HH:mm:ss") + "|" + ticketCode + "|" + sellCount.ToString("F3") +
"|" + masterOffPrice.ToString("F3") + "|" + masterAmount.ToString("F3") + "|" + payModel.CashPay.ToString("F3") +
"|" + payModel.BankPay.ToString("F3") + "|" + payModel.MemberPay.ToString("F3") + "|" + COUPONPAY.ToString("F3") +
"|" + MOBILEPAY.ToString("F3") + "|" + payModel.InternalPay.ToString("F3") + "|" + payModel.OtherPay.ToString("F3") +
"|" + PAYMENT_TYPE + "|" + mobilePayCode + "|" + merchantOrder + "|" + SELLMASTER_DESC + "|" + 0 +
"|" + COUPON_TYPE + "|" + payAmount.ToString("F3");
int _MaxID = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_SELLDETAILS", "SELLDETAILS_ID");
string _InsertSql2 =
@"INSERT INTO T_SELLDETAILS (SELLDETAILS_ID,SELLMASTER_CODE,COMMODITY_CODE,
COMMODITY_BARCODE,COMMODITY_NAME,SELLDETAILS_COUNT,SELLDETAILS_PRICE,
SELLDETAILS_OFFPRICE,SELLDETAILS_AMOUNT,LINENUM,PAYMENT_TYPE,SELLDETAILS_DESC,
TRANSFER_STATE,CREATE_DATE,COMMODITY_TYPE,COMMODITY_SYMBOL) VALUES";
bool bCount = false;
bool bAmount = false;
List _DataSellDetailsList = new List();
//会员价交易记录
List _VIPSellDetailList = new List();
//获取会员交易流水ID
int _VIPSellMaxID = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_SELLDATA_VIP", "SELLDATA_ID");
for (int i = 0; i < commodityTable.Rows.Count; i++)
{
_InsertSql2 += "(" + (_MaxID + i) + ",'" + sellMasterCode +
"','" + commodityTable.Rows[i]["commodity_code"].ToString() +
"','" + commodityTable.Rows[i]["commodity_barcode"].ToString() +
"','" + commodityTable.Rows[i]["commodity_name"].ToString() +
"'," + commodityTable.Rows[i]["count"] +
"," + commodityTable.Rows[i]["commodity_retailprice"] +
"," + commodityTable.Rows[i]["discount_rate"] +
"," + commodityTable.Rows[i]["price"] + "," + (i + 1) +
",'" + PAYMENT_TYPE + "',NULL,0,DATETIME('" + masterTime + "'),'" + commodityTable.Rows[i]["commodity_type"] +
"','" + commodityTable.Rows[i]["commodity_symbol"] + "'),";
//备份数据流水详情列表
_DataSellDetailsList.Add((_MaxID + i).ToString() + "|" + sellMasterCode +
"|" + commodityTable.Rows[i]["commodity_code"].ToString() +
"|" + commodityTable.Rows[i]["commodity_barcode"].ToString() +
"|" + commodityTable.Rows[i]["commodity_name"].ToString() +
"|" + commodityTable.Rows[i]["count"].ToString() +
"|" + commodityTable.Rows[i]["commodity_retailprice"].ToString() +
"|" + commodityTable.Rows[i]["discount_rate"].ToString() +
"|" + commodityTable.Rows[i]["price"].ToString() + "|" + (i + 1).ToString() +
"|" + PAYMENT_TYPE + "|" + masterTime.ToString("yyyy/MM/dd HH:mm:ss") +
"||" + 0 + "|" + commodityTable.Rows[i]["commodity_type"].ToString() +
"|" + commodityTable.Rows[i]["commodity_symbol"].ToString());
try
{
if ((decimal)commodityTable.Rows[i]["count"] > decimal.Parse(QualityHelper.sellcount) &&
commodityTable.Rows[i]["commodity_code"].ToString() != "00000000" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999996" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999997" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999998" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999999")
{
bCount = true;
}
}
catch { }
try
{
if ((decimal)commodityTable.Rows[i]["price"] > decimal.Parse(QualityHelper.factamount) &&
commodityTable.Rows[i]["commodity_code"].ToString() != "00000000" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999996" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999997" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999998" &&
commodityTable.Rows[i]["commodity_code"].ToString() != "99999999")
{
bAmount = true;
}
}
catch { }
#region 刷卡促销插入单独流水
if (payModel.MemberPay > 0 || !string.IsNullOrWhiteSpace(MemberId) || commodityTable.Rows[i]["promotionid"].ToString() != "")
{
string _strInsertSql = string.Format(
@"INSERT INTO T_CONSUMPTIONRECORD (CONSUMPTIONRECORD_ID,
PROMOTION_ID,MEMBERSHIP_ID,MEMBERSHIP_CARD,
CONSUMPTIONRECORD_DATE,SERVERPART_CODE,SERVERPART_NAME,
SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME,MACHINECODE,
TICKET_CODE,COMMODITY_CODE,COMMODITY_BARCODE,COMMODITY_NAME,
CONSUME_COUNT,AVERAGE_PRICE,CONSUME_PRICE,LINE_NUMBER)
VALUES ({0},{1},{2},{3},DATETIME('{4}'),'{5}','{6}',{7},'{8}','{9}','{10}','{11}','{12}','{13}','{14}',{15},{16},{17},{18})",
_MaxConsumId, commodityTable.Rows[i]["promotionid"].ToString() == "" ? "0" :
commodityTable.Rows[i]["promotionid"], string.IsNullOrWhiteSpace(MemberId) ? "NULL" : MemberId,
string.IsNullOrWhiteSpace(MemberCard) ? "NULL" : ("'" + MemberCard + "'"), masterTime,
QualityHelper.serverpartcode, QualityHelper.serverpartname, QualityHelper.serverpartshop_id,
QualityHelper.shopcode, QualityHelper.shopname, QualityHelper.machinecode, ticketCode,
commodityTable.Rows[i]["commodity_code"], commodityTable.Rows[i]["commodity_barcode"],
commodityTable.Rows[i]["commodity_name"], commodityTable.Rows[i]["count"],
commodityTable.Rows[i]["commodity_retailprice"], commodityTable.Rows[i]["price"], i + 1);
_InsertList.Add(_strInsertSql);
_MaxConsumId += 1;
}
#endregion
#region 会员价消费记录独立流水
if (!string.IsNullOrWhiteSpace(Common.PosControl.MemberCode))
{
_VIPSellDetailList.Add($@"INSERT INTO T_SELLDATA_VIP
(SELLDATA_ID,SELLDATA_DATE,SERVERPARTCODE,SHOPCODE,
MACHINECODE,TICKETCODE,WORKERCODE,COMMODITY_CODE,
SELLCOUNT,SELLPRICE,OFFPRICE,FACTAMOUNT,LINENUM,FLAG)
VALUES ({_VIPSellMaxID},DATETIME('{masterTime.ToString("yyyy/MM/dd HH:mm:ss")}'),
'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}',
'{QualityHelper.machinecode}','{ticketCode}','{QualityHelper.sellworkercode}',
'{commodityTable.Rows[i]["commodity_code"]}',{commodityTable.Rows[i]["count"]},
{commodityTable.Rows[i]["commodity_retailprice"]},{commodityTable.Rows[i]["discount_rate"]},
{commodityTable.Rows[i]["price"]},{i + 1},7 )");
_VIPSellMaxID += 1;
}
//优惠券消费记录独立流水
if (!string.IsNullOrWhiteSpace(payModel.CouponName))
{
if (!string.IsNullOrWhiteSpace(payModel.CouponNum))
{
_VIPSellDetailList.Add($@"INSERT INTO T_SELLDATA_VIP
(SELLDATA_ID,SELLDATA_DATE,SERVERPARTCODE,SHOPCODE,
MACHINECODE,TICKETCODE,WORKERCODE,COMMODITY_CODE,
SELLCOUNT,SELLPRICE,OFFPRICE,FACTAMOUNT,LINENUM,FLAG)
VALUES ({_VIPSellMaxID},DATETIME('{masterTime.ToString("yyyy/MM/dd HH:mm:ss")}'),
'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}',
'{QualityHelper.machinecode}','{ticketCode}','{QualityHelper.sellworkercode}',
'{commodityTable.Rows[i]["commodity_code"]}',{commodityTable.Rows[i]["count"]},
{commodityTable.Rows[i]["commodity_retailprice"]},{commodityTable.Rows[i]["discount_rate"]},
{commodityTable.Rows[i]["price"]},{i + 1},5 )");
_VIPSellMaxID += 1;
}
else
{
string str_Flag;
switch (payModel.CouponName)
{
case "企业会员优惠":
str_Flag = "4";
break;
case "大巴券优惠":
str_Flag = "2";
break;
case "团购餐优惠":
str_Flag = "2";
break;
default://其他优惠,如:电子券(无固定名称)
str_Flag = "5";
break;
}
_VIPSellDetailList.Add($@"INSERT INTO T_SELLDATA_VIP
(SELLDATA_ID,SELLDATA_DATE,SERVERPARTCODE,SHOPCODE,
MACHINECODE,TICKETCODE,WORKERCODE,COMMODITY_CODE,
SELLCOUNT,SELLPRICE,OFFPRICE,FACTAMOUNT,LINENUM,FLAG)
VALUES ({_VIPSellMaxID},DATETIME('{masterTime.ToString("yyyy/MM/dd HH:mm:ss")}'),
'{QualityHelper.serverpartcode}','{QualityHelper.shopcode}',
'{QualityHelper.machinecode}','{ticketCode}','{QualityHelper.sellworkercode}',
'{commodityTable.Rows[i]["commodity_code"]}',{commodityTable.Rows[i]["count"]},
{commodityTable.Rows[i]["commodity_retailprice"]},{commodityTable.Rows[i]["discount_rate"]},
{commodityTable.Rows[i]["price"]},{i + 1},{str_Flag} )");
_VIPSellMaxID += 1;
}
}
#endregion
}
if (!string.IsNullOrWhiteSpace(Common.PosControl.MemberCode))
{
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.会员价消费;
}
//保存促销交易记录到优惠流水表
if (commodityTable.Select("promotionid is not null").Length > 0)
{
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.促销活动;
}
//优惠券交易记录独立流水
if (!string.IsNullOrWhiteSpace(payModel.CouponName))
{
if (!string.IsNullOrWhiteSpace(payModel.CouponNum))
{
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.电子优惠券;
}
else
{
switch (payModel.CouponName)
{
case "企业会员优惠":
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.企业会员;
break;
case "大巴券优惠":
case "团购餐优惠":
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.大巴券;
break;
default://其他优惠,如:电子券(无固定名称)
dsmt_SellMasterType = PosReportHelper.DiscountSellMasterType.电子优惠券;
break;
}
}
}
//保存会员价交易记录到数据库
try
{
if (_VIPSellDetailList.Count > 0)
{
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(_VIPSellDetailList);
}
}
catch { }
if (_InsertSql2.Length > 2)
{
_InsertSql2 = _InsertSql2.Substring(0, _InsertSql2.Length - 1);
}
_InsertList.Add(_InsertSql);
_InsertList.Add(_InsertSql2);
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(_InsertList);
#endregion
if (dsmt_SellMasterType != PosReportHelper.DiscountSellMasterType.无)
{
//保存优惠流水
PosReportHelper.SaveDiscountSelldata(QualityHelper.serverpartcode, QualityHelper.serverpartname,
QualityHelper.shopcode, QualityHelper.machinecode, QualityHelper.sellworkercode,
QualityHelper.sellworkername, ticketCode, masterTime, commodityTable, payModel, dsmt_SellMasterType);
}
//List abnormalModels = new List();
if (bCount && bAmount)
{
AbnormalRecord.GetSell(AbnormalRecord.GetAbnormalList(
(int)Common.PosDictionary.AbnormalType.数量及金额超限,
commodityTable, masterTime), ticketCode, masterTime);
}
else
{
if (bCount)
{
AbnormalRecord.GetSellCount(AbnormalRecord.GetAbnormalList(
(int)Common.PosDictionary.AbnormalType.单品数量超限,
commodityTable, masterTime), ticketCode, masterTime);
}
if (bAmount)
{
AbnormalRecord.GetSellPrice(AbnormalRecord.GetAbnormalList(
(int)Common.PosDictionary.AbnormalType.单笔金额超限,
commodityTable, masterTime), ticketCode, masterTime);
}
}
return true;
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"交易流水保存失败。原因:{ex.Message}");
return false;
}
}
#endregion
#region 方法 -> 获取流水号
///
/// 获取流水号
///
///
public string GetTicketCode()
{
try
{
string _strSelectSql = String.Format("SELECT ISNULL(MAX(RIGHT(TICKET_CODE,5)),'00000') FROM T_SELLMASTER " +
"WHERE SELLMASTER_DATE>DATETIME('{0}') AND MACHINECODE='{1}' AND UPPER(SELLWORKER_CODE)=UPPER('{2}')",
DateTime.Today, QualityHelper.machinecode, QualityHelper.sellworkercode);
DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_strSelectSql).Tables[0];
if (_DataTable.Rows.Count > 0)
{
if (int.TryParse(_DataTable.Rows[0][0].ToString(), out int TicketCode))
{
return (TicketCode + 1).ToString().PadLeft(5, '0');
}
}
}
catch { }
return "00001";
}
#endregion
#region 委托事件 -> 通知服务消息回调事件
///
/// 上传消息回调
///
///
///
private void DataUpload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
///
/// 下载消息回调
///
///
///
private void DataDownload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
///
/// 消息通知服务信息回调
///
///
///
private void PosSocket_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
private void ZipFileUpload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
private void Zip_PosDataZipFile_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
#endregion
#region 委托 -> 运行日志委托处理事件
private delegate void DelegateTransResult(DateTime triggerTime, string resultMessage);
private void TransResultBeginInvoke(DateTime triggerTime, string resultMessage)
{
Dispatcher.BeginInvoke(new DelegateTransResult(TransResult), new object[] { triggerTime, resultMessage });
}
///
/// 运行日志呈现
///
/// 日志时间
/// 日志内容
private void TransResult(DateTime triggerTime, string resultMessage)
{
if (TransResultTable == null)
{
TransResultTable = new System.Collections.ObjectModel.ObservableCollection();
}
ResultMessage ResultMessage = new ResultMessage()
{
TransDate = triggerTime,
TransResult = resultMessage
};
TransResultTable.Insert(0, ResultMessage);
//界面只保留最近5分钟的日志信息
foreach (ResultMessage _RowTemp in TransResultTable.ToList().FindAll(p => p.TransDate < DateTime.Now.AddMinutes(-5)))
{
TransResultTable.Remove(_RowTemp);
}
DataTransResult.AutoGenerateColumns = false;
DataTransResult.SelectionMode = DataGridSelectionMode.Single;
DataTransResult.ItemsSource = TransResultTable;
}
///
/// 运行日志记录表结构
///
///
private class ResultMessage : CNotifyPropertyChange
{
public DateTime TransDate { get; set; }
public string TransResult { get; set; }
}
public class CNotifyPropertyChange : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChange(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}