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 } }