Compare commits
3
Commits
c00ce200d7
...
f07ea2359d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f07ea2359d | ||
|
|
1ff7a03a81 | ||
|
|
05e192e30b |
@@ -48,6 +48,165 @@ type ProductPerformanceRefreshResult struct {
|
||||
DurationMS int64 `json:"duration_ms"`
|
||||
}
|
||||
|
||||
func productPerformanceStockQuery() string {
|
||||
return `
|
||||
;WITH ActiveWarehouses AS (
|
||||
SELECT WarehouseCode
|
||||
FROM (VALUES
|
||||
('1-0-12'),('1.01.2014'),('1.02.2005'),('1.02.2004'),('1-0-43'),
|
||||
('4.02.2001'),('1-0-55'),('1.01.2003'),('1-0-21'),('1-0-2'),
|
||||
('1.01.2004'),('1-0-49'),('1-0-37'),('1-0-29'),('1-0-28'),
|
||||
('1-0-10'),('100'),('1.02.2006'),('1-0-42'),('1.01.2002'),
|
||||
('1-0-52')
|
||||
) W(WarehouseCode)
|
||||
),
|
||||
Raw AS (
|
||||
SELECT
|
||||
ProductCode = LTRIM(RTRIM(S.ItemCode)),
|
||||
ColorCode = LTRIM(RTRIM(ISNULL(S.ColorCode, ''))),
|
||||
YakaKodu = LTRIM(RTRIM(ISNULL(S.ItemDim2Code, ''))),
|
||||
MovementDate = CAST(S.DocumentDate AS date),
|
||||
ProcessCode = CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(S.ProcessCode, ''))) <> '' THEN LTRIM(RTRIM(S.ProcessCode))
|
||||
ELSE LTRIM(RTRIM(ISNULL(S.InnerProcessCode, '')))
|
||||
END,
|
||||
InQty = SUM(S.In_Qty1),
|
||||
OutQty = SUM(S.Out_Qty1),
|
||||
NetQty = SUM(S.InventoryQty1)
|
||||
FROM StockWithCost S WITH(NOLOCK)
|
||||
INNER JOIN ActiveWarehouses W
|
||||
ON W.WarehouseCode = LTRIM(RTRIM(S.WarehouseCode))
|
||||
WHERE S.ItemTypeCode = 1
|
||||
AND (
|
||||
LEN(LTRIM(RTRIM(S.ItemCode))) = 13
|
||||
AND (
|
||||
S.ItemCode LIKE 'S%'
|
||||
OR S.ItemCode LIKE 'O%'
|
||||
OR S.ItemCode LIKE 'N%'
|
||||
OR S.ItemCode LIKE 'X%'
|
||||
OR S.ItemCode LIKE 'I%'
|
||||
OR S.ItemCode LIKE 'A%'
|
||||
)
|
||||
)
|
||||
AND (@p3 = '' OR S.ItemCode LIKE @p3 + '%')
|
||||
AND S.DocumentDate < DATEADD(DAY, 1, @p2)
|
||||
GROUP BY
|
||||
S.ItemCode,
|
||||
S.ColorCode,
|
||||
S.ItemDim2Code,
|
||||
CAST(S.DocumentDate AS date),
|
||||
CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(S.ProcessCode, ''))) <> '' THEN LTRIM(RTRIM(S.ProcessCode))
|
||||
ELSE LTRIM(RTRIM(ISNULL(S.InnerProcessCode, '')))
|
||||
END
|
||||
),
|
||||
Opening AS (
|
||||
SELECT
|
||||
StockDate = @p1,
|
||||
ProductCode,
|
||||
ColorCode,
|
||||
YakaKodu,
|
||||
NetQty = SUM(NetQty),
|
||||
InQty = CAST(0 AS decimal(18,4)),
|
||||
OutQty = CAST(0 AS decimal(18,4)),
|
||||
KpiInQty = CAST(0 AS decimal(18,4)),
|
||||
KpiOutQty = CAST(0 AS decimal(18,4)),
|
||||
SalesMovementQty = CAST(0 AS decimal(18,4)),
|
||||
ProductionInQty = CAST(0 AS decimal(18,4)),
|
||||
PurchaseInQty = CAST(0 AS decimal(18,4)),
|
||||
ConsumptionOutQty = CAST(0 AS decimal(18,4)),
|
||||
CountDiffQty = CAST(0 AS decimal(18,4))
|
||||
FROM Raw
|
||||
WHERE MovementDate < @p1
|
||||
GROUP BY ProductCode, ColorCode, YakaKodu
|
||||
),
|
||||
Daily AS (
|
||||
SELECT
|
||||
StockDate = MovementDate,
|
||||
ProductCode,
|
||||
ColorCode,
|
||||
YakaKodu,
|
||||
NetQty = SUM(NetQty),
|
||||
InQty = SUM(InQty),
|
||||
OutQty = SUM(OutQty),
|
||||
KpiInQty = SUM(CASE WHEN ProcessCode IN ('OP','BP','CI') THEN InQty ELSE 0 END),
|
||||
KpiOutQty = SUM(CASE WHEN ProcessCode IN ('R','WS','OC','CO') THEN OutQty ELSE 0 END),
|
||||
SalesMovementQty = SUM(CASE WHEN ProcessCode IN ('R','WS') THEN OutQty ELSE 0 END),
|
||||
ProductionInQty = SUM(CASE WHEN ProcessCode = 'OP' THEN InQty ELSE 0 END),
|
||||
PurchaseInQty = SUM(CASE WHEN ProcessCode = 'BP' THEN InQty ELSE 0 END),
|
||||
ConsumptionOutQty = SUM(CASE WHEN ProcessCode = 'OC' THEN OutQty ELSE 0 END),
|
||||
CountDiffQty = SUM(CASE WHEN ProcessCode IN ('CO','CI') THEN NetQty ELSE 0 END)
|
||||
FROM Raw
|
||||
WHERE MovementDate BETWEEN @p1 AND @p2
|
||||
GROUP BY MovementDate, ProductCode, ColorCode, YakaKodu
|
||||
),
|
||||
Series AS (
|
||||
SELECT * FROM Opening
|
||||
UNION ALL
|
||||
SELECT * FROM Daily
|
||||
),
|
||||
Collapsed AS (
|
||||
SELECT
|
||||
StockDate,
|
||||
ProductCode,
|
||||
ColorCode,
|
||||
YakaKodu,
|
||||
NetQty = SUM(NetQty),
|
||||
InQty = SUM(InQty),
|
||||
OutQty = SUM(OutQty),
|
||||
KpiInQty = SUM(KpiInQty),
|
||||
KpiOutQty = SUM(KpiOutQty),
|
||||
SalesMovementQty = SUM(SalesMovementQty),
|
||||
ProductionInQty = SUM(ProductionInQty),
|
||||
PurchaseInQty = SUM(PurchaseInQty),
|
||||
ConsumptionOutQty = SUM(ConsumptionOutQty),
|
||||
CountDiffQty = SUM(CountDiffQty)
|
||||
FROM Series
|
||||
GROUP BY StockDate, ProductCode, ColorCode, YakaKodu
|
||||
),
|
||||
Running AS (
|
||||
SELECT
|
||||
StockDate,
|
||||
ProductCode,
|
||||
ColorCode,
|
||||
YakaKodu,
|
||||
StockQty = SUM(NetQty) OVER (
|
||||
PARTITION BY ProductCode, ColorCode, YakaKodu
|
||||
ORDER BY StockDate
|
||||
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
|
||||
),
|
||||
InQty,
|
||||
OutQty,
|
||||
KpiInQty,
|
||||
KpiOutQty,
|
||||
SalesMovementQty,
|
||||
ProductionInQty,
|
||||
PurchaseInQty,
|
||||
ConsumptionOutQty,
|
||||
CountDiffQty
|
||||
FROM Collapsed
|
||||
)
|
||||
SELECT
|
||||
StockDate,
|
||||
ProductCode,
|
||||
ColorCode,
|
||||
YakaKodu,
|
||||
StockQty,
|
||||
InQty,
|
||||
OutQty,
|
||||
KpiInQty,
|
||||
KpiOutQty,
|
||||
SalesMovementQty,
|
||||
ProductionInQty,
|
||||
PurchaseInQty,
|
||||
ConsumptionOutQty,
|
||||
CountDiffQty
|
||||
FROM Running
|
||||
WHERE StockDate BETWEEN @p1 AND @p2
|
||||
ORDER BY StockDate, ProductCode, ColorCode, YakaKodu
|
||||
`
|
||||
}
|
||||
|
||||
func EnsureProductPerformanceTables(pg *sql.DB) error {
|
||||
stmts := []string{
|
||||
`
|
||||
@@ -455,7 +614,7 @@ DO UPDATE SET
|
||||
|
||||
func refreshProductPerformanceStock(ctx context.Context, tx *sql.Tx, startDate, endDate time.Time, productPrefix string) (int, error) {
|
||||
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockSQL(), startDate, endDate, productPrefix)
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockQuery(), startDate, endDate, productPrefix)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -512,7 +671,7 @@ func refreshProductPerformanceStockChunked(ctx context.Context, pg *sql.DB, star
|
||||
|
||||
log.Printf("[ProductPerformanceRefresh] stock refresh start")
|
||||
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockSQL(), startDate, endDate, productPrefix)
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockQuery(), startDate, endDate, productPrefix)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ GROUP BY SalesDate, ProductCode, ColorCode, YakaKodu, ChannelCode, CustomerCount
|
||||
`
|
||||
}
|
||||
|
||||
func productPerformanceStockSQL() string {
|
||||
func productPerformanceStockSQLUnused() string {
|
||||
return `
|
||||
;WITH ActiveWarehouses AS (
|
||||
SELECT WarehouseCode
|
||||
|
||||
Reference in New Issue
Block a user