using HZQR.Common; using Quartz; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using MSPB = SuperMap.RealEstate.MobileServicePlatform.Business; using SuperMap.RealEstate.CoreFrameWork; using SuperMap.RealEstate.ServiceModel; using SuperMap.RealEstate.Utility; using SuperMap.RealEstate.Web.UI; using SuperMap.RealEstate.Web.UI.WebControls; using SuperMap.RealEstate.Web.Utility; using JobApplication.Models; using Newtonsoft.Json.Linq; using System.Configuration; namespace JobApplication { /// /// 实现IJob接口 /// class SysncEndAccount : IJob { SuperMap.RealEstate.ServiceModel.Transaction Transaction = new SuperMap.RealEstate.ServiceModel.Transaction(); string distributedProvinceCode = ConfigurationManager.AppSettings["distributedProvinceCode"];//获取配置文件中的分布在各省份的省份编码 string cloudsProvinceCode = ConfigurationManager.AppSettings["cloudsProvinceCode"];//获取配置文件中的部署在云端的省份编码 static string OracleConnCM = ConfigurationManager.ConnectionStrings["Coop_Merchant"].ConnectionString; static OracleHelper oracleHelperCm = new OracleHelper(OracleConnCM); void IJob.Execute(IJobExecutionContext context) { //各省份服务器的地址 LogUtil.WriteLog("job执行省份:" + distributedProvinceCode); try { foreach (string provinceCode in distributedProvinceCode.Split(',')) { //同步各省份的结账表 SysncEndAccountData(provinceCode); } } catch (Exception ex) { SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "SysncRevenueData", "调用接口同步结账单表"); } //按自然日固化移动支付流水 JOB 开始 //FixedRevenueByNaturalDay(); } #region SQL语句中用到的字段转换 public string GetSqlColumn(double? Column) { string val = Column == null ? "NULL" : Column.ToString(); return val; } public string GetSqlColumn(int? Column) { string val = Column == null ? "NULL" : Column.ToString(); return val; } #endregion #region 方法 -> 同步结账单表 /// /// 同步结账单表 /// /// 省份编码(根据省份同步结账数据) public void SysncEndAccountData(string provinceCode) { //string beginDate = DateTime.Now.AddDays(-1).ToShortDateString(); string beginDate = "2020-7-01"; string endDate = DateTime.Now.ToString(); //判断已同步的最新的时间 string sql = string.Format(@" SELECT MAX(DOWNLOAD_DATE) AS DOWNLOAD_DATE FROM HIGHWAY_SELLDATA.T_ENDACCOUNT WHERE PROVINCE_CODE={0}", provinceCode); DataTable dtTime = oracleHelperCm.ExcuteSqlGetDataSet(sql).Tables[0];//同步的数据的最新的时间 if (dtTime.Rows.Count > 0) { if (!string.IsNullOrEmpty(dtTime.Rows[0]["DOWNLOAD_DATE"].ToString())) { //已经同步过的时间,GetEndAcountList接口DOWNLOAD_DATE时间比较为>=,以防会重复加1秒 beginDate = Convert.ToDateTime(dtTime.Rows[0]["DOWNLOAD_DATE"]).AddSeconds(1).ToString(); LogUtil.WriteLog("同步结账单,更新时间=" + beginDate); } } string _BaseUrl = ConfigurationManager.AppSettings[provinceCode]; string PostStr = string.Format("startDownLoadDate={0}&endDownLoadDate={1}&province_Code={2}", beginDate, endDate, provinceCode); string RequestUrl = _BaseUrl + "?action_type=GetEndAcountList&" + PostStr; string format = "application/json;charset=UTF-8"; LogUtil.WriteLog("同步结账单,"+ provinceCode + "=" + RequestUrl); string val = HttpHelper.HttpUrlPost(PostStr, RequestUrl, format, 0); JObject jObj = new JObject(); jObj = JObject.Parse(val); List listResult = new List(); listResult = Newtonsoft.Json.JsonConvert.DeserializeObject> (jObj["Result_Data"]["List"].ToString()).ToList(); LogUtil.WriteLog("同步结账单,listResult:" + listResult.Count); string Create_Date = DateTime.Now.ToString(); List syncSqlList = new List(); listResult.ForEach(o => { try { string syncSql = string.Format(@" INSERT INTO HIGHWAY_SELLDATA.T_ENDACCOUNT ( ENDACCOUNT_ID,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,PROVINCE_CODE, ENDACCOUNT_DATE,STATISTICS_DATE,ENDACCOUNT_STARTDATE, SERVERPARTSHOP_ID,SERVERPARTSHOP_CODE,SERVERPARTSHOP_NAME,MACHINECODE, ENDPERSONCODE,WORKER_NAME,CASHIER_NAME,TICKETCOUNT,TOTALCOUNT,TOTALSELLAMOUNT,TOTALOFFAMOUNT, CASH,CREDITCARD,TICKETBILL,VIPPERSON,COSTBILL,OTHERPAY,REVENUE_AMOUNT,CASH_PAYMENT, DIFFERENT_PRICE,DIFFERENCE_REASON,DESCRIPTION_STAFF,DESCRIPTION_DATE, APPROVE_STAFF,APPROVE_DATE,APPROVED_INFO, TREATMENT_MARK,DOWNLOAD_DATE,VALID,ENDACCOUNT_DESC,OPERATE_TYPE, TICKET_COUNT,FACT_AMOUNT,SELLCOUNT_CIGARETTE,FACTAMOUNT_CIGARETTE, SPOT_CHECK,REGIONAL_CHECK,COMPANY_CHECK,CHECK_COUNT,CHECK_INFO, CASH_CORRECT,MOBILE_CORRECT,SALE_CORRECT,CORRECT_AMOUNT,ONLINETICKET,ONLINEAMOUNT) VALUES ( {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},{25},{26}, {27},'{28}','{29}',{30},'{31}',{32},'{33}', {34},TO_DATE('{35}','YYYY-MM-DD HH24:MI:SS'),{36},'{37}',{38}, {39},{40},{41},{42},{43},{44},{45},{46},'{47}',{48},{49},{50},{51},{52},{53})", o.EndAccount_Id, o.ServerPart_Id, o.ServerPart_Code, o.ServerPart_Name, provinceCode,//{0}-{4} o.EndAccount_Date == null ? "NULL" : "TO_DATE('" + o.EndAccount_Date + "','YYYY-MM-DD HH24:MI:SS')", //{5} o.Statistics_Date == null ? "NULL" : "TO_DATE('" + o.Statistics_Date + "','YYYY-MM-DD HH24:MI:SS')",//{6} o.EndAccount_StartDate == null ? "NULL" : "TO_DATE('" + o.EndAccount_StartDate + "','YYYY-MM-DD HH24:MI:SS')",//{7} o.ServerPartShop_Id, o.ServerPartShop_Code, o.ServerPartShop_Name, o.MachineCode,//{8}-{11} o.EndPersonCode, o.Worker_Name, o.Cashier_Name,//{12}-{14} GetSqlColumn(o.TicketCount), GetSqlColumn(o.TotalCount), GetSqlColumn(o.TotalSellAmount),//{15}-{17} GetSqlColumn(o.TotalOffAmount), GetSqlColumn(o.Cash), GetSqlColumn(o.CreditCard),//{18}-{20} GetSqlColumn(o.TicketBill), GetSqlColumn(o.VipPerson), GetSqlColumn(o.CostBill), //{21}-{23} GetSqlColumn(o.OtherPay), GetSqlColumn(o.Revenue_Amount), GetSqlColumn(o.Cash_PayMent),//{24}-{26} GetSqlColumn(o.Different_Price), o.Difference_Reason, o.Description_Staff,//{27}-{29} o.Description_Date == null ? "NULL" : "TO_DATE('" + o.Description_Date + "', 'YYYY-MM-DD HH24:MI:SS')",//{30} o.Approve_Staff, o.Approve_Date == null ? "NULL" : "TO_DATE('" + o.Approve_Date + "', 'YYYY-MM-DD HH24:MI:SS')",//{32} o.Approved_Info,GetSqlColumn(o.Treatment_Mark), o.Download_Date, //{33}{34}{35} GetSqlColumn(o.Valid),o.EndAccount_Desc, GetSqlColumn(o.Operate_Type),//{36}{37}{38} GetSqlColumn(o.Ticket_Count), GetSqlColumn(o.Fact_Amount), //{39}-{40} GetSqlColumn(o.SellCount_Cigarette), GetSqlColumn(o.FactAmount_Cigarette), //{41}-{42} GetSqlColumn(o.Spot_Check), GetSqlColumn(o.Regional_Check), GetSqlColumn(o.Company_Check), //{43}-{46} GetSqlColumn(o.Check_Count), o.Check_Info,//{46}-{47} GetSqlColumn(o.Cash_Correct), GetSqlColumn(o.Mobile_Correct), GetSqlColumn(o.Sale_Correct), //{48}-{53} GetSqlColumn(o.Correct_Amount), GetSqlColumn(o.OnlineTicket), GetSqlColumn(o.OnlineAmount)); syncSqlList.Add(syncSql); } catch (Exception ex) { SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "SysncRevenueData", "同步结账单表"); } }); LogUtil.WriteLog("同步结账单Start"); oracleHelperCm.ExecuteSqlTran(syncSqlList.ToArray()); //同步到合作商户结账单表 LogUtil.WriteLog("同步结账单End"); } #endregion } }