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

345 lines
20 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.Configuration;
using System.IO;
using SDK = WebService.SDK;
using OperatingData.SDK;
using HZQR.Common;
namespace DataTransferService.Method
{
public class TransferHelper
{
/// <summary>
/// 商业集团服务区编码
/// </summary>
protected static string ExtraSPZJ = ConfigurationManager.AppSettings["ExtraSPZJ"];
#region ->
/// <summary>
/// 日结账期传输
/// </summary>
/// <param name="_OracleHelper">本地数据库连接</param>
/// <param name="jsonString">上传的数据集合json字符串</param>
/// <param name="codes">服务区编码codes[0]、门店编码codes[1] 、机器编码codes[3]数据集合</param>
/// <param name="UniqueCode">redis数据库判断数据表的唯一标识</param>
/// <param name="redisInsert">是否只进行缓存数据更新默认为false进行正常的数据传输</param>
/// <param name="tableName_Text">表名对应的中文内容</param>
/// <param name="LogPath">文本日志记录的地址</param>
/// <param name="LogData">文本文件存储的内容包含LogCentent</param>
/// <param name="strBack">执行结果返回内容</param>
/// <returns>error-1【代码执行异常】1【代码执行正常】2【redis数据库存储异常】</returns>
public static string EndaccountTransfer(OracleHelper _OracleHelper, string jsonString, string[] codes,
string UniqueCode, string redisInsert, string tableName_Text, string LogPath, ref string LogData, ref string strBack)
{
int errorCode = 1; //默认数据传输正常
string LogCentent = ""; //定义文本要记录的数据
#region
if (redisInsert.TryParseToBool())
{
//如果缓存表中已存在数据,则提示执行成功,但数据已存在
if (RedisHelp.DataHelper.ContainData<Model.Redis.Endaccount>(
"Endaccount:" + codes[0], UniqueCode))
{
//返回1表示代码运行正常没有出错收银前端需要将记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text +
"redis数据库记录失败数据已上传\",\"rows\":[" + LogData + "]}";
//记录文本日志
SDK.LogHelper.WriteLog(tableName_Text + "redis数据库记录失败数据已上传" +
"提交的内容:{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}", LogPath, codes[0] + ".log");
return strBack;
}
else
{
//将日结表唯一标识存入redis数据库
Model.Redis.Endaccount endaccount = new Model.Redis.Endaccount();
endaccount.ENDACCOUNT_CODE = UniqueCode;
bool flag = RedisHelp.DataHelper.RecordToRedis(endaccount, "Endaccount:" + codes[0], "ENDACCOUNT_CODE");
if (flag)
{
//redis数据库记录成功记录文本日志
LogData = tableName_Text + "成功添加至redis数据库" +
"提交的内容:{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
//返回1收银前端需要将该记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "成功添加至redis数据库\",\"rows\":[]}";
return strBack;
}
else
{
//redis数据库插入失败记录文本日志
LogData = tableName_Text + "redis数据库记录失败" +
"提交的内容:{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath);
//保存redis数据库存储异常日结数据
SDK.CommonHelper.SaveTextFile("Endaccount\\" + UniqueCode + ".txt", jsonString);
//返回2表示redis数据库插入失败收银前端需要将重新发起插入操作
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "redis数据库记录失败\"," +
"\"rows\":[{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}]}";
return strBack;
}
}
}
#endregion
//从缓存数据库判断,对比数据进行查重
if (RedisHelp.DataHelper.ContainData<Model.Redis.Endaccount>(
"Endaccount:" + codes[0], UniqueCode))
{
//更新日结数据上传标识为0重新上传数据至系统
string SQLString = "UPDATE HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW " +
"SET TRANSFER_STATE = 0 WHERE ENDACCOUNT_CODE = '" + UniqueCode + "'";
int ExcuteCount = _OracleHelper.ExcuteSql(SQLString);
//返回1表示代码运行正常没有出错收银前端需要将记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "添加失败:数据已上传\",\"rows\":[" + LogData + "]}";
//记录文本日志
SDK.LogHelper.WriteLog(tableName_Text + "添加失败:数据已上传!数据库执行" + ExcuteCount + "条记录," +
"提交的内容:{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}", LogPath, codes[0] + ".log");
return strBack;
}
//解析json字符串转化为数据对象Endaccount
List<Model.Exchange.Endaccount> _DataEndaccount =
JsonHelper.JSONStringToListUTC<Model.Exchange.Endaccount>(jsonString);
if (_DataEndaccount != null && _DataEndaccount.Count > 0)
{
#region oracle数据库和redis数据库
//定义需插入redis数据库的集合
List<Model.Redis.Endaccount> redisList = new List<Model.Redis.Endaccount>();
//遍历日结数据,获取需要插入的集合
foreach (Model.Exchange.Endaccount _ENDACCOUNT_NEW in _DataEndaccount)
{
//存储redis数据库需要插入的数据
Model.Redis.Endaccount endaccount = new Model.Redis.Endaccount();
endaccount.ENDACCOUNT_CODE = _ENDACCOUNT_NEW.ENDACCOUNT_CODE;
redisList.Add(endaccount);
//记录文本日志内容日结账单编码【ENDACCOUNT_CODE】
//门店编码【SHOPCODE】机器编码【MACHINECODE】结账时间【ENDACCOUNT_DATE】
LogCentent += (LogCentent == "" ? "" : ",") + "{\"ENDACCOUNT_CODE\":\"" + _ENDACCOUNT_NEW.ENDACCOUNT_CODE +
"\",\"SHOPCODE\":\"" + _ENDACCOUNT_NEW.SHOPCODE + "\",\"MACHINECODE\":\"" +
_ENDACCOUNT_NEW.MACHINECODE + "\",\"ENDACCOUNT_DATE\":\"" + _ENDACCOUNT_NEW.ENDDATE + "\"}";
}
//记录文本文件存储的内容
LogData = LogCentent;
#region oracle插入语句redis数据库
if (_DataEndaccount.Count > 0)
{
//执行日结数据插入语句,若出现插入失败,则回滚全部数据,返回异常后续代码不再执行
if (ExtraSPZJ.Contains(codes[0]))
{
//插入商业集团日结营收数据表
OperationDataHelper<Model.Exchange.Endaccount>.InsertTableData(
_OracleHelper, _DataEndaccount, "HIGHWAY_EXCHANGE.T_ENDACCOUNT_ZJ");
}
else
{
//插入云平台日结营收数据表
OperationDataHelper<Model.Exchange.Endaccount>.InsertTableData(
_OracleHelper, _DataEndaccount, "HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW");
}
//记录插入oracle数据库文本日志
LogData = tableName_Text + "成功添加至oracle数据库提交的内容" + LogCentent;
//将插入的数据存储到Redis缓存中
bool flag = RedisHelp.DataHelper.RecordToRedis(redisList, "Endaccount:" + codes[0], "ENDACCOUNT_CODE");
if (flag)
{
//redis数据库记录成功则记录文本日志
LogData += "\r\n" + tableName_Text + "成功添加至redis数据库提交的内容" + LogCentent;
}
else
{
//redis数据库记录失败则告知收银系统需要单独调取接口重新插入缓存
//errorCode = 2;
LogData += "\r\n" + tableName_Text + "redis数据库记录失败提交的内容" + LogCentent;
//保存redis数据库存储异常日结数据
SDK.CommonHelper.SaveTextFile("Endaccount\\" + UniqueCode + ".txt", jsonString);
}
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
}
#endregion
//添加、更新成功无需传递任何参数。
strBack = "{\"error\": " + errorCode + " ,\"msg\": \"" + tableName_Text + "添加成功!\",\"rows\":[]}";
#endregion
}
else
{
strBack = "{\"error\": -1 ,\"msg\": \"" + tableName_Text + "添加失败JSON参数解析异常\",\"rows\":[]}";
//记录日志
LogData = tableName_Text + "添加失败JSON参数解析异常提交的内容{\"ENDACCOUNT_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
}
return strBack;
}
#endregion
#region ->
/// <summary>
/// 收银员交班报表传输
/// </summary>
/// <param name="_OracleHelper">本地数据库连接</param>
/// <param name="jsonString">上传的数据集合json字符串</param>
/// <param name="codes">服务区编码codes[0]、门店编码codes[1] 、机器编码codes[3]数据集合</param>
/// <param name="UniqueCode">redis数据库判断数据表的唯一标识</param>
/// <param name="redisInsert">是否只进行缓存数据更新默认为false进行正常的数据传输</param>
/// <param name="tableName_Text">表名对应的中文内容</param>
/// <param name="LogPath">文本日志记录的地址</param>
/// <param name="LogData">文本文件存储的内容包含LogCentent</param>
/// <param name="strBack">执行结果返回内容</param>
/// <returns>error-1【代码执行异常】1【代码执行正常】2【redis数据库存储异常】</returns>
public static string PersonsellTransfer(OracleHelper _OracleHelper, string jsonString, string[] codes,
string UniqueCode, string redisInsert, string tableName_Text, string LogPath, ref string LogData, ref string strBack)
{
int errorCode = 1; //默认数据传输正常
string LogCentent = ""; //定义文本要记录的数据
#region
if (redisInsert.TryParseToBool())
{
//如果缓存表中已存在数据,则提示执行成功,但数据已存在
if (RedisHelp.DataHelper.ContainData<Model.Redis.Personsell>(
"Personsell:" + codes[0], UniqueCode))
{
//返回1表示代码运行正常没有出错收银前端需要将记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text +
"redis数据库记录失败数据已上传\",\"rows\":[" + LogData + "]}";
//记录文本日志
SDK.LogHelper.WriteLog(tableName_Text + "redis数据库记录失败数据已上传" +
"提交的内容:{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}", LogPath, codes[0] + ".log");
return strBack;
}
else
{
//将日结表唯一标识存入redis数据库
Model.Redis.Personsell personsell = new Model.Redis.Personsell();
personsell.PERSONSELL_CODE = UniqueCode;
bool flag = RedisHelp.DataHelper.RecordToRedis(
personsell, "Personsell:" + codes[0], "PERSONSELL_CODE");
if (flag)
{
//redis数据库记录成功记录文本日志
LogData = tableName_Text + "成功添加至redis数据库" +
"提交的内容:{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
//返回1收银前端需要将该记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "成功添加至redis数据库\",\"rows\":[]}";
return strBack;
}
else
{
//redis数据库插入失败记录文本日志
LogData = tableName_Text + "redis数据库记录失败" +
"提交的内容:{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
//保存redis数据库存储异常日结数据
SDK.CommonHelper.SaveTextFile("Personsell\\" + UniqueCode + ".txt", jsonString);
//返回2表示redis数据库插入失败收银前端需要将重新发起插入操作
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "redis数据库记录失败\"," +
"\"rows\":[{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}]}";
return strBack;
}
}
}
#endregion
//从缓存数据库判断,对比数据进行查重
if (RedisHelp.DataHelper.ContainData<Model.Redis.Personsell>(
"Personsell:" + codes[0], UniqueCode))
{
//返回1表示代码运行正常没有出错收银前端需要将记录的标识更新
strBack = "{\"error\": 1 ,\"msg\": \"" + tableName_Text + "添加失败:数据已上传\",\"rows\":[" + LogData + "]}";
//记录文本日志
SDK.LogHelper.WriteLog(tableName_Text + "添加失败:数据已上传!" +
"提交的内容:{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}", LogPath, codes[0] + ".log");
return strBack;
}
//解析json字符串转化为数据对象Personsell
List<Model.Exchange.Personsell> _DataPersonsell =
JsonHelper.JSONStringToListUTC<Model.Exchange.Personsell>(jsonString);
if (_DataPersonsell != null && _DataPersonsell.Count > 0)
{
#region oracle数据库和redis数据库
//定义需插入redis数据库的集合
List<Model.Redis.Personsell> redisList = new List<Model.Redis.Personsell>();
//遍历收银员交班报表,获取需要插入的集合
foreach (Model.Exchange.Personsell _Personsell in _DataPersonsell)
{
//存储redis数据库需要插入的数据
Model.Redis.Personsell personsell = new Model.Redis.Personsell();
personsell.PERSONSELL_CODE = _Personsell.ENDACCOUNT_CODE + _Personsell.WOKER_NUMBER.TryParseToString();
redisList.Add(personsell);
//记录文本日志内容收银员交班报表编码【PERSONSELL_CODE】
//门店编码【SHOPCODE】机器编码【MACHINECODE】结账时间【ENDACCOUNT_DATE】
LogCentent += (LogCentent == "" ? "" : ",") + "{\"PERSONSELL_CODE\":\"" + personsell.PERSONSELL_CODE +
"\",\"SHOPCODE\":\"" + _Personsell.SHOPCODE + "\",\"MACHINECODE\":\"" +
_Personsell.MACHINECODE + "\",\"PERSONSELL_DATE\":\"" + _Personsell.ENDDATE + "\"}";
}
//记录文本文件存储的内容
LogData = LogCentent;
#region oracle插入语句redis数据库
if (_DataPersonsell.Count > 0)
{
//执行收银员交班报表插入语句,若出现插入失败,则回滚全部数据,返回异常后续代码不再执行
if (ExtraSPZJ.Contains(codes[0]))
{
//插入商业集团收银员交班数据表
OperationDataHelper<Model.Exchange.Personsell>.InsertTableData(
_OracleHelper, _DataPersonsell, "HIGHWAY_EXCHANGE.T_PERSONSELL_ZJ");
}
else
{
//插入云平台收银员交班数据表
OperationDataHelper<Model.Exchange.Personsell>.InsertTableData(
_OracleHelper, _DataPersonsell, "HIGHWAY_EXCHANGE.T_PERSONSELL_NEW");
}
//记录插入oracle数据库文本日志
LogData = tableName_Text + "成功添加至oracle数据库提交的内容" + LogCentent;
//将插入的数据存储到Redis数据库中
bool flag = RedisHelp.DataHelper.RecordToRedis(
redisList, "Personsell:" + codes[0], "PERSONSELL_CODE");
if (flag)
{
//redis数据库记录成功则记录文本日志
LogData += "\r\n" + tableName_Text + "成功添加至redis数据库提交的内容" + LogCentent;
}
else
{
//redis数据库记录失败则告知收银系统需要单独调取接口重新插入缓存
//errorCode = 2;
LogData += "\r\n" + tableName_Text + "redis数据库记录失败提交的内容" + LogCentent;
//保存redis数据库存储异常日结数据
SDK.CommonHelper.SaveTextFile("Personsell\\" + UniqueCode + ".txt", jsonString);
}
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
}
#endregion
//添加、更新成功无需传递任何参数。
strBack = "{\"error\": " + errorCode + " ,\"msg\": \"" + tableName_Text + "添加成功!\",\"rows\":[]}";
#endregion
}
else
{
strBack = "{\"error\": -1 ,\"msg\": \"" + tableName_Text + "添加失败JSON参数解析异常\",\"rows\":[]}";
//记录日志
LogData = tableName_Text + "添加失败JSON参数解析异常提交的内容{\"PERSONSELL_CODE\":\"" + UniqueCode + "\"}";
SDK.LogHelper.WriteLog(LogData, LogPath, codes[0] + ".log");
}
return strBack;
}
#endregion
}
}