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