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; //表名集合
///
/// 表注解集合
///
private Hashtable tableDescList = 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_CommodityType", "TOP"},
//商品信息表
{ "Platform_Data.T_Commodity", "TOP"},
//日结营收表
{ "Platform_Data.T_Revenue", "TOP"},
//现场稽核表
{ "Platform_Data.T_Check", "TOP"},
//销售流水表
{ "Platform_Data.T_Sales", "TOP"},
//销售流水明细表
{ "Platform_Data.T_SalesDetail", "TOP"}
#endregion
};
return _TableNameList;
}
///
/// 传输表时间间隔比例
///
///
private Hashtable getTimeList()
{
Hashtable _TimeList = new Hashtable
{
#region 上传部分
//服务区门店信息表
{ "Platform_Data.T_SERVERPARTSHOP", 0 },
//商品列表表
{ "Platform_Data.T_CommodityType", 0},
//商品信息表
{ "Platform_Data.T_Commodity", 0},
//日结营收表
{ "Platform_Data.T_Revenue", 0},
//现场稽核表
{ "Platform_Data.T_Check", 0 },
//销售流水表
{ "Platform_Data.T_Sales", 0},
//销售流水明细表
{ "Platform_Data.T_SalesDetail", 0},
#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
TRUNC(A.OPERATE_DATE) {0}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" :
"BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1")
},
#endregion
#region 商品类别表
{
"Platform_Data.T_CommodityType", string.Format(
@"SELECT
A.COMMODITYTYPE_ID,A.COMMODITYTYPE_NAME,
A.COMMODITYTYPE_PID,A.COMMODITYTYPE_CODE,
CASE WHEN A.COMMODITYTYPE_VALID = 1 THEN '有效' ELSE '无效' END AS COMMODITYTYPE_STATE,
A.OPERATE_DATE AS CREATE_DATE,A.OPERATE_DATE AS TRANSFER_DATE
FROM
HIGHWAY_STORAGE.T_COMMODITYTYPE A
WHERE
TRUNC(A.OPERATE_DATE) {0}", 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,
COMMODITYTYPE_ID,COMMODITYTYPE_NAME,COMMODITY_NAME,
COMMODITY_BARCODE,COMMODITY_UNIT,COMMODITY_RULE,
COMMODITY_RETAILPRICE,COMMODITY_PURCHASEPRICE,
COMMODITY_STATE,CREATE_DATE,TRANSFER_DATE
FROM
(
SELECT
B.SERVERPARTSHOP_ID,C.SERVERPART_NAME,B.SHOPNAME AS SERVERPARTSHOP_NAME,
D.COMMODITYTYPE_ID,D.COMMODITYTYPE_NAME,A.COMMODITY_NAME,
A.COMMODITY_BARCODE,A.COMMODITY_UNIT,A.COMMODITY_RULE,
A.COMMODITY_RETAILPRICE,A.COMMODITY_PURCHASEPRICE,
CASE WHEN A.COMMODITY_STATE = 1 THEN '有效' ELSE '无效' END AS COMMODITY_STATE,
A.ADDTIME AS CREATE_DATE,A.OPERATE_DATE AS TRANSFER_DATE,
ROW_NUMBER()OVER(PARTITION BY B.SERVERPARTSHOP_ID,A.COMMODITY_BARCODE
ORDER BY A.OPERATE_DATE DESC) AS COLNUM
FROM
HIGHWAY_STORAGE.T_COMMODITY A,
HIGHWAY_STORAGE.T_SERVERPARTSHOP B,
HIGHWAY_STORAGE.T_SERVERPART C,
HIGHWAY_STORAGE.T_COMMODITYTYPE D
WHERE
A.SERVERPART_ID = C.SERVERPART_ID AND TO_CHAR(A.BUSINESSTYPE) = B.SHOPTRADE AND
B.SERVERPART_ID = C.SERVERPART_ID AND A.COMMODITY_TYPE = TO_CHAR(D.COMMODITYTYPE_ID) AND
TRUNC(A.OPERATE_DATE) {0}
)
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.DOWNLOAD_DATE AS CREATE_DATE,A.DESCRIPTION_DATE AS TRANSFER_DATE
FROM
HIGHWAY_SELLDATA.T_ENDACCOUNT A,
HIGHWAY_STORAGE.T_SERVERPARTSHOP B
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND A.SHOPCODE = B.SHOPCODE 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.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 A.SHOPCODE = B.SHOPCODE AND
TRUNC(A.DOWNLOAD_DATE) {0} AND A.DESCRIPTION_DATE IS NULL",
TransferTimes == "1" ? "= TRUNC(SYSDATE) - " + TransferTimes :
"BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE)")
},
#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.DIFFERENT_PRICE AS Different_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}", TransferTimes == "1" ? "= TRUNC(SYSDATE) - 1" :
"BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) - 1")
},
#endregion
#region 销售流水表
{
"Platform_Data.T_Sales",string.Format(
@"SELECT
SERVERPARTSHOP_ID,SERVERPART_NAME,SERVERPARTSHOP_NAME,MACHINECODE,SALES_CODE,
SALES_TIME,SALESWORKER_NAME,TICKET_CODE,SALES_COUNT,SALES_AMOUNT,SALES_OFFAMOUNT,
CASHPAY,BANKPAY,WECHATPAY,ALIPAY,OTHERPAY,SELLMASTER_CODE,SYSDATE AS TRANSFER_DATE
FROM
(
SELECT
B.SERVERPARTSHOP_ID,A.SERVERPART_NAME,B.SHOPNAME AS SERVERPARTSHOP_NAME,
A.MACHINECODE,A.SELLMASTER_CODE AS SALES_CODE,A.SELLMASTER_DATE AS SALES_TIME,
A.SELLMASTER_CODE,A.SELLWORKER_NAME AS SALESWORKER_NAME,A.TICKET_CODE,
A.SELLMASTER_COUNT AS SALES_COUNT,A.SELLMASTER_AMOUNT AS SALES_AMOUNT,
A.SELLMASTER_OFFPRICE AS SALES_OFFAMOUNT,A.CASHPAY,A.BANKPAY,
CASE WHEN PAYMENT_TYPE = 'WECHATPAY' THEN MOBILEPAY ELSE 0 END AS WECHATPAY,
CASE WHEN PAYMENT_TYPE = 'ALIPAY' THEN MOBILEPAY ELSE 0 END AS ALIPAY,
NVL(A.MEMBERPAY,0) + NVL(A.COUPONPAY,0) + NVL(INTERNALPAY,0) + NVL(OTHERPAY,0) AS OTHERPAY
FROM
HIGHWAY_EXCHANGE.T_SELLMASTER A,
HIGHWAY_EXCHANGE.T_SHOPMESSAGE_EX B
WHERE
A.SERVERPARTCODE = B.SERVERPART_CODE AND A.SHOPCODE = B.SHOPCODE AND
NVL(A.TRANSFER_STATE,0) = 0 AND A.SELLMASTER_DATE {0} {1} {2}
ORDER BY A.SELLMASTER_DATE
)",
"BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) + 1",
!string.IsNullOrEmpty(_SALEDATE) ? " AND A.SELLMASTER_DATE >= TO_DATE('" + _SALEDATE + "','YYYY/MM/DD') + 1" : "",
!string.IsNullOrEmpty(_ServerPartCode) ? " AND A.SERVERPARTCODE IN ('" + _ServerPartCode.Replace(",","','") + "')" : "")
},
{
"Platform_Data.T_SalesDetail",string.Format(
@"SELECT
SALESDETAIL_ID,SALES_CODE,SELLMASTER_CODE,LINENUM,COMMODITY_NAME,COMMODITY_BARCODE,
SALESDETAIL_COUNT,SALESDETAIL_PRICE,SALESDETAIL_AMOUNT,
SALESDETAIL_OFFAMOUNT,SALESDETAIL_LINENUM,SYSDATE AS TRANSFER_DATE
FROM
(
SELECT
A.SELLDETAILS_ID AS SALESDETAIL_ID,A.SELLMASTER_CODE AS SALES_CODE,
A.COMMODITY_NAME,A.COMMODITY_BARCODE,A.SELLDETAILS_COUNT AS SALESDETAIL_COUNT,
A.SELLDETAILS_PRICE AS SALESDETAIL_PRICE,A.SELLDETAILS_AMOUNT AS SALESDETAIL_AMOUNT,
A.SELLDETAILS_OFFPRICE AS SALESDETAIL_OFFAMOUNT,A.LINENUM AS SALESDETAIL_LINENUM,
A.SELLMASTER_CODE,A.LINENUM
FROM
HIGHWAY_EXCHANGE.T_SELLDETAILS A
WHERE
NVL(A.TRANSFER_STATE,0) = 0 AND A.CREATE_DATE {0}
ORDER BY A.CREATE_DATE
)",
"BETWEEN TRUNC(SYSDATE) - " + TransferTimes + " AND TRUNC(SYSDATE) + 1")
},
#endregion
#endregion
};
}
///
/// 初始化传输时间字段
///
/// 数据格式:{接收端表名,数据更新判断唯一字段}
///
private Hashtable getCreateDateName()
{
Hashtable _CreateDateName = new Hashtable
{
#region 上传部分
//服务区门店信息表
{ "Platform_Data.T_SERVERPARTSHOP","TRANSFER_DATE" },
//商品列表表
{ "Platform_Data.T_CommodityType", "TRANSFER_DATE"},
//商品信息表
{ "Platform_Data.T_Commodity", "TRANSFER_DATE"},
//日结营收表
{ "Platform_Data.T_Revenue", "TRANSFER_DATE"},
//现场稽核表
{ "Platform_Data.T_Check","TRANSFER_DATE" },
//销售流水表
{ "Platform_Data.T_Sales", "TRANSFER_DATE"},
//销售流水明细表
{ "Platform_Data.T_SalesDetail", "TRANSFER_DATE"},
#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_CommodityType",
new TopParameter("HIGHWAY_STORAGE.T_COMMODITYTYPE",
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_Check",
new TopParameter("HIGHWAY_SELLDATA.T_CHECKACCOUNT",
new Dictionary())
},
#endregion
#region 销售流水表
//销售流水表
{
"Platform_Data.T_Sales",
new TopParameter("HIGHWAY_EXCHANGE.T_SELLMASTER",
new Dictionary
{
{ "SELLMASTER_CODE", DataCheckHelper.ValueType.String }
})
},
{
"Platform_Data.T_SalesDetail",
new TopParameter("HIGHWAY_EXCHANGE.T_SELLDETAILS",
new Dictionary
{
{ "SELLMASTER_CODE", DataCheckHelper.ValueType.String },
{ "LINENUM", DataCheckHelper.ValueType.Int }
})
},
#endregion
#endregion
};
}
///
/// 定义表传输状态字段
///
/// 数据格式:{接收端表名,传输状态字段}
///
private Hashtable getStateNames()
{
return new Hashtable
{
#region 上传部分
//服务区门店信息表
{ "Platform_Data.T_SERVERPARTSHOP","" },
//商品列表表
{ "Platform_Data.T_CommodityType", ""},
//商品信息表
{ "Platform_Data.T_Commodity", ""},
//日结营收表
{ "Platform_Data.T_Revenue", ""},
//现场稽核表
{ "Platform_Data.T_Check","" },
//销售流水表
{ "Platform_Data.T_Sales", "TRANSFER_STATE"},
//销售流水明细表
{ "Platform_Data.T_SalesDetail", "TRANSFER_STATE"},
#endregion
};
}
///
/// 单次最大传输数量
///
/// 数据格式:{接收端表名,传输数量}
///
private Hashtable getMaxDataQuantityList()
{
return new Hashtable
{
#region 上传部分
//服务区门店信息表
{ "Platform_Data.T_SERVERPARTSHOP", 20 },
//商品列表表
{ "Platform_Data.T_CommodityType", 20},
//商品信息表
{ "Platform_Data.T_Commodity", 20},
//日结营收表
{ "Platform_Data.T_Revenue", 20},
//现场稽核表
{ "Platform_Data.T_Check", 20 },
//销售流水表
{ "Platform_Data.T_Sales", 20},
//销售流水明细表
{ "Platform_Data.T_SalesDetail", 20},
#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; }
public Hashtable onTableDescList()
{
return tableDescList;
}
#endregion
}
}