635 lines
36 KiB
C#
635 lines
36 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Configuration;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using SuperMap.RealEstate.ServiceModel;
|
||
using SuperMap.RealEstate.Coop.Merchant.Business;
|
||
using Transmission.SDK;
|
||
using HZQR.Common;
|
||
|
||
namespace DataBaseProcessing
|
||
{
|
||
public partial class MainForm : Form
|
||
{
|
||
public MainForm()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
|
||
private void MainForm_Load(object sender, EventArgs e)
|
||
{
|
||
string OracleConnStr = ConfigurationManager.AppSettings["OracleConnStr"].ToString();
|
||
OracleHelper oracleHelper = new OracleHelper(OracleConnStr.Split(',')[0],
|
||
OracleConnStr.Split(',')[1], OracleConnStr.Split(',')[2], OracleConnStr.Split(',')[3]);
|
||
string SQLString = "SELECT * FROM COOP_MERCHANT.T_WRONGDATA";
|
||
DataTable dataTable = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
|
||
Transaction transaction = new Transaction();
|
||
try
|
||
{
|
||
COMMODITY _COMMODITY = new COMMODITY(transaction);
|
||
|
||
List<BRAND> BRANDList = new BRAND(transaction).FillCollection("WHERE OWNERUNIT_ID = 911");
|
||
List<COMMODITY> COMMODITYList = _COMMODITY.FillCollection(
|
||
"WHERE OWNERUNIT_ID = 911 AND COMMODITY_NATURE = 5070 AND COMMODITY_STATE = 1 AND UPPER_STATE = 1");
|
||
List<USERDEFINEDTYPE> TypeList = new USERDEFINEDTYPE(transaction).FillCollection(
|
||
"WHERE OWNERUNIT_ID = 911 AND GOODSTYPE = 4000");
|
||
SQLString = "SELECT * FROM COOP_MERCHANT.T_RTUSERDEFINEDTYPE WHERE COMMODITY_ID IS NOT NULL";
|
||
DataTable dtRTType = _COMMODITY.ExecuteDataTable(SQLString);
|
||
|
||
|
||
foreach (DataRow dataRow in dataTable.Rows)
|
||
{
|
||
foreach (COMMODITY Commodity in COMMODITYList.FindAll(o =>
|
||
o.COMMODITY_BARCODE == dataRow["TABLE_BARCODE"].ToString()))
|
||
{
|
||
int updateCount = 0;
|
||
bool UpdateType = false, UpdateBrand = false;
|
||
List<string> types = dataRow["TABLE_NAME"].ToString().Split(',').Distinct().ToList();
|
||
foreach (string typename in types)
|
||
{
|
||
if (TypeList.Exists(o => o.USERDEFINEDTYPE_NAME == typename))
|
||
{
|
||
USERDEFINEDTYPE _USERDEFINEDTYPE = TypeList.Find(o => o.USERDEFINEDTYPE_NAME == typename);
|
||
if (dtRTType.Select("COMMODITY_ID = " + Commodity.KeyID +
|
||
" and USERDEFINEDTYPE_ID = " + _USERDEFINEDTYPE.KeyID).Length == 0)
|
||
{
|
||
SQLString = string.Format(@"INSERT INTO COOP_MERCHANT.T_RTUSERDEFINEDTYPE (
|
||
RTUSERDEFINEDTYPE_ID,USERDEFINEDTYPE_ID,PROVINCE_CODE,COMMODITY_ID)
|
||
VALUES (COOP_MERCHANT.SEQ_RTUSERDEFINEDTYPE.NEXTVAL,{0},530000,{1})",
|
||
_USERDEFINEDTYPE.KeyID, Commodity.KeyID);
|
||
Commodity.ExecuteNonQuery(SQLString, null);
|
||
|
||
DataRow newRt = dtRTType.NewRow();
|
||
newRt["USERDEFINEDTYPE_ID"] = _USERDEFINEDTYPE.KeyID;
|
||
newRt["COMMODITY_ID"] = Commodity.KeyID;
|
||
dtRTType.Rows.Add(newRt);
|
||
|
||
UpdateType = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (Commodity.BRAND_NAME != dataRow["TABLE_CODE"].ToString() && BRANDList.Exists(
|
||
o => o.BRAND_NAME == dataRow["TABLE_CODE"].ToString()))
|
||
{
|
||
BRAND _BRAND = BRANDList.Find(o => o.BRAND_NAME == dataRow["TABLE_CODE"].ToString());
|
||
Commodity.BRAND_ID = _BRAND.BRAND_ID;
|
||
Commodity.BRAND_NAME = _BRAND.BRAND_NAME;
|
||
|
||
UpdateBrand = true;
|
||
}
|
||
|
||
if (UpdateBrand || UpdateType)
|
||
{
|
||
Commodity.OPERATE_DATE = DateTime.Now;
|
||
Commodity.Update();
|
||
|
||
SQLString = "UPDATE COOP_MERCHANT.T_WRONGDATA SET TABLE_ID = " + updateCount +
|
||
" WHERE TABLE_BARCODE = '" + dataRow["TABLE_BARCODE"] + "'";
|
||
oracleHelper.ExcuteSql(SQLString);
|
||
}
|
||
}
|
||
}
|
||
transaction.Commit();
|
||
}
|
||
catch { }
|
||
finally
|
||
{
|
||
transaction.Release();
|
||
transaction.Dispose();
|
||
}
|
||
//string startMonth = ConfigurationManager.AppSettings["StartMonth"];
|
||
//string endMonth = ConfigurationManager.AppSettings["EndMonth"];
|
||
|
||
//LogUtil.WriteLog(null, "//---------------开始执行【" + startMonth + "至" + endMonth + "】的流水数据校验---------------//");
|
||
/*
|
||
string SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DATATRANSFER";
|
||
DataTable dtOwnerName = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
foreach (DataRow drOwnerName in dtOwnerName.Select("", "OWNER_NAME"))
|
||
{
|
||
string ownerName = drOwnerName["OWNER_NAME"].ToString();
|
||
|
||
SQLString = "SELECT * FROM SYS.DBA_ALL_TABLES WHERE OWNER = '" + ownerName + "'";
|
||
DataTable dtDataBase = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
dtDataBase.DefaultView.RowFilter = "TABLE_NAME not like '%_TEMP' and (TABLE_NAME like 'T_SELLDATA%' or " +
|
||
"TABLE_NAME like 'T_SELLMASTER%' or TABLE_NAME like 'T_YSSELLMASTER%')";
|
||
dtDataBase = dtDataBase.DefaultView.ToTable();
|
||
|
||
#region 添加表字段、索引
|
||
//foreach (DataRow drDataBase in dtDataBase.Rows)
|
||
//{
|
||
// SQLString = "SELECT 1 FROM SYS.DBA_TAB_COLUMNS WHERE OWNER = '" + ownerName +
|
||
// "' AND TABLE_NAME = '" + drDataBase["TABLE_NAME"] + "' AND COLUMN_NAME = 'STATISTICS_DATE'";
|
||
// if (oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0].Rows.Count == 0)
|
||
// {
|
||
// SQLString = "ALTER TABLE " + ownerName + "." + drDataBase["TABLE_NAME"] + " ADD (STATISTICS_DATE NUMBER(8,0))";
|
||
// oracleHelper.ExecuteSqlTran(SQLString);
|
||
|
||
// LogUtil.WriteLog(null, "数据库表【" + ownerName + "." + drDataBase["TABLE_NAME"] +
|
||
// "】字段营业日【STATISTICS_DATE】添加成功", DateTime.Now.ToString("yyyyMMdd") + "_AddColumn");
|
||
// }
|
||
|
||
// SQLString = "SELECT 1 FROM SYS.DBA_INDEXES WHERE OWNER = '" + ownerName +
|
||
// "' AND INDEX_NAME = 'INDEX_" + drDataBase["TABLE_NAME"].ToString() + "'";
|
||
// DataTable dtIndex = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
// if (dtIndex.Rows.Count == 0)
|
||
// {
|
||
// SQLString = string.Format(@"CREATE INDEX {0}.INDEX_{1}
|
||
// ON {0}.{2} (SERVERPARTCODE,SHOPCODE,MACHINECODE,STATISTICS_DATE)
|
||
// PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE {0}
|
||
// STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT) LOGGING",
|
||
// ownerName, drDataBase["TABLE_NAME"].ToString(), drDataBase["TABLE_NAME"]);
|
||
// oracleHelper.ExcuteSql(SQLString);
|
||
|
||
// LogUtil.WriteLog(null, "数据库表【" + ownerName + "." + drDataBase["TABLE_NAME"] +
|
||
// "】索引添加成功", DateTime.Now.ToString("yyyyMMdd") + "_AddIndex");
|
||
// }
|
||
//}
|
||
#endregion
|
||
|
||
string ExcuteMonth = drOwnerName["EXCUTE_MONTH"].ToString();
|
||
for (DateTime curMonth = DateTime.Parse(endMonth);
|
||
curMonth.ToString("yyyyMM").TryParseToInt() >= DateTime.Parse(startMonth).ToString("yyyyMM").TryParseToInt();
|
||
curMonth = curMonth.AddMonths(-1))
|
||
{
|
||
try
|
||
{
|
||
RecordDif(oracleHelper, dtDataBase, ownerName, drOwnerName["SERVERPART_CODE"].ToString(), curMonth);
|
||
|
||
LogUtil.WriteLog(null, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "流水校验已执行");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogUtil.WriteLog(ex, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "流水校验失败",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog");
|
||
}
|
||
}
|
||
}
|
||
*/
|
||
//for (DateTime curMonth = DateTime.Parse(endMonth);
|
||
// curMonth.ToString("yyyyMM").TryParseToInt() >= DateTime.Parse(startMonth).ToString("yyyyMM").TryParseToInt();
|
||
// curMonth = curMonth.AddMonths(-1))
|
||
//{
|
||
// try
|
||
// {
|
||
// SuppSellMaster(oracleHelper, curMonth);
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// LogUtil.WriteLog(ex, "【" + curMonth.ToString("yyyyMM") + "】流水补录失败",
|
||
// DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog");
|
||
// }
|
||
//}
|
||
|
||
//LogUtil.WriteLog(null, "//---------------【" + startMonth + "至" + endMonth + "】的流水数据校验结束---------------//");
|
||
|
||
Environment.Exit(0);
|
||
}
|
||
|
||
#region 方法 -> 更新销售流水表结算时间
|
||
public static void UpdateSellMaster(OracleHelper oracleHelper, DataTable dtDataBase,
|
||
string ownerName, string serverpartCode, DateTime curMonth)
|
||
{
|
||
string whereSQL = "", logDesc;
|
||
whereSQL += " AND STATISTICS_DATE >= TO_DATE('" + curMonth.ToString("yyyy/MM/01") +
|
||
"','YYYY/MM/DD') AND STATISTICS_DATE < TO_DATE('" +
|
||
DateTime.Parse(curMonth.AddMonths(1).ToString("yyyy/MM/01")).AddDays(-1).ToShortDateString() + "','YYYY/MM/DD') + 1";
|
||
|
||
//查询收银系统上传的日结账期数据
|
||
string SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_ENDACCOUNTDATA WHERE SERVERPARTCODE IN ('" +
|
||
serverpartCode.Replace(",", "','") + "') AND VALID = 1 AND OPERATE_TYPE = 0" + whereSQL;
|
||
DataTable dtAccount = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
|
||
LogUtil.WriteLog(null, "【" + curMonth.ToString("yyyyMM") + "】" + ownerName + "查询到记录" + dtAccount.Rows.Count + "条");
|
||
|
||
foreach (DataRow drAccount in dtAccount.Rows)
|
||
{
|
||
DateTime StartDate = Convert.ToDateTime(drAccount["ENDACCOUNT_STARTDATE"]);
|
||
DateTime EndDate = Convert.ToDateTime(drAccount["ENDACCOUNT_DATE"]);
|
||
|
||
string StatisticsDate = drAccount["STATISTICS_DATE"].ToString().Split(' ')[0];
|
||
foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME"))
|
||
{
|
||
//根据表名称获取销售流水数据时间查询SQL
|
||
if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLDATA"))
|
||
{
|
||
whereSQL = " AND SELLDATA_DATE BETWEEN TO_DATE('" + StartDate +
|
||
"','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('" + EndDate + "','YYYY/MM/DD HH24:MI:SS')";
|
||
}
|
||
else if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLMASTER"))
|
||
{
|
||
whereSQL = " AND SELLMASTER_DATE BETWEEN TO_DATE('" + StartDate +
|
||
"','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('" + EndDate + "','YYYY/MM/DD HH24:MI:SS')";
|
||
}
|
||
else
|
||
{
|
||
whereSQL = " AND SELLMASTER_DATE BETWEEN " + StartDate.ToString("yyyyMMddHHmmss") +
|
||
" AND " + EndDate.ToString("yyyyMMddHHmmss");
|
||
}
|
||
SQLString = string.Format(@"UPDATE {0}.{1}
|
||
SET STATISTICS_DATE = {2}
|
||
WHERE SERVERPARTCODE = '{3}' AND SHOPCODE = '{4}' AND MACHINECODE = '{5}'{6}",
|
||
ownerName, drDataBase["TABLE_NAME"], Convert.ToDateTime(StatisticsDate).ToString("yyyyMMdd"),
|
||
drAccount["SERVERPARTCODE"], drAccount["SHOPCODE"], drAccount["MACHINECODE"], whereSQL);
|
||
int excuteCount = oracleHelper.ExcuteSql(SQLString);
|
||
logDesc = drAccount["SERVERPART_NAME"] + drAccount["SHOPNAME"].ToString() +
|
||
"【" + drAccount["ENDACCOUNT_DATE"] + "】" + drAccount["MACHINECODE"] +
|
||
":更新销售流水表【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】营业日为" + StatisticsDate;
|
||
LogUtil.WriteLog(null, logDesc, DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName);
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 解析日结账期冲正流水表,补充结算日期
|
||
public static void DecryptId(OracleHelper oracleHelper)
|
||
{
|
||
string SQLString;
|
||
for (int num = 0; num < 38; num++)
|
||
{
|
||
List<string> SQLStringList = new List<string>();
|
||
SQLString = @"SELECT
|
||
PROVINCE_CODE,TICKETCODE
|
||
FROM
|
||
HIGHWAY_STORAGE.T_SUPPLEMENTDATA
|
||
WHERE
|
||
ENDACCOUNT_ID IS NULL AND
|
||
ROWNUM <= 10000
|
||
GROUP BY
|
||
PROVINCE_CODE,TICKETCODE";
|
||
DataTable dtEncrypted = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
foreach (DataRow drEncrypted in dtEncrypted.Rows)
|
||
{
|
||
SQLString = string.Format(@"UPDATE HIGHWAY_STORAGE.T_SUPPLEMENTDATA SET ENDACCOUNT_ID = {0}
|
||
WHERE PROVINCE_CODE = {1} AND TICKETCODE = '{2}'", drEncrypted["TICKETCODE"].ToString().ToDecrypt(),
|
||
drEncrypted["PROVINCE_CODE"], drEncrypted["TICKETCODE"]);
|
||
SQLStringList.Add(SQLString);
|
||
}
|
||
|
||
if (SQLStringList.Count > 0)
|
||
{
|
||
try
|
||
{
|
||
oracleHelper.ExecuteSqlTran(SQLStringList);
|
||
|
||
LogUtil.WriteLog(null, "【解析流水冲正表数据】本次更新" + SQLStringList.Count + "条记录");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogUtil.WriteLog(ex, "【解析流水冲正表数据】本次更新失败",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog(null, "【解析流水冲正表数据】本次更新" + SQLStringList.Count + "条记录");
|
||
}
|
||
}
|
||
SQLString = @"UPDATE HIGHWAY_STORAGE.T_SUPPLEMENTDATA A
|
||
SET A.STATISTICS_DATE = (SELECT TO_CHAR(B.STATISTICS_DATE,'YYYYMMDD')
|
||
FROM HIGHWAY_STORAGE.T_ENDACCOUNTDATA B
|
||
WHERE A.PROVINCE_CODE = B.PROVINCE_CODE AND A.ENDACCOUNT_ID = B.ENDACCOUNT_ID)
|
||
WHERE A.STATISTICS_DATE IS NULL";
|
||
int ExcuteCount = oracleHelper.ExcuteSql(SQLString);
|
||
LogUtil.WriteLog(null, "【更新流水冲正表结算日期】本次更新" + ExcuteCount + "条记录");
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 检索流水数据表,获取缺失结算日期的服务区
|
||
public static void QueryNullDate(OracleHelper oracleHelper, DataTable dtDataBase, string ownerName)
|
||
{
|
||
string SQLString;
|
||
|
||
foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME"))
|
||
{
|
||
SQLString = string.Format(@"SELECT SERVERPARTCODE,COUNT(1) AS ERROR_COUNT FROM {0}.{1}
|
||
WHERE STATISTICS_DATE IS NULL GROUP BY SERVERPARTCODE", ownerName, drDataBase["TABLE_NAME"]);
|
||
DataTable dtError = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
if (dtError.Rows.Count > 0)
|
||
{
|
||
string ServerpartCode = "";
|
||
foreach (DataRow drCode in dtError.Select("", "SERVERPARTCODE"))
|
||
{
|
||
ServerpartCode += (ServerpartCode == "" ? "" : ",") + drCode[0];
|
||
}
|
||
SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DATATRANSFER_ERROR (
|
||
DATATRANSFER_ERROR_ID,OWNER_NAME,TABLE_NAME,SERVERPART_CODE,UNEXCUTE_COUNT)
|
||
VALUES (HIGHWAY_STORAGE.SEQ_DATATRANSFER_ERROR.NEXTVAL,
|
||
'{0}','{1}','{2}',{3})", ownerName, drDataBase["TABLE_NAME"],
|
||
ServerpartCode, dtError.Compute("sum(ERROR_COUNT)", ""));
|
||
|
||
try
|
||
{
|
||
oracleHelper.ExcuteSql(SQLString);
|
||
|
||
LogUtil.WriteLog(null, "【" + ownerName + "." + drDataBase["TABLE_NAME"] +
|
||
"】本次已检索,异常记录" + dtError.Compute("sum(ERROR_COUNT)", "") + "条");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogUtil.WriteLog(ex, "【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】本次检索失败",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_ErrorLog");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
LogUtil.WriteLog(null, "【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】本次已检索,无异常记录");
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 记录流水差异数据
|
||
public static void RecordDif(OracleHelper oracleHelper, DataTable dtDataBase,
|
||
string ownerName, string serverpartCode, DateTime curMonth)
|
||
{
|
||
string SQLString;
|
||
List<string> SQLStringList = new List<string>();
|
||
string ExtraName = ownerName.Contains("GXNN") ? "_GXNN" : "";
|
||
//查询服务区信息
|
||
SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_SERVERPART" + ExtraName;
|
||
DataTable dtServerpart = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
//查询门店信息
|
||
SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP" + ExtraName;
|
||
DataTable dtShop = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
//查询日结营收数据
|
||
SQLString = string.Format(@"SELECT
|
||
SERVERPARTCODE,SHOPCODE,
|
||
TO_CHAR(STATISTICS_DATE,'YYYYMMDD') AS STATISTICS_DATE,
|
||
SUM(CASHPAY) AS REVENUE_AMOUNT,
|
||
SUM(TOTALSELLAMOUNT) AS TOTALSELL_AMOUNT,
|
||
SUM(CORRECT_AMOUNT) AS SUPPLEMENT_AMOUNT,
|
||
SUM(NVL(FACT_AMOUNT + NVL(SALE_CORRECT,0),
|
||
NVL(TICKETBILL,0) + NVL(OTHERPAY,0))) AS PAYMENT_AMOUNT
|
||
FROM
|
||
HIGHWAY_STORAGE.T_ENDACCOUNTDATA A
|
||
WHERE
|
||
A.VALID = 1 AND A.OPERATE_TYPE = 0 AND
|
||
A.SERVERPARTCODE IN ('{0}') AND
|
||
A.STATISTICS_DATE >= TO_DATE('{1}','YYYY/MM/DD') AND
|
||
A.STATISTICS_DATE < TO_DATE('{2}','YYYY/MM/DD')
|
||
GROUP BY
|
||
SERVERPARTCODE,SHOPCODE,TO_CHAR(STATISTICS_DATE,'YYYYMMDD')",
|
||
serverpartCode, curMonth.ToString("yyyy/MM/01"),
|
||
curMonth.AddMonths(1).ToString("yyyy/MM/01"));
|
||
DataTable dtAccount = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
//查询日度营收校验表数据
|
||
SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DAILYREVENUE WHERE STATISTICS_DATE BETWEEN " +
|
||
curMonth.ToString("yyyyMM") + "01 AND " + curMonth.ToString("yyyyMM") + "31";
|
||
DataTable dtDailyRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
|
||
#region 遍历销售流水表,生成日度校验数据
|
||
foreach (DataRow drDataBase in dtDataBase.Select("", "TABLE_NAME"))
|
||
{
|
||
//根据表名称获取销售流水数据时间查询SQL
|
||
if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLDATA"))
|
||
{
|
||
SQLString = string.Format(@"SELECT
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE,
|
||
SUM(FACTAMOUNT),SUM(NVL(TICKETBILL,0) + NVL(OTHERPAY,0))
|
||
FROM
|
||
{0}.{1}
|
||
WHERE
|
||
STATISTICS_DATE BETWEEN {2}01 AND {2}31
|
||
GROUP BY
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE",
|
||
ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName);
|
||
}
|
||
else if (drDataBase["TABLE_NAME"].ToString().StartsWith("T_SELLMASTER"))
|
||
{
|
||
SQLString = string.Format(@"SELECT
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE,
|
||
SUM(SELLMASTER_AMOUNT),SUM(NVL(MOBILEPAY,0))
|
||
FROM
|
||
{0}.{1}
|
||
WHERE
|
||
STATISTICS_DATE BETWEEN {2}01 AND {2}31
|
||
GROUP BY
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE",
|
||
ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName);
|
||
}
|
||
else
|
||
{
|
||
SQLString = string.Format(@"SELECT
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE,
|
||
SUM(SELLMASTER_AMOUNT),
|
||
SUM(CASE WHEN PAYMENT_GROUP = 1 THEN TO_NUMBER(SUBSTR(SELLMASTER_DESC,INSTR(SELLMASTER_DESC,':',1) + 1))
|
||
WHEN PAYMENT_TYPE > 1000 THEN SELLMASTER_AMOUNT END)
|
||
FROM
|
||
{0}.{1}
|
||
WHERE
|
||
SELLMASTER_STATE > 0 AND
|
||
STATISTICS_DATE BETWEEN {2}01 AND {2}31
|
||
GROUP BY
|
||
SERVERPARTCODE,SHOPCODE,STATISTICS_DATE",
|
||
ownerName, drDataBase["TABLE_NAME"], curMonth.ToString("yyyyMM"), ExtraName);
|
||
}
|
||
DataTable dtRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
|
||
if (dtRevenue.Rows.Count > 0)
|
||
{
|
||
foreach (DataRow drRevenue in dtRevenue.Select("", "SERVERPARTCODE,SHOPCODE,STATISTICS_DATE"))
|
||
{
|
||
string ServerpartId = "NULL", ServerpartName = "", ShopName = "",
|
||
selectedSQL = "STATISTICS_DATE = " + drRevenue["STATISTICS_DATE"] +
|
||
" and SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] +
|
||
"' and SHOPCODE = '" + drRevenue["SHOPCODE"] +
|
||
"' and TABLE_NAME = '" + ownerName + "." + drDataBase["TABLE_NAME"] + "'",
|
||
computeSQL = "STATISTICS_DATE = '" + drRevenue["STATISTICS_DATE"] +
|
||
"' and SERVERPARTCODE = '" + drRevenue["SERVERPARTCODE"] +
|
||
"' and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'";
|
||
//获取服务区内码、服务区名称
|
||
if (dtServerpart.Select("SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] + "'").Length > 0)
|
||
{
|
||
DataRow drServerpart = dtServerpart.Select("SERVERPART_CODE = '" + drRevenue["SERVERPARTCODE"] + "'")[0];
|
||
ServerpartId = drServerpart["SERVERPART_ID"].ToString();
|
||
ServerpartName = drServerpart["SERVERPART_NAME"].ToString();
|
||
//获取门店名称
|
||
if (dtShop.Select("SERVERPART_ID = " + ServerpartId +
|
||
" and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'").Length > 0)
|
||
{
|
||
DataRow drShop = dtShop.Select("SERVERPART_ID = " + ServerpartId +
|
||
" and SHOPCODE = '" + drRevenue["SHOPCODE"] + "'")[0];
|
||
ShopName = drShop["SHOPNAME"].ToString();
|
||
}
|
||
}
|
||
|
||
if (dtDailyRevenue.Select(selectedSQL).Length > 0)
|
||
{
|
||
SQLString = string.Format(@"UPDATE HIGHWAY_STORAGE.T_DAILYREVENUE
|
||
SET SELLMASTER_AMOUNT = {1},MOBILEPAY_AMOUNT = {2},
|
||
REVENUE_AMOUNT = {3},TOTALSELL_AMOUNT = {4},
|
||
SUPPLEMENT_AMOUNT = {5},PAYMENT_AMOUNT = {6}
|
||
WHERE DAILYREVENUE_ID = {0}", dtDailyRevenue.Select(selectedSQL)[0]["DAILYREVENUE_ID"],
|
||
drRevenue[3].TryParseToDecimal(), drRevenue[4].TryParseToDecimal(),
|
||
dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal());
|
||
}
|
||
else
|
||
{
|
||
SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DAILYREVENUE (
|
||
DAILYREVENUE_ID,STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,
|
||
SERVERPART_NAME,SHOPCODE,SHOPNAME,SELLMASTER_AMOUNT,MOBILEPAY_AMOUNT,
|
||
REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT,TABLE_NAME)
|
||
VALUES (HIGHWAY_STORAGE.SEQ_DAILYREVENUE.NEXTVAL,
|
||
{0},{1},'{2}','{3}','{4}','{5}',{6},{7},{8},{9},{10},{11},'{12}.{13}')",
|
||
drRevenue[2], ServerpartId, drRevenue[0], ServerpartName, drRevenue[1], ShopName,
|
||
drRevenue[3].TryParseToDecimal(), drRevenue[4].TryParseToDecimal(),
|
||
dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
ownerName, drDataBase["TABLE_NAME"]);
|
||
}
|
||
|
||
SQLStringList.Add(SQLString);
|
||
}
|
||
|
||
if (SQLStringList.Count > 0)
|
||
{
|
||
oracleHelper.ExecuteSqlTran(SQLStringList);
|
||
}
|
||
|
||
LogUtil.WriteLog(null, "本次更新【" + ownerName + "." + drDataBase["TABLE_NAME"] + "】" +
|
||
SQLStringList.Count + "条流水校验记录", DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName);
|
||
}
|
||
SQLStringList.Clear();
|
||
}
|
||
#endregion
|
||
|
||
//重新查询日度营收校验表数据
|
||
SQLString = "SELECT * FROM HIGHWAY_STORAGE.T_DAILYREVENUE WHERE STATISTICS_DATE BETWEEN " +
|
||
curMonth.ToString("yyyyMM") + "01 AND " + curMonth.ToString("yyyyMM") + "31";
|
||
dtDailyRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
foreach (DataRow drDate in dtAccount.DefaultView.ToTable(true, "SERVERPARTCODE",
|
||
"SHOPCODE", "STATISTICS_DATE").Select("", "STATISTICS_DATE"))
|
||
{
|
||
string selectedSQL = "STATISTICS_DATE = " + drDate["STATISTICS_DATE"] +
|
||
" and SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] +
|
||
"' and SHOPCODE = '" + drDate["SHOPCODE"] + "'";
|
||
if (dtDailyRevenue.Select(selectedSQL).Length == 0)
|
||
{
|
||
string ServerpartId = "NULL", ServerpartName = "", ShopName = "",
|
||
computeSQL = "STATISTICS_DATE = '" + drDate["STATISTICS_DATE"] +
|
||
"' and SERVERPARTCODE = '" + drDate["SERVERPARTCODE"] +
|
||
"' and SHOPCODE = '" + drDate["SHOPCODE"] + "'";
|
||
//获取服务区内码、服务区名称
|
||
if (dtServerpart.Select("SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] + "'").Length > 0)
|
||
{
|
||
DataRow drServerpart = dtServerpart.Select("SERVERPART_CODE = '" + drDate["SERVERPARTCODE"] + "'")[0];
|
||
ServerpartId = drServerpart["SERVERPART_ID"].ToString();
|
||
ServerpartName = drServerpart["SERVERPART_NAME"].ToString();
|
||
//获取门店名称
|
||
if (dtShop.Select("SERVERPART_ID = " + ServerpartId +
|
||
" and SHOPCODE = '" + drDate["SHOPCODE"] + "'").Length > 0)
|
||
{
|
||
DataRow drShop = dtShop.Select("SERVERPART_ID = " + ServerpartId +
|
||
" and SHOPCODE = '" + drDate["SHOPCODE"] + "'")[0];
|
||
ShopName = drShop["SHOPNAME"].ToString();
|
||
}
|
||
}
|
||
SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_DAILYREVENUE (
|
||
DAILYREVENUE_ID,STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,
|
||
SERVERPART_NAME,SHOPCODE,SHOPNAME,SELLMASTER_AMOUNT,MOBILEPAY_AMOUNT,
|
||
REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT)
|
||
VALUES (HIGHWAY_STORAGE.SEQ_DAILYREVENUE.NEXTVAL,
|
||
{0},{1},'{2}','{3}','{4}','{5}',{6},{7},{8},{9},{10},{11})",
|
||
drDate[2], ServerpartId, drDate[0], ServerpartName, drDate[1], ShopName, 0, 0,
|
||
dtAccount.Compute("sum(REVENUE_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(TOTALSELL_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(SUPPLEMENT_AMOUNT)", computeSQL).TryParseToDecimal(),
|
||
dtAccount.Compute("sum(PAYMENT_AMOUNT)", computeSQL).TryParseToDecimal());
|
||
SQLStringList.Add(SQLString);
|
||
}
|
||
}
|
||
if (SQLStringList.Count > 0)
|
||
{
|
||
LogUtil.WriteLog(null, "本次补充【" + ownerName + "】" + SQLStringList.Count + "条无流水校验记录",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_" + ownerName);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 补充流水差异数据
|
||
public static void SuppSellMaster(OracleHelper oracleHelper, DateTime curMonth)
|
||
{
|
||
List<string> SQLStringList = new List<string>();
|
||
|
||
#region 查询流水差异表数据
|
||
string SQLString = string.Format(@"SELECT
|
||
STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,
|
||
SHOPCODE,SHOPNAME,SUM(SELLMASTER_AMOUNT) AS SELLMASTER_AMOUNT,
|
||
SUM(MOBILEPAY_AMOUNT) AS MOBILEPAY_AMOUNT,
|
||
REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT
|
||
FROM
|
||
HIGHWAY_STORAGE.T_DAILYREVENUE
|
||
WHERE
|
||
STATISTICS_DATE BETWEEN {0}01 AND {0}31
|
||
GROUP BY
|
||
STATISTICS_DATE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,SHOPCODE,SHOPNAME,
|
||
REVENUE_AMOUNT,TOTALSELL_AMOUNT,SUPPLEMENT_AMOUNT,PAYMENT_AMOUNT", curMonth.ToString("yyyyMM"));
|
||
DataTable dtDifRevenue = oracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0];
|
||
#endregion
|
||
|
||
//对比移动支付金额或者销售金额不一致的数据,进行数据补偿
|
||
string selectedSQL = "SELLMASTER_AMOUNT <> TOTALSELL_AMOUNT or MOBILEPAY_AMOUNT <> PAYMENT_AMOUNT";
|
||
if (dtDifRevenue.Select(selectedSQL).Length > 0)
|
||
{
|
||
Random random = new Random();
|
||
|
||
int num = 1, cuDate = 0;
|
||
foreach (DataRow drDifRevenue in dtDifRevenue.Select(selectedSQL, "STATISTICS_DATE desc"))
|
||
{
|
||
if (cuDate != drDifRevenue["STATISTICS_DATE"].TryParseToInt())
|
||
{
|
||
num = 1;
|
||
cuDate = drDifRevenue["STATISTICS_DATE"].TryParseToInt();
|
||
}
|
||
|
||
decimal difRevenue = drDifRevenue["TOTALSELL_AMOUNT"].TryParseToDecimal() -
|
||
drDifRevenue["SELLMASTER_AMOUNT"].TryParseToDecimal(),
|
||
difMobilePay = drDifRevenue["PAYMENT_AMOUNT"].TryParseToDecimal() -
|
||
drDifRevenue["MOBILEPAY_AMOUNT"].TryParseToDecimal();
|
||
LogUtil.WriteLog(null, drDifRevenue["SERVERPART_NAME"] + drDifRevenue["SHOPNAME"].ToString() +
|
||
"【" + drDifRevenue["STATISTICS_DATE"] + "】存在差异:实收金额" + difRevenue +
|
||
"元,移动支付" + difMobilePay + "元", DateTime.Now.ToString("yyyyMMdd") + "_SuppSellMaster");
|
||
int avgPrice = random.Next(20, 40);
|
||
|
||
#region 生成补偿流水差异数据SQL
|
||
SQLString = string.Format(@"INSERT INTO HIGHWAY_STORAGE.T_SELLMASTER_SUPP (
|
||
SELLMASTER_CODE,SERVERPARTCODE,SERVERPART_NAME,SHOPCODE,SHOPNAME,
|
||
SELLMASTER_DATE,TICKET_CODE,SELLMASTER_COUNT,SELLMASTER_OFFPRICE,
|
||
SELLMASTER_AMOUNT,CASH_AMOUNT,MOBILEPAY_AMOUNT,SELLMASTER_STATE,SELLMASTER_DESC)
|
||
VALUES ('{0}','{1}','{2}','{3}','{4}',{5},'{6}',{7},0,{8},{9},{10},1,NULL)",
|
||
drDifRevenue["SERVERPART_CODE"] + "" + drDifRevenue["SHOPCODE"] + "000000" +
|
||
drDifRevenue["STATISTICS_DATE"] + "000000", drDifRevenue["SERVERPART_CODE"],
|
||
drDifRevenue["SERVERPART_NAME"], drDifRevenue["SHOPCODE"], drDifRevenue["SHOPNAME"],
|
||
drDifRevenue["STATISTICS_DATE"] + "000000", num.ToString().PadLeft(5, '0'),
|
||
Math.Ceiling(difRevenue / avgPrice), difRevenue, difRevenue - difMobilePay, difMobilePay);
|
||
#endregion
|
||
|
||
SQLStringList.Add(SQLString);
|
||
num++;
|
||
}
|
||
}
|
||
|
||
if (SQLStringList.Count > 0)
|
||
{
|
||
oracleHelper.ExecuteSqlTran(SQLStringList);
|
||
}
|
||
LogUtil.WriteLog(null, "本次补充【" + curMonth.ToString("yyyyMM") + "】" + SQLStringList.Count + "条流水补录记录",
|
||
DateTime.Now.ToString("yyyyMMdd") + "_SuppSellMaster");
|
||
}
|
||
#endregion
|
||
}
|
||
}
|