using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using Transmission.SDK; using Transmission.SDK.ThreadPool; namespace DataTransferClient { public class ConfigThread : IConfigInterface { #region 参数变量 protected string TransferTimes = ConfigurationManager.AppSettings["TransferTimes"]; /// /// 表名集合 /// private Hashtable tableNameList = null; //表名集合 /// /// 查询表所有数据SQL集合 /// private Hashtable allDataSql = null; //查询表所有数据SQL集合 /// /// 表对应创建时间字段名 /// private Hashtable createDateName = null; //表对应创建时间字段名 /// /// 表对应主键值 /// private Hashtable tableDatas = null; //表对应主键值 /// /// 本地需要修改的状态字段名称 /// private Hashtable stateNames = null; //本地需要修改的状态字段名称 /// /// 线程上传、下发启动时间比例 /// private Hashtable timeList = null; //线程上传、下发启动时间比例 /// /// 上传批量传输最大数据量 /// private Hashtable maxDataQuantityList = null; //上传批量传输最大数据量 /// /// 服务区编码 /// private string serverpartcode = null; //SERVERPARTCODE 服务区编码 /// /// 是否使用替换字段名 /// private bool isReplaceColumnName = false; //是否使用替换字段名 /// /// 默认最大上传天数 /// private int endaccounttimes = 0; //ENDACCOUNTTIMES 默认最大上传天数 protected string _SALEDATE = ConfigurationManager.AppSettings["SALEDATE"];//流水节点 protected string _ServerPartCode = ConfigurationManager.AppSettings["SERVERPARTCODE"];//服务区编码 #endregion /// /// 需要传输的表及传输类型 /// 上传:TOP /// 下载:DOWN /// /// private Hashtable getTableNameList() { Hashtable _TableNameList = new Hashtable { #region 上传部分 //服务区门店信息表 { "Platform_Data.T_ServerpartShop", "TOP" }, //商品信息表 { "Platform_Data.T_Commodity", "TOP"}, //日结营收表 { "Platform_Data.T_Revenue", "TOP"}, //合同信息表 { "Platform_Data.T_Compact", "TOP"}, //现场稽核表 { "Platform_Data.T_Check", "TOP"}, //销售流水表 { "Platform_Data.T_SELLDATA", "TOP"}, { "Platform_Data.T_SELLMASTER", "TOP"}, //会员信息表 { "Platform_Data.T_Membership", "TOP"}, //会员积分表 { "Platform_Data.T_MembershipPoints", "TOP"}, //会员商城订单表 { "Platform_Data.T_MallOrder", "TOP"}, //会员消费记录表 { "Platform_Data.T_ConsumptionRecord", "TOP"}, //会员优惠券表 { "Platform_Data.T_MembershipCoupon", "TOP"}, #endregion #region 下发部分 #endregion }; return _TableNameList; } /// /// 传输表时间间隔比例 /// /// private Hashtable getTimeList() { Hashtable _TimeList = new Hashtable { #region 上传部分 //服务区门店信息表 { "Platform_Data.T_ServerpartShop", 0 }, //商品信息表 { "Platform_Data.T_Commodity", 0 }, //日结营收表 { "Platform_Data.T_Revenue", 0 }, //合同信息表 { "Platform_Data.T_Compact", 0 }, //现场稽核表 { "Platform_Data.T_Check", 0 }, //销售流水表 { "Platform_Data.T_SELLDATA", 0 }, { "Platform_Data.T_SELLMASTER", 0 }, //会员信息表 { "Platform_Data.T_Membership", 0 }, //会员积分表 { "Platform_Data.T_MembershipPoints", 0 }, //会员商城订单表 { "Platform_Data.T_MallOrder", 0 }, //会员消费记录表 { "Platform_Data.T_ConsumptionRecord", 0 }, //会员优惠券表 { "Platform_Data.T_MembershipCoupon", 0 }, #endregion #region 下发部分 #endregion }; return _TimeList; } /// /// 传输表数据读取方式 /// /// 数据格式:{接收端表名,发送端查询语句} /// private Hashtable getAllDataSql() { return new Hashtable() { #region 上传部分 #region 服务区门店信息表 { "Platform_Data.T_ServerpartShop", string.Format( @"SELECT A.ServerpartShop_ID,B.SPREGIONTYPE_NAME AS Region_Name, B.Serverpart_Name,A.SHOPNAME AS ServerpartShop_Name, CASE WHEN A.BUSINESS_STATE = 1000 THEN '在营业' ELSE '已关闭' END AS Business_State, A.OPERATE_DATE AS Create_Date,A.OPERATE_DATE AS Transfer_Date FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP A, HIGHWAY_STORAGE.T_SERVERPART B WHERE A.Serverpart_ID = B.Serverpart_ID AND B.PROVINCE_CODE = 6618 AND TRUNC(A.OPERATE_DATE) {0} AND B.STATISTICS_TYPE = 1000", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 商品信息表 { "Platform_Data.T_Commodity", string.Format( @"SELECT ServerpartShop_ID,Serverpart_Name,ServerpartShop_Name, Commodity_Name,Commodity_Barcode,Commodity_RetailPrice, Commodity_State,Create_Date,Transfer_Date FROM ( SELECT ServerpartShop_ID,Serverpart_Name,ServerpartShop_Name, Commodity_Name,Commodity_Barcode,Commodity_RetailPrice, Commodity_State,Create_Date,Transfer_Date, ROW_NUMBER()OVER(PARTITION BY ServerpartShop_ID,Commodity_Barcode ORDER BY Transfer_Date DESC) AS COLNUM FROM ( SELECT B.ServerpartShop_ID,C.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name, A.Commodity_Name,A.Commodity_Barcode,A.Commodity_RetailPrice, CASE WHEN A.COMMODITY_STATE = 1 THEN '有效' ELSE '无效' END AS Commodity_State, A.ADDTIME AS Create_Date,A.OPERATE_DATE AS Transfer_Date FROM HIGHWAY_STORAGE.T_COMMODITY A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B, HIGHWAY_STORAGE.T_SERVERPART C WHERE A.SERVERPART_ID = C.SERVERPART_ID AND TO_CHAR(A.BUSINESSTYPE) = B.SHOPTRADE AND B.SERVERPART_ID = C.SERVERPART_ID AND TRUNC(A.OPERATE_DATE) {0} AND C.PROVINCE_CODE = 6618 AND C.STATISTICS_TYPE = 1000 UNION ALL SELECT B.ServerpartShop_ID,C.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name, A.Commodity_Name,A.Commodity_Barcode,A.Commodity_RetailPrice, CASE WHEN A.COMMODITY_STATE = 1 THEN '有效' ELSE '无效' END AS Commodity_State, A.ADDTIME AS Create_Date,A.OPERATE_DATE AS Transfer_Date FROM HIGHWAY_STORAGE.T_COMMODITY A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B, HIGHWAY_STORAGE.T_SERVERPART C WHERE A.SERVERPART_ID = 109 AND TO_CHAR(A.BUSINESSTYPE) = B.SHOPTRADE AND B.SERVERPART_ID = C.SERVERPART_ID AND TRUNC(A.OPERATE_DATE) {0} AND C.PROVINCE_CODE = 6618 AND C.STATISTICS_TYPE = 1000 ) ) WHERE COLNUM = 1", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 日结营收表 { "Platform_Data.T_Revenue", string.Format( @"SELECT B.ServerpartShop_ID,A.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name,A.ENDACCOUNT_DATE AS Statistics_Date, CASE WHEN A.VALID = 0 THEN 0 ELSE A.CASHPAY END AS Revenue_Amount, A.TicketCount,A.TotalCount,A.TOTALSELLAMOUNT AS TotalAmount,A.TOTALOFFAMOUNT AS TotalDiscount, A.CASH AS CashPay,A.CREDITCARD AS BankPay,A.TICKETBILL AS WeChatPay,A.OTHERPAY AS AliPay, NVL(A.COSTBILL,0) + NVL(A.VIPPERSON,0) AS OtherPay,A.CASHPAY_DOWNLORD AS CashPayment,A.DIFFERENT_PRICE AS DifferentAmount, A.DIFFERENCE_REASON AS Check_Info,A.DESCRIPTION_STAFF AS Check_Staff,A.DESCRIPTION_DATE AS Check_Date, A.APPROVED_INFO AS Approve_Info,A.APPROVE_STAFF AS Approve_Staff,A.APPROVE_DATE AS Approve_Date, A.DOWNLOAD_DATE AS Create_Date,A.APPROVE_DATE AS Transfer_Date FROM HIGHWAY_SELLDATA.T_ENDACCOUNT A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.PROVINCE_CODE = 6618 AND A.SERVERPART_ID = B.SERVERPART_ID AND NVL(A.SHOPCODE,A.MACHINECODE) = NVL(B.SHOPCODE,B.SERVERPARTSHOP_ID) AND TRUNC(A.APPROVE_DATE) {0} UNION ALL SELECT B.ServerpartShop_ID,A.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name,A.ENDACCOUNT_DATE AS Statistics_Date, CASE WHEN A.VALID = 0 THEN 0 ELSE A.CASHPAY END AS Revenue_Amount, A.TicketCount,A.TotalCount,A.TOTALSELLAMOUNT AS TotalAmount,A.TOTALOFFAMOUNT AS TotalDiscount, A.CASH AS CashPay,A.CREDITCARD AS BankPay,A.TICKETBILL AS WeChatPay,A.OTHERPAY AS AliPay, NVL(A.COSTBILL,0) + NVL(A.VIPPERSON,0) AS OtherPay,A.CASHPAY_DOWNLORD AS CashPayment,A.DIFFERENT_PRICE AS DifferentAmount, A.DIFFERENCE_REASON AS Check_Info,A.DESCRIPTION_STAFF AS Check_Staff,A.DESCRIPTION_DATE AS Check_Date, A.APPROVED_INFO AS Approve_Info,A.APPROVE_STAFF AS Approve_Staff,A.APPROVE_DATE AS Approve_Date, A.DOWNLOAD_DATE AS Create_Date,A.DESCRIPTION_DATE AS Transfer_Date FROM HIGHWAY_SELLDATA.T_ENDACCOUNT A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.PROVINCE_CODE = 6618 AND A.SERVERPART_ID = B.SERVERPART_ID AND NVL(A.SHOPCODE,A.MACHINECODE) = NVL(B.SHOPCODE,B.SERVERPARTSHOP_ID) AND APPROVE_DATE IS NULL AND TRUNC(A.DESCRIPTION_DATE) {0} UNION ALL SELECT B.ServerpartShop_ID,A.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name,A.ENDACCOUNT_DATE AS Statistics_Date, CASE WHEN A.VALID = 0 THEN 0 ELSE A.CASHPAY END AS Revenue_Amount, A.TicketCount,A.TotalCount,A.TOTALSELLAMOUNT AS TotalAmount,A.TOTALOFFAMOUNT AS TotalDiscount, A.CASH AS CashPay,A.CREDITCARD AS BankPay,A.TICKETBILL AS WeChatPay,A.OTHERPAY AS AliPay, NVL(A.COSTBILL,0) + NVL(A.VIPPERSON,0) AS OtherPay,A.CASHPAY_DOWNLORD AS CashPayment,A.DIFFERENT_PRICE AS DifferentAmount, A.DIFFERENCE_REASON AS Check_Info,A.DESCRIPTION_STAFF AS Check_Staff,A.DESCRIPTION_DATE AS Check_Date, A.APPROVED_INFO AS Approve_Info,A.APPROVE_STAFF AS Approve_Staff,A.APPROVE_DATE AS Approve_Date, A.DOWNLOAD_DATE AS Create_Date,A.DOWNLOAD_DATE AS Transfer_Date FROM HIGHWAY_SELLDATA.T_ENDACCOUNT A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND NVL(A.SHOPCODE,A.MACHINECODE) = NVL(B.SHOPCODE,B.SERVERPARTSHOP_ID) AND TRUNC(A.DOWNLOAD_DATE) {0} AND A.PROVINCE_CODE = 6618 AND A.DESCRIPTION_DATE IS NULL", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 合同信息表 { "Platform_Data.T_Compact", string.Format( @"SELECT A.REGISTERCOMPACT_ID AS Compact_ID,A.Serverpart_Name,A.Compact_Name,A.Compact_Code, A.FirstPart_Name,A.SecondPart_Name,A.Compact_Amount,A.Compact_StartDate,A.Compact_EndDate, CASE LENGTH(A.COMPACT_TYPE) WHEN 1 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_CHARACTER',A.Compact_Type) WHEN 2 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_DJD',A.Compact_Type) WHEN 3 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_SM',A.Compact_Type) WHEN 4 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_SY',A.Compact_Type) END AS Compact_Type, HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACTREGPROINST',A.ORGANIZER_TEL) as Sign_Procedure, A.SECURITYDEPOSIT AS Performance_Bond,A.SAFETYRISKMORTGAGE AS SecurityRisk_Deposit, NVL(MIN(B.GUARANTEERATIO),A.GUARANTEERATIO) AS Guarantee_Ratio, ROUND(SUM(B.GUARANTEERATIO * B.MINTURNOVER / 100),6) AS Compact_Tmoney, CASE A.ISFORMAT WHEN 1000 THEN '合作经营' WHEN 2000 THEN '固定租金' END AS Business_Type,A.OPERATING_AREA AS Business_Area, HIGHWAY_STORAGE.FUNC_GETENUMVALUE('BUSINESSTYPE',A.OPERATING_SCOPE) as Business_Scope,A.UPLOADDATE AS Transfer_Date FROM HIGHWAY_STORAGE.T_REGISTERCOMPACT A LEFT JOIN HIGHWAY_STORAGE.T_PERCENTAGEOFCOMMISSION B ON A.REGISTERCOMPACT_ID = B.REGISTERCOMPACT_ID WHERE A.COMPACT_STATE = 1000 AND NVL(A.SERVERPART_ID,0) NOT IN (3748) AND TRUNC(A.UPLOADDATE) {0} GROUP BY A.REGISTERCOMPACT_ID,A.Serverpart_Name,A.Compact_Name,A.Compact_Code, A.FirstPart_Name,A.SecondPart_Name,A.Compact_Amount,A.Compact_StartDate,A.Compact_EndDate, CASE LENGTH(A.COMPACT_TYPE) WHEN 1 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_CHARACTER',A.Compact_Type) WHEN 2 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_DJD',A.Compact_Type) WHEN 3 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_SM',A.Compact_Type) WHEN 4 THEN HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACT_TYPE_SY',A.Compact_Type) END, HIGHWAY_STORAGE.FUNC_GETENUMVALUE('COMPACTREGPROINST',A.ORGANIZER_TEL), A.SECURITYDEPOSIT,A.SAFETYRISKMORTGAGE,A.GUARANTEERATIO, CASE A.ISFORMAT WHEN 1000 THEN '合作经营' WHEN 2000 THEN '固定租金' END, A.OPERATING_AREA,HIGHWAY_STORAGE.FUNC_GETENUMVALUE('BUSINESSTYPE',A.OPERATING_SCOPE),A.UPLOADDATE", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 现场稽核表 { "Platform_Data.T_Check", string.Format( @"SELECT B.ServerpartShop_ID,A.Serverpart_Name,B.SHOPNAME AS ServerpartShop_Name, A.CHECK_ENDDATE AS Check_Date,A.CASHPAY AS Check_Amount, A.WORKER_NAME AS Check_Staff,A.DOWNLOAD_DATE AS Transfer_Date FROM HIGHWAY_SELLDATA.T_CHECKACCOUNT A, HIGHWAY_STORAGE.T_SERVERPARTSHOP B WHERE A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPCODE = B.SHOPCODE AND TRUNC(A.DOWNLOAD_DATE) {0} AND A.PROVINCE_CODE = 6618 AND A.SERVERPART_ID NOT IN (3748)", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 销售流水表 { "Platform_Data.T_SELLDATA",string.Format( @"SELECT SERVERPARTSHOP_ID,SERVERPART_NAME,SERVERPARTSHOP_NAME,SALES_TIME,SALESWORKER_NAME, TICKET_CODE,COMMODITY_NAME,COMMODITY_BARCODE,COMMODITY_RETAILPRICE,SALES_COUNT, SALES_AMOUNT,CASHPAY,BANKPAY,WECHATPAY,ALIPAY,OTHERPAY,SALES_TIME,SALES_TIME AS SELLDATA_DATE, SERVERPARTCODE,SHOPCODE,MACHINECODE,LINENUM,TRANSFER_STATE,LINENUM FROM ( SELECT B.SERVERPARTSHOP_ID,B.SHOPNAME AS SERVERPARTSHOP_NAME,A.SELLDATA_DATE AS SALES_TIME, C.SELLWORKERNAME AS SALESWORKER_NAME,(A.SERVERPARTCODE || A.SHOPCODE || A.MACHINECODE || A.WORKERCODE || TO_CHAR(A.SELLDATA_DATE,'YYYYMMDDHH24MISS')) AS TICKET_CODE,D.COMMODITY_NAME, D.COMMODITY_BARCODE,D.COMMODITY_RETAILPRICE,A.SELLCOUNT AS SALES_COUNT,A.FACTAMOUNT AS SALES_AMOUNT,A.CASH AS CASHPAY,A.CREDITCARD AS BANKPAY,A.TICKETBILL AS WECHATPAY, A.OTHERPAY AS ALIPAY,NVL(A.VIPPERSON,0) + NVL(A.COSTBILL,0) AS OTHERPAY, E.SERVERPART_NAME,A.TRANSFER_STATE,A.SERVERPARTCODE,A.SHOPCODE,A.MACHINECODE,A.LINENUM FROM HIGHWAY_EXCHANGE.T_SELLDATA A, HIGHWAY_EXCHANGE.T_SHOPMESSAGE B, HIGHWAY_EXCHANGE.T_SELLWORKER C, HIGHWAY_EXCHANGE.T_COMMODITYEX D, HIGHWAY_EXCHANGE.T_SYSCODE E WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND A.WORKERCODE = C.SELLWORKERCODE AND A.SERVERPARTCODE = C.SERVERPARTCODE AND A.SERVERPARTCODE = D.SERVERPARTCODE AND A.COMMODITY_CODE = D.COMMODITY_CODE AND A.SERVERPARTCODE = E.SERVERPARTCODE AND B.SERVERPARTSHOP_ID = D.SERVERPARTSHOP_ID AND NVL(A.TRANSFER_STATE,0) = 0 AND TRUNC(A.SELLDATA_DATE) {0} {1} {2} ORDER BY A.SELLDATA_DATE )",(TransferTimes == "1" ? "<= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1"), (!string.IsNullOrEmpty(_SALEDATE) ? " AND TRUNC(A.SELLDATA_DATE) > TO_DATE('" + _SALEDATE + "','YYYY/MM/DD')" : ""), (!string.IsNullOrEmpty(_ServerPartCode) ? " AND A.SERVERPARTCODE IN ('" +_ServerPartCode.Replace(",","','")+ "')" : "")) }, { "Platform_Data.T_SELLMASTER",string.Format( @"SELECT SERVERPARTSHOP_ID,SERVERPART_NAME,SERVERPARTSHOP_NAME,SALES_TIME,SALESWORKER_NAME, TICKET_CODE,COMMODITY_NAME,COMMODITY_BARCODE,COMMODITY_RETAILPRICE,SALES_COUNT, SALES_AMOUNT,CASHPAY,BANKPAY,WECHATPAY,ALIPAY,OTHERPAY,SALES_TIME, TICKET_CODE AS SELLMASTER_CODE,TRANSFER_STATE,LINENUM FROM ( SELECT B.SERVERPARTSHOP_ID,A.SHOPNAME AS SERVERPARTSHOP_NAME,A.SELLMASTER_DATE AS SALES_TIME, A.SELLWORKER_NAME AS SALESWORKER_NAME,A.SELLMASTER_CODE AS TICKET_CODE,E.COMMODITY_NAME, E.COMMODITY_BARCODE,E.SELLDETAILS_PRICE AS COMMODITY_RETAILPRICE,E.SELLDETAILS_COUNT AS SALES_COUNT,E.SELLDETAILS_AMOUNT AS SALES_AMOUNT, CASE WHEN E.LINENUM = 1 THEN A.CASHPAY END AS CASHPAY, CASE WHEN E.LINENUM = 1 THEN A.BANKPAY END AS BANKPAY, CASE WHEN E.LINENUM = 1 AND A.PAYMENT_TYPE = 'WECHATPAY' THEN A.MOBILEPAY END AS WECHATPAY, CASE WHEN E.LINENUM = 1 AND A.PAYMENT_TYPE = 'ALIPAY' THEN A.MOBILEPAY END AS ALIPAY, CASE WHEN E.LINENUM = 1 THEN NVL(A.MEMBERPAY,0) + NVL(A.COUPONPAY,0) + NVL(A.INTERNALPAY,0) + NVL(A.OTHERPAY,0) END AS OTHERPAY,C.SERVERPART_NAME,A.TRANSFER_STATE,E.LINENUM FROM HIGHWAY_EXCHANGE.T_SELLMASTER A, HIGHWAY_EXCHANGE.T_SHOPMESSAGE B, HIGHWAY_EXCHANGE.T_SELLDETAILS E, HIGHWAY_EXCHANGE.T_SYSCODE C WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND A.SELLMASTER_CODE = E.SELLMASTER_CODE AND A.SERVERPARTCODE = C.SERVERPARTCODE AND NVL(E.TRANSFER_STATE,0) = 0 AND TRUNC(A.SELLMASTER_DATE) {0} {1} {2} ORDER BY A.SELLMASTER_DATE )",(TransferTimes == "1" ? "<= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1"), (!string.IsNullOrEmpty(_SALEDATE) ? " AND TRUNC(A.SELLMASTER_DATE) > TO_DATE('" + _SALEDATE + "','YYYY/MM/DD')" : ""), (!string.IsNullOrEmpty(_ServerPartCode) ? " AND A.SERVERPARTCODE IN ('" +_ServerPartCode.Replace(",","','")+ "')" : "")) }, #endregion #region 会员信息表 { "Platform_Data.T_Membership", string.Format( @"SELECT A.MEMBERSHIP_ID,A.MEMBERSHIP_NAME,A.MEMBERSHIP_TYPE,A.MEMBERSHIP_MOBILEPHONE AS Membership_Phone, A.MEMBERSHIP_SEX,A.MEMBERSHIP_POINT,A.ADDTIME AS Register_Date,OPERATE_DATE AS Transfer_Date FROM MOBILESERVICE_PLATFORM.T_MEMBERSHIP A WHERE A.OWNERUNIT_ID = 13 AND A.MEMBERSHIP_TYPE NOT IN (0,9999) AND TRUNC(A.OPERATE_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 会员积分记录表 { "Platform_Data.T_MembershipPoints", string.Format( @"SELECT A.MEMBERSHIP_ID,A.MEMBERSHIP_NAME,A.MEMBERSHIP_MOBILEPHONE AS Membership_Phone,B.CURRENT_POINT AS Change_Point, B.MEMBERSHIP_POINT,B.POINT_TYPE AS Operation_Type,B.POINTRECORD_DESC AS Operation_Desc, B.CREATE_DATE AS Operation_Date,B.CREATE_DATE AS Transfer_Date FROM MOBILESERVICE_PLATFORM.T_MEMBERSHIP A, MOBILESERVICE_PLATFORM.T_POINTRECORD B WHERE A.MEMBERSHIP_ID = B.MEMBERSHIP_ID AND A.OWNERUNIT_ID = 13 AND A.MEMBERSHIP_TYPE NOT IN (0,9999) AND TRUNC(B.CREATE_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 会员商城订单表 { "Platform_Data.T_MallOrder", string.Format( @"SELECT B.MEMBERSHIP_ID,B.MEMBERSHIP_NAME,B.MEMBERSHIP_MOBILEPHONE AS Membership_Phone,A.SALEBILL_CODE AS MallOrder_Code, A.PAY_AMOUNT AS MallOrder_Amount,A.ORDER_DATE AS MallOrder_Date, A.CHANNEL_TYPE AS MallOrder_PayType,A.ORDER_DATE AS Transfer_Date FROM MOBILESERVICE_PLATFORM.V_MALLSALEBILLNEW A, MOBILESERVICE_PLATFORM.T_MEMBERSHIP B WHERE A.MEMBERSHIP_ID = B.MEMBERSHIP_ID AND A.SALEBILL_STATE < 9000 AND B.OWNERUNIT_ID = 13 AND B.MEMBERSHIP_TYPE NOT IN (0,9999) AND TRUNC(A.ORDER_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 会员消费记录表 { "Platform_Data.T_ConsumptionRecord", string.Format( @"SELECT B.MEMBERSHIP_ID,B.MEMBERSHIP_NAME,B.MEMBERSHIP_MOBILEPHONE AS Membership_Phone, A.SERVERPART_NAME AS Consume_ShopName,A.PAY_AMOUNT AS Consume_Amount,C.CHANNEL_TYPE AS Consume_PayType, A.CONSUMPTIONRECORD_DATE AS Consume_Date,A.CONSUMPTIONRECORD_DATE AS Transfer_Date FROM MOBILESERVICE_PLATFORM.T_MEMBERSHIP B, MOBILESERVICE_PLATFORM.V_CONSUMPTIONRECORDLIST A LEFT JOIN MOBILESERVICE_PLATFORM.T_PAYRECORD C ON A.TICKET_CODE = C.SALEBILL_CODE WHERE A.MEMBERSHIP_ID = B.MEMBERSHIP_ID AND A.CONSUMPTIONRECORD_STATE > 1005 AND A.CONSUMPTIONRECORD_STATE < 9000 AND B.OWNERUNIT_ID = 13 AND B.MEMBERSHIP_TYPE NOT IN (0,9999) AND TRUNC(A.CONSUMPTIONRECORD_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #region 会员优惠券表 { "Platform_Data.T_MembershipCoupon", string.Format( @"SELECT A.MEMBERSHIP_ID,A.MEMBERSHIP_NAME,A.MEMBERSHIP_MOBILEPHONE AS Membership_Phone, CASE COUPON_TYPE WHEN 1000 THEN '满减券' WHEN 2000 THEN '折扣券' WHEN 3000 THEN '抵扣券' WHEN 4000 THEN '实物券' END AS Coupon_Type, A.COUPON_NAME,COUPON_DISCOUNT AS Coupon_Amount,A.COUPON_STATE,A.CREATEDATE AS Create_Date, A.SNAME AS Use_ShopName,A.USED_DATE AS Use_Date,A.CREATE_DATE AS Transfer_Date FROM MOBILESERVICE_PLATFORM.V_MEMBERSHIP_COUPON A WHERE A.OWNERUNIT_ID = 13 AND TRUNC(A.CREATE_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" : "BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1") }, #endregion #endregion #region 下发部分 #endregion }; } /// /// 初始化传输时间字段 /// /// 数据格式:{接收端表名,数据更新判断唯一字段} /// private Hashtable getCreateDateName() { Hashtable _CreateDateName = new Hashtable { #region 上传部分 //服务区门店信息表 { "Platform_Data.T_ServerpartShop","TRANSFER_DATE" }, //商品信息表 { "Platform_Data.T_Commodity","TRANSFER_DATE" }, //日结营收表 { "Platform_Data.T_Revenue","TRANSFER_DATE" }, //合同信息表 { "Platform_Data.T_Compact","TRANSFER_DATE" }, //现场稽核表 { "Platform_Data.T_Check","TRANSFER_DATE" }, //销售流水表 { "Platform_Data.T_SELLDATA","TRANSFER_DATE" }, { "Platform_Data.T_SELLMASTER","TRANSFER_DATE" }, //会员信息表 { "Platform_Data.T_Membership","TRANSFER_DATE" }, //会员积分记录表 { "Platform_Data.T_MembershipPoints","TRANSFER_DATE" }, //会员商城订单表 { "Platform_Data.T_MallOrder","TRANSFER_DATE" }, //会员消费记录表 { "Platform_Data.T_ConsumptionRecord","TRANSFER_DATE" }, //会员优惠券表 { "Platform_Data.T_MembershipCoupon","TRANSFER_DATE" }, #endregion #region 下发部分 #endregion }; return _CreateDateName; } /// /// 初始化数据唯一条件字段 /// /// 数据格式:{接收端表名,发送端表名,发送端主键值} /// private Hashtable getTableDatas() { return new Hashtable { #region 上传部分-> 唯一条件标识上传状态 #region 服务区信息表 //服务区信息表 { "Platform_Data.T_ServerpartShop", new TopParameter("HIGHWAY_STORAGE.T_SERVERPARTSHOP", new Dictionary()) }, #endregion #region 商品信息表 //服务区门店表 { "Platform_Data.T_Commodity", new TopParameter("HIGHWAY_STORAGE.T_COMMODITY", new Dictionary()) }, #endregion #region 日结营收表 //用户账户表 { "Platform_Data.T_Revenue", new TopParameter("HIGHWAY_SELLDATA.T_ENDACCOUNT", new Dictionary()) }, #endregion #region 合同信息表 //用户账户表 { "Platform_Data.T_Compact", new TopParameter("HIGHWAY_STORAGE.T_REGISTERCOMPACT", new Dictionary()) }, #endregion #region 现场稽核表 //推送详情表 { "Platform_Data.T_Check", new TopParameter("HIGHWAY_SELLDATA.T_CHECKACCOUNT", new Dictionary()) }, #endregion #region 销售流水表 //销售流水表 { "Platform_Data.T_SELLDATA", new TopParameter("HIGHWAY_EXCHANGE.T_SELLDATA", new Dictionary { { "SELLDATA_DATE", DataCheckHelper.ValueType.DateTime }, { "SERVERPARTCODE", DataCheckHelper.ValueType.String }, { "SHOPCODE", DataCheckHelper.ValueType.String }, { "MACHINECODE", DataCheckHelper.ValueType.String }, { "LINENUM", DataCheckHelper.ValueType.Int } }) }, { "Platform_Data.T_SELLMASTER", new TopParameter("HIGHWAY_EXCHANGE.T_SELLDETAILS", new Dictionary { { "SELLMASTER_CODE", DataCheckHelper.ValueType.String }, { "LINENUM", DataCheckHelper.ValueType.Int } }) }, #endregion #region 会员信息表 { "Platform_Data.T_Membership", new TopParameter("MOBILESERVICE_PLATFORM.T_MEMBERSHIP", new Dictionary()) }, #endregion #region 会员积分记录表 { "Platform_Data.T_MembershipPoints", new TopParameter("MOBILESERVICE_PLATFORM.T_POINTRECORD", new Dictionary()) }, #endregion #region 会员商城订单表 { "Platform_Data.T_MallOrder", new TopParameter("MOBILESERVICE_PLATFORM.V_MALLSALEBILLNEW", new Dictionary()) }, #endregion #region 会员消费记录表 { "Platform_Data.T_ConsumptionRecord", new TopParameter("MOBILESERVICE_PLATFORM.V_CONSUMPTIONRECORDLIST", new Dictionary()) }, #endregion #region 会员优惠券表 { "Platform_Data.T_MembershipCoupon", new TopParameter("MOBILESERVICE_PLATFORM.V_MEMBERSHIP_COUPON", new Dictionary()) }, #endregion #endregion #region 下发部分 #endregion }; } /// /// 定义表传输状态字段 /// /// 数据格式:{接收端表名,传输状态字段} /// private Hashtable getStateNames() { return new Hashtable { #region 上传部分 //服务区门店信息表 { "Platform_Data.T_ServerpartShop","" }, //商品信息表 { "Platform_Data.T_Commodity","" }, //日结营收表 { "Platform_Data.T_Revenue","" }, //合同信息表 { "Platform_Data.T_Compact","" }, //现场稽核表 { "Platform_Data.T_Check","" }, //销售流水表 { "Platform_Data.T_SELLDATA","TRANSFER_STATE" }, { "Platform_Data.T_SELLMASTER","TRANSFER_STATE" }, //会员信息表 { "Platform_Data.T_Membership","" }, //会员积分记录表 { "Platform_Data.T_MembershipPoints","" }, //会员商城订单表 { "Platform_Data.T_MallOrder","" }, //会员消费记录表 { "Platform_Data.T_ConsumptionRecord","" }, //会员优惠券表 { "Platform_Data.T_MembershipCoupon","" }, #endregion #region 下发部分 #endregion }; } /// /// 单次最大传输数量 /// /// 数据格式:{接收端表名,传输数量} /// private Hashtable getMaxDataQuantityList() { return new Hashtable { #region 上传部分 //服务区门店信息表 { "Platform_Data.T_ServerpartShop", 20 }, //商品信息表 { "Platform_Data.T_Commodity", 200 }, //日结营收表 { "Platform_Data.T_Revenue", 200 }, //合同信息表 { "Platform_Data.T_Compact", 20 }, //现场稽核表 { "Platform_Data.T_Check", 20 }, //销售流水表 { "Platform_Data.T_SELLDATA", 20 }, { "Platform_Data.T_SELLMASTER", 20 }, //会员信息表 { "Platform_Data.T_Membership", 200 }, //会员积分记录表 { "Platform_Data.T_MembershipPoints", 200 }, //会员商城订单表 { "Platform_Data.T_MallOrder", 20 }, //会员消费记录表 { "Platform_Data.T_ConsumptionRecord", 20 }, //会员优惠券表 { "Platform_Data.T_MembershipCoupon", 200 }, #endregion #region 下发部分 #endregion }; } #region 方法 -> 构造函数 /// /// 线程配置 /// public ConfigThread(string serverpartcode = null, bool isReplaceColumnName = false, int endaccounttimes = 0) { if (serverpartcode != null) { this.serverpartcode = serverpartcode; } if (endaccounttimes > 0) { this.endaccounttimes = endaccounttimes; } if (this.isReplaceColumnName != isReplaceColumnName) { this.isReplaceColumnName = isReplaceColumnName; } setTableNameList(); setCreateDateName(); setTableDatas(); setStateNames(); setTimeList(); setMaxDataQuantityList(); setAllDataSql();//最后加载 } /// /// 线程配置 /// /// 表名集合 /// 查询表所有数据SQL集合 /// 表对应创建时间字段名 /// 表对应主键值 /// 本地需要修改的状态名称 public ConfigThread(Hashtable tableNameList, Hashtable allDataSql, Hashtable createDateName, Hashtable tableDatas, Hashtable stateNames, Hashtable timeList, bool isReplaceColumnName = false, Hashtable maxDataQuantityList = null, string serverpartcode = null, int endaccounttimes = 0) { if (serverpartcode != null) { this.serverpartcode = serverpartcode; } if (endaccounttimes > 0) { this.endaccounttimes = endaccounttimes; } if (this.isReplaceColumnName != isReplaceColumnName) { this.isReplaceColumnName = isReplaceColumnName; } setTableNameList(tableNameList); setCreateDateName(createDateName); setTableDatas(tableDatas); setStateNames(stateNames); setTimeList(timeList); setMaxDataQuantityList(maxDataQuantityList); setAllDataSql(allDataSql);//最后加载 } #endregion #region 方法 -> 动态配置参数 /// /// 表名集合 /// /// public void setTableNameList(Hashtable tableNameList = null) { if (tableNameList == null) { this.tableNameList = getTableNameList(); } else { this.tableNameList = tableNameList; } } /// /// 查询表所有数据SQL集合 /// /// public void setAllDataSql(Hashtable allDataSql = null) { if (allDataSql == null) { this.allDataSql = getAllDataSql(); } else { this.allDataSql = allDataSql; } } /// /// 表对应创建时间字段名 /// /// public void setCreateDateName(Hashtable createDateName = null) { if (createDateName == null) { this.createDateName = getCreateDateName(); } else { this.createDateName = createDateName; } } /// /// 表对应主键值 /// /// public void setTableDatas(Hashtable tableDatas = null) { if (tableDatas == null) { this.tableDatas = getTableDatas(); } else { this.tableDatas = tableDatas; } } /// /// 本地需要修改的状态名称 /// /// public void setStateNames(Hashtable stateNames = null) { if (stateNames == null) { this.stateNames = getStateNames(); } else { this.stateNames = stateNames; } } /// /// 上传、下发启动间隔时间 /// /// public void setTimeList(Hashtable timeList = null) { if (timeList == null) { this.timeList = getTimeList(); } else { this.timeList = timeList; } } /// /// 上传批量传输最大数据量 /// /// public void setMaxDataQuantityList(Hashtable maxDataQuantityList = null) { if (maxDataQuantityList == null) { this.maxDataQuantityList = getMaxDataQuantityList(); } else { this.maxDataQuantityList = maxDataQuantityList; } } #endregion #region 方法 -> 接口参数 /// /// 接口参数 /// Important parameters of the interface, sacred and inviolable /// /// public Hashtable onTableNameList() { return tableNameList; } public Hashtable onAllDataSql() { return allDataSql; } public Hashtable onCreateDateName() { return createDateName; } public Hashtable onTableDatas() { return tableDatas; } public Hashtable onStateNames() { return stateNames; } public Hashtable onTimeList() { return timeList; } public Hashtable onMaxDataQuantityList() { return maxDataQuantityList; } #endregion } }