566 lines
29 KiB
C#
566 lines
29 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net;
|
||
using System.Text;
|
||
using System.Web;
|
||
|
||
namespace SocketTransfer.SDK
|
||
{
|
||
public class ScanUpdateHelper
|
||
{
|
||
/// <summary>
|
||
/// 扫码上传
|
||
/// </summary>
|
||
/// <param name="dataType">数据类型(1001:日结;1002:稽核;2001:交班;3001:单品;4001;移动支付)</param>
|
||
/// <param name="oracleHelper"></param>
|
||
/// <param name="updateURL"></param>
|
||
public static void UpLoad(int dataType, OracleHelper oracleHelper, string updateURL = "http://183.129.232.107:8010")
|
||
{
|
||
int UploadSuccess = 0;
|
||
bool isReplaceColumnName = false;
|
||
try
|
||
{
|
||
DataTable _DataTable = null;
|
||
try
|
||
{
|
||
_DataTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
@"SELECT SERVERPARTCODE,SHOPCODE
|
||
FROM HIGHWAY_EXCHANGE.T_SHOPMESSAGE
|
||
WHERE VALID = 1").Tables[0];
|
||
}
|
||
catch
|
||
{
|
||
_DataTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
@"SELECT SERVERPART_CODE AS SERVERPARTCODE,SHOPCODE
|
||
FROM HIGHWAY_EXCHANGE.T_SHOPMESSAGE
|
||
WHERE VALID = 1").Tables[0];
|
||
isReplaceColumnName = true;
|
||
}
|
||
for (int i = 0; i < _DataTable.Rows.Count; i++)
|
||
{
|
||
if (UploadData(dataType, _DataTable.Rows[i]["SERVERPARTCODE"].ToString(),
|
||
_DataTable.Rows[i]["SHOPCODE"].ToString(), oracleHelper, updateURL, isReplaceColumnName))
|
||
{
|
||
UploadSuccess++;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.WriteSendLog("自动扫码上传失败:(" + dataType + ")" + ex.Message,
|
||
"日志_ScanUpdate" + DateTime.Now.ToString("yyyyMMdd"));
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 执行上传
|
||
/// </summary>
|
||
/// <param name="dataType">数据类型(1001:日结;1002:稽核;2001:交班;3001:单品;4001;移动支付)</param>
|
||
/// <param name="StartTime">开始时间</param>
|
||
/// <param name="EndTime">结束时间</param>
|
||
/// <param name="ServerCode">服务区编号</param>
|
||
/// <param name="ShopCode">门店编号</param>
|
||
/// <returns></returns>
|
||
private static bool UploadData(int dataType, string ServerCode, string ShopCode, OracleHelper oracleHelper, string updateURL, bool isReplaceColumnName = false)
|
||
{
|
||
DataTable _QRcodeTable = null;
|
||
int _Length = 0, _RowCount = 0, _RecordCount = 0, _ScanIndex = 0, _ScanCount = 0;
|
||
string _EndAccountData = "", _PersonsellData = "";
|
||
string _strCheckCode = "";
|
||
try
|
||
{
|
||
if (dataType == 3001)
|
||
{
|
||
_QRcodeTable = SaleQrCode(ServerCode, ShopCode, oracleHelper, out _strCheckCode);
|
||
}
|
||
else
|
||
{
|
||
_QRcodeTable = EndAccountQrCode(ServerCode, ShopCode, isReplaceColumnName, oracleHelper, out _strCheckCode);
|
||
}
|
||
if (_QRcodeTable.Rows.Count > 0)
|
||
{
|
||
for (int n = 0; n < _QRcodeTable.Rows.Count; n++)
|
||
{
|
||
string text = "";
|
||
if (dataType == 3001)
|
||
{
|
||
_EndAccountData = HttpUtility.UrlEncode(_QRcodeTable.Rows[n]["salestr"].ToString());
|
||
_Length = _QRcodeTable.Rows[n]["salestr"].ToString().Length;
|
||
_RowCount = Convert.ToInt16(_QRcodeTable.Rows[n]["salerow"]);
|
||
_ScanIndex = n + 1;
|
||
_ScanCount = _QRcodeTable.Rows.Count;
|
||
int t = 0;
|
||
for (int x = 0; x < _QRcodeTable.Rows.Count; x++)
|
||
{
|
||
if (Convert.ToDateTime(_QRcodeTable.Rows[x]["enddate"]) == Convert.ToDateTime(_QRcodeTable.Rows[n]["enddate"]))
|
||
{
|
||
t++;
|
||
}
|
||
}
|
||
_RecordCount = t;
|
||
text = "CommoditySale" + "_New=" + _EndAccountData + "&Length=" + _Length + "&RowCount=" + _RowCount + "&RecordCount=" + _RecordCount +
|
||
"&CheckCode=" + _QRcodeTable.Rows[n]["checkMD5"].ToString() + "&ScanIndex=" + _ScanIndex + "&ScanCount=" + _ScanCount;
|
||
}
|
||
else
|
||
{
|
||
_EndAccountData = HttpUtility.UrlEncode(_QRcodeTable.Rows[n]["endaccountstr"].ToString());
|
||
_PersonsellData = HttpUtility.UrlEncode(_QRcodeTable.Rows[n]["personsellstr"].ToString());
|
||
_Length = _QRcodeTable.Rows[n]["endaccountstr"].ToString().Length + _QRcodeTable.Rows[n]["personsellstr"].ToString().Length;
|
||
_RowCount = n + 1;
|
||
_ScanIndex = n + 1;
|
||
_ScanCount = _QRcodeTable.Rows.Count;
|
||
_RecordCount = _QRcodeTable.Rows.Count;
|
||
text = "EndAccount" + "=" + _EndAccountData + (_PersonsellData == "" ? "" : "&Personsell=" + _PersonsellData) + "&Length=" + _Length + "&RowCount=" +
|
||
_RowCount + "&RecordCount=" + _RecordCount + "&CheckCode=" + _QRcodeTable.Rows[n]["checkMD5"].ToString() +
|
||
"&ScanIndex=" + _RowCount + "&ScanCount=" + _RecordCount;
|
||
}
|
||
string retString = "";
|
||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(updateURL + "/MobileServicePlatform/Handler/handler_ajax.ashx");
|
||
request.Method = "POST";
|
||
request.ContentType = "application/x-www-form-urlencoded";
|
||
byte[] byteArray = Encoding.UTF8.GetBytes("action_type=ScanCodeUpdate&action_data=" + HttpUtility.UrlEncode(text) + "&action_record=1");
|
||
request.ContentLength = byteArray.Length;
|
||
using (Stream dataStream = request.GetRequestStream())
|
||
{
|
||
dataStream.Write(byteArray, 0, byteArray.Length);
|
||
}
|
||
using (WebResponse response = request.GetResponse())
|
||
{
|
||
Stream dataStream = response.GetResponseStream();
|
||
StreamReader reader = new StreamReader(dataStream);
|
||
string responseFromServer = reader.ReadToEnd();
|
||
retString = responseFromServer;
|
||
}
|
||
if (retString == _strCheckCode)
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.WriteSendLog("自动扫码上传失败:(" + dataType + ")" + ex.Message,
|
||
"日志_ScanUpdate" + DateTime.Now.ToString("yyyyMMdd") + ".log");
|
||
}
|
||
return false;
|
||
}
|
||
|
||
#region 方法 --> 生成本次单品集合数据二维码字符串列表
|
||
/// <summary>
|
||
/// 生成单品集合数据
|
||
/// </summary>
|
||
private static DataTable SaleQrCode(string ServerCode, string ShopCode, OracleHelper oracleHelper, out string checkCode)
|
||
{
|
||
string _strSalestart = "";
|
||
//string _strSaleend = "";
|
||
string strtmp = "";
|
||
string saletmp = "";
|
||
int m = 0;
|
||
checkCode = "";
|
||
DataTable _DataTable = new DataTable();
|
||
_DataTable.Columns.Add("id", typeof(decimal));
|
||
_DataTable.Columns.Add("startdate", typeof(DateTime));
|
||
_DataTable.Columns.Add("enddate", typeof(DateTime));
|
||
_DataTable.Columns.Add("salestr", typeof(string));
|
||
_DataTable.Columns.Add("salerow", typeof(int));
|
||
_DataTable.Columns.Add("checkMD5", typeof(string));
|
||
////获取未上传单品记录(交班时间)
|
||
DataTable _TransferSaleTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT TRANSFER_ID, SERVERPARTCODE, SHOPCODE,STARTDATE,ENDDATE
|
||
FROM HIGHWAY_EXCHANGE.T_TRANSFER_SALE A
|
||
WHERE SERVERPARTCODE = '{ServerCode}' AND SHOPCODE = '{ShopCode}' AND
|
||
ENDDATE > TRUNC(SYSDATE) - 1 AND NVL(TRANSFER_STATE,0) < 9
|
||
ORDER BY TRANSFER_ID ASC").Tables[0];
|
||
DataTable _TempTable = _TransferSaleTable.DefaultView.ToTable(true, new string[] { "serverpartcode", "shopcode", "startdate", "enddate" });
|
||
for (int i = 0; i < _TempTable.Rows.Count; i++)
|
||
{
|
||
m = 0;
|
||
_strSalestart = _TempTable.Rows[i]["serverpartcode"].ToString() + "|" + _TempTable.Rows[i]["shopcode"].ToString() +
|
||
"|" + Convert.ToDateTime(_TempTable.Rows[i]["startdate"]).ToString("yyyyMMddHHmmss") +
|
||
"|" + Convert.ToDateTime(_TempTable.Rows[i]["enddate"]).ToString("yyyyMMddHHmmss");
|
||
//根据交班时间获取单品记录
|
||
DataTable _SaleTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT B.COMMODITY_SYMBOL,A.TOTAL_COUNT,A.TOTAL_AMOUNT
|
||
FROM HIGHWAY_EXCHANGE.T_COMMODITYSALE_NEW A,
|
||
HIGHWAY_EXCHANGE.T_COMMODITYEX B
|
||
WHERE A.COMMODITY_CODE = B.COMMODITY_CODE AND
|
||
A.CREATE_DATE BETWEEN TO_DATE('{_TempTable.Rows[i]["enddate"].ToString()}','YYYY/MM/DD HH24:MI:SS') AND
|
||
TO_DATE('{_TempTable.Rows[i]["enddate"].ToString()}','YYYY/MM/DD HH24:MI:SS') AND
|
||
B.SERVERPARTCODE = '{ServerCode}'
|
||
ORDER BY COMMODITYSALE_ID").Tables[0];
|
||
|
||
DataTable dataTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT B.COMMODITY_SYMBOL,
|
||
A.TOTALCOUNT AS TOTAL_COUNT,
|
||
A.TOTALSELLAMOUNT AS TOTAL_AMOUNT
|
||
FROM HIGHWAY_EXCHANGE.T_COMMODITYSALE A,
|
||
HIGHWAY_EXCHANGE.T_COMMODITYEX B
|
||
WHERE A.STARTDATE = TO_DATE('{_TransferSaleTable.Rows[i]["startdate"].ToString()}','YYYY/MM/DD HH24:MI:SS') AND
|
||
A.ENDDATE = TO_DATE('{_TransferSaleTable.Rows[i]["enddate"].ToString()}','YYYY/MM/DD HH24:MI:SS') AND
|
||
A.SERVERPARTCODE = '{ServerCode}' AND SHOPCODE = '{ShopCode}' AND A.COMMODITY_CODE = B.COMMODITY_CODE
|
||
ORDER BY COMMODITYSALE_ID").Tables[0];
|
||
|
||
_SaleTable = ConvertOraclTableToDoNetTable(_SaleTable);
|
||
dataTable = ConvertOraclTableToDoNetTable(dataTable);
|
||
_SaleTable.Merge(dataTable);
|
||
for (int n = 0; n < _SaleTable.Rows.Count; n++)
|
||
{
|
||
saletmp = _SaleTable.Rows[n]["commodity_symbol"].ToString() +
|
||
"^" + _SaleTable.Rows[n]["total_count"].ToString().Replace(".00", "") +
|
||
"^" + _SaleTable.Rows[n]["total_amount"].ToString().Replace(".00", "");
|
||
if ((strtmp.Length + saletmp.Length) > 300)
|
||
{
|
||
m++;
|
||
DataRow _row = _DataTable.NewRow();
|
||
_row["id"] = m;
|
||
_row["startdate"] = _TempTable.Rows[i]["startdate"];
|
||
_row["enddate"] = _TempTable.Rows[i]["enddate"];
|
||
_row["salestr"] = strtmp;
|
||
_row["salerow"] = m;
|
||
_DataTable.Rows.Add(_row);
|
||
strtmp = "";
|
||
}
|
||
strtmp += (strtmp == "" ? _strSalestart + "|" : ",") + saletmp;
|
||
if (n == (_SaleTable.Rows.Count - 1))
|
||
{
|
||
m++;
|
||
DataRow _row = _DataTable.NewRow();
|
||
_row["id"] = m;
|
||
_row["startdate"] = _TempTable.Rows[i]["startdate"];
|
||
_row["enddate"] = _TempTable.Rows[i]["enddate"];
|
||
_row["salestr"] = strtmp;
|
||
_row["salerow"] = m;
|
||
_DataTable.Rows.Add(_row);
|
||
strtmp = "";
|
||
}
|
||
}
|
||
if (_DataTable.Rows.Count > 0)
|
||
{
|
||
string MD5 = "", strMD5 = "";
|
||
for (int j = 0; j < _DataTable.Rows.Count; j++)
|
||
{
|
||
strMD5 += (strMD5 == "" ? "" : ",") + _DataTable.Rows[j]["salestr"].ToString();
|
||
}
|
||
MD5 = CreateMD5(strMD5);
|
||
for (int j = 0; j < _DataTable.Rows.Count; j++)
|
||
{
|
||
_DataTable.Rows[j]["checkMD5"] = MD5;
|
||
}
|
||
checkCode = MD5;
|
||
}
|
||
}
|
||
return _DataTable;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 --> 生成本次结账及收银交班数据二维码字符串列表
|
||
/// <summary>
|
||
/// 生成结账数据
|
||
/// </summary>
|
||
private static DataTable EndAccountQrCode(string ServerCode, string ShopCode,
|
||
bool isReplaceColumnName, OracleHelper oracleHelper, out string checkCode)
|
||
{
|
||
string _strEndAccount = "";
|
||
string _strPersonSell = "";
|
||
string _strTemp = "";
|
||
checkCode = "";
|
||
DataTable _DataTable = new DataTable("list");
|
||
_DataTable.Columns.Add("id", typeof(decimal));
|
||
_DataTable.Columns.Add("startdate", typeof(DateTime));
|
||
_DataTable.Columns.Add("enddate", typeof(DateTime));
|
||
_DataTable.Columns.Add("endaccountstr", typeof(string));
|
||
_DataTable.Columns.Add("personsellstr", typeof(string));
|
||
_DataTable.Columns.Add("flag", typeof(string));
|
||
_DataTable.Columns.Add("checkMD5", typeof(string));
|
||
|
||
DataTable dt = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT ENDACCOUNT_ID,STARTDATE,ENDDATE,SERVERPARTCODE,
|
||
SHOPCODE,MACHINECODE,ENDPERSON_CODE,TICKET_COUNT,
|
||
TOTAL_COUNT,TOTAL_AMOUNT,TOTAL_OFFAMOUNT,CASHPAY,
|
||
BANKPAY,-1 AS TICKETBILL,MEMBERPAY,COUPONPAY,-1 AS OTHERPAY,
|
||
CONTRIBUTION_AMOUNT,ENDACCOUNT_TYPE,PAYMENT_DETAILS,ENDACCOUNT_CODE
|
||
FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW
|
||
WHERE SERVERPARTCODE = '{ServerCode}' AND
|
||
SHOPCODE = '{ShopCode}' AND ENDDATE > TRUNC(SYSDATE) - 1 AND NVL(TRANSFER_STATE,0) < 9
|
||
ORDER BY ENDDATE ASC").Tables[0];
|
||
|
||
DataTable dataTable = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT A.ENDACCOUNT_ID,A.ENDACCOUNT_STARTDATE AS STARTDATE,
|
||
A.ENDACCOUNT_DATE AS ENDDATE,{(isReplaceColumnName ?
|
||
"A.SERVERPART_CODE" : "A.SERVERPARTCODE")} AS SERVERPARTCODE,
|
||
A.SHOPCODE,A.MACHINECODE,A.ENDPERSONCODE AS ENDPERSON_CODE,
|
||
A.TICKETCOUNT AS TICKET_COUNT,A.TOTALCOUNT AS TOTAL_COUNT,
|
||
A.TOTALSELLAMOUNT AS TOTAL_AMOUNT,A.TOTALOFFAMOUNT AS TOTAL_OFFAMOUNT,
|
||
A.CASH AS CASHPAY, A.CREDITCARD AS BANKPAY,A.TICKETBILL,A.VIPPERSON AS MEMBERPAY,
|
||
A.COSTBILL AS COUPONPAY,A.OTHERPAY,A.CASHPAY AS CONTRIBUTION_AMOUNT,
|
||
A.FLAG AS ENDACCOUNT_TYPE,'' AS PAYMENT_DETAILS,'' AS ENDACCOUNT_CODE
|
||
FROM T_ENDACCOUNT A
|
||
WHERE {(isReplaceColumnName ? "A.SERVERPART_CODE" : "A.SERVERPARTCODE")} = '{ServerCode}' AND
|
||
A.SHOPCODE = '{ShopCode}' AND A.ENDACCOUNT_DATE > TRUNC(SYSDATE) AND
|
||
NVL(A.TRANSFER_STATE,0) < 9
|
||
ORDER BY A.ENDACCOUNT_DATE ASC").Tables[0];
|
||
dt = ConvertOraclTableToDoNetTable(dt);
|
||
dataTable = ConvertOraclTableToDoNetTable(dataTable);
|
||
dt.Merge(dataTable);
|
||
foreach (DataRow row in dt.Rows)
|
||
{
|
||
#region
|
||
_strEndAccount = "";
|
||
_strPersonSell = "";
|
||
for (int i = 0; i < dt.Columns.Count; i++)
|
||
{
|
||
if (dt.Columns[i].ColumnName != "TICKETBILL" && dt.Columns[i].ColumnName != "OTHERPAY" &&
|
||
dt.Columns[i].ColumnName != "PAYMENT_DETAILS" && dt.Columns[i].ColumnName != "ENDACCOUNT_CODE")
|
||
{
|
||
_strEndAccount += (_strEndAccount == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") :
|
||
row[i].ToString().Replace(".00", ""));
|
||
}
|
||
else
|
||
{
|
||
string[] MovePay = row["PAYMENT_DETAILS"].ToString().Split(',');
|
||
Dictionary<string, string> _MobilePayList = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||
for (int k = 0; k < MovePay.Length; k++)
|
||
{
|
||
if (MovePay[k].Split(':').Length > 1)
|
||
{
|
||
_MobilePayList.Add(MovePay[k].Split(':')[0], MovePay[k].Split(':')[1]);
|
||
}
|
||
}
|
||
switch (dt.Columns[i].ColumnName)
|
||
{
|
||
case "TICKETBILL":
|
||
if (row["TICKETBILL"].ToString() == "-1")
|
||
{
|
||
if (_MobilePayList.ContainsKey("WECHATPAY"))
|
||
{
|
||
_strEndAccount += "|" + _MobilePayList["WECHATPAY"].Replace(".00", "");
|
||
}
|
||
else
|
||
{
|
||
_strEndAccount += "|0";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_strEndAccount += (_strEndAccount == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") :
|
||
row[i].ToString().Replace(".00", ""));
|
||
}
|
||
break;
|
||
case "OTHERPAY":
|
||
if (row["OTHERPAY"].ToString() == "-1")
|
||
{
|
||
if (_MobilePayList.ContainsKey("ALIPAY"))
|
||
{
|
||
_strEndAccount += "|" + _MobilePayList["ALIPAY"].Replace(".00", "");
|
||
}
|
||
else
|
||
{
|
||
_strEndAccount += "|0";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_strEndAccount += (_strEndAccount == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") :
|
||
row[i].ToString().Replace(".00", ""));
|
||
}
|
||
break;
|
||
case "ENDACCOUNT_CODE":
|
||
case "PAYMENT_DETAILS":
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
#region
|
||
DataTable person = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT PERSONSELL_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,
|
||
STARTDATE,ENDDATE,SELLWORKER_CODE,TICKET_COUNT,TOTAL_COUNT,
|
||
TOTAL_AMOUNT,TOTAL_OFFAMOUNT,CASHPAY,-1 AS TICKETBILL,BANKPAY,
|
||
MEMBERPAY,COUPONPAY,-1 AS OTHERPAY,CONTRIBUTION_AMOUNT,
|
||
SELLWORKER_CODE AS ENDPERSONCODE,PAYMENT_DETAILS
|
||
FROM HIGHWAY_EXCHANGE.T_PERSONSELL_NEW
|
||
WHERE SERVERPARTCODE = '{ServerCode}' AND SHOPCODE = '{ShopCode}' AND
|
||
ENDACCOUNT_CODE = '{row["ENDACCOUNT_CODE"].ToString()}'
|
||
ORDER BY PERSONSELL_ID ASC").Tables[0];
|
||
|
||
DataTable _Table = oracleHelper.ExcuteSqlGetDataSet(
|
||
$@"SELECT PERSONSELL_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,
|
||
STARTDATE,ENDDATE,CASHWORKER_CODE AS SELLWORKER_CODE,
|
||
TICKETCOUNT AS TICKET_COUNT,TOTALCOUNT AS TOTAL_COUNT,
|
||
TOTALSELLAMOUNT AS TOTAL_AMOUNT,TOTALOFFAMOUNT AS TOTAL_OFFAMOUNT,
|
||
CASH AS CASHPAY,TICKETBILL,CREDITCARD AS BANKPAY,VIPPERSON AS MEMBERPAY,
|
||
COSTBILL AS COUPONPAY,OTHERPAY,CASHPAY AS CONTRIBUTION_AMOUNT,
|
||
ENDPERSONCODE,'' AS PAYMENT_DETAILS
|
||
FROM HIGHWAY_EXCHANGE.T_PERSONSELL
|
||
WHERE SERVERPARTCODE = '{ServerCode}' AND SHOPCODE = '{ShopCode}' AND
|
||
STARTDATE >= TO_DATE('{row["STARTDATE"].ToString()}','YYYY/MM/DD HH24:MI:SS') AND
|
||
ENDDATE <= TO_DATE('{row["ENDDATE"].ToString()}','YYYY/MM/DD HH24:MI:SS')
|
||
ORDER BY PERSONSELL_ID ASC").Tables[0];
|
||
|
||
person = ConvertOraclTableToDoNetTable(person);
|
||
_Table = ConvertOraclTableToDoNetTable(_Table);
|
||
person.Merge(_Table);
|
||
foreach (DataRow _DataRow in person.Rows)
|
||
{
|
||
_strTemp = "";
|
||
for (int i = 0; i < person.Columns.Count; i++)
|
||
{
|
||
if (person.Columns[i].ColumnName != "TICKETBILL" && person.Columns[i].ColumnName !=
|
||
"OTHERPAY" && person.Columns[i].ColumnName != "PAYMENT_DETAILS")
|
||
{
|
||
_strTemp += (_strTemp == "" ? "" : "|") + (person.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(_DataRow[i]).ToString("yyyyMMddHHmmss") :
|
||
_DataRow[i].ToString().Replace(".00", ""));
|
||
}
|
||
else
|
||
{
|
||
string[] MovePay = row["PAYMENT_DETAILS"].ToString().Split(',');
|
||
Dictionary<string, string> _MobilePayList = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||
for (int k = 0; k < MovePay.Length; k++)
|
||
{
|
||
if (MovePay[k].Split(':').Length > 1)
|
||
{
|
||
_MobilePayList.Add(MovePay[k].Split(':')[0], MovePay[k].Split(':')[1]);
|
||
}
|
||
}
|
||
switch (person.Columns[i].ColumnName)
|
||
{
|
||
case "TICKETBILL":
|
||
if (row["TICKETBILL"].ToString() == "-1")
|
||
{
|
||
if (_MobilePayList.ContainsKey("WECHATPAY"))
|
||
{
|
||
_strTemp += "|" + _MobilePayList["WECHATPAY"].Replace(".00", "");
|
||
}
|
||
else
|
||
{
|
||
_strTemp += "|0";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_strTemp += (_strTemp == "" ? "" : "|") + (person.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(_DataRow[i]).ToString("yyyyMMddHHmmss") :
|
||
_DataRow[i].ToString().Replace(".00", ""));
|
||
}
|
||
break;
|
||
case "OTHERPAY":
|
||
if (row["OTHERPAY"].ToString() == "-1")
|
||
{
|
||
if (_MobilePayList.ContainsKey("ALIPAY"))
|
||
{
|
||
_strTemp += "|" + _MobilePayList["ALIPAY"].Replace(".00", "");
|
||
}
|
||
else
|
||
{
|
||
_strTemp += "|0";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_strTemp += (_strTemp == "" ? "" : "|") + (person.Columns[i].DataType.ToString() ==
|
||
"System.DateTime" ? Convert.ToDateTime(_DataRow[i]).ToString("yyyyMMddHHmmss") :
|
||
_DataRow[i].ToString().Replace(".00", ""));
|
||
}
|
||
break;
|
||
case "PAYMENT_DETAILS":
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
_strPersonSell += (_strPersonSell == "" ? "" : ",") + _strTemp;
|
||
}
|
||
#endregion
|
||
DataRow _row = _DataTable.NewRow();
|
||
_row["id"] = row["endaccount_id"];
|
||
_row["startdate"] = row["startdate"];
|
||
_row["enddate"] = row["enddate"];
|
||
_row["endaccountstr"] = _strEndAccount;
|
||
_row["personsellstr"] = _strPersonSell;
|
||
_row["flag"] = row["endaccount_type"];
|
||
_DataTable.Rows.Add(_row);
|
||
//}
|
||
string MD5 = "", strMD5 = "";
|
||
for (int i = 0; i < _DataTable.Rows.Count; i++)
|
||
{
|
||
strMD5 += (strMD5 == "" ? "" : ",") + _DataTable.Rows[i]["endaccountstr"].ToString();
|
||
}
|
||
MD5 = CreateMD5(strMD5);
|
||
for (int i = 0; i < _DataTable.Rows.Count; i++)
|
||
{
|
||
_DataTable.Rows[i]["checkMD5"] = MD5;
|
||
}
|
||
checkCode = MD5;
|
||
}
|
||
return _DataTable;
|
||
}
|
||
#endregion
|
||
|
||
#region 创建md5 16位大写加密
|
||
private static string CreateMD5(string text)
|
||
{
|
||
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
|
||
//换成utf8后对于中文加密也适用
|
||
byte[] output = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
|
||
string pass2md5 = BitConverter.ToString(output, 4, 8).Replace("-", "");
|
||
//pass2md5 = pass2md5.ToUpper();
|
||
return pass2md5;
|
||
}
|
||
#endregion
|
||
|
||
/// <summary>
|
||
/// 转换DataTable字段类型
|
||
/// </summary>
|
||
/// <param name="table"></param>
|
||
/// <returns></returns>
|
||
private static DataTable ConvertOraclTableToDoNetTable(DataTable table)
|
||
{
|
||
DataTable dt = new DataTable();
|
||
foreach (DataColumn dc in table.Columns)
|
||
{
|
||
DataColumn column = new DataColumn();
|
||
column.DataType = GetDataType(dc.DataType);
|
||
column.ColumnName = dc.ColumnName;
|
||
column.Caption = dc.Caption;
|
||
dt.Columns.Add(column);
|
||
}
|
||
dt.TableName = table.TableName;
|
||
dt.Merge(table, false, MissingSchemaAction.Ignore);
|
||
return dt;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 字段类型
|
||
/// </summary>
|
||
/// <param name="dataType"></param>
|
||
/// <returns></returns>
|
||
private static Type GetDataType(Type dataType)
|
||
{
|
||
switch (dataType.ToString())
|
||
{
|
||
case "System.Double":
|
||
return System.Type.GetType("System.Decimal");
|
||
case "System.Int32":
|
||
return System.Type.GetType("System.Decimal");
|
||
case "System.Int16":
|
||
return System.Type.GetType("System.Decimal");
|
||
case "System.Int64":
|
||
return System.Type.GetType("System.Decimal");
|
||
default:
|
||
return dataType;
|
||
}
|
||
}
|
||
}
|
||
}
|