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
{
///
/// 商业集团服务区编码
///
protected static string ExtraSPZJ = ConfigurationManager.AppSettings["ExtraSPZJ"];
#region 方法 -> 日结账期传输
///
/// 日结账期传输
///
/// 本地数据库连接
/// 上传的数据集合,json字符串
/// 服务区编码codes[0]、门店编码codes[1] 、机器编码codes[3]数据集合
/// redis数据库判断数据表的唯一标识
/// 是否只进行缓存数据更新,默认为false,进行正常的数据传输
/// 表名对应的中文内容
/// 文本日志记录的地址
/// 文本文件存储的内容(包含LogCentent)
/// 执行结果返回内容
/// error:-1【代码执行异常】,1【代码执行正常】,2【redis数据库存储异常】
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(
"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(
"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 _DataEndaccount =
JsonHelper.JSONStringToListUTC(jsonString);
if (_DataEndaccount != null && _DataEndaccount.Count > 0)
{
#region 将日结数据存入oracle数据库和redis数据库
//定义需插入redis数据库的集合
List redisList = new List();
//遍历日结数据,获取需要插入的集合
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.InsertTableData(
_OracleHelper, _DataEndaccount, "HIGHWAY_EXCHANGE.T_ENDACCOUNT_ZJ");
}
else
{
//插入云平台日结营收数据表
OperationDataHelper.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 方法 -> 收银员交班报表传输
///
/// 收银员交班报表传输
///
/// 本地数据库连接
/// 上传的数据集合,json字符串
/// 服务区编码codes[0]、门店编码codes[1] 、机器编码codes[3]数据集合
/// redis数据库判断数据表的唯一标识
/// 是否只进行缓存数据更新,默认为false,进行正常的数据传输
/// 表名对应的中文内容
/// 文本日志记录的地址
/// 文本文件存储的内容(包含LogCentent)
/// 执行结果返回内容
/// error:-1【代码执行异常】,1【代码执行正常】,2【redis数据库存储异常】
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(
"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(
"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 _DataPersonsell =
JsonHelper.JSONStringToListUTC(jsonString);
if (_DataPersonsell != null && _DataPersonsell.Count > 0)
{
#region 将收银员交班报表存入oracle数据库和redis数据库
//定义需插入redis数据库的集合
List redisList = new List();
//遍历收银员交班报表,获取需要插入的集合
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.InsertTableData(
_OracleHelper, _DataPersonsell, "HIGHWAY_EXCHANGE.T_PERSONSELL_ZJ");
}
else
{
//插入云平台收银员交班数据表
OperationDataHelper.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
}
}