using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using SuperMap.RealEstate.ServiceModel; using SuperMap.RealEstate.ExchangeData.Business; using CMB = SuperMap.RealEstate.Coop.Merchant.Business; using HWSB = SuperMap.RealEstate.HighWay.Storage.Business; using HSDB = SuperMap.RealEstate.HighWay.SellData.Business; using MSSB = SuperMap.RealEstate.MemberShip.Storage.Business; using MSPB = SuperMap.RealEstate.MobileServicePlatform.Business; using SocketTransfer.SDK; using HZQR.Common; namespace ServerPartTransmission.Method { /// /// 数据通讯相关方法 /// public class DataTransfer { #region WCF服务访问方式 #region 方法 -> 数据下发 #region 方法 -> 更新数据变更日志表 /// /// 更新数据变更日志表 /// /// 事务管理器 /// 服务区编码 /// 更新表名 /// 更新时间 /// 返回结果:true【更新成功】,false【更新失败】 public static bool UpdateDataVersion(Transaction _Transaction, string ServerepartCode, string TableName, DateTime UpdateDateTime) { bool Flag = true; //查询数据变更日志表是否存在当前服务区【ServerepartCode】的数据表【TableName】变更记录 DOWNLOADUPDATE _DOWNLOADUPDATE = new DOWNLOADUPDATE(_Transaction); _DOWNLOADUPDATE.AddSearchParameter("SERVERPARTCODE", ServerepartCode); //服务区编码 _DOWNLOADUPDATE.AddSearchParameter("TABLENAME", TableName); //更新表名 if (_DOWNLOADUPDATE.Search()) { //表中更新时间小于UpdateDateTime,则更新时间 if (_DOWNLOADUPDATE.VERSIONUPDATE_DATE < UpdateDateTime) { _DOWNLOADUPDATE.VERSIONUPDATE_DATE = UpdateDateTime; //更新时间 if (!_DOWNLOADUPDATE.Update()) { Flag = false; } } } else { //不存在则插入数据 _DOWNLOADUPDATE.ResetProperty(); _DOWNLOADUPDATE.SERVERPARTCODE = ServerepartCode; //服务区编码 _DOWNLOADUPDATE.TABLENAME = TableName; //更新表名 _DOWNLOADUPDATE.VERSIONUPDATE_DATE = UpdateDateTime; //更新时间 _DOWNLOADUPDATE.CREATE_DATE = DateTime.Now; //创建时间 _DOWNLOADUPDATE.Insert(); } return Flag; } #endregion #region 方法 -> 更新云端商户商品状态 /// /// 更新云端商户商品状态 /// /// 事务管理器 /// 商品集合(json数组) /// 返回结果:true【更新成功】,false【更新失败】 public static bool UpdateMerchantCommodityState(Transaction _Transaction, string CommodityJson) { bool Flag = false; if (!string.IsNullOrWhiteSpace(CommodityJson)) { COMMODITYEX _COMMODITYEX = new COMMODITYEX(_Transaction); //解析商品json数组 List CommodityList = QRWL.Common.JsonHelper.JSONStringToList(CommodityJson); foreach (Model.CommodityModel _Commodity in CommodityList) { string SQLString = ""; //已存在商品数据,则更新商品状态 SQLString = string.Format(@"UPDATE COOP_MERCHANT.T_COMMODITY SET COMMODITY_STATE = {0} WHERE SERVERPARTCODE = '" + _Commodity.SERVERPARTCODE + "' AND COMMODITY_BARCODE = '" + _Commodity.COMMODITY_BARCODE + "' AND BUSINESSTYPE = " + _Commodity.BUSINESSTYPE, CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_STATE.TryParseToString()));//商品状态 _COMMODITYEX.ExecuteNonQuery(SQLString, null); Flag = true; } } return Flag; } #endregion #region 方法 -> 从业主商品库插入/更新云端商品表数据 /// /// 从云端商品库插入/更新交互商品表数据 /// /// 事务管理器 /// 商品集合(json数组) /// 省份编码 /// 服务区内码 /// 返回结果:true【更新成功】,false【更新失败】 public static bool SynchroCommodityFromUnit(Transaction _Transaction, string CommodityJson, string ProvinceCode, string ServerpartID) { bool Flag = false; if (!string.IsNullOrWhiteSpace(CommodityJson)) { MSPB.SERVERPART _SERVERPART = new MSPB.SERVERPART(_Transaction); _SERVERPART.AddSearchParameter("PROVINCE_CODE", ProvinceCode); _SERVERPART.AddSearchParameter("SERVERPART_ID", ServerpartID); if (_SERVERPART.Search()) { CMB.COMMODITY _COMMODITY = new CMB.COMMODITY(_Transaction); DataTable dtCommodity = _COMMODITY.ExecuteDataTable(@" SELECT COMMODITY_BARCODE,BUSINESSTYPE,OPERATE_DATE FROM COOP_MERCHANT.T_COMMODITY WHERE COMMODITY_TYPE = '3000' AND SERVERPART_ID = " + ServerpartID + " AND PROVINCE_CODE = " + ProvinceCode); //解析商品json数组 List CommodityList = QRWL.Common.JsonHelper.JSONStringToList(CommodityJson); foreach (Model.CommodityModel _Commodity in CommodityList) { string SQLString = ""; DataRow[] drCommodityList = dtCommodity.Select("COMMODITY_BARCODE = '" + _Commodity.COMMODITY_BARCODE + "' AND BUSINESSTYPE = " + _Commodity.BUSINESSTYPE); if (drCommodityList.Length > 0) { //若商品已存在【服务区编码+商品条码+商品业态】,且生效时间大于当前商品生效时间,则执行下一条数据 if (drCommodityList[0][2].TryParseToDateTime() > _Commodity.OPERATE_DATE) { continue; } //已存在商品数据,则更新商品信息 SQLString = string.Format(@"UPDATE COOP_MERCHANT.T_COMMODITY SET USERDEFINEDTYPE_NAME = {0},COMMODITY_CODE = {1},COMMODITY_NAME = {2}, COMMODITY_UNIT = {3},COMMODITY_RULE = {4},COMMODITY_EN = {5},COMMODITY_ORI = {6}, COMMODITY_GRADE = {7},COMMODITY_RETAILPRICE = {8},COMMODITY_PURCHASEPRICE = {9}, COMMODITY_MEMBERPRICE = {10},ISBULK = {11},METERINGMETHOD = {12}, COMMODITY_HOTKEY = {13},USERDEFINEDTYPE_ID = {14},COMMODITY_STATE = {15}, COMMODITY_TAG = {16},OPERATE_DATE = {17},COMMODITY_DESC = {18} WHERE COMMODITY_TYPE = '3000' AND SERVERPART_ID = {19} AND PROVINCE_CODE = {20} AND COMMODITY_BARCODE = '{21}' AND BUSINESSTYPE = {22}", CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_TYPENAME),//商品类型名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_CODE),//商品编码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_NAME),//商品名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_UNIT),//商品单位 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_RULE),//商品规格 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_EN),//拼音简码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_ORI),//商品产地 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_GRADE),//质量等级 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_PURCHASEPRICE),//进货价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_MEMBERPRICE),//会员价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.ISBULK),//是否散装 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.METERINGMETHOD),//称重方式 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_HOTKEY),//商品快捷键 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.USERDEFINEDTYPE_ID),//商品自定义类 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_SYMBOL),//商品标识(单品扫码上传使用) CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_STATE),//商品状态 CommonHelper.IsArrayType(CommonHelper.ValueType.DateTime, _Commodity.OPERATE_DATE),//生效时间 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_DESC),//备注说明 ServerpartID, ProvinceCode, _Commodity.COMMODITY_BARCODE, _Commodity.BUSINESSTYPE); } else { //不存在商品数据,则插入商品信息 SQLString = string.Format(@"INSERT INTO COOP_MERCHANT.T_COMMODITY (COMMODITY_ID,PROVINCE_CODE, SERVERPART_ID,SERVERPARTSHOP_ID,SERVERPARTCODE,SHOPCODE,SERVERPART_NAME,SHOPNAME, COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME,COMMODITY_BARCODE,COMMODITY_UNIT, COMMODITY_RULE,COMMODITY_EN,COMMODITY_ORI,COMMODITY_GRADE,COMMODITY_RETAILPRICE, COMMODITY_PURCHASEPRICE,COMMODITY_MEMBERPRICE,COMMODITY_TAG,BUSINESSTYPE,ISBULK, METERINGMETHOD,COMMODITY_HOTKEY,USERDEFINEDTYPE_ID,USERDEFINEDTYPE_NAME, UPPER_STATE,COMMODITY_STATE,OPERATE_DATE,COMMODITY_DESC) SELECT COOP_MERCHANT.SEQ_COMMODITY.NEXTVAL,A.PROVINCE_CODE,A.SERVERPART_ID, B.SERVERPARTSHOP_ID,A.SERVERPART_CODE,B.SHOPCODE,A.SERVERPART_NAME,B.SHOPNAME, '3000',{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}, {13},{14},{15},{16},{17},{18},0,{19},{20})", CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_CODE),//商品编码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_NAME),//商品名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_BARCODE),//商品条码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_UNIT),//商品单位 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_RULE),//商品规格 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_EN),//拼音简码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_ORI),//商品产地 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_GRADE),//质量等级 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_PURCHASEPRICE),//进货价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_MEMBERPRICE),//会员价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_SYMBOL),//商品标识(单品扫码上传使用) CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.BUSINESSTYPE),//商品业态 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.ISBULK),//是否散称 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.METERINGMETHOD),//称重方式 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_HOTKEY),//商品快捷键 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.USERDEFINEDTYPE_ID),//商品自定义类 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_TYPENAME),//商品自定义类名称 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_STATE),//商品状态 CommonHelper.IsArrayType(CommonHelper.ValueType.DateTime, _Commodity.OPERATE_DATE),//生效时间 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_DESC));//备注说明 } _COMMODITY.ExecuteNonQuery(SQLString, null); Flag = true; } } } return Flag; } #endregion #region 方法 -> 从云端商品库插入/更新业主端商品表数据 /// /// 从云端商品库插入/更新业主端商品表数据 /// /// 事务管理器 /// 商品集合(json数组) /// 服务区内码 /// 商品表省份标识 /// 返回结果:true【更新成功】,false【更新失败】 public static bool SynchroCommodityFromCloud(Transaction _Transaction, string CommodityJson, string ServerpartID, string GoodsProvinceCode = "") { bool Flag = false; if (!string.IsNullOrWhiteSpace(CommodityJson)) { HWSB.SERVERPART _SERVERPART = new HWSB.SERVERPART(_Transaction); _SERVERPART.SERVERPART_ID_Encrypt = ServerpartID.ToEncrypt(); if (_SERVERPART.Select()) { HWSB.COMMODITY _COMMODITY = new HWSB.COMMODITY(_Transaction); if (_COMMODITY.ExecuteDataTable("SELECT 1 FROM SYS.DBA_TABLES WHERE OWNER = 'HIGHWAY_STORAGE' AND " + "TABLE_NAME = 'T_COMMODITY_" + GoodsProvinceCode + "'").Rows.Count > 0) { GoodsProvinceCode = "_" + GoodsProvinceCode; } else { GoodsProvinceCode = ""; } DataTable dtCommodity = _COMMODITY.ExecuteDataTable("SELECT COMMODITY_BARCODE,BUSINESSTYPE,OPERATE_DATE " + "FROM HIGHWAY_STORAGE.T_COMMODITY" + GoodsProvinceCode + " WHERE SERVERPART_ID = '" + ServerpartID + "'"); //解析商品json数组 List CommodityList = QRWL.Common.JsonHelper.JSONStringToList(CommodityJson); foreach (Model.CommodityModel _Commodity in CommodityList) { string SQLString = ""; DataRow[] drCommodityList = dtCommodity.Select("COMMODITY_BARCODE = '" + _Commodity.COMMODITY_BARCODE + "' AND BUSINESSTYPE = " + _Commodity.BUSINESSTYPE); if (dtCommodity.Rows.Count > 0) { //若商品已存在【服务区编码+商品条码+商品业态】,且生效时间大于当前商品生效时间,则执行下一条数据 if (dtCommodity.Select("OPERATE_DATE > '" + _Commodity.OPERATE_DATE + "'").Length > 0) { continue; } //已存在商品数据,则更新商品信息 SQLString = string.Format(@"UPDATE HIGHWAY_STORAGE.T_COMMODITY{24} SET COMMODITY_TYPE = {0},COMMODITY_CODE = {1},COMMODITY_NAME = {2},COMMODITY_UNIT = {3}, COMMODITY_RULE = {4},COMMODITY_EN = {5},COMMODITY_ORI = {6},COMMODITY_GRADE = {7}, COMMODITY_CURRPRICE = {8},COMMODITY_RETAILPRICE = {9},COMMODITY_PURCHASEPRICE = {10}, COMMODITY_MEMBERPRICE = {11},CANSALE = {12},ISBULK = {13},METERINGMETHOD = {14}, COMMODITY_HOTKEY = {15},USERDEFINEDTYPE_ID = {16},COMMODITY_SYMBOL = {17}, COMMODITY_STATE = {18},OPERATE_DATE = {19},COMMODITY_DESC = {20} WHERE SERVERPART_ID = {21} AND COMMODITY_BARCODE = '{22}' AND BUSINESSTYPE = {23}", CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_TYPENAME),//商品类型名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_CODE),//商品编码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_NAME),//商品名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_UNIT),//商品单位 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_RULE),//商品规格 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_EN),//拼音简码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_ORI),//商品产地 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_GRADE),//质量等级 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_PURCHASEPRICE),//进货价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_MEMBERPRICE),//会员价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.CANCHANGEPRICE),//是否可售 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.ISBULK),//是否散称 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.METERINGMETHOD),//称重方式 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_HOTKEY),//商品快捷键 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.USERDEFINEDTYPE_ID),//商品自定义类 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_SYMBOL),//商品标识(单品扫码上传使用) CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_STATE),//商品状态 CommonHelper.IsArrayType(CommonHelper.ValueType.DateTime, _Commodity.OPERATE_DATE),//生效时间 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_DESC),//备注说明 ServerpartID, _Commodity.OPERATE_DATE, _Commodity.BUSINESSTYPE, GoodsProvinceCode); } else { //不存在商品数据,则插入商品信息 SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_COMMODITY{25} (COMMODITY_ID, COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME,COMMODITY_BARCODE,COMMODITY_UNIT, COMMODITY_RULE,COMMODITY_EN,COMMODITY_ORI,COMMODITY_GRADE,COMMODITY_CURRPRICE, COMMODITY_RETAILPRICE,COMMODITY_PURCHASEPRICE,COMMODITY_MEMBERPRICE,CANSALE, ISBULK,METERINGMETHOD,COMMODITY_HOTKEY,USERDEFINEDTYPE_ID,COMMODITY_SYMBOL, BUSINESSTYPE,COMMODITY_STATE,OPERATE_DATE,COMMODITY_DESC,SERVERPART_ID,PROVINCE_CODE) VALUES (HIGHWAY_STORAGE.SEQ_COMMODITY.NEXTVAL, {0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}, {13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},1)", CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_TYPENAME),//商品类型名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_CODE),//商品编码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_NAME),//商品名称 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_BARCODE),//商品条码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_UNIT),//商品单位 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_RULE),//商品规格 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_EN),//拼音简码 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_ORI),//商品产地 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_GRADE),//质量等级 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_RETAILPRICE),//零售价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_PURCHASEPRICE),//进货价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Double, _Commodity.COMMODITY_MEMBERPRICE),//会员价格 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.CANCHANGEPRICE),//是否可售 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.ISBULK),//是否散称 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.METERINGMETHOD),//称重方式 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_HOTKEY),//商品快捷键 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.USERDEFINEDTYPE_ID),//商品自定义类 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_SYMBOL),//商品标识(单品扫码上传使用) CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.BUSINESSTYPE),//商品业态 CommonHelper.IsArrayType(CommonHelper.ValueType.Int, _Commodity.COMMODITY_STATE),//商品状态 CommonHelper.IsArrayType(CommonHelper.ValueType.DateTime, _Commodity.OPERATE_DATE),//生效时间 CommonHelper.IsArrayType(CommonHelper.ValueType.String, _Commodity.COMMODITY_DESC),//备注说明 ServerpartID, _SERVERPART.PROVINCE_CODE, GoodsProvinceCode); } _COMMODITY.ExecuteNonQuery(SQLString, null); Flag = true; } } } return Flag; } #endregion #region 方法 -> 服务区获取业主审批商品信息 /// /// 获取业主审批商品信息 /// /// 事务管理器 /// 服务区编码 /// 商品服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable GetCommodityFromUnit(Transaction _Transaction, string ServerepartCode, string LastTime, string ServerepartCodeSQL, int? StartNum = null, int? EndNum = null) { DataTable dtCommodityInfo = new DataTable(); //根据服务区编码获取服务区信息 HWSB.SERVERPART _SERVERPART = Serverpart.GetServerpartByCode(_Transaction, ServerepartCode); if (_SERVERPART.PropertyObject != null && _SERVERPART.SERVERPART_ID != null) { //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND A.SERVERPART_ID = " + _SERVERPART.SERVERPART_ID; //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT A.COMMODITY_ID,'{0}' AS SERVERPARTCODE, B.COMMODITYTYPE_CODE AS COMMODITY_TYPECODE, NVL(B.COMMODITYTYPE_NAME,A.COMMODITY_TYPE) AS COMMODITY_TYPENAME,A.COMMODITY_CODE, A.COMMODITY_BARCODE,SUBSTR(REPLACE(A.COMMODITY_NAME,'--',' '),0,25) AS COMMODITY_NAME, SUBSTR(NVL(A.COMMODITY_RULE,'1*1'),0,25) AS COMMODITY_RULE, SUBSTR(NVL(A.COMMODITY_UNIT,'1'),0,25) AS COMMODITY_UNIT,A.COMMODITY_EN, NVL(A.CANSALE,1) AS CANCHANGEPRICE,NVL(A.METERINGMETHOD,1) AS METERINGMETHOD, A.COMMODITY_RETAILPRICE,NVL(A.COMMODITY_MEMBERPRICE,A.COMMODITY_RETAILPRICE) AS COMMODITY_MEMBERPRICE, A.BUSINESSTYPE,A.COMMODITY_SYMBOL,A.COMMODITY_HOTKEY,A.USERDEFINEDTYPE_ID, A.COMMODITY_STATE,A.OPERATE_DATE,0 AS DATA_SOURCE FROM HIGHWAY_STORAGE.V_WHOLE_COMMODITY A LEFT JOIN HIGHWAY_STORAGE.T_COMMODITYTYPE B ON A.COMMODITY_TYPE = TO_CHAR(B.COMMODITYTYPE_ID) WHERE A.COMMODITY_BARCODE IS NOT NULL AND A.BUSINESSTYPE NOT IN (9032,9990) AND A.COMMODITY_STATE <= 1{1}", ServerepartCodeSQL, WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.COMMODITY_ID"; } dtCommodityInfo = _SERVERPART.ExecuteDataTable(CommonHelper.GetPageSql(SQLString, StartNum, EndNum)); } return dtCommodityInfo; } #endregion #region 方法 -> 服务区获取云端商户审批商品信息 /// /// 服务区获取云端商户审批商品信息 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable GetCommodityFromCloud(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtCommodityInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //筛选服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND A.SERVERPARTCODE IN ('" + ServerepartCode + "')"; //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT MIN(A.COMMODITY_ID) AS COMMODITY_ID,A.SERVERPARTCODE, NULL AS COMMODITY_TYPECODE,NVL(USERDEFINEDTYPE_NAME,'零售类') AS COMMODITY_TYPENAME, A.COMMODITY_CODE,A.COMMODITY_BARCODE,A.COMMODITY_NAME,NVL(A.COMMODITY_RULE,'1*1') AS COMMODITY_RULE, NVL(A.COMMODITY_UNIT,'1') AS COMMODITY_UNIT,A.COMMODITY_EN,1 AS CANCHANGEPRICE, NVL(A.METERINGMETHOD,1) AS METERINGMETHOD,A.COMMODITY_RETAILPRICE, NVL(A.COMMODITY_MEMBERPRICE,A.COMMODITY_RETAILPRICE) AS COMMODITY_MEMBERPRICE, A.BUSINESSTYPE,'CM' || MIN(A.COMMODITY_ID) AS COMMODITY_SYMBOL, A.GUARANTEE_DAY,A.REMINDER_DAY,A.COMMODITY_HOTKEY,A.USERDEFINEDTYPE_ID, A.COMMODITY_STATE,MAX(A.OPERATE_DATE) AS OPERATE_DATE,1 AS DATA_SOURCE FROM COOP_MERCHANT.T_COMMODITY A WHERE A.COMMODITY_TYPE = '3000' AND A.BUSINESSTYPE NOT IN (9032,9990) AND A.COMMODITY_CODE IS NOT NULL AND A.COMMODITY_BARCODE IS NOT NULL AND A.COMMODITY_STATE <= 1 AND EXISTS (SELECT 1 FROM COOP_MERCHANT.T_SERVERPARTSHOP B WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.STATISTICS_TYPE LIKE '%2040%'){0} GROUP BY A.SERVERPARTCODE,USERDEFINEDTYPE_NAME,A.COMMODITY_CODE,A.COMMODITY_BARCODE, A.COMMODITY_NAME,NVL(A.COMMODITY_RULE,'1*1'),NVL(A.COMMODITY_UNIT,'1'), A.COMMODITY_EN,NVL(A.METERINGMETHOD,1),A.COMMODITY_RETAILPRICE, NVL(A.COMMODITY_MEMBERPRICE,A.COMMODITY_RETAILPRICE),A.BUSINESSTYPE, A.GUARANTEE_DAY,A.REMINDER_DAY,A.COMMODITY_HOTKEY,A.USERDEFINEDTYPE_ID,A.COMMODITY_STATE", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString = "SELECT * FROM (" + SQLString + ") ORDER BY OPERATE_DATE,COMMODITY_ID"; } dtCommodityInfo = new CMB.COMMODITY(_Transaction).ExecuteDataTable(CommonHelper.GetPageSql(SQLString, StartNum, EndNum)); } return dtCommodityInfo; } #endregion #region 方法 -> 获取服务区基本信息【区服务器】 /// /// 获取服务区基本信息【区服务器】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadServerpart(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtServerpartInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND A.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.SERVERPART_ID,A.SERVERPART_NAME,A.SERVERPART_CODE,A.SERVERPART_INDEX, A.PROVINCE_CODE AS PROVINCE_ID,B.FIELDENUM_VALUE AS PROVINCE_CODE,A.STATISTIC_TYPE, A.SPREGIONTYPE_ID AS REGIONTYPE_ID,A.SPREGIONTYPE_NAME AS REGIONTYPE_NAME, CASE WHEN C.SERVERPART_ID IS NULL THEN 0 ELSE 1 END AS UNIFORM_TYPE,A.OPERATE_DATE AS DOWNLOADDATE FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_SERVERPART C ON A.PROVINCE_CODE = C.PROVINCE_CODE AND C.STATISTIC_TYPE = 4000, PLATFORM_DICTIONARY.T_FIELDENUM B WHERE A.PROVINCE_CODE = B.FIELDENUM_ID AND A.STATISTICS_TYPE IN (1000){0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.SERVERPART_INDEX,A.SERVERPART_CODE"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtServerpartInfo = new HWSB.SERVERPART(_Transaction).ExecuteDataTable(SQLString); return dtServerpartInfo; } #endregion #region 方法 -> 获取门店基本信息【区服务器】 /// /// 获取门店基本信息【区服务器】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadServerpartShopByCode(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null, string shopcode = "") { DataTable dtServerpartshopInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND B.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //过滤门店编码 if (!string.IsNullOrWhiteSpace(shopcode)) { WhereSQL += " AND A.SHOPCODE = '" + shopcode + "'"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.SERVERPARTSHOP_ID AS SHOPMESSAGE_EX_ID, A.SERVERPARTSHOP_ID,B.SERVERPART_CODE,A.SHOPCODE,A.SHOPNAME, A.SHOPTRADE AS BUSINESSTYPE,A.SHOPSHORTNAME AS BUSINESSTYPE_NAME, A.OPERATE_DATE AS DOWNLOADDATE, CASE WHEN A.ISVALID = 0 THEN A.ISVALID WHEN BUSINESS_STATE >= 2000 THEN 0 ELSE 1 END AS SERVERPARTSHOP_STATE, NVL(UNIFORMMANAGE_TYPE,0) AS UNIFORMMANAGE_TYPE, NVL(AUDIT_UPLOADSTATE,1) AS AUDIT_UPLOADSTATE, NVL(REVENUE_UPLOADSTATE,1) AS REVENUE_UPLOADSTATE, NVL(SALECOUNT_LIMIT,0) AS SALECOUNT_LIMIT, NVL(SALEAMOUNT_LIMIT,0) AS SALEAMOUNT_LIMIT, NVL(RECORD_DISCOUNT,1) AS RECORD_DISCOUNT, OWNERUNIT_ID,OWNERUNIT_NAME FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP A, HIGHWAY_STORAGE.T_SERVERPART B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPTRADE NOT IN ('9032','9999') AND SHOPCODE IS NOT NULL{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,B.SERVERPART_CODE,A.SERVERPARTSHOP_ID"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtServerpartshopInfo = new HWSB.SERVERPARTSHOP(_Transaction).ExecuteDataTable(SQLString); return dtServerpartshopInfo; } #endregion #region 方法 -> 获取业主管理收银员基本信息【区服务器】 /// /// 获取收银员基本信息【区服务器】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadSellWorkerFromUnit(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtSellWorkerInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND B.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.CASHWORKER_ID AS SELLWORKER_EX_ID,B.SERVERPART_CODE AS SERVERPARTCODE, A.CASHWORKER_LOGINNAME AS SELLWORKERCODE,A.CASHWORKER_NAME AS SELLWORKERNAME, A.CASHWORKER_LOGINPWD AS SELLWORKERPASSWORD,A.DISCOUNT_RATE,A.WORKER_OTHER AS PROWERRIGHT, A.OPERATE_DATE AS DOWNLOADDATE,A.WORKER_VALID AS VALID,0 AS DATA_SOURCE FROM HIGHWAY_STORAGE.T_CASHWORKER A, HIGHWAY_STORAGE.T_SERVERPART B WHERE A.SERVERPART_ID = B.SERVERPART_ID{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.CASHWORKER_LOGINNAME"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtSellWorkerInfo = new HWSB.CASHWORKER(_Transaction).ExecuteDataTable(SQLString); return dtSellWorkerInfo; } #endregion #region 方法 -> 获取商户管理收银员基本信息【云端】 /// /// 获取收银员基本信息【云端】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadSellWorkerFromCloud(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtSellWorkerInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND B.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.CASHWORKER_ID AS SELLWORKER_EX_ID,B.SERVERPART_CODE AS SERVERPARTCODE, A.CASHWORKER_LOGINNAME AS SELLWORKERCODE,A.CASHWORKER_NAME AS SELLWORKERNAME, A.CASHWORKER_LOGINPWD AS SELLWORKERPASSWORD,A.DISCOUNT_RATE,A.WORKER_OTHER AS PROWERRIGHT, A.OPERATE_DATE AS DOWNLOADDATE,A.WORKER_VALID AS VALID,1 AS DATA_SOURCE FROM COOP_MERCHANT.T_CASHWORKER A, COOP_MERCHANT.T_SERVERPART B WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND CASHWORKER_TYPE <> 99 AND A.SERVERPART_ID = B.SERVERPART_ID{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.CASHWORKER_LOGINNAME"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtSellWorkerInfo = new CMB.CASHWORKER(_Transaction).ExecuteDataTable(SQLString); return dtSellWorkerInfo; } #endregion #region 方法 -> 获取商品自定义类【区服务器】 /// /// 获取商品自定义类【区服务器】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadUserdefindTypeFromUnit(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtSellWorkerInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND B.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.USERDEFINEDTYPE_ID,A.USERDEFINEDTYPE_PID,A.USERDEFINEDTYPE_NAME, B.SERVERPART_CODE AS SERVERPARTCODE,A.SERVERPARTSHOP_ID,A.BUSINESSTYPE, A.OPERATE_DATE AS USERDEFINEDTYPE_DATE,A.USERDEFINEDTYPE_INDEX,0 AS DATA_SOURCE FROM HIGHWAY_STORAGE.T_USERDEFINEDTYPE A, HIGHWAY_STORAGE.T_SERVERPART B WHERE A.SERVERPART_ID = B.SERVERPART_ID{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.USERDEFINEDTYPE_DATE,A.USERDEFINEDTYPE_INDEX,A.USERDEFINEDTYPE_ID"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtSellWorkerInfo = new HWSB.CASHWORKER(_Transaction).ExecuteDataTable(SQLString); return dtSellWorkerInfo; } #endregion #region 方法 -> 获取商品自定义类【云端】 /// /// 获取商品自定义类【云端】 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable DownloadUserdefindTypeFromCloud(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtSellWorkerInfo = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; //过滤服务区编码 if (!string.IsNullOrWhiteSpace(ServerepartCode)) { WhereSQL += " AND B.SERVERPART_CODE IN ('" + ServerepartCode + "')"; } //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //服务区数据查询语句 SQLString = string.Format(@"SELECT A.USERDEFINEDTYPE_ID,A.USERDEFINEDTYPE_PID,A.USERDEFINEDTYPE_NAME, B.SERVERPART_CODE AS SERVERPARTCODE,C.SHOPTRADE AS BUSINESSTYPE, A.OPERATE_DATE AS USERDEFINEDTYPE_DATE,A.USERDEFINEDTYPE_INDEX,1 AS DATA_SOURCE FROM COOP_MERCHANT.T_USERDEFINEDTYPE A, COOP_MERCHANT.T_SERVERPART B, COOP_MERCHANT.T_SERVERPARTSHOP C WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND A.PROVINCE_CODE = C.PROVINCE_CODE AND A.SERVERPARTCODE LIKE '%' || B.SERVERPART_CODE || '%' AND ',' || A.SERVERPARTSHOP_ID || ',' LIKE '%,' || C.SERVERPARTSHOP_ID || ',%'{0} GROUP BY A.USERDEFINEDTYPE_ID,A.USERDEFINEDTYPE_PID,A.USERDEFINEDTYPE_NAME, B.SERVERPART_CODE,C.SHOPTRADE,A.OPERATE_DATE,A.USERDEFINEDTYPE_INDEX", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.USERDEFINEDTYPE_INDEX,A.USERDEFINEDTYPE_ID"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtSellWorkerInfo = new CMB.USERDEFINEDTYPE(_Transaction).ExecuteDataTable(SQLString); return dtSellWorkerInfo; } #endregion #region 方法 -> 获取促销商品信息 /// /// 获取促销商品信息 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable GetPromotion(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtPromotion = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND B.SERVERPART_CODE = '" + ServerepartCode + "'"; //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND A.OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT A.PROMOTION_ID AS SALESPROMOTE_EX_ID,A.PROMOTION_ID,D.RTMEMBERSHIP_ID, B.SERVERPART_CODE AS SERVERPARTCODE,C.SHOPCODE,A.SALESPROMOTE_STARTDATE,A.SALESPROMOTE_ENDDATE, A.SALESPROMOTE_TYPE,A.SALESPROMOTE_NAME,A.THRESHOLD_AMOUNT,NVL(D.PROMOTION_PRICE,A.DISCOUNT_RATE) AS DISCOUNT_RATE, NVL(D.COMMODITY_CODE,A.COMMODITY_CODE) AS COMMODITY_CODE,A.CONDITION_SKUCODE AS CONDITION_SKU, A.SALESPROMOTE_VIP,A.SALESPROMOTE_STATE,A.TICKET_PREFIX, A.OPERATE_DATE AS SALESPROMOTE_DATE,A.SALESPROMOTE_DESC FROM MEMBERSHIP_STORAGE.T_PROMOTION A LEFT JOIN MEMBERSHIP_STORAGE.T_RTMEMBERSHIP D ON A.PROMOTION_ID = D.PROMOTION_ID, MOBILESERVICE_PLATFORM.T_SERVERPART B, MOBILESERVICE_PLATFORM.T_SERVERPARTSHOP C WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND B.PROVINCE_CODE = C.PROVINCE_CODE AND ',' || A.SERVERPARTSHOP_IDS || ',' LIKE '%,' || C.SERVERPARTSHOP_ID || ',%' AND B.SERVERPART_ID = C.SERVERPART_ID AND C.SHOPCODE IS NOT NULL AND A.SALESPROMOTE_STATE IN (0,1){0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY A.OPERATE_DATE,A.PROMOTION_ID"; } dtPromotion = new MSSB.PROMOTION(_Transaction).ExecuteDataTable(CommonHelper.GetPageSql(SQLString, StartNum, EndNum)); return dtPromotion; } #endregion #region 方法 -> 获取机器信息 /// /// 获取机器信息 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable GetMachineInfo(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtMachine = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE = '" + ServerepartCode + "'"; //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND OPERATE_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT MACHINEMANAGE_ID AS MACHINEINFO_ID,SERVERPARTCODE,SHOPCODE, MACHINECODE,MACHINENAME,MACHINE_MACADDRESS,SERVER_IP,MACHINE_IP,OPERATE_DATE AS ADDDATE FROM HIGHWAY_EXCHANGE.T_MACHINEMANAGE WHERE 1 = 1{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY OPERATE_DATE,MACHINE_MACADDRESS"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtMachine = new MACHINEINFO(_Transaction).ExecuteDataTable(SQLString); return dtMachine; } #endregion #region 方法 -> 获取收银机配置信息 /// /// 获取收银机配置信息 /// /// 事务管理器 /// 服务区编码 /// 上次更新时间 /// 查询开始条数 /// 查询结束条数 /// public static DataTable GetConfiguration(Transaction _Transaction, string ServerepartCode, string LastTime, int? StartNum = null, int? EndNum = null) { DataTable dtConfiguration = new DataTable(); //数据查询SQL语句,服务区编码字段SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE = '" + ServerepartCode + "'"; //过滤上次更新时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND CONFIGURATION_DATE > TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT CONFIGURATION_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPARTSHOP_ID,SHOPCODE, MACHINECODE,MACADDRESS,CONFIGURATION_NAME,CONFIGURATION_VALUES,CONFIGURATION_DATE,CONFIGURATION_DESC FROM HIGHWAY_EXCHANGE.T_CONFIGURATION WHERE 1 = 1{0}", WhereSQL); //加上排序 if (StartNum != null && EndNum != null) { SQLString += " ORDER BY CONFIGURATION_DATE,CONFIGURATION_ID"; } SQLString = CommonHelper.GetPageSql(SQLString, StartNum, EndNum); dtConfiguration = new CONFIGURATION(_Transaction).ExecuteDataTable(SQLString); return dtConfiguration; } #endregion #endregion #region 方法 -> 数据上传 #region 方法 -> 获取服务区编码集合 /// /// 获取服务区编码集合 /// /// 服务区编码数组 /// public static string GetServerpartCodeList(string[] _ServerPartList) { string _strServerPart = ""; foreach (string _ServerPartTemp in _ServerPartList) { _strServerPart += (string.IsNullOrWhiteSpace(_strServerPart) ? "'" : ",'") + _ServerPartTemp.Trim() + "'"; } return _strServerPart; } #endregion #region 方法 -> 拆分支付方式 /// /// 拆分支付方式 /// /// 付款方式明细 /// 微信支付 /// 支付宝支付 /// 银联支付 /// 在线支付 /// 大巴券支付 public static void SeparatePayType(string PAYMENT_DETAILS, ref decimal _WECHAT, ref decimal _ALIPAY, ref decimal _UNIONPAY, ref decimal _ONLINEPAY, ref decimal _BUSCOUPONS) { foreach (string _Pay in PAYMENT_DETAILS.Split(',')) { //支付宝支付 if ("ALIPAY".Equals(_Pay.Split(':')[0].ToUpper())) { decimal.TryParse(_Pay.Split(':')[1], out _ALIPAY); } //微信支付 if ("WECHATPAY".Equals(_Pay.Split(':')[0].ToUpper())) { decimal.TryParse(_Pay.Split(':')[1], out _WECHAT); } //银联支付 if ("UNIONPAY".Equals(_Pay.Split(':')[0].ToUpper())) { decimal.TryParse(_Pay.Split(':')[1], out _UNIONPAY); } //在线订单 if ("ONLINEPAY".Equals(_Pay.Split(':')[0].ToUpper())) { decimal.TryParse(_Pay.Split(':')[1], out _ONLINEPAY); } //大巴券 if ("BUSCOUPONS".Equals(_Pay.Split(':')[0].ToUpper())) { decimal.TryParse(_Pay.Split(':')[1], out _BUSCOUPONS); } } } #endregion #region 结账报表/现场稽核报表(异步处理服务区、门店、收银员名称信息) #region 方法 -> 获取日结营收数据 /// /// 获取日结营收数据 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetEndAccountData(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtEndAccount = new DataTable(); //数据查询SQL语句,查询条件SQL语句,无结账信息账单查询语句 string SQLString = "", WhereSQL = "", WhereFSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; WhereFSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND ENDACCOUNT_DATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; WhereFSQL += " AND ENDACCOUNT_DATE >= TO_DATE('" + LastTime.Split(' ')[0] + "','YYYY/MM/DD')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND ENDACCOUNT_DATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; WhereFSQL += " AND ENDACCOUNT_DATE <= TO_DATE('" + EndTime.Split(' ')[0] + "','YYYY/MM/DD')"; } //数据查询语句 SQLString = string.Format(@"SELECT ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, TO_CHAR(ENDACCOUNT_DATE,'YYYY/MM/DD HH24:MI:SS') AS ENDACCOUNT_DATE, TO_CHAR(ENDACCOUNT_STARTDATE,'YYYY/MM/DD HH24:MI:SS') AS ENDACCOUNT_STARTDATE, SHOPCODE,SHOPNAME,MACHINECODE,VALID,DIFFERENCE_REASON FROM HIGHWAY_SELLDATA.V_ALLENDACCOUNT WHERE NVL(DIFFERENCE_REASON,'1') != '无结账信息'{0} UNION ALL SELECT ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, TO_CHAR(ENDACCOUNT_DATE,'YYYY/MM/DD HH24:MI:SS') AS ENDACCOUNT_DATE, TO_CHAR(ENDACCOUNT_STARTDATE,'YYYY/MM/DD HH24:MI:SS') AS ENDACCOUNT_STARTDATE, SHOPCODE,SHOPNAME,MACHINECODE,VALID,DIFFERENCE_REASON FROM HIGHWAY_SELLDATA.V_ALLENDACCOUNT WHERE DIFFERENCE_REASON = '无结账信息'{1}", WhereSQL, WhereFSQL); dtEndAccount = new HSDB.ENDACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtEndAccount; } /// /// 获取日结营收数据(自然日结算的数据) /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetEndAccountDataDaily(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtEndAccount = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND ENDACCOUNT_DATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND ENDACCOUNT_DATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE,SHOPCODE,SHOPNAME,MACHINECODE, ENDPERSONCODE,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT, CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,CASHPAY_DOWNLORD,VALID FROM HIGHWAY_SELLDATA.T_ENDACCOUNT_DAILY WHERE 1 = 1{0}", WhereSQL); dtEndAccount = new HSDB.ENDACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtEndAccount; } #endregion #region 方法 -> 获取现场稽核数据 /// /// 获取日结营收数据 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetCheckAccountData(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtCheckAccount = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND CHECK_ENDDATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND CHECK_ENDDATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@" SELECT CHECKACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME,CHECK_TYPE, CHECK_ENDDATE,CHECK_STARTDATE,SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME,MACHINECODE, CHECKACCOUNT_CODE FROM HIGHWAY_SELLDATA.T_CHECKACCOUNT WHERE 1 = 1{0}", WhereSQL); dtCheckAccount = new HSDB.CHECKACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtCheckAccount; } #endregion #region 方法 -> 获取收银员/稽核人员信息 /// /// 获取收银员/稽核人员信息 /// /// 事务管理器 /// 服务区编码 /// 收银工号/稽核工号 /// 收银员名称/稽核人名称 /// 稽核类型(可以为空) /// public static DataTable GetCashierInfo(Transaction _Transaction, string ServerpartCode, string CashierCode, string CashierName, string CheckType = "") { DataTable dtCashierInfo = new DataTable(); dtCashierInfo = new HWSB.SERVERPART(_Transaction).ExecuteDataTable($@" SELECT A.SERVERPART_ID,A.SERVERPART_CODE,A.SERVERPART_NAME,A.PROVINCE_CODE, CASE WHEN C.CASHWORKER_NAME LIKE '%公司%' THEN '公司稽查' WHEN C.CASHWORKER_NAME LIKE '%区域%' THEN '区域稽查' ELSE NVL(C.POST,'{ CheckType }') END AS CHECK_TYPE, NVL(C.CASHWORKER_NAME,'{ CashierName }') AS CASHWORKER_NAME FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND UPPER(C.CASHWORKER_LOGINNAME) = '{ CashierCode.ToUpper() }' WHERE A.SERVERPART_CODE = '{ ServerpartCode }'"); return dtCashierInfo; } #endregion #region 方法 -> 插入稽核数据并推送 /// /// 插入稽核数据并推送 /// /// /// public static void InsertCheckInfo(Transaction _Transaction, Model.Transfer.EndAccount _EndAccount) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccount.PAYMENT_DETAILS)) { SeparatePayType(_EndAccount.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } #endregion //稽核方式 string _CHECK_TYPE = "", M_WORKER_NAME = ""; if (_EndAccount.FLAG == 6) { _CHECK_TYPE = "稽核补录"; } else { switch (_EndAccount.ENDPERSONCODE.ToUpper()) { case "ZN9999": M_WORKER_NAME = _EndAccount.CASHIER_NAME; _CHECK_TYPE = "智能稽查"; break; case "G9999": M_WORKER_NAME = "公司自查"; _CHECK_TYPE = "公司稽查"; break; case "Q9999": M_WORKER_NAME = "区域自查"; _CHECK_TYPE = "区域稽查"; break; case "F9999": M_WORKER_NAME = "服务区自查"; _CHECK_TYPE = "现场稽查"; break; case "S9999": M_WORKER_NAME = "扫码稽查"; _CHECK_TYPE = "扫码稽查"; break; default: _CHECK_TYPE = "现场稽查"; break; } } HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); DataTable SeqTable = eNDACCOUNT.ExecuteDataTable("SELECT HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL FROM DUAL"); DataTable CashierInfo = new DataTable(); if (!string.IsNullOrEmpty(_EndAccount.ENDPERSONCODE)) { CashierInfo = GetCashierInfo(_Transaction, _EndAccount.SERVERPARTCODE, _EndAccount.ENDPERSONCODE, M_WORKER_NAME, _CHECK_TYPE); if (CashierInfo.Rows.Count > 0 && !string.IsNullOrEmpty(CashierInfo.Rows[0]["CASHWORKER_NAME"].ToString())) { if (_EndAccount.FLAG != 6) { _CHECK_TYPE = CashierInfo.Rows[0]["CHECK_TYPE"].ToString(); } M_WORKER_NAME = CashierInfo.Rows[0]["CASHWORKER_NAME"].ToString(); } } //插入现场稽核数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = $@"INSERT INTO HIGHWAY_SELLDATA.T_CHECKACCOUNT ( CHECKACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,CHECK_ENDDATE,CHECK_STARTDATE,SERVERPARTSHOP_ID,SHOPCODE, SHOPNAME,MACHINECODE,CHECK_TYPE,CHECKPERSON_CODE,WORKER_NAME,CASHIER_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,CASH,CREDITCARD, TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,CASHPAY,DIFFERENT_PRICE,DOWNLOAD_DATE, VALID,CHECKACCOUNT_CODE) SELECT {SeqTable.Rows[0][0]},A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{_EndAccount.ENDACCOUNT_DATE}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{_EndAccount.ENDACCOUNT_STARTDATE}','YYYY/MM/DD HH24:MI:SS'),B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME, '{_EndAccount.MACHINECODE}','{_CHECK_TYPE}','{_EndAccount.ENDPERSONCODE.ToUpper()}','{M_WORKER_NAME}', '{_EndAccount.CASHIER_NAME}',{_EndAccount.TICKETCOUNT},{_EndAccount.TOTALCOUNT}, {_EndAccount.TOTALSELLAMOUNT},{_EndAccount.TOTALOFFAMOUNT},{_EndAccount.CASH}, {(_EndAccount.INTERNALPAY > 0 ? _EndAccount.INTERNALPAY : _EndAccount.CREDITCARD)}, {_EndAccount.TICKETBILL},{_EndAccount.VIPPERSON},{_EndAccount.COSTBILL},{_EndAccount.OTHERPAY}, {_EndAccount.CASHPAY},{_EndAccount.CASHPAY - _EndAccount.CASH},SYSDATE,1,'{_EndAccount.ENDACCOUNT_CODE}' FROM HIGHWAY_STORAGE.T_SERVERPART A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{_EndAccount.SERVERPARTCODE}' AND B.SHOPCODE = '{_EndAccount.SHOPCODE}'"; //返回数据插入结果 int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); if (resultRows > 0) { //稽核补录上传时更新关联的稽核信息 if (_EndAccount.FLAG == 6) { foreach (HSDB.CHECKACCOUNT _CHECKACCOUNT in new HSDB.CHECKACCOUNT(_Transaction).FillCollection($@" WHERE SERVERPARTCODE = '{_EndAccount.SERVERPARTCODE}' AND SHOPCODE = '{_EndAccount.SHOPCODE}' AND MACHINECODE = '{_EndAccount.MACHINECODE}' AND CHECK_TYPE != '稽核补录' AND CHECK_ENDDATE = TO_DATE('{_EndAccount.ENDACCOUNT_DATE}','YYYY/MM/DD HH24:MI:SS')")) { if (_CHECKACCOUNT.DIFFERENT_PRICE > 0) { _CHECKACCOUNT.CHECK_STATE = 1; } else { _CHECKACCOUNT.CHECK_STATE = 2; } _CHECKACCOUNT.REPLENISH_AMOUNT = _EndAccount.CASH.TryParseToDouble(); _CHECKACCOUNT.Update(); } } //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "SELECT DATAVERSION_ID,DATAVERSION FROM HIGHWAY_EXCHANGE.T_DATAVERSION WHERE SERVERPARTCODE='" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE='" + _EndAccount.SHOPCODE + "' AND MACHINECODE='" + _EndAccount.MACHINECODE + "' AND TABLENAME='T_CHECKACCOUNT'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION ( DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES (HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL, '{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _EndAccount.SERVERPARTCODE, _EndAccount.SHOPCODE, _EndAccount.MACHINECODE, "T_CHECKACCOUNT", _EndAccount.ENDACCOUNT_DATE.ToString()); } else { //更新操作 if (_EndAccount.ENDACCOUNT_DATE != null && _EndAccount.ENDACCOUNT_DATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", _EndAccount.ENDACCOUNT_DATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } #region 微信推送 if (_EndAccount.FLAG == 5) { Model.AuditInfo auditInfo = new Model.AuditInfo(); auditInfo.AuditType = _CHECK_TYPE; switch (_CHECK_TYPE) { case "公司稽查": auditInfo.AuditTypeCode = 1000; break; case "区域稽查": auditInfo.AuditTypeCode = 1010; break; case "服务区稽查": auditInfo.AuditTypeCode = 1020; break; case "现场稽查": auditInfo.AuditTypeCode = 1030; break; case "智能稽查": auditInfo.AuditTypeCode = 1040; break; } auditInfo.BankPay = _EndAccount.CREDITCARD.Value; auditInfo.CashPay = _EndAccount.CASH.Value; auditInfo.CheckAccount_Id = SeqTable.Rows[0][0].TryParseToInt(); auditInfo.ContributionAmount = _EndAccount.CASHPAY.Value; auditInfo.CouponPay = _EndAccount.COSTBILL.Value; auditInfo.EndDate = _EndAccount.ENDACCOUNT_DATE.Value; auditInfo.MachineCode = _EndAccount.MACHINECODE; auditInfo.MemberPay = _EndAccount.VIPPERSON.Value; auditInfo.MobilePay = _EndAccount.TICKETBILL.Value + _EndAccount.OTHERPAY.Value; auditInfo.PersonCode = _EndAccount.CASHIER_CODE; auditInfo.PersonName = _EndAccount.CASHIER_NAME; auditInfo.ServerpartCode = _EndAccount.SERVERPARTCODE; auditInfo.ShopCode = _EndAccount.SHOPCODE; auditInfo.StartDate = _EndAccount.ENDACCOUNT_STARTDATE.Value; auditInfo.TicketCount = _EndAccount.TICKETCOUNT.Value; auditInfo.TotalAmount = _EndAccount.TOTALSELLAMOUNT.Value; auditInfo.TotalCount = _EndAccount.TOTALCOUNT.Value; auditInfo.TotalOffAmount = _EndAccount.TOTALOFFAMOUNT.Value; string _strPostData = $"action_type=sendAuditMessageByWechat" + $"&AuditInfo={Newtonsoft.Json.JsonConvert.SerializeObject(auditInfo)}"; LogUtil.WriteLog("稽核推送参数:" + _strPostData); string _str = Common.HttpUtil.HttpUrlPost(_strPostData, "http://user.eshangtech.com/Coop.Merchant/Handler/handler_ajax.ashx"); LogUtil.WriteLog("稽核推送:" + _str); } #endregion } } /// /// 插入稽核数据并推送 /// /// /// public static void InsertCheckInfo(Transaction _Transaction, Model.Transfer.EndAccountNew _EndAccountNew) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccountNew.PAYMENT_DETAILS)) { SeparatePayType(_EndAccountNew.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } if (_EndAccountNew.MOBILEPAY > _WECHAT + _ALIPAY + _UNIONPAY) { _WECHAT = _EndAccountNew.MOBILEPAY.Value - (_ALIPAY + _UNIONPAY); } #endregion //稽核方式 string _CHECK_TYPE = "", M_WORKER_NAME = ""; if (_EndAccountNew.ENDACCOUNT_TYPE == 6) { _CHECK_TYPE = "稽核补录"; } else { switch (_EndAccountNew.ENDPERSON_CODE) { case "ZN9999": M_WORKER_NAME = _EndAccountNew.CASHIER_NAME; _CHECK_TYPE = "智能稽查"; break; case "G9999": M_WORKER_NAME = "公司自查"; _CHECK_TYPE = "公司稽查"; break; case "Q9999": M_WORKER_NAME = "区域自查"; _CHECK_TYPE = "区域稽查"; break; case "F9999": M_WORKER_NAME = "服务区自查"; _CHECK_TYPE = "现场稽查"; break; case "S9999": M_WORKER_NAME = "扫码稽查"; _CHECK_TYPE = "扫码稽查"; break; default: _CHECK_TYPE = "现场稽查"; break; } } //返回数据插入结果 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); DataTable SeqTable = eNDACCOUNT.ExecuteDataTable("SELECT HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL FROM DUAL"); DataTable CashierInfo = new DataTable(); if (!string.IsNullOrEmpty(_EndAccountNew.ENDPERSON_CODE)) { CashierInfo = GetCashierInfo(_Transaction, _EndAccountNew.SERVERPARTCODE, _EndAccountNew.ENDPERSON_CODE, M_WORKER_NAME, _CHECK_TYPE); if (CashierInfo.Rows.Count > 0 && !string.IsNullOrEmpty(CashierInfo.Rows[0]["CASHWORKER_NAME"].ToString())) { if (_EndAccountNew.ENDACCOUNT_TYPE != 6) { _CHECK_TYPE = CashierInfo.Rows[0]["CHECK_TYPE"].ToString(); } M_WORKER_NAME = CashierInfo.Rows[0]["CASHWORKER_NAME"].ToString(); } } //插入现场稽核数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = $@"INSERT INTO HIGHWAY_SELLDATA.T_CHECKACCOUNT ( CHECKACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,CHECK_ENDDATE,CHECK_STARTDATE,SERVERPARTSHOP_ID,SHOPCODE, SHOPNAME,MACHINECODE,CHECK_TYPE,CHECKPERSON_CODE,WORKER_NAME,CASHIER_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,CASH,CREDITCARD, TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,CASHPAY,DIFFERENT_PRICE,DOWNLOAD_DATE, VALID,CHECKACCOUNT_CODE) SELECT {SeqTable.Rows[0][0]},A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{_EndAccountNew.ENDDATE}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{_EndAccountNew.STARTDATE}','YYYY/MM/DD HH24:MI:SS'),B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME, '{_EndAccountNew.MACHINECODE}','{_CHECK_TYPE}','{_EndAccountNew.ENDPERSON_CODE.ToUpper()}','{M_WORKER_NAME}', '{_EndAccountNew.CASHIER_NAME}',{_EndAccountNew.TICKET_COUNT},{_EndAccountNew.TOTAL_COUNT}, {_EndAccountNew.TOTAL_AMOUNT},{_EndAccountNew.TOTAL_OFFAMOUNT},{_EndAccountNew.CASHPAY}, {(_EndAccountNew.INTERNALPAY > 0 ? _EndAccountNew.INTERNALPAY : _EndAccountNew.BANKPAY)}, {_WECHAT},{_EndAccountNew.MEMBERPAY},{_EndAccountNew.COUPONPAY},{_ALIPAY + _UNIONPAY}, {_EndAccountNew.CONTRIBUTION_AMOUNT},{_EndAccountNew.CONTRIBUTION_AMOUNT - _EndAccountNew.CASHPAY},SYSDATE,1, '{_EndAccountNew.ENDACCOUNT_CODE}' FROM HIGHWAY_STORAGE.T_SERVERPART A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{_EndAccountNew.SERVERPARTCODE}' AND B.SHOPCODE = '{_EndAccountNew.SHOPCODE}'"; int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); if (resultRows > 0) { //稽核补录上传时更新关联的稽核信息 if (_EndAccountNew.ENDACCOUNT_TYPE == 6) { foreach (HSDB.CHECKACCOUNT _CHECKACCOUNT in new HSDB.CHECKACCOUNT(_Transaction).FillCollection($@" WHERE SERVERPARTCODE = '{_EndAccountNew.SERVERPARTCODE}' AND SHOPCODE = '{_EndAccountNew.SHOPCODE}' AND MACHINECODE = '{_EndAccountNew.MACHINECODE}' AND CHECK_TYPE != '稽核补录' AND CHECK_ENDDATE = TO_DATE('{_EndAccountNew.ENDDATE}','YYYY/MM/DD HH24:MI:SS')")) { if (_CHECKACCOUNT.DIFFERENT_PRICE > 0) { _CHECKACCOUNT.CHECK_STATE = 1; } else { _CHECKACCOUNT.CHECK_STATE = 2; } _CHECKACCOUNT.REPLENISH_AMOUNT = _EndAccountNew.CASHPAY.TryParseToDouble(); _CHECKACCOUNT.Update(); } } //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION " + "where SERVERPARTCODE='" + _EndAccountNew.SERVERPARTCODE + "' and SHOPCODE='" + _EndAccountNew.SHOPCODE + "' and MACHINECODE='" + _EndAccountNew.MACHINECODE + "' and TABLENAME='T_CHECKACCOUNT'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION ( DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES (HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL, '{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _EndAccountNew.SERVERPARTCODE, _EndAccountNew.SHOPCODE, _EndAccountNew.MACHINECODE, "T_CHECKACCOUNT", _EndAccountNew.ENDDATE.ToString()); } else { //更新操作 if (_EndAccountNew.ENDDATE != null && _EndAccountNew.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", _EndAccountNew.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } #region 微信推送 if (_EndAccountNew.ENDACCOUNT_TYPE == 5) { Model.AuditInfo auditInfo = new Model.AuditInfo(); auditInfo.AuditType = _CHECK_TYPE; switch (_CHECK_TYPE) { case "公司稽查": auditInfo.AuditTypeCode = 1000; break; case "区域稽查": auditInfo.AuditTypeCode = 1010; break; case "服务区稽查": auditInfo.AuditTypeCode = 1020; break; case "现场稽查": auditInfo.AuditTypeCode = 1030; break; case "智能稽查": auditInfo.AuditTypeCode = 1040; break; } auditInfo.BankPay = _EndAccountNew.BANKPAY.Value; auditInfo.CashPay = _EndAccountNew.CASHPAY.Value; auditInfo.CheckAccount_Id = SeqTable.Rows[0][0].TryParseToInt(); auditInfo.ContributionAmount = _EndAccountNew.CONTRIBUTION_AMOUNT.Value; auditInfo.CouponPay = _EndAccountNew.COUPONPAY.Value; auditInfo.EndDate = _EndAccountNew.ENDDATE.Value; auditInfo.MachineCode = _EndAccountNew.MACHINECODE; auditInfo.MemberPay = _EndAccountNew.MEMBERPAY.Value; auditInfo.MobilePay = _EndAccountNew.MOBILEPAY.Value; auditInfo.PersonCode = _EndAccountNew.CASHIER_CODE; auditInfo.PersonName = _EndAccountNew.CASHIER_NAME; auditInfo.ServerpartCode = _EndAccountNew.SERVERPARTCODE; auditInfo.ShopCode = _EndAccountNew.SHOPCODE; auditInfo.StartDate = _EndAccountNew.STARTDATE.Value; auditInfo.TicketCount = _EndAccountNew.TICKET_COUNT.Value; auditInfo.TotalAmount = _EndAccountNew.TOTAL_AMOUNT.Value; auditInfo.TotalCount = _EndAccountNew.TOTAL_COUNT.Value; auditInfo.TotalOffAmount = _EndAccountNew.TOTAL_OFFAMOUNT.Value; string _strPostData = $"action_type=sendAuditMessageByWechat" + $"&AuditInfo={Newtonsoft.Json.JsonConvert.SerializeObject(auditInfo)}"; LogUtil.WriteLog("稽核推送参数:" + _strPostData); string _str = Common.HttpUtil.HttpUrlPost(_strPostData, "http://user.eshangtech.com/Coop.Merchant/Handler/handler_ajax.ashx"); LogUtil.WriteLog("稽核推送:" + _str); } #endregion } } #endregion #region 方法 -> 插入结账数据 /// /// 插入结账数据 /// /// 事务管理器 /// 日结报表对象【旧表】 /// 日结报表数据源(收银机端上传) public static void InsertEndAccountData(Transaction _Transaction, Model.Transfer.EndAccount _EndAccount, DataTable dtEndAccountData) { //不存在当前账期数据,则执行插入操作 if (dtEndAccountData == null || dtEndAccountData.Rows.Count == 0 || dtEndAccountData.Select("VALID > 0 AND SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND MACHINECODE = '" + _EndAccount.MACHINECODE + "' AND ENDACCOUNT_DATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.ToString("yyyy/MM/dd HH:mm:ss") + "' AND ENDACCOUNT_STARTDATE = '" + _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString("yyyy/MM/dd HH:mm:ss") + "'").Length == 0) { string _ENDACCOUNT_ID = "HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL"; //实例化日结对象 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(); //查询系统自动生成的日结数据 if (dtEndAccountData.Select("VALID = 1 AND DIFFERENCE_REASON = '无结账信息' AND SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND ENDACCOUNT_DATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.Date.ToString("yyyy/MM/dd HH:mm:ss") + "'").Length > 0) { //获取系统自动生成的日结数据 DataRow drEndAccountDataF = dtEndAccountData.Select("VALID = 1 AND SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND ENDACCOUNT_DATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.Date.ToString("yyyy/MM/dd HH:mm:ss") + "' AND DIFFERENCE_REASON = '无结账信息'")[0]; //存储日结账期内码 _ENDACCOUNT_ID = drEndAccountDataF["ENDACCOUNT_ID"].ToString(); //删除日结主表数据 eNDACCOUNT.ExecuteNonQuery("DELETE FROM HIGHWAY_SELLDATA.T_ENDACCOUNT WHERE ENDACCOUNT_ID = " + _ENDACCOUNT_ID, null); //删除日结临时表数据 eNDACCOUNT.ExecuteNonQuery("DELETE FROM HIGHWAY_SELLDATA.T_ENDACCOUNT_TEMP WHERE ENDACCOUNT_ID = " + _ENDACCOUNT_ID, null); //将系统自动生成的日结数据设置成无效 drEndAccountDataF["VALID"] = 0; } #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccount.PAYMENT_DETAILS)) { SeparatePayType(_EndAccount.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } #endregion //插入结账数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_ENDACCOUNT ( ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE,SHOPCODE,SHOPNAME, MACHINECODE,ENDPERSONCODE,WORKER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT, TOTALOFFAMOUNT,CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,TREATMENT_MARK, DOWNLOAD_DATE,VALID,CASHPAY,CASHPAY_DOWNLORD,DIFFERENT_PRICE, AUDIT_STATE,CIGARETTE_STATE,PROMOTION_STATE,ONLINEBILL_STATE) SELECT {24},A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') + NVL(B.SETTLINGACCOUNTS,0), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},SYSDATE,1,{15},{16},{17},{20},{21},{22},{23} FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND UPPER(C.CASHWORKER_LOGINNAME) = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{18}' AND B.SHOPCODE = '{19}'", _EndAccount.ENDACCOUNT_DATE, _EndAccount.ENDACCOUNT_STARTDATE, _EndAccount.MACHINECODE, _EndAccount.ENDPERSONCODE.ToUpper(), _EndAccount.TICKETCOUNT, _EndAccount.TOTALCOUNT, _EndAccount.TOTALSELLAMOUNT, _EndAccount.TOTALOFFAMOUNT, _EndAccount.CASH, _EndAccount.INTERNALPAY > 0 ? _EndAccount.INTERNALPAY : _EndAccount.CREDITCARD, _EndAccount.TICKETBILL, _EndAccount.VIPPERSON, _EndAccount.COSTBILL, _EndAccount.OTHERPAY, _EndAccount.CASHPAY != _EndAccount.CASH ? 1 : 0, _EndAccount.CASH > _EndAccount.CASHPAY ? _EndAccount.TOTALSELLAMOUNT : _EndAccount.TOTALSELLAMOUNT + _EndAccount.CASHPAY - _EndAccount.CASH, _EndAccount.CASHPAY, _EndAccount.CASHPAY - _EndAccount.CASH, _EndAccount.SERVERPARTCODE, _EndAccount.SHOPCODE, _EndAccount.AUDIT_STATE == null ? "NULL" : _EndAccount.AUDIT_STATE.ToString(), _EndAccount.CIGARETTE_STATE == null ? "NULL" : _EndAccount.CIGARETTE_STATE.ToString(), _EndAccount.PROMOTION_STATE == null ? "NULL" : _EndAccount.PROMOTION_STATE.ToString(), _EndAccount.ONLINEBILL_STATE == null ? "NULL" : _EndAccount.ONLINEBILL_STATE.ToString(), _ENDACCOUNT_ID); //返回数据插入结果 int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); //开始在数据版本表更新数据版本信息(新增或者更新) if (resultRows > 0) { //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "SELECT DATAVERSION_ID,DATAVERSION FROM HIGHWAY_EXCHANGE.T_DATAVERSION WHERE SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND MACHINECODE = '" + _EndAccount.MACHINECODE + "' AND TABLENAME = 'T_ENDACCOUNT'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION ( DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES ( HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}', TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _EndAccount.SERVERPARTCODE, _EndAccount.SHOPCODE, _EndAccount.MACHINECODE, "T_ENDACCOUNT", _EndAccount.ENDACCOUNT_DATE.ToString()); } else { //更新操作 if (_EndAccount.ENDACCOUNT_DATE != null && _EndAccount.ENDACCOUNT_DATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"UPDATE HIGHWAY_EXCHANGE.T_DATAVERSION SET DATAVERSION = TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID = '{1}'", _EndAccount.ENDACCOUNT_DATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } //存储结账数据缓存表 DataRow drEndAccountData = dtEndAccountData.NewRow(); drEndAccountData["SERVERPARTCODE"] = _EndAccount.SERVERPARTCODE; drEndAccountData["SHOPCODE"] = _EndAccount.SHOPCODE; drEndAccountData["MACHINECODE"] = _EndAccount.MACHINECODE; drEndAccountData["ENDACCOUNT_DATE"] = _EndAccount.ENDACCOUNT_DATE.Value.ToString("yyyy/MM/dd HH:mm:ss"); drEndAccountData["ENDACCOUNT_STARTDATE"] = _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString("yyyy/MM/dd HH:mm:ss"); dtEndAccountData.Rows.Add(drEndAccountData); Task task = Task.Factory.StartNew(() => { Transaction transactionTask = new Transaction(); try { //解析稽核数据中的服务区、门店、结账内码 ReplenishEndaccountID(transactionTask, _EndAccount.SERVERPARTCODE, _EndAccount.SHOPCODE, _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString("yyyyMMddHHmmss"), _ENDACCOUNT_ID); //记录服务区门店商家数量 RecordShopCount(transactionTask, _EndAccount.SERVERPARTCODE, _EndAccount.ENDACCOUNT_DATE.Value.ToString("yyyy/MM/dd")); //提交事务,并释放资源 transactionTask.Commit(); } catch (Exception ex) { LogUtil.WriteLog(ex); } finally { transactionTask.Dispose(); transactionTask.Release(); } }); } } /// /// 插入结账报表 /// /// 事务管理器 /// 日结报表对象【新表】 /// 日结报表数据源(收银机端上传) public static void InsertEndAccountData(Transaction _Transaction, Model.Transfer.EndAccountNew _EndAccountNew, DataTable dtEndAccountData) { //不存在当前账期数据,则执行插入操作 if (dtEndAccountData == null || dtEndAccountData.Rows.Count == 0 || dtEndAccountData.Select("VALID > 0 AND SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND MACHINECODE = '" + _EndAccountNew.MACHINECODE + "' AND ENDACCOUNT_DATE = '" + _EndAccountNew.ENDDATE.Value.ToString("yyyy/MM/dd HH:mm:ss") + "' AND ENDACCOUNT_STARTDATE = '" + _EndAccountNew.STARTDATE.Value.ToString("yyyy/MM/dd HH:mm:ss") + "'").Length == 0) { string _ENDACCOUNT_ID = "HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL"; //实例化日结对象 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(); //查询系统自动生成的日结数据 if (dtEndAccountData.Select("VALID = 1 AND DIFFERENCE_REASON = '无结账信息' AND SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND ENDACCOUNT_DATE = '" + _EndAccountNew.ENDDATE.Value.Date.ToString("yyyy/MM/dd HH:mm:ss") + "'").Length > 0) { //获取系统自动生成的日结数据 DataRow drEndAccountDataF = dtEndAccountData.Select("VALID = 1 AND SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND ENDACCOUNT_DATE = '" + _EndAccountNew.ENDDATE.Value.Date.ToString("yyyy/MM/dd HH:mm:ss") + "' AND DIFFERENCE_REASON = '无结账信息'")[0]; //存储日结账期内码 _ENDACCOUNT_ID = drEndAccountDataF["ENDACCOUNT_ID"].ToString(); //删除日结主表数据 eNDACCOUNT.ExecuteNonQuery("DELETE FROM HIGHWAY_SELLDATA.T_ENDACCOUNT WHERE ENDACCOUNT_ID = " + _ENDACCOUNT_ID, null); //删除日结临时表数据 eNDACCOUNT.ExecuteNonQuery("DELETE FROM HIGHWAY_SELLDATA.T_ENDACCOUNT_TEMP WHERE ENDACCOUNT_ID = " + _ENDACCOUNT_ID, null); //将系统自动生成的日结数据设置成无效 drEndAccountDataF["VALID"] = 0; } #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccountNew.PAYMENT_DETAILS)) { SeparatePayType(_EndAccountNew.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } if (_EndAccountNew.MOBILEPAY > _WECHAT + _ALIPAY + _UNIONPAY) { _WECHAT = _EndAccountNew.MOBILEPAY.Value - (_ALIPAY + _UNIONPAY); } #endregion //插入结账数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_ENDACCOUNT ( ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE,SHOPCODE,SHOPNAME, MACHINECODE,ENDPERSONCODE,WORKER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT, TOTALOFFAMOUNT,CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,TREATMENT_MARK, DOWNLOAD_DATE,VALID,CASHPAY,CASHPAY_DOWNLORD,DIFFERENT_PRICE, AUDIT_STATE,CIGARETTE_STATE,PROMOTION_STATE,ONLINEBILL_STATE) SELECT {24},A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') + NVL(B.SETTLINGACCOUNTS,0), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},SYSDATE,1,{15},{16},{17},{20},{21},{22},{23} FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND UPPER(C.CASHWORKER_LOGINNAME) = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{18}' AND B.SHOPCODE = '{19}'", _EndAccountNew.ENDDATE, _EndAccountNew.STARTDATE, _EndAccountNew.MACHINECODE, _EndAccountNew.ENDPERSON_CODE.ToUpper(), _EndAccountNew.TICKET_COUNT, _EndAccountNew.TOTAL_COUNT, _EndAccountNew.TOTAL_AMOUNT, _EndAccountNew.TOTAL_OFFAMOUNT, _EndAccountNew.CASHPAY, _EndAccountNew.INTERNALPAY > 0 ? _EndAccountNew.INTERNALPAY : _EndAccountNew.BANKPAY, _WECHAT, _EndAccountNew.MEMBERPAY, _EndAccountNew.COUPONPAY, _ALIPAY + _UNIONPAY, _EndAccountNew.CASHPAY != _EndAccountNew.CONTRIBUTION_AMOUNT ? 1 : 0, _EndAccountNew.CASHPAY > _EndAccountNew.CONTRIBUTION_AMOUNT ? _EndAccountNew.TOTAL_AMOUNT : _EndAccountNew.TOTAL_AMOUNT + _EndAccountNew.CONTRIBUTION_AMOUNT - _EndAccountNew.CASHPAY, _EndAccountNew.CONTRIBUTION_AMOUNT, _EndAccountNew.CONTRIBUTION_AMOUNT - _EndAccountNew.CASHPAY, _EndAccountNew.SERVERPARTCODE, _EndAccountNew.SHOPCODE, _EndAccountNew.AUDIT_STATE == null ? "NULL" : _EndAccountNew.AUDIT_STATE.ToString(), _EndAccountNew.CIGARETTE_STATE == null ? "NULL" : _EndAccountNew.CIGARETTE_STATE.ToString(), _EndAccountNew.PROMOTION_STATE == null ? "NULL" : _EndAccountNew.PROMOTION_STATE.ToString(), _EndAccountNew.ONLINEBILL_STATE == null ? "NULL" : _EndAccountNew.ONLINEBILL_STATE.ToString(), _ENDACCOUNT_ID); //返回数据插入结果 int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); //开始在数据版本表更新数据版本信息(新增或者更新) if (resultRows > 0) { //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "SELECT DATAVERSION_ID,DATAVERSION FROM HIGHWAY_EXCHANGE.T_DATAVERSION WHERE SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND MACHINECODE = '" + _EndAccountNew.MACHINECODE + "' AND TABLENAME = 'T_ENDACCOUNT'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION ( DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES (HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}', TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _EndAccountNew.SERVERPARTCODE, _EndAccountNew.SHOPCODE, _EndAccountNew.MACHINECODE, "T_ENDACCOUNT", _EndAccountNew.ENDDATE.ToString()); } else { //更新操作 if (_EndAccountNew.ENDDATE != null && _EndAccountNew.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"UPDATE HIGHWAY_EXCHANGE.T_DATAVERSION SET DATAVERSION = TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", _EndAccountNew.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } //存储结账数据缓存表 DataRow drEndAccountData = dtEndAccountData.NewRow(); drEndAccountData["SERVERPARTCODE"] = _EndAccountNew.SERVERPARTCODE; drEndAccountData["SHOPCODE"] = _EndAccountNew.SHOPCODE; drEndAccountData["MACHINECODE"] = _EndAccountNew.MACHINECODE; drEndAccountData["ENDACCOUNT_DATE"] = _EndAccountNew.ENDDATE.Value.ToString("yyyy/MM/dd HH:mm:ss"); drEndAccountData["ENDACCOUNT_STARTDATE"] = _EndAccountNew.STARTDATE.Value.ToString("yyyy/MM/dd HH:mm:ss"); dtEndAccountData.Rows.Add(drEndAccountData); Task task = Task.Factory.StartNew(() => { Transaction transactionTask = new Transaction(); try { //解析稽核数据中的服务区、门店、结账内码 ReplenishEndaccountID(transactionTask, _EndAccountNew.SERVERPARTCODE, _EndAccountNew.SHOPCODE, _EndAccountNew.STARTDATE.Value.ToString("yyyyMMddHHmmss"), _ENDACCOUNT_ID); //记录服务区门店商家数量 RecordShopCount(transactionTask, _EndAccountNew.SERVERPARTCODE, _EndAccountNew.ENDDATE.Value.ToString("yyyy/MM/dd")); //提交事务,并释放资源 transactionTask.Commit(); } catch (Exception ex) { LogUtil.WriteLog(ex); } finally { transactionTask.Dispose(); transactionTask.Release(); } }); } } #region 解析现场稽核异常表中的结账内码 /// /// 解析现场稽核异常表中的结账内码 /// /// 事务管理器 /// 服务区内码 /// 门店编码 /// 账期开始时间 /// 日结账单内码 public static void ReplenishEndaccountID(Transaction transaction, string serverpartCode, string shopCode, string startDate, string endaccountID) { foreach (HSDB.ABNORMALAUDIT _ABNORMALAUDIT in new HSDB.ABNORMALAUDIT(transaction).FillCollection( "WHERE ENDACCOUNT_ID IS NULL AND SERVERPARTCODE = '" + serverpartCode + "' AND SHOPCODE = '" + shopCode + "' AND CHECK_STARTDATE = " + startDate)) { _ABNORMALAUDIT.ENDACCOUNT_ID = endaccountID.TryParseToInt(); _ABNORMALAUDIT.Update(); } } #endregion #region 记录服务区门店商家数量 /// /// 记录服务区门店商家数量 /// /// 事务管理器 /// 服务区编码 /// 统计日期 public static void RecordShopCount(Transaction transaction, string serverpartCode, string Statistics_Date) { HWSB.SERVERPART _SERVERPART = new HWSB.SERVERPART(transaction); _SERVERPART.AddSearchParameter("SERVERPART_CODE", serverpartCode); if (_SERVERPART.Search()) { string WebAPIUrl = ConfigurationManager.AppSettings["CommercialApi"]; string PostStr = string.Format("/BaseInfo/RecordShopCount?Serverpart_ID={0}&Statistics_Date={1}", _SERVERPART.KeyID, Statistics_Date); string format = "application/json;charset=UTF-8"; string resultstr = Common.HttpUtil.HttpUrlPost(PostStr, WebAPIUrl + PostStr, format); //LogUtil.WriteLog(resultstr); } } #endregion #endregion #region 方法 -> 插入结账数据(按自然日结算) /// /// 插入结账数据【旧表】(按自然日结算) /// /// 事务管理器 /// 日结报表对象【旧表】 /// 日结报表数据源(收银机端上传) public static void InsertEndAccountDataDaily(Transaction _Transaction, Model.Transfer.EndAccount _EndAccount, DataTable dtEndAccountData) { //不存在当前账期数据,则执行插入操作 if (dtEndAccountData == null || dtEndAccountData.Rows.Count == 0 || dtEndAccountData.Select("VALID > 0 AND SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND MACHINECODE = '" + _EndAccount.MACHINECODE + "' AND ENDACCOUNT_DATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.ToString() + "' AND ENDACCOUNT_STARTDATE = '" + _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString() + "'").Length == 0) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccount.PAYMENT_DETAILS)) { SeparatePayType(_EndAccount.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } #endregion //插入结账数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_ENDACCOUNT_DAILY ( ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE,SHOPCODE,SHOPNAME, MACHINECODE,ENDPERSONCODE,WORKER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT, TOTALOFFAMOUNT,CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,TREATMENT_MARK, DOWNLOAD_DATE,VALID,CASHPAY,CASHPAY_DOWNLORD,DIFFERENT_PRICE) SELECT HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL,A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') + NVL(B.SETTLINGACCOUNTS,0), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},SYSDATE,1,{15},{16},{17} FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND UPPER(C.CASHWORKER_LOGINNAME) = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{18}' AND B.SHOPCODE = '{19}'", _EndAccount.ENDACCOUNT_DATE, _EndAccount.ENDACCOUNT_STARTDATE, _EndAccount.MACHINECODE, _EndAccount.ENDPERSONCODE.ToUpper(), _EndAccount.TICKETCOUNT, _EndAccount.TOTALCOUNT, _EndAccount.TOTALSELLAMOUNT, _EndAccount.TOTALOFFAMOUNT, _EndAccount.CASH, _EndAccount.INTERNALPAY > 0 ? _EndAccount.INTERNALPAY : _EndAccount.CREDITCARD, _EndAccount.TICKETBILL, _EndAccount.VIPPERSON, _EndAccount.COSTBILL, _EndAccount.OTHERPAY, _EndAccount.CASHPAY != _EndAccount.CASH ? 1 : 0, _EndAccount.CASH > _EndAccount.CASHPAY ? _EndAccount.TOTALSELLAMOUNT : _EndAccount.TOTALSELLAMOUNT + _EndAccount.CASHPAY - _EndAccount.CASH, _EndAccount.CASHPAY, _EndAccount.CASHPAY - _EndAccount.CASH, _EndAccount.SERVERPARTCODE, _EndAccount.SHOPCODE); //返回数据插入结果 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(); int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); //存储结账数据缓存表 DataRow drEndAccountData = dtEndAccountData.NewRow(); drEndAccountData["SERVERPARTCODE"] = _EndAccount.SERVERPARTCODE; drEndAccountData["SHOPCODE"] = _EndAccount.SHOPCODE; drEndAccountData["MACHINECODE"] = _EndAccount.MACHINECODE; drEndAccountData["ENDACCOUNT_DATE"] = _EndAccount.ENDACCOUNT_DATE; drEndAccountData["ENDACCOUNT_STARTDATE"] = _EndAccount.ENDACCOUNT_STARTDATE; dtEndAccountData.Rows.Add(drEndAccountData); } } /// /// 插入结账报表【新表】(按自然日结算) /// /// 事务管理器 /// 日结报表对象【新表】 /// 日结报表数据源(收银机端上传) public static void InsertEndAccountDataDaily(Transaction _Transaction, Model.Transfer.EndAccountNew _EndAccountNew, DataTable dtEndAccountData) { //不存在当前账期数据,则执行插入操作 if (dtEndAccountData == null || dtEndAccountData.Rows.Count == 0 || dtEndAccountData.Select("VALID > 0 AND SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND MACHINECODE = '" + _EndAccountNew.MACHINECODE + "' AND ENDACCOUNT_DATE = '" + _EndAccountNew.ENDDATE.Value.ToString() + "' AND ENDACCOUNT_STARTDATE = '" + _EndAccountNew.STARTDATE.Value.ToString() + "'").Length == 0) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_EndAccountNew.PAYMENT_DETAILS)) { SeparatePayType(_EndAccountNew.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } if (_EndAccountNew.MOBILEPAY > _WECHAT + _ALIPAY + _UNIONPAY) { _WECHAT = _EndAccountNew.MOBILEPAY.Value - (_ALIPAY + _UNIONPAY); } #endregion //插入结账数据 //匹配服务区【HIGHWAY_STORAGE.T_SERVERPART】 //门店【HIGHWAY_STORAGE.T_SERVERPARTSHOP】 //收银员表【HIGHWAY_STORAGE.T_CASHWORKER】 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_ENDACCOUNT_DAILY ( ENDACCOUNT_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE,SHOPCODE,SHOPNAME, MACHINECODE,ENDPERSONCODE,WORKER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT, TOTALOFFAMOUNT,CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,TREATMENT_MARK, DOWNLOAD_DATE,VALID,CASHPAY,CASHPAY_DOWNLORD,DIFFERENT_PRICE) SELECT HIGHWAY_SELLDATA.SEQ_ENDACCOUNT.NEXTVAL,A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') + NVL(B.SETTLINGACCOUNTS,0), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},SYSDATE,1,{15},{16},{17} FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND UPPER(C.CASHWORKER_LOGINNAME) = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{18}' AND B.SHOPCODE = '{19}'", _EndAccountNew.ENDDATE, _EndAccountNew.STARTDATE, _EndAccountNew.MACHINECODE, _EndAccountNew.ENDPERSON_CODE.ToUpper(), _EndAccountNew.TICKET_COUNT, _EndAccountNew.TOTAL_COUNT, _EndAccountNew.TOTAL_AMOUNT, _EndAccountNew.TOTAL_OFFAMOUNT, _EndAccountNew.CASHPAY, _EndAccountNew.INTERNALPAY > 0 ? _EndAccountNew.INTERNALPAY : _EndAccountNew.BANKPAY, _WECHAT, _EndAccountNew.MEMBERPAY, _EndAccountNew.COUPONPAY, _ALIPAY + _UNIONPAY, _EndAccountNew.CASHPAY != _EndAccountNew.CONTRIBUTION_AMOUNT ? 1 : 0, _EndAccountNew.CASHPAY > _EndAccountNew.CONTRIBUTION_AMOUNT ? _EndAccountNew.TOTAL_AMOUNT : _EndAccountNew.TOTAL_AMOUNT + _EndAccountNew.CONTRIBUTION_AMOUNT - _EndAccountNew.CASHPAY, _EndAccountNew.CONTRIBUTION_AMOUNT, _EndAccountNew.CONTRIBUTION_AMOUNT - _EndAccountNew.CASHPAY, _EndAccountNew.SERVERPARTCODE, _EndAccountNew.SHOPCODE); //返回数据插入结果 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); int resultRows = eNDACCOUNT.ExecuteNonQuery(SQLString, null); //存储结账数据缓存表 DataRow drEndAccountData = dtEndAccountData.NewRow(); drEndAccountData["SERVERPARTCODE"] = _EndAccountNew.SERVERPARTCODE; drEndAccountData["SHOPCODE"] = _EndAccountNew.SHOPCODE; drEndAccountData["MACHINECODE"] = _EndAccountNew.MACHINECODE; drEndAccountData["ENDACCOUNT_DATE"] = _EndAccountNew.ENDDATE; drEndAccountData["ENDACCOUNT_STARTDATE"] = _EndAccountNew.STARTDATE; dtEndAccountData.Rows.Add(drEndAccountData); } } #endregion #region 方法 -> 插入稽核数据 /// /// 插入稽核数据 /// /// 事务管理器 /// 稽核报表【旧表】 /// 稽核报表数据源(收银机端上传) public static void InsertCheckAccount(Transaction _Transaction, Model.Transfer.EndAccount _EndAccount, DataTable dtCheckAccount) { //不存在当前稽核数据,则执行插入操作 if (dtCheckAccount == null || dtCheckAccount.Rows.Count == 0 || dtCheckAccount.Select("SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND MACHINECODE = '" + _EndAccount.MACHINECODE + "' AND CHECK_ENDDATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.ToString() + "' AND CHECK_STARTDATE = '" + _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString() + "'").Length == 0) { InsertCheckInfo(_Transaction, _EndAccount); //存储现场稽核缓存表 DataRow drCheckAccount = dtCheckAccount.NewRow(); drCheckAccount["SERVERPARTCODE"] = _EndAccount.SERVERPARTCODE; drCheckAccount["SHOPCODE"] = _EndAccount.SHOPCODE; drCheckAccount["MACHINECODE"] = _EndAccount.MACHINECODE; drCheckAccount["CHECK_ENDDATE"] = _EndAccount.ENDACCOUNT_DATE; drCheckAccount["CHECK_STARTDATE"] = _EndAccount.ENDACCOUNT_STARTDATE; dtCheckAccount.Rows.Add(drCheckAccount); } else if (!string.IsNullOrEmpty(_EndAccount.ENDACCOUNT_CODE) && dtCheckAccount.Select("CHECKACCOUNT_CODE = '" + _EndAccount.ENDACCOUNT_CODE + "'").Length == 0) { if (_EndAccount.FLAG == 6 && dtCheckAccount.Select("SERVERPARTCODE = '" + _EndAccount.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccount.SHOPCODE + "' AND MACHINECODE = '" + _EndAccount.MACHINECODE + "' AND CHECK_ENDDATE = '" + _EndAccount.ENDACCOUNT_DATE.Value.ToString() + "' AND CHECK_STARTDATE = '" + _EndAccount.ENDACCOUNT_STARTDATE.Value.ToString() + "' AND CHECK_TYPE = '稽核补录'").Length > 0) { return; } InsertCheckInfo(_Transaction, _EndAccount); //存储现场稽核缓存表 DataRow drCheckAccount = dtCheckAccount.NewRow(); drCheckAccount["SERVERPARTCODE"] = _EndAccount.SERVERPARTCODE; drCheckAccount["SHOPCODE"] = _EndAccount.SHOPCODE; drCheckAccount["MACHINECODE"] = _EndAccount.MACHINECODE; drCheckAccount["CHECK_ENDDATE"] = _EndAccount.ENDACCOUNT_DATE; drCheckAccount["CHECK_STARTDATE"] = _EndAccount.ENDACCOUNT_STARTDATE; dtCheckAccount.Rows.Add(drCheckAccount); } } /// /// 插入稽核数据 /// /// 事务管理器 /// 稽核报表【新表】 /// 稽核报表数据源(收银机端上传) public static void InsertCheckAccount(Transaction _Transaction, Model.Transfer.EndAccountNew _EndAccountNew, DataTable dtCheckAccount) { //不存在当前稽核数据,则执行插入操作 if (dtCheckAccount == null || dtCheckAccount.Rows.Count == 0 || dtCheckAccount.Select("SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND MACHINECODE = '" + _EndAccountNew.MACHINECODE + "' AND CHECK_ENDDATE = '" + _EndAccountNew.ENDDATE.Value.ToString() + "' AND CHECK_STARTDATE = '" + _EndAccountNew.STARTDATE.Value.ToString() + "'").Length == 0) { InsertCheckInfo(_Transaction, _EndAccountNew); //存储现场稽核缓存表 DataRow drCheckAccount = dtCheckAccount.NewRow(); drCheckAccount["SERVERPARTCODE"] = _EndAccountNew.SERVERPARTCODE; drCheckAccount["SHOPCODE"] = _EndAccountNew.SHOPCODE; drCheckAccount["MACHINECODE"] = _EndAccountNew.MACHINECODE; drCheckAccount["CHECK_ENDDATE"] = _EndAccountNew.ENDDATE; drCheckAccount["CHECK_STARTDATE"] = _EndAccountNew.STARTDATE; dtCheckAccount.Rows.Add(drCheckAccount); } else if (!string.IsNullOrEmpty(_EndAccountNew.ENDACCOUNT_CODE) && dtCheckAccount.Select("CHECKACCOUNT_CODE = '" + _EndAccountNew.ENDACCOUNT_CODE + "'").Length == 0) { if (_EndAccountNew.ENDACCOUNT_TYPE == 6 && dtCheckAccount.Select(@"SERVERPARTCODE = '" + _EndAccountNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _EndAccountNew.SHOPCODE + "' AND MACHINECODE = '" + _EndAccountNew.MACHINECODE + "' AND CHECK_ENDDATE = '" + _EndAccountNew.ENDDATE.Value.ToString() + "' AND CHECK_STARTDATE = '" + _EndAccountNew.STARTDATE.Value.ToString() + "' AND CHECK_TYPE = '稽核补录' ").Length > 0) { return; } InsertCheckInfo(_Transaction, _EndAccountNew); //存储现场稽核缓存表 DataRow drCheckAccount = dtCheckAccount.NewRow(); drCheckAccount["SERVERPARTCODE"] = _EndAccountNew.SERVERPARTCODE; drCheckAccount["SHOPCODE"] = _EndAccountNew.SHOPCODE; drCheckAccount["MACHINECODE"] = _EndAccountNew.MACHINECODE; drCheckAccount["CHECK_ENDDATE"] = _EndAccountNew.ENDDATE; drCheckAccount["CHECK_STARTDATE"] = _EndAccountNew.STARTDATE; dtCheckAccount.Rows.Add(drCheckAccount); } } #endregion #region 方法 -> 上传日结账期数据 /// /// 上传日结账期数据 /// /// 事务管理器 /// json字符串 /// 数据标识:0【旧结账表数据】、1【新结账表数据】 /// public static bool UploadEndaccount(Transaction _Transaction, string JsonString, int DataType) { bool UploadFlag = true; if (!string.IsNullOrWhiteSpace(JsonString)) { switch (DataType) { case 0: #region 旧结账表数据 //解析json数组 List _DataEndaccount = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataEndaccount != null && _DataEndaccount.Count > 0) { //最小账期时间 var _MinDate = _DataEndaccount.Min(p => p.ENDACCOUNT_DATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataEndaccount.Max(p => p.ENDACCOUNT_DATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataEndaccount.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取服务区结账数据 DataTable dtEndAccountData = GetEndAccountData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //获取服务区结账数据(按自然日结算) DataTable dtEndAccountDataDaily = GetEndAccountDataDaily(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //获取服务区现场稽核数据 DataTable dtCheckAccount = GetCheckAccountData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); List list_EndAccounts = new List(); List list_Inspection = new List(); foreach (Model.Transfer.EndAccount _EndAccount in _DataEndaccount) { if (_EndAccount.FLAG == 1) { //将合适的日结数据加入集合 list_EndAccounts.Add(_EndAccount); //结账数据 InsertEndAccountData(_Transaction, _EndAccount, dtEndAccountData); } else if (_EndAccount.FLAG == 2) { //结账数据(按自然日结算) InsertEndAccountDataDaily(_Transaction, _EndAccount, dtEndAccountDataDaily); } else if (_EndAccount.FLAG == 5 || _EndAccount.FLAG == 6) { //将合适的稽核数据加入集合 list_Inspection.Add(_EndAccount); //稽核数据 InsertCheckAccount(_Transaction, _EndAccount, dtCheckAccount); } } //调用相关方法更新数据版本 PostEndAccountDate(list_EndAccounts); PostInspectionsDate(list_Inspection); } #endregion break; case 1: #region 新结账表数据 //解析json数组 List _DataEndaccount_new = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataEndaccount_new != null && _DataEndaccount_new.Count > 0) { //最小账期时间 var _MinDate = _DataEndaccount_new.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataEndaccount_new.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataEndaccount_new.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取服务区结账数据 DataTable dtEndAccountData = GetEndAccountData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //获取服务区结账数据(按自然日结算) DataTable dtEndAccountDataDaily = GetEndAccountDataDaily(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //获取服务区现场稽核数据 DataTable dtCheckAccount = GetCheckAccountData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); List list_EndAccounts = new List(); List list_Inspection = new List(); foreach (Model.Transfer.EndAccountNew _EndAccountNew in _DataEndaccount_new) { if (_EndAccountNew.ENDACCOUNT_TYPE == 1) { list_EndAccounts.Add(_EndAccountNew); //结账数据 InsertEndAccountData(_Transaction, _EndAccountNew, dtEndAccountData); } else if (_EndAccountNew.ENDACCOUNT_TYPE == 2) { //结账数据(按自然日结算) InsertEndAccountDataDaily(_Transaction, _EndAccountNew, dtEndAccountDataDaily); } else if (_EndAccountNew.ENDACCOUNT_TYPE == 5 || _EndAccountNew.ENDACCOUNT_TYPE == 6) { list_Inspection.Add(_EndAccountNew); //稽核数据 InsertCheckAccount(_Transaction, _EndAccountNew, dtCheckAccount); } } //调用相关方法更新数据版本 PostEndAccountNewDate(list_EndAccounts); PostInspectionsNewDate(list_Inspection); } #endregion break; } } return UploadFlag; } #endregion #endregion #region 收银员交班报表 #region 方法 -> 获取收银员交班报表 /// /// 获取收银员交班报表 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetPersonSellData(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtPersonSell = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND SELL_ENDDATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND SELL_ENDDATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME, PROVINCE_CODE,SELL_ENDDATE,SELL_STARTDATE,SHOPCODE,SHOPNAME, MACHINECODE,CASHWORKER_CODE,CASHIER_NAME,TICKETCOUNT,CASH, TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,CREDITCARD,TICKETBILL, VIPPERSON,COSTBILL,OTHERPAY,CASHPAY,DIFFERENT_PRICE,DOWNLOAD_DATE,VALID FROM HIGHWAY_SELLDATA.T_PERSONSELL WHERE 1 = 1{0}", WhereSQL); dtPersonSell = new HSDB.PERSONSELL(_Transaction).ExecuteDataTable(SQLString); return dtPersonSell; } #endregion #region 方法 -> 插入收银员交班报表 /// /// 插入收银员交班报表 /// /// /// /// public static void InsertPersonSellData(Transaction _Transaction, Model.Transfer.Personsell _Personsell, DataTable dtPersonSellData) { if (dtPersonSellData == null || dtPersonSellData.Rows.Count == 0 || dtPersonSellData.Select("VALID > 0 AND SERVERPARTCODE = '" + _Personsell.SERVERPARTCODE + "' AND SHOPCODE = '" + _Personsell.SHOPCODE + "' AND MACHINECODE = '" + _Personsell.MACHINECODE + "' AND SELL_ENDDATE = '" + _Personsell.ENDDATE.Value.ToString() + "' AND SELL_STARTDATE = '" + _Personsell.STARTDATE.Value.ToString() + "'").Length == 0) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_Personsell.PAYMENT_DETAILS)) { SeparatePayType(_Personsell.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } #endregion //插入收银员交班报表 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_PERSONSELL ( PERSONSELL_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME,PROVINCE_CODE, SELL_ENDDATE,SELL_STARTDATE,SHOPCODE,SHOPNAME,MACHINECODE,CASHWORKER_CODE, CASHIER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,CASH, CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,CASHPAY,DIFFERENT_PRICE, DOWNLOAD_DATE,VALID) SELECT HIGHWAY_SELLDATA.SEQ_PERSONSELL.NEXTVAL,A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},{15},SYSDATE,1 FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND C.CASHWORKER_LOGINNAME = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{16}' AND B.SHOPCODE = '{17}'", _Personsell.ENDDATE, _Personsell.STARTDATE, _Personsell.MACHINECODE, _Personsell.ENDPERSONCODE, _Personsell.TICKETCOUNT, _Personsell.TOTALCOUNT, _Personsell.TOTALSELLAMOUNT, _Personsell.TOTALOFFAMOUNT, _Personsell.CASH, _Personsell.INTERNALPAY > 0 ? _Personsell.INTERNALPAY : _Personsell.CREDITCARD, _WECHAT, _Personsell.VIPPERSON, _Personsell.COSTBILL, _ALIPAY + _UNIONPAY, _Personsell.CASHPAY, _Personsell.CASHPAY - _Personsell.CASH, _Personsell.SERVERPARTCODE, _Personsell.SHOPCODE); //返回数据插入结果 HSDB.PERSONSELL pERSONSELL = new HSDB.PERSONSELL(_Transaction); int resultRows = pERSONSELL.ExecuteNonQuery(SQLString, null); if (resultRows > 0) { //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION where SERVERPARTCODE='" + _Personsell.SERVERPARTCODE + "' " + "and SHOPCODE='" + _Personsell.SHOPCODE + "' and MACHINECODE='" + _Personsell.MACHINECODE + "' and TABLENAME='T_PERSONSELL'"; DataTable dt_endcount = pERSONSELL.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION(DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES(HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _Personsell.SERVERPARTCODE , _Personsell.SHOPCODE, _Personsell.MACHINECODE, "T_PERSONSELL", _Personsell.ENDDATE.ToString()); } else { //更新操作 if (_Personsell.ENDDATE != null && _Personsell.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", _Personsell.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { pERSONSELL.ExecuteNonQuery(Sql, null); } //释放资源 if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } //存储结账数据缓存表 DataRow drPersonSellData = dtPersonSellData.NewRow(); drPersonSellData["SERVERPARTCODE"] = _Personsell.SERVERPARTCODE; drPersonSellData["SHOPCODE"] = _Personsell.SHOPCODE; drPersonSellData["MACHINECODE"] = _Personsell.MACHINECODE; drPersonSellData["SELL_ENDDATE"] = _Personsell.ENDDATE; drPersonSellData["SELL_STARTDATE"] = _Personsell.STARTDATE; dtPersonSellData.Rows.Add(drPersonSellData); } } /// /// 插入收银员交班报表 /// /// /// /// public static void InsertPersonSellData(Transaction _Transaction, Model.Transfer.PersonsellNew _PersonsellNew, DataTable dtPersonSellData) { if (dtPersonSellData == null || dtPersonSellData.Rows.Count == 0 || dtPersonSellData.Select("VALID > 0 AND SERVERPARTCODE = '" + _PersonsellNew.SERVERPARTCODE + "' AND SHOPCODE = '" + _PersonsellNew.SHOPCODE + "' AND MACHINECODE = '" + _PersonsellNew.MACHINECODE + "' AND SELL_ENDDATE = '" + _PersonsellNew.ENDDATE.Value.ToString() + "' AND SELL_STARTDATE = '" + _PersonsellNew.STARTDATE.Value.ToString() + "'").Length == 0) { #region 获取支付方式 decimal _WECHAT = 0, _ALIPAY = 0, _UNIONPAY = 0, _ONLINEPAY = 0, _BUSCOUPONS = 0; if (!string.IsNullOrWhiteSpace(_PersonsellNew.PAYMENT_DETAILS)) { SeparatePayType(_PersonsellNew.PAYMENT_DETAILS, ref _WECHAT, ref _ALIPAY, ref _UNIONPAY, ref _ONLINEPAY, ref _BUSCOUPONS); } if (_PersonsellNew.MOBILEPAY > _WECHAT + _ALIPAY + _UNIONPAY) { _WECHAT = _PersonsellNew.MOBILEPAY.Value - (_ALIPAY + _UNIONPAY); } #endregion //插入收银员交班报表 string SQLString = string.Format(@"INSERT INTO HIGHWAY_SELLDATA.T_PERSONSELL ( PERSONSELL_ID,SERVERPART_ID,SERVERPARTCODE,SERVERPART_NAME,PROVINCE_CODE, SELL_ENDDATE,SELL_STARTDATE,SHOPCODE,SHOPNAME,MACHINECODE,CASHWORKER_CODE, CASHIER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,CASH, CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,CASHPAY,DIFFERENT_PRICE, DOWNLOAD_DATE,VALID) SELECT HIGHWAY_SELLDATA.SEQ_PERSONSELL.NEXTVAL,A.SERVERPART_ID,A.SERVERPART_CODE, A.SERVERPART_NAME,A.PROVINCE_CODE,TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS'), TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),B.SHOPCODE,B.SHOPNAME, '{2}','{3}',C.CASHWORKER_NAME,{4},{5},{6},{7},{8},{9},{10}, {11},{12},{13},{14},{15},SYSDATE,1 FROM HIGHWAY_STORAGE.T_SERVERPART A LEFT JOIN HIGHWAY_STORAGE.T_CASHWORKER C ON A.SERVERPART_ID = C.SERVERPART_ID AND C.CASHWORKER_LOGINNAME = '{3}', HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SERVERPART_CODE = '{16}' AND B.SHOPCODE = '{17}'", _PersonsellNew.ENDDATE, _PersonsellNew.STARTDATE, _PersonsellNew.MACHINECODE, _PersonsellNew.SELLWORKER_CODE, _PersonsellNew.TICKET_COUNT, _PersonsellNew.TOTAL_COUNT, _PersonsellNew.TOTAL_AMOUNT, _PersonsellNew.TOTAL_OFFAMOUNT, _PersonsellNew.CASHPAY, _PersonsellNew.INTERNALPAY > 0 ? _PersonsellNew.INTERNALPAY : _PersonsellNew.BANKPAY, _WECHAT, _PersonsellNew.MEMBERPAY, _PersonsellNew.COUPONPAY, _ALIPAY + _UNIONPAY, _PersonsellNew.CONTRIBUTION_AMOUNT, _PersonsellNew.CONTRIBUTION_AMOUNT - _PersonsellNew.CASHPAY, _PersonsellNew.SERVERPARTCODE, _PersonsellNew.SHOPCODE); //返回数据插入结果 HSDB.PERSONSELL pERSONSELL = new HSDB.PERSONSELL(_Transaction); int resultRows = pERSONSELL.ExecuteNonQuery(SQLString, null); if (resultRows > 0) { //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION where SERVERPARTCODE='" + _PersonsellNew.SERVERPARTCODE + "' " + "and SHOPCODE='" + _PersonsellNew.SHOPCODE + "' and MACHINECODE='" + _PersonsellNew.MACHINECODE + "' and TABLENAME='T_PERSONSELL'"; DataTable dt_endcount = pERSONSELL.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION(DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES(HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", _PersonsellNew.SERVERPARTCODE , _PersonsellNew.SHOPCODE, _PersonsellNew.MACHINECODE, "T_PERSONSELL", _PersonsellNew.ENDDATE.ToString()); } else { //更新操作 if (_PersonsellNew.ENDDATE != null && _PersonsellNew.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", _PersonsellNew.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { pERSONSELL.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } //存储结账数据缓存表 DataRow drPersonSellData = dtPersonSellData.NewRow(); drPersonSellData["SERVERPARTCODE"] = _PersonsellNew.SERVERPARTCODE; drPersonSellData["SHOPCODE"] = _PersonsellNew.SHOPCODE; drPersonSellData["MACHINECODE"] = _PersonsellNew.MACHINECODE; drPersonSellData["SELL_ENDDATE"] = _PersonsellNew.ENDDATE; drPersonSellData["SELL_STARTDATE"] = _PersonsellNew.STARTDATE; dtPersonSellData.Rows.Add(drPersonSellData); } } #endregion #region 方法 -> 上传收银员交班报表 /// /// 上传收银员交班报表 /// /// 事务管理器 /// json字符串 /// 数据标识:0【旧收银员交班报表】、1【新收银员交班报表】 /// public static bool UploadPersonSell(Transaction _Transaction, string JsonString, int DataType) { bool UploadFlag = true; if (!string.IsNullOrWhiteSpace(JsonString)) { switch (DataType) { case 0: #region 旧收银员交班报表 //解析json数组 List _DataPersonsell = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataPersonsell != null && _DataPersonsell.Count > 0) { //最小账期时间 var _MinDate = _DataPersonsell.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataPersonsell.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataPersonsell.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取服务区收银员交班报表 DataTable dtPersonSellData = GetPersonSellData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); foreach (Model.Transfer.Personsell _Personsell in _DataPersonsell) { InsertPersonSellData(_Transaction, _Personsell, dtPersonSellData); } //调用相关方法更新数据版本 PostPersonsellDate(_DataPersonsell); } #endregion break; case 1: #region 新收银员交班报表 //解析json数组 List _DataPersonsellNew = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataPersonsellNew != null && _DataPersonsellNew.Count > 0) { //最小账期时间 var _MinDate = _DataPersonsellNew.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataPersonsellNew.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataPersonsellNew.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取收银员交班报表 DataTable dtPersonSellData = GetPersonSellData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); foreach (Model.Transfer.PersonsellNew _PersonsellNew in _DataPersonsellNew) { InsertPersonSellData(_Transaction, _PersonsellNew, dtPersonSellData); } //调用相关方法更新数据版本 PostPersonsellNewDate(_DataPersonsellNew); } #endregion break; } } return UploadFlag; } #endregion #endregion #region 单品信息表(包含集合和明细) #region 方法 -> 获取单品集合表 /// /// 获取单品集合表 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetTransferSaleData(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtTransferSale = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND ENDDATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND ENDDATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT TRANSFER_ID,STARTDATE,ENDDATE, SERVERPARTCODE,SHOPCODE,MACHINECODE,TRANSFER_FIRSTDATAS FROM HIGHWAY_EXCHANGE.T_TRANSFER_SALE WHERE 1 = 1{0}", WhereSQL); dtTransferSale = new HSDB.ENDACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtTransferSale; } /// /// 找到指定服务区下面的所有单品明细数据 /// /// /// /// /// /// public static DataTable GetCommoditySaleData(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtTransferSale = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND ENDDATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND ENDDATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT COMMODITYSALE_ID,STARTDATE,ENDDATE, SERVERPARTCODE,SHOPCODE,MACHINECODE,COMMODITY_CODE,COMMODITY_NAME FROM HIGHWAY_EXCHANGE.T_COMMODITYSALE WHERE 1 = 1{0}", WhereSQL); dtTransferSale = new HSDB.ENDACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtTransferSale; } #endregion #region 方法 -> 上传单品表 #region 上传单品集合表 /// /// 上传单品集合表 /// /// 事务管理器 /// json字符串 /// public static bool UploadTransferSale(Transaction _Transaction, string JsonString) { bool UploadFlag = true; if (!string.IsNullOrWhiteSpace(JsonString)) { //解析json数组 List _DataTransferSale = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataTransferSale != null && _DataTransferSale.Count > 0) { //最小账期时间 var _MinDate = _DataTransferSale.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataTransferSale.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataTransferSale.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取服务区单品集合表 DataTable dtTransferSaleData = GetTransferSaleData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); foreach (Model.Transfer.TransferSale _TransferSale in _DataTransferSale) { if (dtTransferSaleData == null || dtTransferSaleData.Rows.Count == 0 || dtTransferSaleData.Select("SERVERPARTCODE = '" + _TransferSale.SERVERPARTCODE + "' AND SHOPCODE = '" + _TransferSale.SHOPCODE + "' AND MACHINECODE = '" + _TransferSale.MACHINECODE + "' AND TRANSFER_FIRSTDATAS = '" + _TransferSale.TRANSFER_FIRSTDATAS + "' AND ENDDATE = '" + _TransferSale.ENDDATE.Value.ToString() + "' AND STARTDATE = '" + _TransferSale.STARTDATE.Value.ToString() + "'").Length == 0) { //插入单品集合表 string SQLString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_TRANSFER_SALE ( TRANSFER_ID,STARTDATE,ENDDATE,SERVERPARTCODE,SHOPCODE,MACHINECODE, TRANSFER_FIRSTDATAS,TRANSFER_SECONDDATAS,TRANSFER_THIRDDATAS,TRANSFER_FORTHDATAS, TRANSFER_FIFTHDATAS,TRANSFER_SIXTHDATAS,TRANSFER_SEVENTHDATAS,TRANSFER_EIGHTHDATAS, TRANSFER_NINTHTDATAS,TRANSFER_TENTHDATAS,TRANSFER_ELEVENTHDATAS,TRANSFER_TWELFTHDATAS, TRANSFER_THIRTEENTHDATAS,TRANSFER_FOURTEENTHDATAS,TRANSFER_FIFTEENTHDATAS) VALUES ({0},TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),TO_DATE('{2}','YYYY/MM/DD HH24:MI:SS'), '{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}', '{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}')", _TransferSale.TRANSFER_ID, _TransferSale.STARTDATE, _TransferSale.ENDDATE, _TransferSale.SERVERPARTCODE, _TransferSale.SHOPCODE, _TransferSale.MACHINECODE, _TransferSale.TRANSFER_FIRSTDATAS, _TransferSale.TRANSFER_SECONDDATAS, _TransferSale.TRANSFER_THIRDDATAS, _TransferSale.TRANSFER_FORTHDATAS, _TransferSale.TRANSFER_FIFTHDATAS, _TransferSale.TRANSFER_SIXTHDATAS, _TransferSale.TRANSFER_SEVENTHDATAS, _TransferSale.TRANSFER_EIGHTHDATAS, _TransferSale.TRANSFER_NINTHTDATAS, _TransferSale.TRANSFER_TENTHDATAS, _TransferSale.TRANSFER_ELEVENTHDATAS, _TransferSale.TRANSFER_TWELFTHDATAS, _TransferSale.TRANSFER_THIRTEENTHDATAS, _TransferSale.TRANSFER_FOURTEENTHDATAS, _TransferSale.TRANSFER_FIFTEENTHDATAS); //返回数据插入结果 new HSDB.ENDACCOUNT(_Transaction).ExecuteNonQuery(SQLString, null); //存储结账数据缓存表 DataRow drTransferSaleData = dtTransferSaleData.NewRow(); drTransferSaleData["SERVERPARTCODE"] = _TransferSale.SERVERPARTCODE; drTransferSaleData["SHOPCODE"] = _TransferSale.SHOPCODE; drTransferSaleData["MACHINECODE"] = _TransferSale.MACHINECODE; drTransferSaleData["ENDDATE"] = _TransferSale.ENDDATE; drTransferSaleData["STARTDATE"] = _TransferSale.STARTDATE; drTransferSaleData["TRANSFER_FIRSTDATAS"] = _TransferSale.TRANSFER_FIRSTDATAS; dtTransferSaleData.Rows.Add(drTransferSaleData); } } } } return UploadFlag; } #endregion #region 上传PB老系统的单品明细数据 /// /// 上传PB老系统的单品明细数据 /// /// 事务管理器 /// json字符串 /// 返回执行结果:true:成功;false:失败 public static bool UploadCommodityOld(Transaction _Transaction, string JsonString) { bool UploadFlag = false; //校验传入参数是否有效 if (string.IsNullOrWhiteSpace(JsonString)) { return UploadFlag; } //解析json数组 List _DataCommoditySale = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataCommoditySale == null || _DataCommoditySale.Count == 0) { return UploadFlag; } //最小账期时间 var _MinDate = _DataCommoditySale.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataCommoditySale.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataCommoditySale.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //LogUtil.WriteLog(null, "strServerPart:" + _strServerPart + ",MinDate:" + _MinDate + ",MaxDate:" + _MaxDate, "UploadCommodityOld"); //获取指定服务区单品明细表 DataTable dtCommoditySaleData = GetCommoditySaleData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //遍历插入单品明细数据 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); foreach (Model.Transfer.CommoditySale commoditySale in _DataCommoditySale) { if (dtCommoditySaleData == null || dtCommoditySaleData.Rows.Count == 0 || dtCommoditySaleData.Select( " STARTDATE='" + commoditySale.STARTDATE.Value.ToString() + "' and ENDDATE='" + commoditySale.ENDDATE.Value.ToString() + "' and SERVERPARTCODE='" + commoditySale.SERVERPARTCODE + "' and SHOPCODE='" + commoditySale.SHOPCODE + "' and MACHINECODE='" + commoditySale.MACHINECODE + "' and COMMODITY_CODE='" + commoditySale.COMMODITY_CODE + "'").Length == 0) { //内存表中不存在当前数据对象,添加数据 string insertSql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_COMMODITYSALE( COMMODITYSALE_ID,STARTDATE,ENDDATE,SERVERPARTCODE,SHOPCODE, MACHINECODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12})", commoditySale.COMMODITYSALE_ID.ToString(), "TO_DATE('" + commoditySale.STARTDATE + "','YYYY/MM/DD HH24:MI:SS')", "TO_DATE('" + commoditySale.ENDDATE + "','YYYY/MM/DD HH24:MI:SS')", "'" + commoditySale.SERVERPARTCODE + "'", "'" + commoditySale.SHOPCODE + "'", "'" + commoditySale.MACHINECODE + "'", "'" + commoditySale.COMMODITY_TYPE + "'", "'" + commoditySale.COMMODITY_CODE + "'", "'" + commoditySale.COMMODITY_NAME + "'", commoditySale.TICKETCOUNT.ToString(), commoditySale.TOTALCOUNT.ToString(), commoditySale.TOTALSELLAMOUNT.ToString(), commoditySale.TOTALOFFAMOUNT.ToString()); //LogUtil.WriteLog(insertSql); //返回数据插入结果 int resultRows = eNDACCOUNT.ExecuteNonQuery(insertSql, null); //int resultRows = new OracleHelper("192.168.11.194", "orclcs", "highway_exchange", "qrwl").ExcuteSql(insertSql); if (resultRows == 0) { //插入失败,返回插入失败结果; return UploadFlag; } //将插入成功的数据加入到临时表以备再次校验以防止传过来存在重复数据问题 DataRow drTransferSaleData = dtCommoditySaleData.NewRow(); drTransferSaleData["SERVERPARTCODE"] = commoditySale.SERVERPARTCODE; drTransferSaleData["SHOPCODE"] = commoditySale.SHOPCODE; drTransferSaleData["MACHINECODE"] = commoditySale.MACHINECODE; drTransferSaleData["ENDDATE"] = commoditySale.ENDDATE; drTransferSaleData["STARTDATE"] = commoditySale.STARTDATE; drTransferSaleData["COMMODITYSALE_ID"] = commoditySale.COMMODITYSALE_ID; drTransferSaleData["COMMODITY_CODE"] = commoditySale.COMMODITY_CODE; dtCommoditySaleData.Rows.Add(drTransferSaleData); } } //调用相关方法更新数据版本 PostCommoditySaleDate(_Transaction, _DataCommoditySale); return true; } #endregion #region 上传新系统的单品明细数据 /// /// 上传新系统的单品明细数据 /// /// 事务管理器 /// json字符串 /// 返回执行结果:true:成功;false:失败 public static bool UploadCommodityNew(Transaction _Transaction, string JsonString) { bool UploadFlag = false; //校验传入参数是否有效 if (string.IsNullOrWhiteSpace(JsonString)) { return UploadFlag; } //解析json数组 List _DataCommoditySale = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataCommoditySale == null || _DataCommoditySale.Count == 0) { return UploadFlag; } //最小账期时间 var _MinDate = _DataCommoditySale.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataCommoditySale.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataCommoditySale.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取指定服务区单品明细表 DataTable dtCommoditySaleData = GetCommoditySaleData(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); //遍历插入单品明细数据 HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); foreach (Model.Transfer.CommoditySaleNew commoditySale in _DataCommoditySale) { if (dtCommoditySaleData == null || dtCommoditySaleData.Rows.Count == 0 || dtCommoditySaleData.Select( " STARTDATE='" + commoditySale.STARTDATE.Value.ToString() + "' and ENDDATE = '" + commoditySale.ENDDATE.Value.ToString() + "' and SERVERPARTCODE = '" + commoditySale.SERVERPARTCODE + "' and SHOPCODE = '" + commoditySale.SHOPCODE + "' and MACHINECODE = '" + commoditySale.MACHINECODE + "' and COMMODITY_CODE = '" + commoditySale.COMMODITY_CODE + "'").Length == 0) { //内存表中不存在当前数据对象,添加数据 string insertSql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_COMMODITYSALE ( COMMODITYSALE_ID,STARTDATE,ENDDATE,SERVERPARTCODE,SHOPCODE, MACHINECODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12})", commoditySale.COMMODITYSALE_ID.ToString(), "TO_DATE('" + commoditySale.STARTDATE + "','YYYY/MM/DD HH24:MI:SS')", "TO_DATE('" + commoditySale.ENDDATE + "','YYYY/MM/DD HH24:MI:SS')", "'" + commoditySale.SERVERPARTCODE + "'", "'" + commoditySale.SHOPCODE + "'", "'" + commoditySale.MACHINECODE + "'", "'" + commoditySale.COMMODITY_TYPE + "'", "'" + commoditySale.COMMODITY_CODE + "'", "'" + commoditySale.COMMODITY_NAME + "'", commoditySale.TICKTE_COUNT.ToString(), commoditySale.TOTAL_COUNT.ToString(), commoditySale.TOTAL_AMOUNT.ToString(), commoditySale.TOTAL_OFFAMOUNT.ToString()); //返回数据插入结果 int resultRows = eNDACCOUNT.ExecuteNonQuery(insertSql, null); //int resultRows = new OracleHelper("192.168.11.194", "orclcs", "highway_exchange", "qrwl").ExcuteSql(insertSql); if (resultRows == 0) { //插入失败,返回插入失败结果; return UploadFlag; } //将插入成功的数据加入到临时表以备再次校验以防止传过来存在重复数据问题 DataRow drTransferSaleData = dtCommoditySaleData.NewRow(); drTransferSaleData["SERVERPARTCODE"] = commoditySale.SERVERPARTCODE; drTransferSaleData["SHOPCODE"] = commoditySale.SHOPCODE; drTransferSaleData["MACHINECODE"] = commoditySale.MACHINECODE; drTransferSaleData["ENDDATE"] = commoditySale.ENDDATE; drTransferSaleData["STARTDATE"] = commoditySale.STARTDATE; drTransferSaleData["COMMODITYSALE_ID"] = commoditySale.COMMODITYSALE_ID; drTransferSaleData["COMMODITY_CODE"] = commoditySale.COMMODITY_CODE; dtCommoditySaleData.Rows.Add(drTransferSaleData); } } //遍历插入单品明细数据 //调用相关方法更新数据版本 PostCommoditySaleNewDate(_Transaction, _DataCommoditySale); return true; } #endregion #endregion #endregion #region 特殊单品表 #region 方法 -> 获取特殊单品表 /// /// 获取特殊单品表 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetCommoditySale_Extra(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtCommoditySale_Extra = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPARTCODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND ENDDATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND ENDDATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT COMMODITYSALE_ID,STARTDATE,ENDDATE,SERVERPARTCODE, SHOPCODE,MACHINECODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,FLAG FROM HIGHWAY_EXCHANGE.T_COMMODITYSALE_EXTAR WHERE 1 = 1{0}", WhereSQL); dtCommoditySale_Extra = new HSDB.ENDACCOUNT(_Transaction).ExecuteDataTable(SQLString); return dtCommoditySale_Extra; } #endregion #region 方法 -> 上传特殊单品表 /// /// 上传特殊单品表 /// /// 事务管理器 /// json字符串 /// public static bool UploadCommoditySale_Extra(Transaction _Transaction, string JsonString) { bool UploadFlag = true; if (!string.IsNullOrWhiteSpace(JsonString)) { //解析json数组 List _DataCommoditySale_Extra = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataCommoditySale_Extra != null && _DataCommoditySale_Extra.Count > 0) { //最小账期时间 var _MinDate = _DataCommoditySale_Extra.Min(p => p.ENDDATE); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大账期时间 var _MaxDate = _DataCommoditySale_Extra.Max(p => p.ENDDATE); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataCommoditySale_Extra.Select(p => p.SERVERPARTCODE).Distinct().ToArray()); //获取服务区单品集合表 DataTable dtCommoditySale_Extra = GetCommoditySale_Extra(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); foreach (Model.Transfer.CommoditySale_Extra _CommoditySale_Extra in _DataCommoditySale_Extra) { if (dtCommoditySale_Extra == null || dtCommoditySale_Extra.Rows.Count == 0 || dtCommoditySale_Extra.Select("SERVERPARTCODE = '" + _CommoditySale_Extra.SERVERPARTCODE + "' AND SHOPCODE = '" + _CommoditySale_Extra.SHOPCODE + "' AND MACHINECODE = '" + _CommoditySale_Extra.MACHINECODE + "' AND COMMODITY_CODE = '" + _CommoditySale_Extra.COMMODITY_CODE + "' AND FLAG = '" + _CommoditySale_Extra.FLAG + "' AND ENDDATE = '" + _CommoditySale_Extra.ENDDATE.Value.ToString() + "' AND STARTDATE = '" + _CommoditySale_Extra.STARTDATE.Value.ToString() + "'").Length == 0) { //插入单品集合表 string SQLString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_COMMODITYSALE_EXTAR ( COMMODITYSALE_ID,STARTDATE,ENDDATE,SERVERPARTCODE, SHOPCODE,MACHINECODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_NAME, TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT,FLAG) VALUES ({0},TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS'),TO_DATE('{2}','YYYY/MM/DD HH24:MI:SS'), '{3}','{4}','{5}','{6}','{7}','{8}',{9},{10},{11},{12},{13})", _CommoditySale_Extra.COMMODITYSALE_ID, _CommoditySale_Extra.STARTDATE, _CommoditySale_Extra.ENDDATE, _CommoditySale_Extra.SERVERPARTCODE, _CommoditySale_Extra.SHOPCODE, _CommoditySale_Extra.MACHINECODE, _CommoditySale_Extra.COMMODITY_TYPE, _CommoditySale_Extra.COMMODITY_CODE, _CommoditySale_Extra.COMMODITY_NAME, _CommoditySale_Extra.TICKETCOUNT, _CommoditySale_Extra.TOTALCOUNT, _CommoditySale_Extra.TOTALSELLAMOUNT, _CommoditySale_Extra.TOTALOFFAMOUNT, _CommoditySale_Extra.FLAG); //返回数据插入结果 new HSDB.ENDACCOUNT(_Transaction).ExecuteNonQuery(SQLString, null); //存储结账数据缓存表 DataRow drTransferSaleData = dtCommoditySale_Extra.NewRow(); drTransferSaleData["SERVERPARTCODE"] = _CommoditySale_Extra.SERVERPARTCODE; drTransferSaleData["SHOPCODE"] = _CommoditySale_Extra.SHOPCODE; drTransferSaleData["MACHINECODE"] = _CommoditySale_Extra.MACHINECODE; drTransferSaleData["ENDDATE"] = _CommoditySale_Extra.ENDDATE; drTransferSaleData["STARTDATE"] = _CommoditySale_Extra.STARTDATE; drTransferSaleData["COMMODITY_CODE"] = _CommoditySale_Extra.COMMODITY_CODE; drTransferSaleData["FLAG"] = _CommoditySale_Extra.FLAG; dtCommoditySale_Extra.Rows.Add(drTransferSaleData); } } } } return UploadFlag; } #endregion #endregion #region 促销流水表 #region 方法 -> 获取促销流水主表 /// /// 获取促销流水主表 /// /// 事务管理器 /// 服务区编码 /// 最小结账日期 /// 最大结账日期 /// public static DataTable GetPromotionRecord(Transaction _Transaction, string ServerepartCode, string LastTime, string EndTime) { DataTable dtPromotionRecord = new DataTable(); //数据查询SQL语句,查询条件SQL语句 string SQLString = "", WhereSQL = ""; WhereSQL += " AND SERVERPART_CODE IN (" + ServerepartCode + ")"; //筛选结账时间 if (!string.IsNullOrWhiteSpace(LastTime)) { WhereSQL += " AND PROMOTIONRECORD_DATE >= TO_DATE('" + LastTime + "','YYYY/MM/DD HH24:MI:SS')"; } if (!string.IsNullOrWhiteSpace(EndTime)) { WhereSQL += " AND PROMOTIONRECORD_DATE <= TO_DATE('" + EndTime + "','YYYY/MM/DD HH24:MI:SS')"; } //数据查询语句 SQLString = string.Format(@"SELECT PROMOTIONRECORD_CODE, SERVERPART_CODE,SHOPCODE,MACHINECODE,PROMOTIONRECORD_DATE FROM MEMBERSHIP_STORAGE.T_PROMOTIONRECORD WHERE 1 = 1{0}", WhereSQL); dtPromotionRecord = new MSSB.CONSUMPTIONRECORD(_Transaction).ExecuteDataTable(SQLString); return dtPromotionRecord; } #endregion #region 方法 -> 上传促销流水主表 /// /// 上传促销流水主表 /// /// 事务管理器 /// json字符串 /// public static bool UploadPromotionRecord(Transaction _Transaction, string JsonString) { bool UploadFlag = true; if (!string.IsNullOrWhiteSpace(JsonString)) { //解析json数组 List _DataPromotionRecord = Common.JsonHelper.JSONStringToListUTC(JsonString); if (_DataPromotionRecord != null && _DataPromotionRecord.Count > 0) { //最小销售时间 var _MinDate = _DataPromotionRecord.Min(p => p.PromotionRecord_Date); if (_MinDate == null || _MinDate.Value == DateTime.MinValue) { _MinDate = DateTime.Now; } //最大销售时间 var _MaxDate = _DataPromotionRecord.Max(p => p.PromotionRecord_Date); if (_MaxDate == null || _MaxDate.Value == DateTime.MinValue) { _MaxDate = DateTime.Now; } //获取服务区编码 string _strServerPart = GetServerpartCodeList(_DataPromotionRecord.Select(p => p.ServerpartCode).Distinct().ToArray()); //根据服务区编码获取门店信息 DataTable dtServerpartShop = Serverpart.GetServerpartShopByCode(_Transaction, _strServerPart); //获取服务区促销流水主表 DataTable dtPromotionRecord = GetPromotionRecord(_Transaction, _strServerPart, _MinDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), _MaxDate.Value.ToString("yyyy/MM/dd HH:mm:ss")); foreach (Model.Transfer.PromotionRecord _PromotionRecord in _DataPromotionRecord) { if (dtPromotionRecord == null || dtPromotionRecord.Rows.Count == 0 || dtPromotionRecord.Select("PROMOTIONRECORD_CODE = '" + _PromotionRecord.PromotionRecord_Code + "'").Length == 0) { string _SERVERPART_ID = "", _SERVERPART_NAME = "", _SERVERPARTSHOP_ID = "", _SHOPNAME = ""; if (dtServerpartShop.Rows.Count > 0 && dtServerpartShop.Select("SERVERPART_CODE = '" + _PromotionRecord.ServerpartCode + "' AND SHOPCODE = '" + _PromotionRecord.ShopCode + "'").Length > 0) { DataRow drServerpartShop = dtServerpartShop.Select("SERVERPART_CODE = '" + _PromotionRecord.ServerpartCode + "' AND SHOPCODE = '" + _PromotionRecord.ShopCode + "'")[0]; //服务区内码 _SERVERPART_ID = drServerpartShop["SERVERPART_ID"].ToString(); //服务区名称 _SERVERPART_NAME = drServerpartShop["SERVERPART_NAME"].ToString(); //门店内码 _SERVERPARTSHOP_ID = drServerpartShop["SERVERPARTSHOP_ID"].ToString(); //门店名称 _SHOPNAME = drServerpartShop["SHOPNAME"].ToString(); } //插入促销流水主表 string SQLString = string.Format(@"INSERT INTO MEMBERSHIP_STORAGE.T_PROMOTIONRECORD ( PROMOTIONRECORD_ID,PROMOTIONRECORD_CODE,PROMOTION_ID,PROMOTION_NAME, SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME, MACHINECODE,PROMOTIONRECORD_DATE,PROMOTIONRECORD_COMMODITY,PROMOTIONRECORD_COUNT, PROMOTIONRECORD_AMOUNT,PROMOTIONRECORD_OFFAMOUNT,PROMOTIONRECORD_DESC) VALUES (MEMBERSHIP_STORAGE.SEQ_PROMOTIONRECORD.NEXTVAL,'{0}',{1},'{2}', {3},'{4}','{5}',{6},'{7}','{8}','{9}', TO_DATE('{10}','YYYY/MM/DD HH24:MI:SS'),'{11}',{12},{13},{14},'{15}')", _PromotionRecord.PromotionRecord_Code, _PromotionRecord.Promotion_ID, _PromotionRecord.Promotion_Name, _SERVERPART_ID, _PromotionRecord.ServerpartCode, _SERVERPART_NAME, _SERVERPARTSHOP_ID, _PromotionRecord.ShopCode, _SHOPNAME, _PromotionRecord.MachineCode, _PromotionRecord.PromotionRecord_Date, _PromotionRecord.PromotionRecord_Commodity, _PromotionRecord.PromotionRecord_Count, _PromotionRecord.PromotionRecord_Amount, _PromotionRecord.PromotionRecord_OffAmount, _PromotionRecord.PromotionRecord_Desc); //返回数据插入结果 new MSSB.CONSUMPTIONRECORD(_Transaction).ExecuteNonQuery(SQLString, null); //存储结账数据缓存表 DataRow drPromotionRecord = dtPromotionRecord.NewRow(); drPromotionRecord["PROMOTIONRECORD_CODE"] = _PromotionRecord.PromotionRecord_Code; dtPromotionRecord.Rows.Add(drPromotionRecord); } } } } return UploadFlag; } #endregion #endregion #endregion #endregion #region 调用云端版本更新方法以进行更新操作 /// /// 调用云端版本更新方法以进行更新操作 /// /// 服务区编码 /// 门店编码 /// 机器编码 /// 被更新字段的字段名 /// 数据版本 /// private static string PostDataVersion(string ServerpartCode, string ShopCode, string MachineCode, string FieldName, string DataVersion) { string apiCloudUrl = ConfigurationManager.AppSettings["Api_Cloud"]; if (string.IsNullOrEmpty(apiCloudUrl)) { return "{\"error\": -1 ,\"msg\": \"更新云端数据版本失败,未配置云端API地址!\"}"; ; } System.Collections.Hashtable ht = new System.Collections.Hashtable(); ht.Add("ServerpartCode", ServerpartCode); ht.Add("ShopCode", ShopCode); ht.Add("MachineCode", MachineCode); ht.Add("FieldName", FieldName); ht.Add("DataVersion", DataVersion); return HZQR.Common.Common.SoapWSHelper.QuerySoapWebServiceString(apiCloudUrl.ToString(), "SetNewDataVersionUpload", ht); } /// /// 调用云端接口进行数据版本更新 /// /// 被更新数据的数据集合列表,以字符串格式 /// 被更新数据版本的字段名 /// private static string PostDataVersion(string DataList, string FieldName) { string apiCloudUrl = ConfigurationManager.AppSettings["Api_Cloud"]; if (string.IsNullOrEmpty(apiCloudUrl)) { return "{\"error\": -1 ,\"msg\": \"更新云端数据版本失败,未配置云端API地址!\"}"; } System.Collections.Hashtable ht = new System.Collections.Hashtable(); ht.Add("DataList", DataList); ht.Add("FieldName", FieldName); string result = HZQR.Common.Common.SoapWSHelper.QuerySoapWebServiceString(apiCloudUrl.ToString(), "SetNewDataVersionUpload", ht); WriteLogLine(result + "|" + FieldName + DataList); return result; } /// /// 写日志到本地 /// /// public static void WriteLogLine(string exceptionMessage) { string path = string.Empty; try { path = "D:\\logs"; } catch (Exception) { path = @"c:\temp"; } if (string.IsNullOrEmpty(path)) path = @"c:\temp"; try { //如果日志目录不存在,则创建该目录 if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string logFileName = path + "\\程序日志_" + DateTime.Now.ToString("yyyy_MM_dd_HH") + ".log"; StringBuilder logContents = new StringBuilder(); logContents.AppendLine(exceptionMessage); //当天的日志文件不存在则新建,否则追加内容 StreamWriter sw = new StreamWriter(logFileName, true, System.Text.Encoding.Unicode); sw.Write(DateTime.Now.ToString("yyyy-MM-dd hh:mm:sss") + " " + logContents.ToString()); sw.Flush(); sw.Close(); } catch (Exception) { } } #endregion #region 数据分组并调用接口更新数据版本 #region 扫码上传使用 /// /// 扫码上传日结数据版本更新 /// /// public static string PostEndAccountDate(string JsonString) { List _DataEndaccount = Common.JsonHelper.JSONStringToListUTC(JsonString); //将所有合适的日结数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_EndAccounts = (from t in _DataEndaccount group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDACCOUNT_DATE) }).ToList(); string endAccounts = ""; foreach (var commoditySale in GrpList_EndAccounts) { endAccounts += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } endAccounts = endAccounts.Trim('|'); //调用方法更新总部版本 return PostDataVersion(endAccounts, "ENDACCOUNT_VERSION"); } /// /// 扫码上传稽核数据版本更新 /// /// public static string PostInspectionsDate(string JsonString) { List _DataInspection = Common.JsonHelper.JSONStringToListUTC(JsonString); //将所有合适的稽核数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_Inspections = (from t in _DataInspection group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDACCOUNT_DATE) }).ToList(); string inspections = ""; foreach (var commoditySale in GrpList_Inspections) { inspections += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } inspections = inspections.Trim('|'); //调用方法更新总部版本 return PostDataVersion(inspections, "INSPECTION_VERSION"); } /// /// 扫码上传收银员数据版本更新 /// /// public static string PostPersonsellDate(string JsonString) { List _DataPersonsell = Common.JsonHelper.JSONStringToListUTC(JsonString); //将交班数据进行分组后操作云端接口进行版本更新 var GrpList = (from t in _DataPersonsell group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listPersonsells = ""; foreach (var personsell in GrpList) { listPersonsells += personsell.SERVERPARTCODE + "," + personsell.SHOPCODE + "," + personsell.MACHINECODE + "," + personsell.ENDDATE.ToString() + "|"; } listPersonsells = listPersonsells.Trim('|'); //调用方法更新总部版本 return PostDataVersion(listPersonsells, "PERSONSELL_VERSION"); } /// /// 扫码上传单品数据版本更新 /// /// /// public static string PostCommoditySaleDate(Transaction _Transaction, string JsonString) { //解析json数组 List _DataCommoditySale = Common.JsonHelper.JSONStringToListUTC(JsonString); HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); //更新数据版本号 var GrpList = (from t in _DataCommoditySale group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listCommoditySales = ""; foreach (var commoditySale in GrpList) { listCommoditySales += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION where SERVERPARTCODE='" + commoditySale.SERVERPARTCODE + "' " + "and SHOPCODE='" + commoditySale.SHOPCODE + "' and MACHINECODE='" + commoditySale.MACHINECODE + "' and TABLENAME='T_COMMODITYSALE'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION ( DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES (HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL, '{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", commoditySale.SERVERPARTCODE, commoditySale.SHOPCODE, commoditySale.MACHINECODE, "T_COMMODITYSALE", commoditySale.ENDDATE.ToString()); } else { //更新操作 if (commoditySale.ENDDATE != null && commoditySale.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION = TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID = '{1}'", commoditySale.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } listCommoditySales = listCommoditySales.Trim('|'); //调用方法更新总部版本 return PostDataVersion(listCommoditySales, "COMMODITYSALE_VERSION"); } #endregion #region 旧系统 /// /// 旧结账数据分组并更新版本 /// /// 旧结账数据表对象集合 public static void PostEndAccountDate(List list_EndAccounts) { //将所有合适的日结数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_EndAccounts = (from t in list_EndAccounts group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDACCOUNT_DATE) }).ToList(); string endAccounts = ""; foreach (var commoditySale in GrpList_EndAccounts) { endAccounts += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } endAccounts = endAccounts.Trim('|'); //调用云端日结版本更新方法 System.Threading.Tasks.Task.Run(() => PostDataVersion(endAccounts, "ENDACCOUNT_VERSION")); } /// /// 旧稽核数据分组并更新版本 /// /// 旧稽核数据表对象集合 public static void PostInspectionsDate(List list_Inspection) { //将所有合适的稽核数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_Inspections = (from t in list_Inspection group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDACCOUNT_DATE) }).ToList(); string inspections = ""; foreach (var commoditySale in GrpList_Inspections) { inspections += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } inspections = inspections.Trim('|'); //调用云端稽核版本更新方法 System.Threading.Tasks.Task.Run(() => PostDataVersion(inspections, "INSPECTION_VERSION")); } /// /// 旧交班数据分组并更新版本 /// /// 旧交班数据表对象集合 public static void PostPersonsellDate(List _DataPersonsell) { //将交班数据进行分组后操作云端接口进行版本更新 var GrpList = (from t in _DataPersonsell group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listPersonsells = ""; foreach (var personsell in GrpList) { listPersonsells += personsell.SERVERPARTCODE + "," + personsell.SHOPCODE + "," + personsell.MACHINECODE + "," + personsell.ENDDATE.ToString() + "|"; } listPersonsells = listPersonsells.Trim('|'); //异步调用云端接口进行版本更新 System.Threading.Tasks.Task.Run(() => PostDataVersion(listPersonsells, "PERSONSELL_VERSION")); } /// /// 旧单品销售数据分组并更新版本 /// /// 旧单品数据表对象集合 /// public static void PostCommoditySaleDate(Transaction _Transaction, List _DataCommoditySale) { HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); //更新数据版本号 var GrpList = (from t in _DataCommoditySale group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listCommoditySales = ""; foreach (var commoditySale in GrpList) { listCommoditySales += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION where SERVERPARTCODE='" + commoditySale.SERVERPARTCODE + "' " + "and SHOPCODE='" + commoditySale.SHOPCODE + "' and MACHINECODE='" + commoditySale.MACHINECODE + "' and TABLENAME='T_COMMODITYSALE'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION(DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES(HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", commoditySale.SERVERPARTCODE , commoditySale.SHOPCODE, commoditySale.MACHINECODE, "T_COMMODITYSALE", commoditySale.ENDDATE.ToString()); } else { //更新操作 if (commoditySale.ENDDATE != null && commoditySale.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", commoditySale.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } listCommoditySales = listCommoditySales.Trim('|'); //异步调用云端 System.Threading.Tasks.Task.Run(() => PostDataVersion(listCommoditySales, "COMMODITYSALE_VERSION")); } #endregion #region 新系统 /// /// 新结账数据分组并更新版本 /// /// 新结账数据表对象集合 public static void PostEndAccountNewDate(List list_EndAccounts) { //将所有合适的日结数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_EndAccounts = (from t in list_EndAccounts group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string endAccounts = ""; foreach (var commoditySale in GrpList_EndAccounts) { endAccounts += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } endAccounts = endAccounts.Trim('|'); //调用云端日结版本更新方法 System.Threading.Tasks.Task.Run(() => PostDataVersion(endAccounts, "ENDACCOUNT_VERSION")); } /// /// 新稽核数据分组并更新版本 /// /// 新稽核数据表对象集合 public static void PostInspectionsNewDate(List list_Inspection) { //将所有合适的稽核数据以收银机为单位进行分组后进行远程更新版本操作 var GrpList_Inspections = (from t in list_Inspection group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string inspections = ""; foreach (var commoditySale in GrpList_Inspections) { inspections += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; } inspections = inspections.Trim('|'); //调用云端稽核版本更新方法 System.Threading.Tasks.Task.Run(() => PostDataVersion(inspections, "INSPECTION_VERSION")); } /// /// 新交班数据分组并更新版本 /// /// 新交班数据表对象集合 public static void PostPersonsellNewDate(List _DataPersonsellNew) { //将交班数据进行分组后操作云端接口进行版本更新 var GrpList = (from t in _DataPersonsellNew group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listPersonsells = ""; foreach (var personsell in GrpList) { listPersonsells += personsell.SERVERPARTCODE + "," + personsell.SHOPCODE + "," + personsell.MACHINECODE + "," + personsell.ENDDATE.ToString() + "|"; } listPersonsells = listPersonsells.Trim('|'); //异步调用云端接口进行版本更新 System.Threading.Tasks.Task.Run(() => PostDataVersion(listPersonsells, "PERSONSELL_VERSION")); } /// /// 新单品销售数据分组并更新版本 /// /// 新单品数据表对象集合 /// public static void PostCommoditySaleNewDate(Transaction _Transaction, List _DataCommoditySale) { HSDB.ENDACCOUNT eNDACCOUNT = new HSDB.ENDACCOUNT(_Transaction); //更新数据版本号 var GrpList = (from t in _DataCommoditySale group t by new { t.SERVERPARTCODE, t.SHOPCODE, t.MACHINECODE } into grp select new { grp.Key.SERVERPARTCODE, grp.Key.SHOPCODE, grp.Key.MACHINECODE, ENDDATE = grp.Max(t => t.ENDDATE) }).ToList(); string listCommoditySales = ""; foreach (var commoditySale in GrpList) { listCommoditySales += commoditySale.SERVERPARTCODE + "," + commoditySale.SHOPCODE + "," + commoditySale.MACHINECODE + "," + commoditySale.ENDDATE.ToString() + "|"; //判断数据版本表中是否已经含有对应的数据版本记录 string Sql = "select DATAVERSION_ID,DATAVERSION from HIGHWAY_EXCHANGE.T_DATAVERSION where SERVERPARTCODE='" + commoditySale.SERVERPARTCODE + "' " + "and SHOPCODE='" + commoditySale.SHOPCODE + "' and MACHINECODE='" + commoditySale.MACHINECODE + "' and TABLENAME='T_COMMODITYSALE'"; DataTable dt_endcount = eNDACCOUNT.ExecuteDataTable(Sql); int SqlState = 0;//表示是否要执行添加或者更新操作,1:执行;0:不执行 if (dt_endcount == null || dt_endcount.Rows.Count == 0) { //新增数据 SqlState = 1; Sql = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_DATAVERSION(DATAVERSION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,TABLENAME,DATAVERSION) VALUES(HIGHWAY_EXCHANGE.SEQ_DATAVERSION.NEXTVAL,'{0}','{1}','{2}','{3}',TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS'))", commoditySale.SERVERPARTCODE , commoditySale.SHOPCODE, commoditySale.MACHINECODE, "T_COMMODITYSALE", commoditySale.ENDDATE.ToString()); } else { //更新操作 if (commoditySale.ENDDATE != null && commoditySale.ENDDATE > Convert.ToDateTime(dt_endcount.Rows[0][1].ToString())) { SqlState = 1; Sql = string.Format(@"update HIGHWAY_EXCHANGE.T_DATAVERSION set DATAVERSION=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') WHERE DATAVERSION_ID='{1}'", commoditySale.ENDDATE.ToString(), dt_endcount.Rows[0][0].ToString()); } } if (SqlState == 1) { eNDACCOUNT.ExecuteNonQuery(Sql, null); } if (dt_endcount != null) { dt_endcount.Clear(); dt_endcount.Dispose(); } } listCommoditySales = listCommoditySales.Trim('|'); System.Threading.Tasks.Task.Run(() => PostDataVersion(listCommoditySales, "COMMODITYSALE_VERSION")); } #endregion #endregion #region 记录异常日志至数据库 /// /// 记录日志至oracle数据库 /// /// 数据库连接 /// 服务区编码 /// 门店编码 /// 机器编码 /// 操作时间 /// 传输表名 /// 日志内容 /// 日志类型 /// 0【收银机通过接口上传的日志内容】 /// 1000【综管平台下发指令给服务端】 /// 2000【服务端接收到综管平台的指令,再下发给收银机】 /// 3000【收银机接收到指令后,再反馈消息给服务端】 /// 4000【收银机执行完指令后,再反馈消息给服务端】 /// 消息唯一标识 /// 数据一致性 /// 反查标识(0:后续需要干预处理的日志,1:纯记录,作为定时删除日志的标记) public static void RecordLogToOracle(OracleHelper _OracleHelper, string ServerpartCode, string ShopCode, string MachineCode, decimal OperateDate, string TableName, string LogCentent, int? LogType = null, string SocketMsgGuid = "", int? DataConsistency = null, int? CheckState = null) { List SQLStringList = new List(); if (string.IsNullOrWhiteSpace(TableName)) { TableName = "无"; } foreach (string str in TableName.Split(',')) { string SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_ERRORLOG ( ERRORLOG_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE, OPERATE_DATE,TABLE_NAME,LOG_CONTENT,RECORD_DATE, ERRORLOG_TYPE,SOCKETMSGGUID,DATA_CONSISTENCY,CHECK_STATE) VALUES (HIGHWAY_STORAGE.SEQ_ERRORLOG.NEXTVAL, '{0}','{1}','{2}',{3},'{4}','{5}',{6},{7},'{8}',{9},{10})", ServerpartCode, ShopCode, MachineCode, OperateDate == 0 ? "NULL" : OperateDate.ToString(), str, LogCentent, DateTime.Now.ToString("yyyyMMddHHmmssff"), LogType == null ? "NULL" : LogType.ToString(), SocketMsgGuid, DataConsistency == null ? "NULL" : DataConsistency.ToString(), CheckState == null ? "NULL" : CheckState.ToString()); SQLStringList.Add(SQLString); } try { _OracleHelper.ExecuteSqlTran(SQLStringList); //LogUtil.WriteLog("数据库记录日志成功!"); } catch (Exception ex) { LogUtil.WriteLog("数据库记录日志失败!" + ex.Message); } } #endregion #region 判断相同日志内容的数据是否在数据库中已经记录 /// /// 判断相同日志内容的数据是否在数据库中已经记录 /// /// 数据库连接字符串 /// 日志类型 /// 日志内容 /// public static bool LogRecordState(OracleHelper _OracleHelper, int LogType, string LogCentent) { bool RecordState = false; //获取1分钟前的时间,格式为数字 decimal RecordDate = DateTime.Now.AddMinutes(-1).ToString("yyyyMMddHHmmssff").TryParseToDecimal(); //查询相同日志类型、日志内容的记录在1分钟以内是否有记录 string SQLString = "SELECT 1 FROM HIGHWAY_STORAGE.T_ERRORLOG WHERE ERRORLOG_TYPE = " + LogType + " AND LOG_CONTENT = '" + LogCentent + "' AND RECORD_DATE >=" + RecordDate; if (_OracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0].Rows.Count > 0) { RecordState = true; } return RecordState; } #endregion } }