2025-03-28 09:49:56 +08:00

635 lines
36 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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