557 lines
41 KiB
C#
557 lines
41 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using Transmission.SDK;
|
|
|
|
namespace TransmissionClient
|
|
{
|
|
public class BigData
|
|
{
|
|
public event DelegateResult ResultEvent;
|
|
public delegate void DelegateResult(DateTime triggerTime, string resultMessage);
|
|
|
|
/// <summary>
|
|
/// 客单区段统计
|
|
/// </summary>
|
|
/// <param name="localOracle">数据库连接类</param>
|
|
public void CreateSalesAnalysis(OracleHelper localOracle)
|
|
{
|
|
try
|
|
{
|
|
string _ServerPartName = "";
|
|
decimal _AnalysisAmount = 10;
|
|
int _AnalysisAge = 10;
|
|
int _AnalysisTime = 60;
|
|
int _TotalCount = 0;
|
|
int _InsrtCount = 0;
|
|
ResultEvent(DateTime.Now, "正在启动昨日客单区段数据统计......");
|
|
DataTable _ConfigTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAMOUNT',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAMOUNT,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAGE',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAGE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISTIME',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISTIME
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B
|
|
LEFT JOIN HIGHWAY_EXCHANGE.T_BUSINESSCONFIG C
|
|
ON B.SERVERPARTCODE = C.SERVERPARTCODE AND B.BUSINESSTYPE = C.BUSINESSTYPE AND
|
|
UPPER(C.CONFIGURATION_NAME) IN ('ANALYSISAMOUNT','ANALYSISAGE','ANALYSISTIME')
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.BUSINESSTYPE IS NOT NULL
|
|
GROUP BY A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE
|
|
ORDER BY B.SERVERPARTCODE").Tables[0];
|
|
if (_ConfigTable.Rows.Count > 0)
|
|
{
|
|
DataTable _SalesAnalysisTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SALESANALYSIS_CODE
|
|
FROM HIGHWAY_EXCHANGE.T_SALESANALYSIS A
|
|
WHERE TRUNC(A.SALESANALYSIS_DATE) = TRUNC(SYSDATE) - 1").Tables[0];
|
|
for (int i = 0; i < _ConfigTable.Rows.Count; i++)
|
|
{
|
|
//读取配置
|
|
string _ServerPartCode = _ConfigTable.Rows[i]["SERVERPARTCODE"].ToString();
|
|
string _BusinessType = _ConfigTable.Rows[i]["BUSINESSTYPE"].ToString();
|
|
|
|
decimal.TryParse(_ConfigTable.Rows[i]["ANALYSISAMOUNT"].ToString(), out _AnalysisAmount);
|
|
if (_AnalysisAmount <= 0)
|
|
{
|
|
_AnalysisAmount = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISAGE"].ToString(), out _AnalysisAge);
|
|
if (_AnalysisAge <= 0)
|
|
{
|
|
_AnalysisAge = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISTIME"].ToString(), out _AnalysisTime);
|
|
if (_AnalysisTime <= 0 || _AnalysisTime > 60)
|
|
{
|
|
_AnalysisTime = 60;
|
|
}
|
|
|
|
if (_ConfigTable.Rows[i]["SERVERPART_NAME"].ToString() != _ServerPartName)
|
|
{
|
|
_ServerPartName = _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString();
|
|
ResultEvent(DateTime.Now, $"正在统计[{ _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString()}]昨日客单区段数据......");
|
|
}
|
|
//开始统计
|
|
List<Model.SALESANALYSIS> _SalesAnalysisList =
|
|
(List<Model.SALESANALYSIS>)DataTableHelper.DataTableToIList<Model.SALESANALYSIS>(localOracle.ExcuteSqlGetDataSet(
|
|
$@"SELECT T.SERVERPARTCODE||T.SHOPCODE||TO_CHAR(TRUNC(T.SELLMASTER_DATE),'YYYYMMDDHH24MISS')||'1000'||
|
|
TO_CHAR(FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}) AS SALESANALYSIS_CODE,
|
|
T.PROVINCE_CODE AS PROVINCE_ID,T.SERVERPART_ID AS SERVERPART_ID,T.SERVERPARTCODE AS SERVERPART_CODE,
|
|
T.SERVERPART_NAME AS SERVERPART_NAME,T.BUSINESSTYPE AS BUSINESSTYPE,T.SERVERPARTSHOP_ID AS SERVERPARTSHOP_ID,
|
|
T.SHOPCODE AS SHOPCODE,T.SHOPNAME AS SHOPNAME,TRUNC(T.SELLMASTER_DATE) AS SALESANALYSIS_DATE,
|
|
1000 AS SALESANALYSIS_TYPE,FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} AS SALEAMOUNT_START,
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount} AS SALEAMOUNT_END,
|
|
COUNT(T.SELLMASTER_DATE) AS TICKET_COUNT,SUM(T.SELLMASTER_COUNT) AS TOTAL_COUNT,
|
|
SUM(T.SELLMASTER_AMOUNT) AS TOTAL_AMOUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN 1 ELSE NULL END) AS MALE_TICKET,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN T.SELLMASTER_COUNT ELSE NULL END) AS MALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN T.SELLMASTER_AMOUNT ELSE NULL END) AS MALE_AMOUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN 1 ELSE NULL END) AS FEMALE_TICKET,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN T.SELLMASTER_COUNT ELSE NULL END) AS FEMALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN T.SELLMASTER_AMOUNT ELSE NULL END) AS FEMALE_AMOUNT
|
|
FROM (SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,
|
|
C.SELLMASTER_DATE,C.SELLMASTER_COUNT,C.SELLMASTER_AMOUNT,D.CUSTOMER_GENDER
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_SELLMASTER C LEFT JOIN HIGHWAY_EXCHANGE.T_CUSTOMERINFO D
|
|
ON C.SELLMASTER_CODE = D.SELLMASTER_CODE
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SHOPCODE = C.SHOPCODE AND
|
|
B.SERVERPARTCODE = C.SERVERPARTCODE AND TRUNC(C.SELLMASTER_DATE) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
UNION ALL
|
|
SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,
|
|
C.SELLDATA_DATE AS SELLMASTER_DATE,SUM(C.SELLCOUNT) AS SELLMASTER_COUNT,
|
|
SUM(C.FACTAMOUNT) AS SELLMASTER_AMOUNT,NULL AS CUSTOMER_GENDER
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_SELLDATA C
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SHOPCODE = C.SHOPCODE AND
|
|
B.SERVERPARTCODE = C.SERVERPARTCODE AND TRUNC(C.SELLDATA_DATE) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
GROUP BY A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,C.SELLDATA_DATE) T
|
|
WHERE T.SELLMASTER_AMOUNT > 0
|
|
GROUP BY
|
|
T.PROVINCE_CODE,T.SERVERPART_ID,T.SERVERPARTCODE,T.SERVERPART_NAME,
|
|
T.BUSINESSTYPE,T.SERVERPARTSHOP_ID,T.SHOPCODE,T.SHOPNAME,TRUNC(T.SELLMASTER_DATE),
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount},
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}").Tables[0]);
|
|
List<Model.SALESANALYSIS> _InsertList = new List<Model.SALESANALYSIS>();
|
|
foreach (Model.SALESANALYSIS _SALESANALYSIS in _SalesAnalysisList)
|
|
{
|
|
if (_SalesAnalysisTable.Select($" SALESANALYSIS_CODE = '{_SALESANALYSIS.SALESANALYSIS_CODE}' ").Count() == 0)
|
|
{
|
|
_InsertList.Add(_SALESANALYSIS);
|
|
}
|
|
}
|
|
if (_InsertList.Count > 0)
|
|
{
|
|
OperationDataHelper<Model.SALESANALYSIS>.InsertTableData(
|
|
localOracle, _InsertList, "HIGHWAY_EXCHANGE.T_SALESANALYSIS", true,
|
|
"SALESANALYSIS_ID", "HIGHWAY_EXCHANGE.SEQ_SALESANALYSIS.NEXTVAL");
|
|
}
|
|
_TotalCount += _SalesAnalysisList.Count;
|
|
_InsrtCount += _InsertList.Count;
|
|
}
|
|
ResultEvent(DateTime.Now, $"昨日客单区段数据统计完成:总数:{_TotalCount};新增:{_InsrtCount}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ResultEvent(DateTime.Now, "昨日客单区段数据统计失败:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 客单时段区段统计
|
|
/// </summary>
|
|
/// <param name="localOracle">数据库连接</param>
|
|
public void CreateSalesIntervalAnalysis(OracleHelper localOracle)
|
|
{
|
|
try
|
|
{
|
|
string _ServerPartName = "";
|
|
decimal _AnalysisAmount = 10;
|
|
int _AnalysisAge = 10;
|
|
int _AnalysisTime = 60;
|
|
int _TotalCount = 0;
|
|
int _InsrtCount = 0;
|
|
ResultEvent(DateTime.Now, "正在启动客单时段区段数据统计......");
|
|
DataTable _ConfigTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAMOUNT',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAMOUNT,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAGE',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAGE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISTIME',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISTIME
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B
|
|
LEFT JOIN HIGHWAY_EXCHANGE.T_BUSINESSCONFIG C
|
|
ON B.SERVERPARTCODE = C.SERVERPARTCODE AND B.BUSINESSTYPE = C.BUSINESSTYPE AND
|
|
UPPER(C.CONFIGURATION_NAME) IN ('ANALYSISAMOUNT','ANALYSISAGE','ANALYSISTIME')
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.BUSINESSTYPE IS NOT NULL
|
|
GROUP BY A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE
|
|
ORDER BY B.SERVERPARTCODE").Tables[0];
|
|
if (_ConfigTable.Rows.Count > 0)
|
|
{
|
|
DataTable _SalesAnalysisTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SALESINTERVALANALYSIS_CODE
|
|
FROM HIGHWAY_EXCHANGE.T_SALESINTERVALANALYSIS A
|
|
WHERE TRUNC(A.DATE_END) = TRUNC(SYSDATE) - 1").Tables[0];
|
|
for (int i = 0; i < _ConfigTable.Rows.Count; i++)
|
|
{
|
|
//读取配置
|
|
string _ServerPartCode = _ConfigTable.Rows[i]["SERVERPARTCODE"].ToString();
|
|
string _BusinessType = _ConfigTable.Rows[i]["BUSINESSTYPE"].ToString();
|
|
|
|
decimal.TryParse(_ConfigTable.Rows[i]["ANALYSISAMOUNT"].ToString(), out _AnalysisAmount);
|
|
if (_AnalysisAmount <= 0)
|
|
{
|
|
_AnalysisAmount = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISAGE"].ToString(), out _AnalysisAge);
|
|
if (_AnalysisAge <= 0)
|
|
{
|
|
_AnalysisAge = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISTIME"].ToString(), out _AnalysisTime);
|
|
if (_AnalysisTime <= 0 || _AnalysisTime > 60)
|
|
{
|
|
_AnalysisTime = 60;
|
|
}
|
|
|
|
if (_ConfigTable.Rows[i]["SERVERPART_NAME"].ToString() != _ServerPartName)
|
|
{
|
|
_ServerPartName = _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString();
|
|
ResultEvent(DateTime.Now, $"正在统计[{ _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString()}]客单时段区段数据......");
|
|
}
|
|
List<Model.SALESINTERVALANALYSIS> _SalesIntervalAnalysisList =
|
|
(List<Model.SALESINTERVALANALYSIS>)DataTableHelper.DataTableToIList<Model.SALESINTERVALANALYSIS>(localOracle.ExcuteSqlGetDataSet(
|
|
$@"SELECT T.SERVERPARTCODE||T.SHOPCODE||TO_CHAR(TO_DATE(TO_CHAR(T.SELLMASTER_DATE, 'YYYY/MM/DD HH24'),'YYYY/MM/DD HH24:MI:SS') +
|
|
((FLOOR(TO_CHAR(T.SELLMASTER_DATE, 'MI') / {_AnalysisTime} ) * {_AnalysisTime} + {_AnalysisTime}) * 60 - 1) /86400,'YYYYMMDDHH24MISS')||'1000'||
|
|
TO_CHAR(FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}) AS SALESINTERVALANALYSIS_CODE,
|
|
T.PROVINCE_CODE AS PROVINCE_ID,T.SERVERPART_ID AS SERVERPART_ID,T.SERVERPARTCODE AS SERVERPART_CODE,
|
|
T.SERVERPART_NAME AS SERVERPART_NAME,T.BUSINESSTYPE AS BUSINESSTYPE,T.SERVERPARTSHOP_ID AS SERVERPARTSHOP_ID,
|
|
T.SHOPCODE AS SHOPCODE,T.SHOPNAME AS SHOPNAME,TO_DATE(TO_CHAR(T.SELLMASTER_DATE, 'YYYY/MM/DD HH24'),'YYYY/MM/DD HH24:MI:SS') +
|
|
((FLOOR(TO_CHAR(T.SELLMASTER_DATE, 'MI') / {_AnalysisTime} ) * {_AnalysisTime}) * 60) /86400 AS DATE_START,
|
|
TO_DATE(TO_CHAR(T.SELLMASTER_DATE, 'YYYY/MM/DD HH24'),'YYYY/MM/DD HH24:MI:SS') +
|
|
((FLOOR(TO_CHAR(T.SELLMASTER_DATE, 'MI') / {_AnalysisTime} ) * {_AnalysisTime} + {_AnalysisTime}) * 60 - 1) /86400 AS DATE_END,
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} AS AMOUNT_START,
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount} AS AMOUNT_END,
|
|
COUNT(T.SELLMASTER_DATE) AS TICKET_COUNT,SUM(T.SELLMASTER_COUNT) AS TOTAL_COUNT,
|
|
SUM(T.SELLMASTER_AMOUNT) AS TOTAL_AMOUNT,FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} AS AGE_START,
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge} AS AGE_END,
|
|
SUM(CASE WHEN T.CUSTOMER_AGE IS NOT NULL THEN 1 ELSE NULL END) AS AGE_TICKET,
|
|
SUM(CASE WHEN T.CUSTOMER_AGE IS NOT NULL THEN T.SELLMASTER_COUNT ELSE NULL END) AS AGE_COUNT,
|
|
SUM(CASE WHEN T.CUSTOMER_AGE IS NOT NULL THEN T.SELLMASTER_AMOUNT ELSE NULL END) AS AGE_AMOUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN 1 ELSE NULL END) AS MALE_TICKET,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN T.SELLMASTER_COUNT ELSE NULL END) AS MALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN T.SELLMASTER_AMOUNT ELSE NULL END) AS MALE_AMOUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN 1 ELSE NULL END) AS FEMALE_TICKET,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN T.SELLMASTER_COUNT ELSE NULL END) AS FEMALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN T.SELLMASTER_AMOUNT ELSE NULL END) AS FEMALE_AMOUNT
|
|
FROM (SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,
|
|
C.SELLMASTER_DATE,C.SELLMASTER_COUNT,C.SELLMASTER_AMOUNT,D.CUSTOMER_GENDER,D.CUSTOMER_AGE
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_SELLMASTER C LEFT JOIN HIGHWAY_EXCHANGE.T_CUSTOMERINFO D
|
|
ON C.SELLMASTER_CODE = D.SELLMASTER_CODE
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SHOPCODE = C.SHOPCODE AND
|
|
B.SERVERPARTCODE = C.SERVERPARTCODE AND TRUNC(C.SELLMASTER_DATE) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
UNION ALL
|
|
SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,
|
|
C.SELLDATA_DATE AS SELLMASTER_DATE,SUM(C.SELLCOUNT) AS SELLMASTER_COUNT,
|
|
SUM(C.FACTAMOUNT) AS SELLMASTER_AMOUNT,NULL AS CUSTOMER_GENDER,NULL AS CUSTOMER_AGE
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,HIGHWAY_EXCHANGE.T_SELLDATA C
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SHOPCODE = C.SHOPCODE AND
|
|
B.SERVERPARTCODE = C.SERVERPARTCODE AND TRUNC(C.SELLDATA_DATE) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
GROUP BY A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,C.MACHINECODE,C.SELLDATA_DATE) T
|
|
WHERE T.SELLMASTER_AMOUNT > 0
|
|
GROUP BY
|
|
T.PROVINCE_CODE,T.SERVERPART_ID,T.SERVERPARTCODE,T.SERVERPART_NAME,
|
|
T.BUSINESSTYPE,T.SERVERPARTSHOP_ID,T.SHOPCODE,T.SHOPNAME,
|
|
TO_DATE(TO_CHAR(T.SELLMASTER_DATE, 'YYYY/MM/DD HH24'),'YYYY/MM/DD HH24:MI:SS') +
|
|
((FLOOR(TO_CHAR(T.SELLMASTER_DATE, 'MI') / {_AnalysisTime} ) * {_AnalysisTime}) * 60) /86400,
|
|
TO_DATE(TO_CHAR(T.SELLMASTER_DATE, 'YYYY/MM/DD HH24'),'YYYY/MM/DD HH24:MI:SS') +
|
|
((FLOOR(TO_CHAR(T.SELLMASTER_DATE, 'MI') / {_AnalysisTime} ) * {_AnalysisTime} + {_AnalysisTime}) * 60 - 1) /86400,
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount},
|
|
FLOOR(T.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount},
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge},
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge}").Tables[0]);
|
|
List<Model.SALESINTERVALANALYSIS> _InsertList = new List<Model.SALESINTERVALANALYSIS>();
|
|
foreach (Model.SALESINTERVALANALYSIS _SALESINTERVALANALYSIS in _SalesIntervalAnalysisList)
|
|
{
|
|
if (_SalesAnalysisTable.Select($" SALESINTERVALANALYSIS_CODE = '{_SALESINTERVALANALYSIS.SALESINTERVALANALYSIS_CODE}' ").Count() == 0)
|
|
{
|
|
_InsertList.Add(_SALESINTERVALANALYSIS);
|
|
}
|
|
}
|
|
if (_InsertList.Count > 0)
|
|
{
|
|
OperationDataHelper<Model.SALESINTERVALANALYSIS>.InsertTableData(localOracle, _InsertList,
|
|
"HIGHWAY_EXCHANGE.T_SALESINTERVALANALYSIS", true, "SALESINTERVALANALYSIS_ID",
|
|
"HIGHWAY_EXCHANGE.SEQ_SALESINTERVALANALYSIS.NEXTVAL");
|
|
}
|
|
_TotalCount += _SalesIntervalAnalysisList.Count;
|
|
_InsrtCount += _InsertList.Count;
|
|
}
|
|
ResultEvent(DateTime.Now, $"客单时段区段数据统计完成:总数:{_TotalCount};新增:{_InsrtCount}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ResultEvent(DateTime.Now, "客单时段区段数据统计失败:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 客群区段统计
|
|
/// </summary>
|
|
/// <param name="localOracle">数据库连接</param>
|
|
public void CreateCustomerAnalysis(OracleHelper localOracle)
|
|
{
|
|
try
|
|
{
|
|
string _ServerPartName = "";
|
|
decimal _AnalysisAmount = 10;
|
|
int _AnalysisAge = 10;
|
|
int _AnalysisTime = 60;
|
|
int _TotalCount = 0;
|
|
int _InsrtCount = 0;
|
|
ResultEvent(DateTime.Now, "正在启动客群区段数据统计......");
|
|
DataTable _ConfigTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAMOUNT',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAMOUNT,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAGE',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAGE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISTIME',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISTIME
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B
|
|
LEFT JOIN HIGHWAY_EXCHANGE.T_BUSINESSCONFIG C
|
|
ON B.SERVERPARTCODE = C.SERVERPARTCODE AND B.BUSINESSTYPE = C.BUSINESSTYPE AND
|
|
UPPER(C.CONFIGURATION_NAME) IN ('ANALYSISAMOUNT','ANALYSISAGE','ANALYSISTIME')
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.BUSINESSTYPE IS NOT NULL
|
|
GROUP BY A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE
|
|
ORDER BY B.SERVERPARTCODE").Tables[0];
|
|
if (_ConfigTable.Rows.Count > 0)
|
|
{
|
|
DataTable _SalesAnalysisTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.CUSTOMERANALYSIS_CODE
|
|
FROM HIGHWAY_EXCHANGE.T_CUSTOMERANALYSIS A
|
|
WHERE TRUNC(A.CUSTOMERANALYSIS_DATE) = TRUNC(SYSDATE) - 1").Tables[0];
|
|
for (int i = 0; i < _ConfigTable.Rows.Count; i++)
|
|
{
|
|
//读取配置
|
|
string _ServerPartCode = _ConfigTable.Rows[i]["SERVERPARTCODE"].ToString();
|
|
string _BusinessType = _ConfigTable.Rows[i]["BUSINESSTYPE"].ToString();
|
|
|
|
decimal.TryParse(_ConfigTable.Rows[i]["ANALYSISAMOUNT"].ToString(), out _AnalysisAmount);
|
|
if (_AnalysisAmount <= 0)
|
|
{
|
|
_AnalysisAmount = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISAGE"].ToString(), out _AnalysisAge);
|
|
if (_AnalysisAge <= 0)
|
|
{
|
|
_AnalysisAge = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISTIME"].ToString(), out _AnalysisTime);
|
|
if (_AnalysisTime <= 0 || _AnalysisTime > 60)
|
|
{
|
|
_AnalysisTime = 60;
|
|
}
|
|
|
|
if (_ConfigTable.Rows[i]["SERVERPART_NAME"].ToString() != _ServerPartName)
|
|
{
|
|
_ServerPartName = _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString();
|
|
ResultEvent(DateTime.Now, $"正在统计[{ _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString()}]客群区段数据......");
|
|
}
|
|
List<Model.CUSTOMERANALYSIS> _CustomerAnalysisList =
|
|
(List<Model.CUSTOMERANALYSIS>)DataTableHelper.DataTableToIList<Model.CUSTOMERANALYSIS>(localOracle.ExcuteSqlGetDataSet(
|
|
$@"SELECT B.SERVERPARTCODE||B.SHOPCODE||TO_CHAR(TRUNC(C.ACQUISITION_TIME),'YYYYMMDDHH24MISS')||'1000'||
|
|
TO_CHAR(FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge})||
|
|
TO_CHAR(FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}) AS CUSTOMERANALYSIS_CODE,
|
|
A.PROVINCE_CODE AS PROVINCE_ID,A.SERVERPART_ID AS SERVERPART_ID,
|
|
A.SERVERPARTCODE AS SERVERPART_CODE,A.SERVERPART_NAME AS SERVERPART_NAME,
|
|
B.BUSINESSTYPE AS BUSINESSTYPE,B.SERVERPARTSHOP_ID AS SERVERPARTSHOP_ID,
|
|
B.SHOPCODE AS SHOPCODE,B.SHOPNAME AS SHOPNAME,
|
|
TRUNC(C.ACQUISITION_TIME) AS CUSTOMERANALYSIS_DATE,
|
|
FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} AS AGE_START,
|
|
FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge} AS AGE_END,
|
|
FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} AS AMOUNT_START,
|
|
FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount} AS AMOUNT_END,
|
|
COUNT(D.SELLMASTER_DATE) AS TICKET_COUNT,SUM(D.SELLMASTER_COUNT) AS TOTAL_COUNT,
|
|
SUM(D.SELLMASTER_AMOUNT) AS TOTAL_AMOUNT,
|
|
SUM(CASE C.CUSTOMER_GENDER WHEN 1 THEN D.SELLMASTER_COUNT ELSE NULL END) AS MALE_COUNT,
|
|
SUM(CASE C.CUSTOMER_GENDER WHEN 1 THEN D.SELLMASTER_AMOUNT ELSE NULL END) AS MALE_AMOUNT,
|
|
SUM(CASE C.CUSTOMER_GENDER WHEN 2 THEN D.SELLMASTER_COUNT ELSE NULL END) AS FEMALE_COUNT,
|
|
SUM(CASE C.CUSTOMER_GENDER WHEN 2 THEN D.SELLMASTER_AMOUNT ELSE NULL END) AS FEMALE_AMOUNT
|
|
FROM
|
|
HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_CUSTOMERINFO C,HIGHWAY_EXCHANGE.T_SELLMASTER D
|
|
WHERE
|
|
A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SERVERPARTCODE = C.SERVERPARTCODE AND
|
|
B.SHOPCODE = C.SHOPCODE AND C.SELLMASTER_CODE = D.SELLMASTER_CODE AND
|
|
TRUNC(C.ACQUISITION_TIME) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
GROUP BY
|
|
B.SERVERPARTCODE||B.SHOPCODE||TO_CHAR(TRUNC(C.ACQUISITION_TIME),'YYYYMMDDHH24MISS')||'1000'||
|
|
TO_CHAR(FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge})||
|
|
TO_CHAR(FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}),
|
|
A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,B.BUSINESSTYPE,
|
|
B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,TRUNC(C.ACQUISITION_TIME),
|
|
FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge},
|
|
FLOOR(C.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge},
|
|
FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount},
|
|
FLOOR(D.SELLMASTER_AMOUNT / {_AnalysisAmount}) * {_AnalysisAmount} + {_AnalysisAmount}").Tables[0]);
|
|
List<Model.CUSTOMERANALYSIS> _InsertList = new List<Model.CUSTOMERANALYSIS>();
|
|
foreach (Model.CUSTOMERANALYSIS _CUSTOMERANALYSIS in _CustomerAnalysisList)
|
|
{
|
|
if (_SalesAnalysisTable.Select($" CUSTOMERANALYSIS_CODE = '{_CUSTOMERANALYSIS.CUSTOMERANALYSIS_CODE}' ").Count() == 0)
|
|
{
|
|
_InsertList.Add(_CUSTOMERANALYSIS);
|
|
}
|
|
}
|
|
if (_InsertList.Count > 0)
|
|
{
|
|
OperationDataHelper<Model.CUSTOMERANALYSIS>.InsertTableData(localOracle, _InsertList,
|
|
"HIGHWAY_EXCHANGE.T_CUSTOMERANALYSIS", true, "CUSTOMERANALYSIS_ID",
|
|
"HIGHWAY_EXCHANGE.SEQ_CUSTOMERANALYSIS.NEXTVAL");
|
|
}
|
|
_TotalCount += _CustomerAnalysisList.Count;
|
|
_InsrtCount += _InsertList.Count;
|
|
}
|
|
ResultEvent(DateTime.Now, $"客群区段数据统计完成:总数:{_TotalCount};新增:{_InsrtCount}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ResultEvent(DateTime.Now, "客群区段数据统计失败:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 爆款/推荐单品统计
|
|
/// </summary>
|
|
/// <param name="localOracle"></param>
|
|
public void CreateCommodityAnalysis(OracleHelper localOracle)
|
|
{
|
|
try
|
|
{
|
|
string _ServerPartName = "";
|
|
decimal _AnalysisAmount = 10;
|
|
int _AnalysisAge = 10;
|
|
int _AnalysisTime = 60;
|
|
int _TotalCount = 0;
|
|
int _InsrtCount = 0;
|
|
ResultEvent(DateTime.Now, "正在启动单品年龄段数据统计......");
|
|
DataTable _ConfigTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAMOUNT',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAMOUNT,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISAGE',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISAGE,
|
|
MAX(DECODE(UPPER(C.CONFIGURATION_NAME),'ANALYSISTIME',C.CONFIGURATION_VALUES,NULL)) AS ANALYSISTIME
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B
|
|
LEFT JOIN HIGHWAY_EXCHANGE.T_BUSINESSCONFIG C
|
|
ON B.SERVERPARTCODE = C.SERVERPARTCODE AND B.BUSINESSTYPE = C.BUSINESSTYPE AND
|
|
UPPER(C.CONFIGURATION_NAME) IN ('ANALYSISAMOUNT','ANALYSISAGE','ANALYSISTIME')
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.BUSINESSTYPE IS NOT NULL
|
|
GROUP BY A.SERVERPART_NAME,B.SERVERPARTCODE,B.BUSINESSTYPE
|
|
ORDER BY B.SERVERPARTCODE").Tables[0];
|
|
if (_ConfigTable.Rows.Count > 0)
|
|
{
|
|
DataTable _SalesAnalysisTable = localOracle.ExcuteSqlGetDataSet(
|
|
@"SELECT A.COMMODITYANALYSIS_CODE
|
|
FROM HIGHWAY_EXCHANGE.T_COMMODITYANALYSIS A
|
|
WHERE TRUNC(A.COMMODITYANALYSIS_DATE) = TRUNC(SYSDATE) - 1").Tables[0];
|
|
for (int i = 0; i < _ConfigTable.Rows.Count; i++)
|
|
{
|
|
//读取配置
|
|
string _ServerPartCode = _ConfigTable.Rows[i]["SERVERPARTCODE"].ToString();
|
|
string _BusinessType = _ConfigTable.Rows[i]["BUSINESSTYPE"].ToString();
|
|
|
|
decimal.TryParse(_ConfigTable.Rows[i]["ANALYSISAMOUNT"].ToString(), out _AnalysisAmount);
|
|
if (_AnalysisAmount <= 0)
|
|
{
|
|
_AnalysisAmount = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISAGE"].ToString(), out _AnalysisAge);
|
|
if (_AnalysisAge <= 0)
|
|
{
|
|
_AnalysisAge = 10;
|
|
}
|
|
|
|
int.TryParse(_ConfigTable.Rows[i]["ANALYSISTIME"].ToString(), out _AnalysisTime);
|
|
if (_AnalysisTime <= 0 || _AnalysisTime > 60)
|
|
{
|
|
_AnalysisTime = 60;
|
|
}
|
|
|
|
if (_ConfigTable.Rows[i]["SERVERPART_NAME"].ToString() != _ServerPartName)
|
|
{
|
|
_ServerPartName = _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString();
|
|
ResultEvent(DateTime.Now, $"正在统计[{ _ConfigTable.Rows[i]["SERVERPART_NAME"].ToString()}]单品年龄段数据......");
|
|
}
|
|
List<Model.COMMODITYANALYSIS> _CommodityAnalysisList =
|
|
(List<Model.COMMODITYANALYSIS>)DataTableHelper.DataTableToIList<Model.COMMODITYANALYSIS>(localOracle.ExcuteSqlGetDataSet(
|
|
$@"SELECT T.SERVERPARTCODE||T.SHOPCODE||TO_CHAR(TRUNC(T.SELLMASTER_DATE),'YYYYMMDDHH24MISS')||'1000'||
|
|
T.COMMODITY_CODE||TO_CHAR(FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge}) AS COMMODITYANALYSIS_CODE,
|
|
T.PROVINCE_CODE AS PROVINCE_ID,T.SERVERPART_ID AS SERVERPART_ID,T.SERVERPARTCODE AS SERVERPART_CODE,
|
|
T.SERVERPART_NAME AS SERVERPART_NAME,T.BUSINESSTYPE AS BUSINESSTYPE,T.SERVERPARTSHOP_ID AS SERVERPARTSHOP_ID,
|
|
T.SHOPCODE AS SHOPCODE,T.SHOPNAME AS SHOPNAME,T.COMMODITY_CODE,T.COMMODITY_BARCODE,
|
|
T.COMMODITY_NAME,TRUNC(T.SELLMASTER_DATE) AS COMMODITYANALYSIS_DATE,
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} AS AGE_START,
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge} AS AGE_END,
|
|
COUNT(T.SELLMASTER_DATE) AS TICKET_COUNT,SUM(T.SELLDETAILS_COUNT) AS TOTAL_COUNT,
|
|
SUM(T.SELLDETAILS_AMOUNT) AS TOTAL_AMOUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN T.SELLDETAILS_COUNT ELSE NULL END) AS MALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 1 THEN 1 ELSE NULL END) AS MALE_TICKET,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN T.SELLDETAILS_COUNT ELSE NULL END) AS FEMALE_COUNT,
|
|
SUM(CASE T.CUSTOMER_GENDER WHEN 2 THEN 1 ELSE NULL END) AS FEMALE_TICKET
|
|
FROM (SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,B.BUSINESSTYPE,
|
|
B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,D.SELLMASTER_DATE,C.COMMODITY_CODE,
|
|
C.COMMODITY_BARCODE,C.COMMODITY_NAME,F.CUSTOMER_AGE,F.CUSTOMER_GENDER,
|
|
SUM(E.SELLDETAILS_COUNT) AS SELLDETAILS_COUNT,SUM(E.SELLDETAILS_AMOUNT) AS SELLDETAILS_AMOUNT
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_COMMODITYANALYSISSET C,HIGHWAY_EXCHANGE.T_SELLMASTER D,
|
|
HIGHWAY_EXCHANGE.T_SELLDETAILS E LEFT JOIN HIGHWAY_EXCHANGE.T_CUSTOMERINFO F
|
|
ON E.SELLMASTER_CODE = F.SELLMASTER_CODE
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SERVERPARTCODE = D.SERVERPARTCODE AND
|
|
B.SHOPCODE = D.SHOPCODE AND D.SELLMASTER_CODE = E.SELLMASTER_CODE AND
|
|
B.SERVERPARTCODE = C.SERVERPART_CODE AND B.BUSINESSTYPE = C.BUSINESSTYPE AND
|
|
C.COMMODITY_CODE = E.COMMODITY_CODE AND TRUNC(D.SELLMASTER_DATE) = TRUNC(SYSDATE) - 1 AND
|
|
B.SERVERPARTCODE = '{_ServerPartCode}' AND B.BUSINESSTYPE = '{_BusinessType}'
|
|
GROUP BY A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,D.SELLMASTER_DATE,C.COMMODITY_CODE,
|
|
C.COMMODITY_BARCODE,C.COMMODITY_NAME,F.CUSTOMER_AGE,F.CUSTOMER_GENDER
|
|
UNION ALL
|
|
SELECT A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,B.BUSINESSTYPE,
|
|
B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,G.SELLDATA_DATE AS SELLMASTER_DATE,
|
|
C.COMMODITY_CODE,C.COMMODITY_BARCODE,C.COMMODITY_NAME,NULL AS CUSTOMER_AGE,
|
|
NULL AS CUSTOMER_GENDER,SUM(G.SELLCOUNT) AS SELLDETAILS_COUNT,SUM(G.FACTAMOUNT) AS SELLDETAILS_AMOUNT
|
|
FROM HIGHWAY_EXCHANGE.T_SYSCODE A,HIGHWAY_EXCHANGE.T_SHOPMESSAGE B,
|
|
HIGHWAY_EXCHANGE.T_COMMODITYANALYSISSET C,HIGHWAY_EXCHANGE.T_SELLDATA G
|
|
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SERVERPARTCODE = G.SERVERPARTCODE AND
|
|
B.SHOPCODE = G.SHOPCODE AND B.SERVERPARTCODE = C.SERVERPART_CODE AND
|
|
B.BUSINESSTYPE = C.BUSINESSTYPE AND C.COMMODITY_CODE = G.COMMODITY_CODE AND
|
|
TRUNC(G.SELLDATA_DATE) = TRUNC(SYSDATE) - 1 AND B.SERVERPARTCODE = '{_ServerPartCode}' AND
|
|
B.BUSINESSTYPE = '{_BusinessType}'
|
|
GROUP BY A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPARTCODE,A.SERVERPART_NAME,
|
|
B.BUSINESSTYPE,B.SERVERPARTSHOP_ID,B.SHOPCODE,B.SHOPNAME,G.SELLDATA_DATE,
|
|
C.COMMODITY_CODE,C.COMMODITY_BARCODE,C.COMMODITY_NAME) T
|
|
WHERE SELLDETAILS_AMOUNT > 0
|
|
GROUP BY T.SERVERPARTCODE||T.SHOPCODE||TO_CHAR(TRUNC(T.SELLMASTER_DATE),'YYYYMMDDHH24MISS')||'1000'||
|
|
T.COMMODITY_CODE||TO_CHAR(FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge}) ,
|
|
T.PROVINCE_CODE,T.SERVERPART_ID,T.SERVERPARTCODE,T.SERVERPART_NAME,T.BUSINESSTYPE,
|
|
T.SERVERPARTSHOP_ID,T.SHOPCODE,T.SHOPNAME,T.COMMODITY_CODE,T.COMMODITY_BARCODE,
|
|
T.COMMODITY_NAME,TRUNC(T.SELLMASTER_DATE),FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge},
|
|
FLOOR(T.CUSTOMER_AGE / {_AnalysisAge}) * {_AnalysisAge} + {_AnalysisAge}").Tables[0]);
|
|
List<Model.COMMODITYANALYSIS> _InsertList = new List<Model.COMMODITYANALYSIS>();
|
|
foreach (Model.COMMODITYANALYSIS _COMMODITYANALYSIS in _CommodityAnalysisList)
|
|
{
|
|
if (_SalesAnalysisTable.Select($" COMMODITYANALYSIS_CODE = '{_COMMODITYANALYSIS.COMMODITYANALYSIS_CODE}' ").Count() == 0)
|
|
{
|
|
_InsertList.Add(_COMMODITYANALYSIS);
|
|
}
|
|
}
|
|
if (_InsertList.Count > 0)
|
|
{
|
|
OperationDataHelper<Model.COMMODITYANALYSIS>.InsertTableData(localOracle, _InsertList,
|
|
"HIGHWAY_EXCHANGE.T_COMMODITYANALYSIS", true, "COMMODITYANALYSIS_ID",
|
|
"HIGHWAY_EXCHANGE.SEQ_COMMODITYANALYSIS.NEXTVAL");
|
|
}
|
|
_TotalCount += _CommodityAnalysisList.Count;
|
|
_InsrtCount += _InsertList.Count;
|
|
}
|
|
ResultEvent(DateTime.Now, $"单品年龄段数据统计完成:总数:{_TotalCount};新增:{_InsrtCount}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ResultEvent(DateTime.Now, "单品年龄段数据统计失败:" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
} |