2025-03-28 09:49:56 +08:00

1306 lines
76 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
#region
/// <summary>
/// 账期唯一标识编码
/// </summary>
public string EndAccountCode { get; set; }
/// <summary>
/// 账期开始时间
/// </summary>
public DateTime EndAccountStartDate { get; set; }
/// <summary>
/// 商品信息清单
/// </summary>
List<Model.CommodityModel> CommodityModelList { get; set; }
/// <summary>
/// 数据下载线程
/// </summary>
System.Threading.Thread PosDataDownloadThread { get; set; }
/// <summary>
/// 模拟交易数据添加线程
/// </summary>
System.Threading.Thread AddDataThread { get; set; }
/// <summary>
/// Socket客户端批量执行线程
/// </summary>
System.Threading.Thread SocketThread { get; set; }
/// <summary>
/// 数据下载实例
/// </summary>
ESSupport.Transfer.PosDataDownload DataDownload { get; set; }
ESSupport.Transfer.PosDataUpload DataUpload { get; set; }
/// <summary>
/// Socket客户端列表
/// </summary>
System.Collections.Concurrent.ConcurrentDictionary<string, ESSupport.Transfer.PosSuperSocketClient> PosSocketList { get; set; }
/// <summary>
/// 界面日志记录
/// </summary>
System.Collections.ObjectModel.ObservableCollection<ResultMessage> TransResultTable { get; set; }
#endregion
/// <summary>
/// Socket客户端模拟连接身份标识信息
/// </summary>
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
/// <summary>
/// 登录及初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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, "pos.eshangtech.com", "8900");
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通讯
/// <summary>
/// 消息通知服务控制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Socket_Click(object sender, RoutedEventArgs e)
{
if (PosSocketList == null)
{
//初始化Socket客户端列表
PosSocketList = new System.Collections.Concurrent.ConcurrentDictionary<string, ESSupport.Transfer.PosSuperSocketClient>();
}
#region Socket客户端机器列表
List<SocketConnectInfo> list_SocketConnect = new List<SocketConnectInfo>();
list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "888888", ShopCode = "042002", MachineCode = "9999" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620022", ShopCode = "032001", MachineCode = "3515" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620016", ShopCode = "012001", MachineCode = "3507" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620016", ShopCode = "032001", MachineCode = "3518" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620036", ShopCode = "012002", MachineCode = "3602" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620046", ShopCode = "032001", MachineCode = "4037" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620018", ShopCode = "012101", MachineCode = "4537" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "213011", MachineCode = "3517" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620523", ShopCode = "012001", MachineCode = "3524" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620049", ShopCode = "012001", MachineCode = "3599" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620042", ShopCode = "032001", MachineCode = "3589" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "213001", MachineCode = "3513" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "621002", ShopCode = "012001", MachineCode = "3568" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620029", ShopCode = "012001", MachineCode = "3561" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620033", ShopCode = "032001", MachineCode = "3550" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620029", ShopCode = "032001", MachineCode = "3514" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "233021", MachineCode = "3578" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620049", ShopCode = "032001", MachineCode = "3577" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620050", ShopCode = "012001", MachineCode = "3570" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620042", ShopCode = "032001", MachineCode = "3589" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "233011", MachineCode = "3571" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620922", ShopCode = "032001", MachineCode = "3552" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620017", ShopCode = "012001", MachineCode = "3538" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "621002", ShopCode = "032001", MachineCode = "3557" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "032001", MachineCode = "3565" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620018", ShopCode = "113004", MachineCode = "4539" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620025", ShopCode = "032001", MachineCode = "3508" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620048", ShopCode = "032001", MachineCode = "3585" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "621202", ShopCode = "032001", MachineCode = "3543" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620021", ShopCode = "012001", MachineCode = "3504" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620011", ShopCode = "032001", MachineCode = "3595" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620046", ShopCode = "033004", MachineCode = "3548" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620018", ShopCode = "131002", MachineCode = "4540" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620802", ShopCode = "012001", MachineCode = "3598" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620018", ShopCode = "032101", MachineCode = "4536" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "012001", MachineCode = "3586" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620026", ShopCode = "032001", MachineCode = "4741" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620048", ShopCode = "012001", MachineCode = "3510" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620026", ShopCode = "012001", MachineCode = "3506" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620040", ShopCode = "012001", MachineCode = "3582" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620040", ShopCode = "032001", MachineCode = "3549" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620043", ShopCode = "012001", MachineCode = "3536" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620027", ShopCode = "012001", MachineCode = "3502" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620013", ShopCode = "012001", MachineCode = "3600" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620027", ShopCode = "032001", MachineCode = "3532" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620031", ShopCode = "213021", MachineCode = "3579" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620020", ShopCode = "032001", MachineCode = "3542" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620501", ShopCode = "032001", MachineCode = "4737" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620038", ShopCode = "032001", MachineCode = "3551" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620500", ShopCode = "012001", MachineCode = "3591" });
//list_SocketConnect.Add(new SocketConnectInfo() { ServerpartCode = "620050", ShopCode = "032001", MachineCode = "3530" });
#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<string, ESSupport.Transfer.PosSuperSocketClient> 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
/// <summary>
/// 添加交易流水
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
private void DataFileUpload_Click(object sender, RoutedEventArgs e)
{
foreach (KeyValuePair<string, ESSupport.Transfer.PosSuperSocketClient> item in PosSocketList)
{
if (!item.Value.ClientRuning)
{
item.Value.Start();
System.Threading.Thread.Sleep(1000);
}
item.Value.SendSocketMsg(ESSupport.Transfer.TransferDataDictionary.TableDataType.UploadZipFile);
}
//DataFileUp();
}
#endregion
#region
/// <summary>
/// 模拟日结交班
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
/// <summary>
/// 模拟数据初始化下载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Shop_Click(object sender, RoutedEventArgs e)
{
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 = '510406112001468320210912163420088239'";
str_SQL = "";
//str_SQL = $@"UPDATE T_DATAFILEUPLOAD SET DATAFILEUPLOAD_STATE = 0
// WHERE DATAFILEUPLOAD_NAME = '450001133403404620210910.zip'"; // "SELECT * FROM 'GeneralServiceURL'";
//str_SQL = "SELECT * FROM T_DATAFILEUPLOAD";
string str_Serverpart = "340310233211";
str_Serverpart = "515320131201,515320012201,515320032201,515320111201,515320013002,515320033002";
//str_Serverpart = "513210033006,513210032201,513210013006,513210011002,513210012201,513210031002";
//List<string> list_TableName = new List<string>() { "1", "2", "3", "4", "5", "6", "8", "20", "21", "10" };
//for (int i = 0; i < list_TableName.Count; i++)
//{
// ESSupport.Lib.HttpHelper.HttpPost("{\"ServerpartShopCodeS\":\"" + str_Serverpart + "\",\"TableName\":\"" + list_TableName[i] + "\",\"OperateTime\":\"" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "\",\"SocketContent\":\"" + str_SQL + "\"}",
// "http://pos.eshangtech.com:8900/webApi_publish/WebSocket/sendSocketMsg", "application/json;charset=UTF-8");
//}
//区服PB系统数据上传指令内容示例"{\"ServerpartShopCodeS\":\"510500000000\",\"TableName\":\"20\",\"OperateTime\":\"2021/09/24 19:00:00\",\"SocketContent\":\"510500|013002|003|20210919183627|20210920172808\"}"
List<string> list = new List<string>();
list.Add("510400|011002|1041|20210926214940|20210927212520");
list.Add("510400|011002|1041|20210927212533|20210928212746");
list.Add("510400|011002|1041|20210928212829|20210929213052");
list.Add("510400|011002|1041|20210929213830|20210930234847");
list.Add("510400|011002|1041|20210930234906|20211001172815");
list.Add("510400|011002|1041|20211001172843|20211002172006");
list.Add("510400|011002|1041|20211002172635|20211003170939");
list.Add("510400|011002|1041|20211003171016|20211004170919");
list.Add("510400|012201|1031|20210926235624|20210927235527");
list.Add("510400|012201|1031|20210927235544|20210928235415");
list.Add("510400|012201|1031|20210928235434|20210929151504");
list.Add("510400|012201|1031|20210929151519|20210930235633");
list.Add("510400|012201|1031|20210930235650|20211001173526");
list.Add("510400|012201|1031|20211001173546|20211002175315");
list.Add("510400|012201|1031|20211002175329|20211003172734");
list.Add("510400|012201|1031|20211003172811|20211004171535");
list.Add("510400|013002|2997|20210926111138|20210927121336");
list.Add("510400|013002|2997|20210927121348|20210928120445");
list.Add("510400|013002|2997|20210928120457|20210929111939");
list.Add("510400|013002|2997|20210929112013|20210930114000");
list.Add("510400|013002|2997|20210930114018|20211001163723");
list.Add("510400|013002|2997|20211001163755|20211002151815");
list.Add("510400|013002|2997|20211002151836|20211003150958");
list.Add("510400|013002|2997|20211003151019|20211004151925");
list.Add("510400|031002|1042|20210926205841|20210927213240");
list.Add("510400|031002|1042|20210927213259|20210928210216");
list.Add("510400|031002|1042|20210928210229|20210929215047");
list.Add("510400|031002|1042|20210929215102|20210930233911");
list.Add("510400|031002|1042|20210930233929|20211001173314");
list.Add("510400|031002|1042|20211001173332|20211002180508");
list.Add("510400|031002|1042|20211002180529|20211003173354");
list.Add("510400|031002|1042|20211003173419|20211004173008");
list.Add("510400|032201|1012|20210926235932|20210927235755");
list.Add("510400|032201|1012|20210927235901|20210928235830");
list.Add("510400|032201|1012|20210928235849|20210929121717");
list.Add("510400|032201|1012|20210929121823|20210930235744");
list.Add("510400|032201|1012|20210930235807|20211001173602");
list.Add("510400|032201|1012|20211001173729|20211002173923");
list.Add("510400|032201|1012|20211002173957|20211003173924");
list.Add("510400|032201|1012|20211003174028|20211004173655");
list.Add("510400|033002|1051|20210926105707|20210927111651");
list.Add("510400|033002|1051|20210927111812|20210928111757");
list.Add("510400|033002|1051|20210928111815|20210929113422");
list.Add("510400|033002|1051|20210929113455|20210930124214");
list.Add("510400|033002|1051|20210930124226|20211001171906");
list.Add("510400|033002|1051|20211001171920|20211002173733");
list.Add("510400|033002|1051|20211002173757|20211003172147");
list.Add("510400|033002|1051|20211003172207|20211004171307");
str_Serverpart = "510400000000";
for (int i = 0; i < list.Count; i++)
{
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");
System.Threading.Thread.Sleep(3000);
}
}
catch (System.Net.WebException wex)
{
}
catch (Exception ex)
{
}
return;
if (PosDataDownloadThread == null || !PosDataDownloadThread.IsAlive)
{
PosDataDownloadThread = new System.Threading.Thread(() =>
{
//直连云端获取门店信息获取门店ID、门店名称、业态编码、业态名称、门店状态、是否统一定价门店、是否上传营收数据、是否上传稽核数据、销售金额上限、销售数量上限、是否记录优惠折扣、所属业主单位ID、所属业主单位名称
bool b_DownLoad = DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueShopInfoToMachine, DateTime.MinValue);
//直连云端获取商品信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueCommodityInfoToMachine, DateTime.MinValue);
//直连云端获取商品类别信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueCommodityTypeToMachine, DateTime.MinValue);
//直连云端获取商品自定义类别信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueCommodityUserTypeToMachine, DateTime.MinValue);
//直连云端获取收银员工号信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueSellWorkerInfoToMachine, DateTime.MinValue);
//直连云端获取智能稽核任务信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueAuditTaskInfoToMachine, DateTime.MinValue);
//直连云端获取促销活动信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssuePromotionToMachine, DateTime.MinValue);
//直连云端获取收银参数配置信息
DataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueConfigurationToMachine, DateTime.MinValue);
DataUpload.DataUpload(ESSupport.Transfer.TransferDataDictionary.TableDataType.UploadMachineInfo, DateTime.Now);
})
{
IsBackground = true
};
PosDataDownloadThread.Start();
}
}
#endregion
#region ->
/// <summary>
/// 压缩文件上传
/// </summary>
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 ->
/// <summary>
/// 模拟生成流水数据
/// </summary>
/// <param name="masterTime"></param>
private void AddSellData(DateTime masterTime)
{
try
{
#region
if (CommodityModelList == null)
{
CommodityModelList = new List<Model.CommodityModel>();
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 ->
/// <summary>
/// 自然日数据
/// </summary>
/// <param name="endDate"></param>
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<string> str_SQL = new List<string>();
List<ESSupport.Lib.EnumEntity> list_AbnormalType = ESSupport.Lib.EnumHelper.EnumToList<Common.PosDictionary.AbnormalType>();
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 ->
/// <summary>
/// 登录账期班期数据验证
/// </summary>
/// <param name="userWorkerCode">收银员工号</param>
/// <returns></returns>
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 ->
/// <summary>
/// 插入流水
/// </summary>
/// <param name="commodityTable">商品列表</param>
/// <param name="ticketCode">流水号</param>
/// <param name="masterAmount">总金额</param>
/// <param name="payModel">支付集合</param>
/// <param name="payAmount">找零金额</param>
/// <param name="masterTime">付款时间</param>
/// <param name="MemberCard">会员卡号</param>
/// <param name="MemberId">会员ID</param>
/// <param name="masterOffPrice">优惠金额</param>
/// <param name="sellCount">总数量</param>
/// <param name="sellMasterCode">销售流水编号</param>
/// <param name="mobilePayCode">移动支付订单号</param>
/// <param name="merchantOrder">移动支付退款单号</param>
/// <param name="sellDesc">备注</param>
/// <returns></returns>
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<string> _InsertList = new List<string>();
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<string> _DataSellDetailsList = new List<string>();
//会员价交易记录
List<string> _VIPSellDetailList = new List<string>();
//获取会员交易流水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<AbnormalModel> abnormalModels = new List<AbnormalModel>();
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 ->
/// <summary>
/// 获取流水号
/// </summary>
/// <returns></returns>
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 ->
/// <summary>
/// 上传消息回调
/// </summary>
/// <param name="triggerTime"></param>
/// <param name="notifyMessage"></param>
private void DataUpload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
/// <summary>
/// 下载消息回调
/// </summary>
/// <param name="triggerTime"></param>
/// <param name="notifyMessage"></param>
private void DataDownload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
TransResultBeginInvoke(e.NotifyLoggerTime, e.NotifyLoggerMessage);
}
/// <summary>
/// 消息通知服务信息回调
/// </summary>
/// <param name="triggerTime"></param>
/// <param name="notifyMessage"></param>
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 });
}
/// <summary>
/// 运行日志呈现
/// </summary>
/// <param name="triggerTime">日志时间</param>
/// <param name="resultMessage">日志内容</param>
private void TransResult(DateTime triggerTime, string resultMessage)
{
if (TransResultTable == null)
{
TransResultTable = new System.Collections.ObjectModel.ObservableCollection<ResultMessage>();
}
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;
}
/// <summary>
/// 运行日志记录表结构
/// </summary>
/// <returns></returns>
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
}
}