using HZQR.Common; using JobApplication.Models; using Quartz; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JobApplication.Job { /// /// 按结账单固化移动支付流水,每日中午12点执行固化昨天的营收数据 /// class FixedRevenueByStatement : IJob { SuperMap.RealEstate.ServiceModel.Transaction Transaction = new SuperMap.RealEstate.ServiceModel.Transaction(); static string OracleConnCM = ConfigurationManager.ConnectionStrings["Coop_Merchant"].ConnectionString; static OracleHelper oracleHelperCm = new OracleHelper(OracleConnCM); string distributedProvinceCode = ConfigurationManager.AppSettings["distributedProvinceCode"];//获取配置文件中的分布在各省份的省份编码 void IJob.Execute(IJobExecutionContext context) { //各省份服务器的地址 LogUtil.WriteLog("按账期固化省份:" + distributedProvinceCode); try { foreach (string provinceCode in distributedProvinceCode.Split(',')) { //按账期固化移动支付流水 JOB 开始 FixedRevenueData(provinceCode); } } catch (Exception ex) { SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "FixedRevenueData", "按账期固化移动支付流水"); } } #region 方法 -> 按账期固化营收 /// /// 按账期固化营收(根据结账单的账期,统计移动支付流水的营收总额) /// /// 省份编码(根据省份固化数据) public void FixedRevenueData(string provinceCode) { string beginDate = Convert.ToDateTime("2020-7-01").AddSeconds(-1).ToString(); //string beginDate = DateTime.Now.AddDays(-1).ToShortDateString(); string endDate = DateTime.Now.ToString(); //string beginDate = "2020/7/01"; //string endDate = "2020/7/19"; //判断已同步的最新的时间 string sqlDate = string.Format(@" SELECT MAX(DOWNLOAD_DATE) AS DOWNLOAD_DATE FROM HIGHWAY_SELLDATA.T_REVENUE_ENDACCOUNT WHERE PROVINCE_CODE={0}", provinceCode); DataTable dtTime = oracleHelperCm.ExcuteSqlGetDataSet(sqlDate).Tables[0];//同步的数据的最新的时间 if (dtTime.Rows.Count > 0) { if (!string.IsNullOrEmpty(dtTime.Rows[0]["DOWNLOAD_DATE"].ToString())) { beginDate = dtTime.Rows[0]["DOWNLOAD_DATE"].ToString(); } } string logStr = "按账期固化,provinceCode=" + provinceCode + ",beginDate=" + beginDate + ",endDate=" + endDate; LogUtil.WriteLog(logStr); //固化移动支付流水营收(按结账日期)当前时间前传输但结账时间为昨天的数据 string sqlStatement = string.Format(@" SELECT ENDACCOUNT_ID,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,PROVINCE_CODE, ENDACCOUNT_DATE, STATISTICS_DATE, ENDACCOUNT_STARTDATE, SERVERPARTSHOP_ID, SERVERPARTSHOP_CODE, SERVERPARTSHOP_NAME,MACHINECODE,DOWNLOAD_DATE,VALID FROM HIGHWAY_SELLDATA.T_ENDACCOUNT A WHERE VALID = 1 AND EndPersonCode NOT LIKE '%接口%' AND TOTALSELLAMOUNT>0 AND ((A.DOWNLOAD_DATE > TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') AND A.DOWNLOAD_DATE < TO_DATE('{1}','YYYY-MM-DD HH24:MI:SS')) OR A.ENDACCOUNT_DATE >= TRUNC(SYSDATE) - 1) AND PROVINCE_CODE = {2} AND MACHINECODE IS NOT NULL AND A.ENDACCOUNT_DATE < TO_DATE('{3}','YYYY-MM-DD HH24:MI:SS') ", beginDate, endDate, provinceCode, DateTime.Now.ToShortDateString()); LogUtil.WriteLog(sqlStatement); DataTable dtStatement = oracleHelperCm.ExcuteSqlGetDataSet(sqlStatement).Tables[0];//查询已同步过来的结账单 string Create_Date = DateTime.Now.ToString(); List resultList = DtToList.ConvertToModel(dtStatement); LogUtil.WriteLog(logStr + resultList.Count); List sqlList = new List(); resultList.ForEach(o => { if (!string.IsNullOrEmpty(o.MachineCode)) { try { Double sumAmount = 0;//SUBSTR(A.TICKET_CODE,7,6)='{1}' AND SUBSTR(A.TICKET_CODE,13,4) = LPAD('{2}',4,'0') AND string sqlSum = string.Format(@" SELECT SUM(A.TICKET_AMOUNT) AS TICKET_AMOUNT FROM HIGHWAY_SELLDATA.T_MOBILEPAYMENT_RECORDS A WHERE A.SERVERPART_CODE='{0}' AND A.SERVERPARTSHOP_CODE ='{1}' AND A.MACHINECODE=LPAD('{2}',4,'0') AND A.ORDER_DATE >= TO_DATE('{3}','YYYY-MM-DD HH24:MI:SS') AND A.ORDER_DATE <= TO_DATE('{4}','YYYY-MM-DD HH24:MI:SS')", o.ServerPart_Code, o.ServerPartShop_Code, o.MachineCode, o.EndAccount_StartDate, o.EndAccount_Date); //if (o.EndAccount_Id == 6575056) //{ // LogUtil.WriteLog("按账期固化sqlSum:" + sqlSum); // } DataSet dsSum = oracleHelperCm.ExcuteSqlGetDataSet(sqlSum);//在移动业务查询通道传输流水 DataTable dtSum = dsSum.Tables[0]; sumAmount = dtSum.Rows[0]["TICKET_AMOUNT"].TryParseToDouble(); string addSql = string.Format(@" INSERT INTO HIGHWAY_SELLDATA.T_REVENUE_ENDACCOUNT ( REVENUE_ENDACCOUNT_ID,ENDACCOUNT_ID,PROVINCE_CODE, SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,SERVERPARTSHOP_ID,SERVERPARTSHOP_CODE,SERVERPARTSHOP_NAME, MACHINECODE,ENDACCOUNT_STARTDATE,ENDACCOUNT_DATE,TICKET_AMOUNT,CREATE_DATE,DOWNLOAD_DATE ) VALUES ( HIGHWAY_SELLDATA.SEQ_REVENUE_ENDACCOUNT.NEXTVAL,{11},{0},{1},'{2}','{3}',{4},'{5}','{6}','{7}', TO_DATE('{8}','YYYY-MM-DD HH24:MI:SS'), TO_DATE('{9}','YYYY-MM-DD HH24:MI:SS'),{10}, TO_DATE('{12}','YYYY-MM-DD HH24:MI:SS'), TO_DATE('{13}','YYYY-MM-DD HH24:MI:SS'))", o.Province_Code, o.ServerPart_Id, o.ServerPart_Code, o.ServerPart_Name, o.ServerPartShop_Id, o.ServerPartShop_Code, o.ServerPartShop_Name, o.MachineCode, o.EndAccount_StartDate, o.EndAccount_Date, sumAmount, o.EndAccount_Id, Create_Date, o.Download_Date); sqlList.Add(addSql); } catch (Exception ex) { SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "FixedRevenueByStatement", "固化账期数据"); } } else { LogUtil.WriteLog(o.ServerPart_Name + o.ServerPartShop_Name); } }); LogUtil.WriteLog(logStr + "Start"); oracleHelperCm.ExecuteSqlTran(sqlList.ToArray());//固化结账单到合作商户账期营收表 LogUtil.WriteLog(logStr + "End"); } #endregion } }