using System; using System.Collections.Generic; using System.Configuration; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SuperMap.RealEstate.ServiceModel; using SuperMap.RealEstate.Coop.Merchant.Business; using Transmission.SDK; using HZQR.Common; namespace DataBaseProcessing { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { string OracleConnStr = ConfigurationManager.AppSettings["OracleConnStr"].ToString(); OracleHelper oracleHelper = new OracleHelper(OracleConnStr.Split(',')[0], OracleConnStr.Split(',')[1], OracleConnStr.Split(',')[2], OracleConnStr.Split(',')[3]); string SQLString = "SELECT * FROM COOP_MERCHANT.T_WRONGDATA"; DataTable dataTable = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; Transaction transaction = new Transaction(); try { COMMODITY _COMMODITY = new COMMODITY(transaction); List BRANDList = new BRAND(transaction).FillCollection("WHERE OWNERUNIT_ID = 911"); List COMMODITYList = _COMMODITY.FillCollection( "WHERE OWNERUNIT_ID = 911 AND COMMODITY_NATURE = 5070 AND COMMODITY_STATE = 1 AND UPPER_STATE = 1"); List TypeList = new USERDEFINEDTYPE(transaction).FillCollection( "WHERE OWNERUNIT_ID = 911 AND GOODSTYPE = 4000"); SQLString = "SELECT * FROM COOP_MERCHANT.T_RTUSERDEFINEDTYPE WHERE COMMODITY_ID IS NOT NULL"; DataTable dtRTType = _COMMODITY.ExecuteDataTable(SQLString); foreach (DataRow dataRow in dataTable.Rows) { foreach (COMMODITY Commodity in COMMODITYList.FindAll(o => o.COMMODITY_BARCODE == dataRow["TABLE_BARCODE"].ToString())) { int updateCount = 0; bool UpdateType = false, UpdateBrand = false; List types = dataRow["TABLE_NAME"].ToString().Split(',').Distinct().ToList(); foreach (string typename in types) { if (TypeList.Exists(o => o.USERDEFINEDTYPE_NAME == typename)) { USERDEFINEDTYPE _USERDEFINEDTYPE = TypeList.Find(o => o.USERDEFINEDTYPE_NAME == typename); if (dtRTType.Select("COMMODITY_ID = " + Commodity.KeyID + " and USERDEFINEDTYPE_ID = " + _USERDEFINEDTYPE.KeyID).Length == 0) { SQLString = string.Format(@"INSERT INTO COOP_MERCHANT.T_RTUSERDEFINEDTYPE ( RTUSERDEFINEDTYPE_ID,USERDEFINEDTYPE_ID,PROVINCE_CODE,COMMODITY_ID) VALUES (COOP_MERCHANT.SEQ_RTUSERDEFINEDTYPE.NEXTVAL,{0},530000,{1})", _USERDEFINEDTYPE.KeyID, Commodity.KeyID); Commodity.ExecuteNonQuery(SQLString, null); DataRow newRt = dtRTType.NewRow(); newRt["USERDEFINEDTYPE_ID"] = _USERDEFINEDTYPE.KeyID; newRt["COMMODITY_ID"] = Commodity.KeyID; dtRTType.Rows.Add(newRt); UpdateType = true; } } } if (Commodity.BRAND_NAME != dataRow["TABLE_CODE"].ToString() && BRANDList.Exists( o => o.BRAND_NAME == dataRow["TABLE_CODE"].ToString())) { BRAND _BRAND = BRANDList.Find(o => o.BRAND_NAME == dataRow["TABLE_CODE"].ToString()); Commodity.BRAND_ID = _BRAND.BRAND_ID; Commodity.BRAND_NAME = _BRAND.BRAND_NAME; UpdateBrand = true; } if (UpdateBrand || UpdateType) { Commodity.OPERATE_DATE = DateTime.Now; Commodity.Update(); SQLString = "UPDATE COOP_MERCHANT.T_WRONGDATA SET TABLE_ID = " + updateCount + " WHERE TABLE_BARCODE = '" + dataRow["TABLE_BARCODE"] + "'"; oracleHelper.ExcuteSql(SQLString); } } } transaction.Commit(); } catch { } finally { transaction.Release(); transaction.Dispose(); } //string startMonth = ConfigurationManager.AppSettings["StartMonth"]; //string endMonth = ConfigurationManager.AppSettings["EndMonth"]; //LogUtil.WriteLog(null, "//---------------开始执行【" + startMonth + "至" + endMonth + "】的流水数据校验---------------//"); /* string SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DATATRANSFER"; DataTable dtOwnerName = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; foreach (DataRow drOwnerName in dtOwnerName.Select("", "OWNER_NAME")) { string ownerName = drOwnerName["OWNER_NAME"].ToString(); SQLString = "SELECT * FROM SYS.DBA_ALL_TABLES WHERE OWNER = '" + ownerName + "'"; DataTable dtDataBase = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; dtDataBase.DefaultView.RowFilter = "TABLE_NAME not like '%_TEMP' and (TABLE_NAME like 'T_SELLDATA%' or " + "TABLE_NAME like 'T_SELLMASTER%' or TABLE_NAME like 'T_YSSELLMASTER%')"; dtDataBase = dtDataBase.DefaultView.ToTable(); #region 添加表字段、索引 //foreach (DataRow drDataBase in dtDataBase.Rows) //{ // SQLString = "SELECT 1 FROM SYS.DBA_TAB_COLUMNS WHERE OWNER = '" + ownerName + // "' AND TABLE_NAME = '" + drDataBase["TABLE_NAME"] + "' AND COLUMN_NAME = 'STATISTICS_DATE'"; // if (oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0].Rows.Count == 0) // { // SQLString = "ALTER TABLE " + ownerName + "." + drDataBase["TABLE_NAME"] + " ADD (STATISTICS_DATE NUMBER(8,0))"; // oracleHelper.ExecuteSqlTran(SQLString); // LogUtil.WriteLog(null, "数据库表【" + ownerName + "." + drDataBase["TABLE_NAME"] + // "】字段营业日【STATISTICS_DATE】添加成功", DateTime.Now.ToString("yyyyMMdd") + "_AddColumn"); // } // SQLString = "SELECT 1 FROM SYS.DBA_INDEXES WHERE OWNER = '" + ownerName + // "' AND INDEX_NAME = 'INDEX_" + drDataBase["TABLE_NAME"].ToString() + "'"; // DataTable dtIndex = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; // if (dtIndex.Rows.Count == 0) // { // SQLString = string.Format(@"CREATE INDEX {0}.INDEX_{1} // ON {0}.{2} (SERVERPARTCODE,SHOPCODE,MACHINECODE,STATISTICS_DATE) // PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE {0} // STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT) LOGGING", // ownerName, drDataBase["TABLE_NAME"].ToString(), drDataBase["TABLE_NAME"]); // oracleHelper.ExcuteSql(SQLString); // LogUtil.WriteLog(null, "数据库表【" + ownerName + "." + drDataBase["TABLE_NAME"] + // "】索引添加成功", DateTime.Now.ToString("yyyyMMdd") + "_AddIndex"); // } //} #endregion string ExcuteMonth = drOwnerName["EXCUTE_MONTH"].ToString(); for (DateTime curMonth = DateTime.Parse(endMonth); curMonth.ToString("yyyyMM").TryParseToInt() >= DateTime.Parse(startMonth).ToString("yyyyMM").TryParseToInt(); curMonth = curMonth.AddMonths(-1)) { try { RecordDif(oracleHelper, dtDataBase, ownerName, drOwnerName["SERVERPART_CODE"].ToString(), curMonth); LogUtil.WriteLog(null, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "流水校验已执行"); } catch (Exception ex) { LogUtil.WriteLog(ex, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "流水校验失败", DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog"); } } } */ //for (DateTime curMonth = DateTime.Parse(endMonth); // curMonth.ToString("yyyyMM").TryParseToInt() >= DateTime.Parse(startMonth).ToString("yyyyMM").TryParseToInt(); // curMonth = curMonth.AddMonths(-1)) //{ // try // { // SuppSellMaster(oracleHelper, curMonth); // } // catch (Exception ex) // { // LogUtil.WriteLog(ex, "【" + curMonth.ToString("yyyyMM") + "】流水补录失败", // DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog"); // } //} //LogUtil.WriteLog(null, "//---------------【" + startMonth + "至" + endMonth + "】的流水数据校验结束---------------//"); Environment.Exit(0); } #region 方法 -> 更新销售流水表结算时间 public static void UpdateSellMaster(OracleHelper oracleHelper, DataTable dtDataBase, string ownerName, string serverpartCode, DateTime curMonth) { string whereSQL = "", logDesc; whereSQL += " AND STATISTICS_DATE >= TO_DATE('" + curMonth.ToString("yyyy/MM/01") + "','YYYY/MM/DD') AND STATISTICS_DATE < TO_DATE('" + DateTime.Parse(curMonth.AddMonths(1).ToString("yyyy/MM/01")).AddDays(-1).ToShortDateString() + "','YYYY/MM/DD') + 1"; //查询收银系统上传的日结账期数据 string SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_ENDACCOUNTDATA WHERE SERVERPARTCODE IN ('" + serverpartCode.Replace(",", "','") + "') AND VALID = 1 AND OPERATE_TYPE = 0" + whereSQL; DataTable dtAccount = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; LogUtil.WriteLog(null, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "查询到记录" + dtAccount.Rows.Count + "条"); foreach (DataRow drAccount in dtAccount.Rows) { DateTime StartDate = Convert.ToDateTime(drAccount["ENDACCOUNT_STARTDATE"]); DateTime EndDate = Convert.ToDateTime(drAccount["ENDACCOUNT_DATE"]); string StatisticsDate = drAccount["STATISTICS_DATE"].ToString().Split(' ')[0]; foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME")) { //根据表名称获取销售流水数据时间查询SQL if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLDATA")) { whereSQL = " AND SELLDATA_DATE BETWEEN TO_DATE('" + StartDate + "','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('" + EndDate + "','YYYY/MM/DD HH24:MI:SS')"; } else if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLMASTER")) { whereSQL = " AND SELLMASTER_DATE BETWEEN TO_DATE('" + StartDate + "','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('" + EndDate + "','YYYY/MM/DD HH24:MI:SS')"; } else { whereSQL = " AND SELLMASTER_DATE BETWEEN " + StartDate.ToString("yyyyMMddHHmmss") + " AND " + EndDate.ToString("yyyyMMddHHmmss"); } SQLString = string.Format(@"UPDATE {0}.{1} SET STATISTICS_DATE = {2} WHERE SERVERPARTCODE = '{3}' AND SHOPCODE = '{4}' AND MACHINECODE = '{5}'{6}", ownerName, drDataBase["TABLE_NAME"], Convert.ToDateTime(StatisticsDate).ToString("yyyyMMdd"), drAccount["SERVERPARTCODE"], drAccount["SHOPCODE"], drAccount["MACHINECODE"], whereSQL); int excuteCount = oracleHelper.ExcuteSql(SQLString); logDesc = drAccount["SERVERPART_NAME"] + drAccount["SHOPNAME"].ToString() + "【" + drAccount["ENDACCOUNT_DATE"] + "】" + drAccount["MACHINECODE"] + ":更新销售流水表【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】营业日为" + StatisticsDate; LogUtil.WriteLog(null, logDesc, DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName); } } } #endregion #region 方法 -> 解析日结账期冲正流水表,补充结算日期 public static void DecryptId(OracleHelper oracleHelper) { string SQLString; for (int num = 0; num < 38; num++) { List SQLStringList = new List(); SQLString = @"SELECT PROVINCE_CODE,TICKETCODE FROM HIGHWAY_STORAGE.T_SUPPLEMENTDATA WHERE ENDACCOUNT_ID IS NULL AND ROWNUM <= 10000 GROUP BY PROVINCE_CODE,TICKETCODE"; DataTable dtEncrypted = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; foreach (DataRow drEncrypted in dtEncrypted.Rows) { SQLString = string.Format(@"UPDATE HIGHWAY_STORAGE.T_SUPPLEMENTDATA SET ENDACCOUNT_ID = {0} WHERE PROVINCE_CODE = {1} AND TICKETCODE = '{2}'", drEncrypted["TICKETCODE"].ToString().ToDecrypt(), drEncrypted["PROVINCE_CODE"], drEncrypted["TICKETCODE"]); SQLStringList.Add(SQLString); } if (SQLStringList.Count > 0) { try { oracleHelper.ExecuteSqlTran(SQLStringList); LogUtil.WriteLog(null, "【解析流水冲正表数据】本次更新" + SQLStringList.Count + "条记录"); } catch (Exception ex) { LogUtil.WriteLog(ex, "【解析流水冲正表数据】本次更新失败", DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog"); } } else { LogUtil.WriteLog(null, "【解析流水冲正表数据】本次更新" + SQLStringList.Count + "条记录"); } } SQLString = @"UPDATE HIGHWAY_STORAGE.T_SUPPLEMENTDATA A SET A.STATISTICS_DATE = (SELECT TO_CHAR(B.STATISTICS_DATE,'YYYYMMDD') FROM HIGHWAY_STORAGE.T_ENDACCOUNTDATA B WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND A.ENDACCOUNT_ID = B.ENDACCOUNT_ID) WHERE A.STATISTICS_DATE IS NULL"; int ExcuteCount = oracleHelper.ExcuteSql(SQLString); LogUtil.WriteLog(null, "【更新流水冲正表结算日期】本次更新" + ExcuteCount + "条记录"); } #endregion #region 方法 -> 检索流水数据表,获取缺失结算日期的服务区 public static void QueryNullDate(OracleHelper oracleHelper, DataTable dtDataBase, string ownerName) { string SQLString; foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME")) { SQLString = string.Format(@"SELECT SERVERPARTCODE,COUNT(1) AS ERROR_COUNT FROM {0}.{1} WHERE STATISTICS_DATE IS NULL GROUP BY SERVERPARTCODE", ownerName, drDataBase["TABLE_NAME"]); DataTable dtError = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; if (dtError.Rows.Count > 0) { string ServerpartCode = ""; foreach (DataRow drCode in dtError.Select("", "SERVERPARTCODE")) { ServerpartCode += (ServerpartCode == "" ? "" : ",") + drCode[0]; } SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DATATRANSFER_ERROR ( DATATRANSFER_ERROR_ID,OWNER_NAME,TABLE_NAME,SERVERPART_CODE,UNEXCUTE_COUNT) VALUES (HIGHWAY_STORAGE.SEQ_DATATRANSFER_ERROR.NEXTVAL, '{0}','{1}','{2}',{3})", ownerName, drDataBase["TABLE_NAME"], ServerpartCode, dtError.Compute("sum(ERROR_COUNT)", "")); try { oracleHelper.ExcuteSql(SQLString); LogUtil.WriteLog(null, "【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】本次已检索,异常记录" + dtError.Compute("sum(ERROR_COUNT)", "") + "条"); } catch (Exception ex) { LogUtil.WriteLog(ex, "【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】本次检索失败", DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog"); } } else { LogUtil.WriteLog(null, "【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】本次已检索,无异常记录"); } } } #endregion #region 方法 -> 记录流水差异数据 public static void RecordDif(OracleHelper oracleHelper, DataTable dtDataBase, string ownerName, string serverpartCode, DateTime curMonth) { string SQLString; List SQLStringList = new List(); string ExtraName = ownerName.Contains("GXNN") ? "_GXNN" : ""; //查询服务区信息 SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_SERVERPART" + ExtraName; DataTable dtServerpart = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; //查询门店信息 SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP" + ExtraName; DataTable dtShop = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; //查询日结营收数据 SQLString = string.Format(@"SELECT SERVERPARTCODE,SHOPCODE, TO_CHAR(STATISTICS_DATE,'YYYYMMDD') AS STATISTICS_DATE, SUM(CASHPAY) AS REVENUE_AMOUNT, SUM(TOTALSELLAMOUNT) AS TOTALSELL_AMOUNT, SUM(CORRECT_AMOUNT) AS SUPPLEMENT_AMOUNT, SUM(NVL(FACT_AMOUNT + NVL(SALE_CORRECT,0), NVL(TICKETBILL,0) + NVL(OTHERPAY,0))) AS PAYMENT_AMOUNT FROM HIGHWAY_STORAGE.T_ENDACCOUNTDATA A WHERE A.VALID = 1 AND A.OPERATE_TYPE = 0 AND A.SERVERPARTCODE IN ('{0}') AND A.STATISTICS_DATE >= TO_DATE('{1}','YYYY/MM/DD') AND A.STATISTICS_DATE < TO_DATE('{2}','YYYY/MM/DD') GROUP BY SERVERPARTCODE,SHOPCODE,TO_CHAR(STATISTICS_DATE,'YYYYMMDD')", serverpartCode, curMonth.ToString("yyyy/MM/01"), curMonth.AddMonths(1).ToString("yyyy/MM/01")); DataTable dtAccount = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; //查询日度营收校验表数据 SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DAILYREVENUE WHERE STATISTICS_DATE BETWEEN " + curMonth.ToString("yyyyMM") + "01 AND " + curMonth.ToString("yyyyMM") + "31"; DataTable dtDailyRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; #region 遍历销售流水表,生成日度校验数据 foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME")) { //根据表名称获取销售流水数据时间查询SQL if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLDATA")) { SQLString = string.Format(@"SELECT SERVERPARTCODE,SHOPCODE,STATISTICS_DATE, SUM(FACTAMOUNT),SUM(NVL(TICKETBILL,0) + NVL(OTHERPAY,0)) FROM {0}.{1} WHERE STATISTICS_DATE BETWEEN {2}01 AND {2}31 GROUP BY SERVERPARTCODE,SHOPCODE,STATISTICS_DATE", ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName); } else if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLMASTER")) { SQLString = string.Format(@"SELECT SERVERPARTCODE,SHOPCODE,STATISTICS_DATE, SUM(SELLMASTER_AMOUNT),SUM(NVL(MOBILEPAY,0)) FROM {0}.{1} WHERE STATISTICS_DATE BETWEEN {2}01 AND {2}31 GROUP BY SERVERPARTCODE,SHOPCODE,STATISTICS_DATE", ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName); } else { SQLString = string.Format(@"SELECT SERVERPARTCODE,SHOPCODE,STATISTICS_DATE, SUM(SELLMASTER_AMOUNT), SUM(CASE WHEN PAYMENT_GROUP = 1 THEN TO_NUMBER(SUBSTR(SELLMASTER_DESC,INSTR(SELLMASTER_DESC,':',1) + 1)) WHEN PAYMENT_TYPE > 1000 THEN SELLMASTER_AMOUNT END) FROM {0}.{1} WHERE SELLMASTER_STATE > 0 AND STATISTICS_DATE BETWEEN {2}01 AND {2}31 GROUP BY SERVERPARTCODE,SHOPCODE,STATISTICS_DATE", ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName); } DataTable dtRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; if (dtRevenue.Rows.Count > 0) { foreach (DataRow drRevenue in dtRevenue.Select("", "SERVERPARTCODE,SHOPCODE,STATISTICS_DATE")) { string ServerpartId = "NULL", ServerpartName = "", ShopName = "", selectedSQL = "STATISTICS_DATE = " + drRevenue["STATISTICS_DATE"] + " and SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] + "' and SHOPCODE = '" + drRevenue["SHOPCODE"] + "' and TABLE_NAME = '" + ownerName + "." + drDataBase["TABLE_NAME"] + "'", computeSQL = "STATISTICS_DATE = '" + drRevenue["STATISTICS_DATE"] + "' and SERVERPARTCODE = '" + drRevenue["SERVERPARTCODE"] + "' and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'"; //获取服务区内码、服务区名称 if (dtServerpart.Select("SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] + "'").Length > 0) { DataRow drServerpart = dtServerpart.Select("SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] + "'")[0]; ServerpartId = drServerpart["SERVERPART_ID"].ToString(); ServerpartName = drServerpart["SERVERPART_NAME"].ToString(); //获取门店名称 if (dtShop.Select("SERVERPART_ID = " + ServerpartId + " and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'").Length > 0) { DataRow drShop = dtShop.Select("SERVERPART_ID = " + ServerpartId + " and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'")[0]; ShopName = drShop["SHOPNAME"].ToString(); } } if (dtDailyRevenue.Select(selectedSQL).Length > 0) { SQLString = string.Format(@"UPDATE HIGHWAY_STORAGE.T_DAILYREVENUE SET SELLMASTER_AMOUNT = {1},MOBILEPAY_AMOUNT = {2}, REVENUE_AMOUNT = {3},TOTALSELL_AMOUNT = {4}, SUPPLEMENT_AMOUNT = {5},PAYMENT_AMOUNT = {6} WHERE DAILYREVENUE_ID = {0}", dtDailyRevenue.Select(selectedSQL)[0]["DAILYREVENUE_ID"], drRevenue[3].TryParseToDecimal(), drRevenue[4].TryParseToDecimal(), dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal()); } else { SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DAILYREVENUE ( DAILYREVENUE_ID,STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE, SERVERPART_NAME,SHOPCODE,SHOPNAME,SELLMASTER_AMOUNT,MOBILEPAY_AMOUNT, REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT,TABLE_NAME) VALUES (HIGHWAY_STORAGE.SEQ_DAILYREVENUE.NEXTVAL, {0},{1},'{2}','{3}','{4}','{5}',{6},{7},{8},{9},{10},{11},'{12}.{13}')", drRevenue[2], ServerpartId, drRevenue[0], ServerpartName, drRevenue[1], ShopName, drRevenue[3].TryParseToDecimal(), drRevenue[4].TryParseToDecimal(), dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal(), ownerName, drDataBase["TABLE_NAME"]); } SQLStringList.Add(SQLString); } if (SQLStringList.Count > 0) { oracleHelper.ExecuteSqlTran(SQLStringList); } LogUtil.WriteLog(null, "本次更新【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】" + SQLStringList.Count + "条流水校验记录", DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName); } SQLStringList.Clear(); } #endregion //重新查询日度营收校验表数据 SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DAILYREVENUE WHERE STATISTICS_DATE BETWEEN " + curMonth.ToString("yyyyMM") + "01 AND " + curMonth.ToString("yyyyMM") + "31"; dtDailyRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; foreach (DataRow drDate in dtAccount.DefaultView.ToTable(true, "SERVERPARTCODE", "SHOPCODE", "STATISTICS_DATE").Select("", "STATISTICS_DATE")) { string selectedSQL = "STATISTICS_DATE = " + drDate["STATISTICS_DATE"] + " and SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] + "' and SHOPCODE = '" + drDate["SHOPCODE"] + "'"; if (dtDailyRevenue.Select(selectedSQL).Length == 0) { string ServerpartId = "NULL", ServerpartName = "", ShopName = "", computeSQL = "STATISTICS_DATE = '" + drDate["STATISTICS_DATE"] + "' and SERVERPARTCODE = '" + drDate["SERVERPARTCODE"] + "' and SHOPCODE = '" + drDate["SHOPCODE"] + "'"; //获取服务区内码、服务区名称 if (dtServerpart.Select("SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] + "'").Length > 0) { DataRow drServerpart = dtServerpart.Select("SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] + "'")[0]; ServerpartId = drServerpart["SERVERPART_ID"].ToString(); ServerpartName = drServerpart["SERVERPART_NAME"].ToString(); //获取门店名称 if (dtShop.Select("SERVERPART_ID = " + ServerpartId + " and SHOPCODE = '" + drDate["SHOPCODE"] + "'").Length > 0) { DataRow drShop = dtShop.Select("SERVERPART_ID = " + ServerpartId + " and SHOPCODE = '" + drDate["SHOPCODE"] + "'")[0]; ShopName = drShop["SHOPNAME"].ToString(); } } SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DAILYREVENUE ( DAILYREVENUE_ID,STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE, SERVERPART_NAME,SHOPCODE,SHOPNAME,SELLMASTER_AMOUNT,MOBILEPAY_AMOUNT, REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT) VALUES (HIGHWAY_STORAGE.SEQ_DAILYREVENUE.NEXTVAL, {0},{1},'{2}','{3}','{4}','{5}',{6},{7},{8},{9},{10},{11})", drDate[2], ServerpartId, drDate[0], ServerpartName, drDate[1], ShopName, 0, 0, dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(), dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal()); SQLStringList.Add(SQLString); } } if (SQLStringList.Count > 0) { LogUtil.WriteLog(null, "本次补充【" + ownerName + "】" + SQLStringList.Count + "条无流水校验记录", DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName); } } #endregion #region 方法 -> 补充流水差异数据 public static void SuppSellMaster(OracleHelper oracleHelper, DateTime curMonth) { List SQLStringList = new List(); #region 查询流水差异表数据 string SQLString = string.Format(@"SELECT STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME, SHOPCODE,SHOPNAME,SUM(SELLMASTER_AMOUNT) AS SELLMASTER_AMOUNT, SUM(MOBILEPAY_AMOUNT) AS MOBILEPAY_AMOUNT, REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT FROM HIGHWAY_STORAGE.T_DAILYREVENUE WHERE STATISTICS_DATE BETWEEN {0}01 AND {0}31 GROUP BY STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,SHOPCODE,SHOPNAME, REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT", curMonth.ToString("yyyyMM")); DataTable dtDifRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0]; #endregion //对比移动支付金额或者销售金额不一致的数据,进行数据补偿 string selectedSQL = "SELLMASTER_AMOUNT <> TOTALSELL_AMOUNT or MOBILEPAY_AMOUNT <> PAYMENT_AMOUNT"; if (dtDifRevenue.Select(selectedSQL).Length > 0) { Random random = new Random(); int num = 1, cuDate = 0; foreach (DataRow drDifRevenue in dtDifRevenue.Select(selectedSQL, "STATISTICS_DATE desc")) { if (cuDate != drDifRevenue["STATISTICS_DATE"].TryParseToInt()) { num = 1; cuDate = drDifRevenue["STATISTICS_DATE"].TryParseToInt(); } decimal difRevenue = drDifRevenue["TOTALSELL_AMOUNT"].TryParseToDecimal() - drDifRevenue["SELLMASTER_AMOUNT"].TryParseToDecimal(), difMobilePay = drDifRevenue["PAYMENT_AMOUNT"].TryParseToDecimal() - drDifRevenue["MOBILEPAY_AMOUNT"].TryParseToDecimal(); LogUtil.WriteLog(null, drDifRevenue["SERVERPART_NAME"] + drDifRevenue["SHOPNAME"].ToString() + "【" + drDifRevenue["STATISTICS_DATE"] + "】存在差异:实收金额" + difRevenue + "元,移动支付" + difMobilePay + "元", DateTime.Now.ToString("yyyyMMdd") + "_SuppSellMaster"); int avgPrice = random.Next(20, 40); #region 生成补偿流水差异数据SQL SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_SELLMASTER_SUPP ( SELLMASTER_CODE,SERVERPARTCODE,SERVERPART_NAME,SHOPCODE,SHOPNAME, SELLMASTER_DATE,TICKET_CODE,SELLMASTER_COUNT,SELLMASTER_OFFPRICE, SELLMASTER_AMOUNT,CASH_AMOUNT,MOBILEPAY_AMOUNT,SELLMASTER_STATE,SELLMASTER_DESC) VALUES ('{0}','{1}','{2}','{3}','{4}',{5},'{6}',{7},0,{8},{9},{10},1,NULL)", drDifRevenue["SERVERPART_CODE"] + "" + drDifRevenue["SHOPCODE"] + "000000" + drDifRevenue["STATISTICS_DATE"] + "000000", drDifRevenue["SERVERPART_CODE"], drDifRevenue["SERVERPART_NAME"], drDifRevenue["SHOPCODE"], drDifRevenue["SHOPNAME"], drDifRevenue["STATISTICS_DATE"] + "000000", num.ToString().PadLeft(5, '0'), Math.Ceiling(difRevenue / avgPrice), difRevenue, difRevenue - difMobilePay, difMobilePay); #endregion SQLStringList.Add(SQLString); num++; } } if (SQLStringList.Count > 0) { oracleHelper.ExecuteSqlTran(SQLStringList); } LogUtil.WriteLog(null, "本次补充【" + curMonth.ToString("yyyyMM") + "】" + SQLStringList.Count + "条流水补录记录", DateTime.Now.ToString("yyyyMMdd") + "_SuppSellMaster"); } #endregion } }