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