345 lines
20 KiB
C#
345 lines
20 KiB
C#
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
|
||
}
|
||
} |