|
|
@@ -23,10 +23,11 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
|
|
|
try
|
|
|
{
|
|
|
+ await EnsureS1RuntimeObjectsAsync();
|
|
|
result.StageRows = await SyncStagingAsync(batchId, now, cancellationToken);
|
|
|
result.StandardRows = await TransformStandardAsync(batchId, now, cancellationToken);
|
|
|
result.DwdRows = await BuildDwdAsync(batchId, now, cancellationToken);
|
|
|
- result.KpiRows = await BuildS1KpiValuesAsync(now, cancellationToken);
|
|
|
+ result.KpiRows = await BuildS1KpiValuesAsync(batchId, now, cancellationToken);
|
|
|
await MarkTransformRunSuccessAsync(runLogId, now, result);
|
|
|
return result;
|
|
|
}
|
|
|
@@ -37,6 +38,87 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private async Task EnsureS1RuntimeObjectsAsync()
|
|
|
+ {
|
|
|
+ await _db.Ado.ExecuteCommandAsync(
|
|
|
+ """
|
|
|
+ CREATE TABLE IF NOT EXISTS dwd_requirement_examine_detail (
|
|
|
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
+ tenant_id BIGINT NOT NULL,
|
|
|
+ factory_id BIGINT NULL,
|
|
|
+ stat_date DATE NOT NULL,
|
|
|
+ row_id BIGINT NOT NULL,
|
|
|
+ parent_row_id BIGINT NULL,
|
|
|
+ examine_id BIGINT NULL,
|
|
|
+ order_entry_id BIGINT NULL,
|
|
|
+ bill_no VARCHAR(100) NULL,
|
|
|
+ morder_no VARCHAR(100) NULL,
|
|
|
+ num VARCHAR(100) NULL,
|
|
|
+ item_number VARCHAR(100) NULL,
|
|
|
+ item_name VARCHAR(200) NULL,
|
|
|
+ bom_number VARCHAR(100) NULL,
|
|
|
+ model VARCHAR(200) NULL,
|
|
|
+ kitting_time DATE NULL,
|
|
|
+ item_type VARCHAR(50) NULL,
|
|
|
+ erp_cls_name VARCHAR(80) NULL,
|
|
|
+ qty DECIMAL(18,4) NULL,
|
|
|
+ wastage DECIMAL(18,4) NULL,
|
|
|
+ need_count DECIMAL(18,4) NULL,
|
|
|
+ sqty DECIMAL(18,4) NULL,
|
|
|
+ use_qty DECIMAL(18,4) NULL,
|
|
|
+ self_lack_qty DECIMAL(18,4) NULL,
|
|
|
+ lack_qty DECIMAL(18,4) NULL,
|
|
|
+ mo_qty DECIMAL(18,4) NULL,
|
|
|
+ make_qty DECIMAL(18,4) NULL,
|
|
|
+ purchase_qty DECIMAL(18,4) NULL,
|
|
|
+ purchase_occupy_qty DECIMAL(18,4) NULL,
|
|
|
+ satisfy_time DATE NULL,
|
|
|
+ have_ic_subs VARCHAR(10) NULL,
|
|
|
+ substitute_code VARCHAR(100) NULL,
|
|
|
+ create_time DATETIME NULL,
|
|
|
+ source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
|
|
|
+ sync_batch_id VARCHAR(100) NOT NULL,
|
|
|
+ calc_batch_id VARCHAR(100) NOT NULL,
|
|
|
+ calc_time DATETIME NOT NULL,
|
|
|
+ update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ UNIQUE KEY uk_dwd_req_exam_detail (tenant_id, row_id, calc_batch_id),
|
|
|
+ KEY idx_req_exam_tenant_batch (tenant_id, calc_batch_id),
|
|
|
+ KEY idx_req_exam_bill (tenant_id, bill_no),
|
|
|
+ KEY idx_req_exam_item (tenant_id, item_number)
|
|
|
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S1需求明细核验DWD';
|
|
|
+ """);
|
|
|
+
|
|
|
+ await _db.Ado.ExecuteCommandAsync(
|
|
|
+ """
|
|
|
+ INSERT INTO mdp_entity
|
|
|
+ (tenant_id, source_id, entity_code, entity_name, entity_type, source_table_name, target_table_name, sync_mode, batch_size, status, remark)
|
|
|
+ SELECT 0, s.id, 'S1_REQUIREMENT_EXAMINE_RESULT', 'S1需求核验结果主表', 'TABLE',
|
|
|
+ 'b_examine_result', 'mdp_stg_so', 'FULL', 5000, 1, '需求核验结果主表,进入 S1 贴源层'
|
|
|
+ FROM mdp_source s
|
|
|
+ WHERE s.tenant_id=0 AND s.source_code='AIDOPDEV_MYSQL'
|
|
|
+ LIMIT 1
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ source_id=VALUES(source_id), entity_name=VALUES(entity_name), source_table_name=VALUES(source_table_name),
|
|
|
+ target_table_name=VALUES(target_table_name), sync_mode=VALUES(sync_mode), status=VALUES(status),
|
|
|
+ remark=VALUES(remark), update_time=CURRENT_TIMESTAMP;
|
|
|
+ """);
|
|
|
+
|
|
|
+ await _db.Ado.ExecuteCommandAsync(
|
|
|
+ """
|
|
|
+ INSERT INTO mdp_entity
|
|
|
+ (tenant_id, source_id, entity_code, entity_name, entity_type, source_table_name, target_table_name, sync_mode, batch_size, status, remark)
|
|
|
+ SELECT 0, s.id, 'S1_REQUIREMENT_EXAMINE_DETAIL', 'S1需求核验BOM明细', 'TABLE',
|
|
|
+ 'b_bom_child_examine', 'mdp_stg_so', 'FULL', 5000, 1, '需求核验BOM明细,进入 S1 贴源层和 DWD'
|
|
|
+ FROM mdp_source s
|
|
|
+ WHERE s.tenant_id=0 AND s.source_code='AIDOPDEV_MYSQL'
|
|
|
+ LIMIT 1
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ source_id=VALUES(source_id), entity_name=VALUES(entity_name), source_table_name=VALUES(source_table_name),
|
|
|
+ target_table_name=VALUES(target_table_name), sync_mode=VALUES(sync_mode), status=VALUES(status),
|
|
|
+ remark=VALUES(remark), update_time=CURRENT_TIMESTAMP;
|
|
|
+ """);
|
|
|
+ }
|
|
|
+
|
|
|
private async Task<int> SyncStagingAsync(string batchId, DateTime now, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var total = 0;
|
|
|
@@ -144,10 +226,10 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
return total;
|
|
|
}
|
|
|
|
|
|
- private async Task<int> BuildS1KpiValuesAsync(DateTime now, CancellationToken cancellationToken)
|
|
|
+ private async Task<int> BuildS1KpiValuesAsync(string batchId, DateTime now, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var statDate = now.Date;
|
|
|
- var rows = await CalculateS1KpiValuesAsync(statDate);
|
|
|
+ var rows = await CalculateS1KpiValuesAsync(batchId, statDate);
|
|
|
var affected = 0;
|
|
|
foreach (var row in rows)
|
|
|
{
|
|
|
@@ -158,7 +240,7 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
return affected;
|
|
|
}
|
|
|
|
|
|
- private async Task<List<S1KpiCalcRow>> CalculateS1KpiValuesAsync(DateTime statDate)
|
|
|
+ private async Task<List<S1KpiCalcRow>> CalculateS1KpiValuesAsync(string batchId, DateTime statDate)
|
|
|
{
|
|
|
return await _db.Ado.SqlQueryAsync<S1KpiCalcRow>(
|
|
|
"""
|
|
|
@@ -186,6 +268,14 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
WHERE order_date IS NOT NULL AND order_date <= @StatDate
|
|
|
GROUP BY tenant_id, COALESCE(NULLIF(factory_id, 0), 1)
|
|
|
UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L1_004' AS MetricCode,
|
|
|
+ ROUND(AVG(GREATEST(IFNULL(remaining_qty, 0), 0)) / GREATEST(SUM(IFNULL(shipped_qty, 0)), 1) * 30, 4) AS MetricValue
|
|
|
+ FROM dwd_ship_trans
|
|
|
+ WHERE calc_batch_id=@BatchId
|
|
|
+ GROUP BY tenant_id
|
|
|
+ HAVING SUM(IFNULL(shipped_qty, 0)) > 0
|
|
|
+ UNION ALL
|
|
|
SELECT tenant_id AS TenantId, COALESCE(NULLIF(factory_id, 0), 1) AS FactoryId,
|
|
|
'S1_L2_010' AS MetricCode,
|
|
|
ROUND(AVG(TIMESTAMPDIFF(HOUR, order_date, COALESCE(promised_delivery_date, capacity_date, material_ready_date, plan_delivery_date)) / 24), 4) AS MetricValue
|
|
|
@@ -209,7 +299,244 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
FROM mdp_std_so
|
|
|
WHERE order_date IS NOT NULL AND order_date <= @StatDate
|
|
|
GROUP BY tenant_id, COALESCE(NULLIF(factory_id, 0), 1)
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_013' AS MetricCode,
|
|
|
+ ROUND(100 * SUM(CASE WHEN planned_ship_qty > 0 THEN 1 ELSE 0 END) / COUNT(1), 4) AS MetricValue
|
|
|
+ FROM dwd_ship_trans
|
|
|
+ WHERE calc_batch_id=@BatchId
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_014' AS MetricCode,
|
|
|
+ ROUND(100 * SUM(CASE WHEN shipped_qty >= planned_ship_qty AND planned_ship_qty > 0 THEN 1 ELSE 0 END)
|
|
|
+ / GREATEST(SUM(CASE WHEN planned_ship_qty > 0 THEN 1 ELSE 0 END), 1), 4) AS MetricValue
|
|
|
+ FROM dwd_ship_trans
|
|
|
+ WHERE calc_batch_id=@BatchId
|
|
|
+ GROUP BY tenant_id
|
|
|
+ HAVING SUM(CASE WHEN planned_ship_qty > 0 THEN 1 ELSE 0 END) > 0
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_015' AS MetricCode,
|
|
|
+ ROUND(100 * SUM(CASE WHEN linkage_status = 'LINKED' THEN 1 ELSE 0 END)
|
|
|
+ / GREATEST(SUM(CASE WHEN planned_ship_qty > 0 THEN 1 ELSE 0 END), 1), 4) AS MetricValue
|
|
|
+ FROM dwd_ship_trans
|
|
|
+ WHERE calc_batch_id=@BatchId
|
|
|
+ GROUP BY tenant_id
|
|
|
+ HAVING SUM(CASE WHEN planned_ship_qty > 0 THEN 1 ELSE 0 END) > 0
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_001' AS MetricCode,
|
|
|
+ ROUND(AVG(TIMESTAMPDIFF(HOUR, create_time, update_time) / 24), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f') AS create_time,
|
|
|
+ COALESCE(
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.UpdateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ) AS update_time
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review'
|
|
|
+ ) t
|
|
|
+ WHERE create_time IS NOT NULL AND update_time IS NOT NULL AND update_time >= create_time
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_002' AS MetricCode,
|
|
|
+ ROUND(100 * SUM(CASE WHEN TIMESTAMPDIFF(HOUR, create_time, update_time) <= 72 THEN 1 ELSE 0 END) / COUNT(1), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f') AS create_time,
|
|
|
+ COALESCE(
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.UpdateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ) AS update_time
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review'
|
|
|
+ ) t
|
|
|
+ WHERE create_time IS NOT NULL AND update_time IS NOT NULL AND update_time >= create_time
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_003' AS MetricCode,
|
|
|
+ ROUND(COUNT(1) / GREATEST(COUNT(DISTINCT NULLIF(owner_account, '')), 1), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ COALESCE(
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ResponsibleAccount')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateUser'))
|
|
|
+ ) AS owner_account
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review'
|
|
|
+ ) t
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_004' AS MetricCode,
|
|
|
+ ROUND(AVG(cycle_hours / 24), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ COALESCE(
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingDesignCycle')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingDesignCycle')) AS DECIMAL(18,6)) END,
|
|
|
+ TIMESTAMPDIFF(HOUR,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingActualStart')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingActualEnd')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ )
|
|
|
+ ) AS cycle_hours
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_product_design'
|
|
|
+ ) t
|
|
|
+ WHERE cycle_hours IS NOT NULL AND cycle_hours >= 0
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_005' AS MetricCode,
|
|
|
+ ROUND(100 * SUM(CASE WHEN actual_end <= plan_end THEN 1 ELSE 0 END) / COUNT(1), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingPlanEnd')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f') AS plan_end,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DrawingActualEnd')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f') AS actual_end
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_product_design'
|
|
|
+ ) t
|
|
|
+ WHERE plan_end IS NOT NULL AND actual_end IS NOT NULL
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ 'S1_L2_006' AS MetricCode,
|
|
|
+ ROUND(COUNT(1) / GREATEST(COUNT(DISTINCT NULLIF(design_lead, '')), 1), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ COALESCE(
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DesignLeadAccount')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DesignLeadName')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CreateUser'))
|
|
|
+ ) AS design_lead
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_product_design'
|
|
|
+ ) t
|
|
|
+ GROUP BY tenant_id
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ CASE stage_no
|
|
|
+ WHEN 1 THEN 'S1_L3_001'
|
|
|
+ WHEN 2 THEN 'S1_L3_002'
|
|
|
+ WHEN 3 THEN 'S1_L3_003'
|
|
|
+ WHEN 4 THEN 'S1_L3_004'
|
|
|
+ WHEN 5 THEN 'S1_L3_005'
|
|
|
+ END AS MetricCode,
|
|
|
+ ROUND(AVG(cycle_hours), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) AS SIGNED) END AS stage_no,
|
|
|
+ COALESCE(
|
|
|
+ TIMESTAMPDIFF(HOUR,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StartTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CompleteTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) AS DECIMAL(18,6)) * 24 END
|
|
|
+ ) AS cycle_hours
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review_flow'
|
|
|
+ ) t
|
|
|
+ WHERE stage_no BETWEEN 1 AND 5
|
|
|
+ AND cycle_hours IS NOT NULL AND cycle_hours >= 0
|
|
|
+ GROUP BY tenant_id, stage_no
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ CASE stage_no
|
|
|
+ WHEN 1 THEN 'S1_L3_101'
|
|
|
+ WHEN 2 THEN 'S1_L3_102'
|
|
|
+ WHEN 3 THEN 'S1_L3_103'
|
|
|
+ WHEN 4 THEN 'S1_L3_104'
|
|
|
+ WHEN 5 THEN 'S1_L3_105'
|
|
|
+ END AS MetricCode,
|
|
|
+ ROUND(AVG(cycle_hours), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) AS SIGNED) END AS stage_no,
|
|
|
+ COALESCE(
|
|
|
+ TIMESTAMPDIFF(HOUR,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StartTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CompleteTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) AS DECIMAL(18,6)) * 24 END
|
|
|
+ ) AS cycle_hours
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review_flow'
|
|
|
+ ) t
|
|
|
+ WHERE stage_no BETWEEN 1 AND 5
|
|
|
+ AND cycle_hours IS NOT NULL AND cycle_hours >= 0
|
|
|
+ GROUP BY tenant_id, stage_no
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ metric_code AS MetricCode,
|
|
|
+ ROUND(AVG(cycle_hours), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ CASE COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DeptNo')), ''), JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.Department')))
|
|
|
+ WHEN 'LAW' THEN 'S1_L4_001'
|
|
|
+ WHEN 'PRE_SALES' THEN 'S1_L4_002'
|
|
|
+ WHEN 'MPS' THEN 'S1_L4_003'
|
|
|
+ WHEN 'TEST' THEN 'S1_L4_004'
|
|
|
+ WHEN '法律事务部' THEN 'S1_L4_001'
|
|
|
+ WHEN '技术售前组' THEN 'S1_L4_002'
|
|
|
+ WHEN '综合主计划' THEN 'S1_L4_003'
|
|
|
+ WHEN '试验站' THEN 'S1_L4_004'
|
|
|
+ END AS metric_code,
|
|
|
+ COALESCE(
|
|
|
+ TIMESTAMPDIFF(HOUR,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StartTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CompleteTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) AS DECIMAL(18,6)) * 24 END
|
|
|
+ ) AS cycle_hours
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review_flow'
|
|
|
+ AND JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) = '1'
|
|
|
+ ) t
|
|
|
+ WHERE metric_code IS NOT NULL
|
|
|
+ AND cycle_hours IS NOT NULL AND cycle_hours >= 0
|
|
|
+ GROUP BY tenant_id, metric_code
|
|
|
+ UNION ALL
|
|
|
+ SELECT tenant_id AS TenantId, 1 AS FactoryId,
|
|
|
+ metric_code AS MetricCode,
|
|
|
+ ROUND(AVG(cycle_hours), 4) AS MetricValue
|
|
|
+ FROM (
|
|
|
+ SELECT tenant_id,
|
|
|
+ CASE COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.DeptNo')), ''), JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.Department')))
|
|
|
+ WHEN 'LAW' THEN 'S1_L4_101'
|
|
|
+ WHEN 'PRE_SALES' THEN 'S1_L4_102'
|
|
|
+ WHEN 'MPS' THEN 'S1_L4_103'
|
|
|
+ WHEN 'TEST' THEN 'S1_L4_104'
|
|
|
+ WHEN '法律事务部' THEN 'S1_L4_101'
|
|
|
+ WHEN '技术售前组' THEN 'S1_L4_102'
|
|
|
+ WHEN '综合主计划' THEN 'S1_L4_103'
|
|
|
+ WHEN '试验站' THEN 'S1_L4_104'
|
|
|
+ END AS metric_code,
|
|
|
+ COALESCE(
|
|
|
+ TIMESTAMPDIFF(HOUR,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StartTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.CompleteTime')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f')
|
|
|
+ ),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.ActualDays')) AS DECIMAL(18,6)) * 24 END
|
|
|
+ ) AS cycle_hours
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table = 'ado_contract_review_flow'
|
|
|
+ AND JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.StageNo')) = '1'
|
|
|
+ ) t
|
|
|
+ WHERE metric_code IS NOT NULL
|
|
|
+ AND cycle_hours IS NOT NULL AND cycle_hours >= 0
|
|
|
+ GROUP BY tenant_id, metric_code
|
|
|
""",
|
|
|
+ new SugarParameter("@BatchId", batchId),
|
|
|
new SugarParameter("@StatDate", statDate));
|
|
|
}
|
|
|
|
|
|
@@ -486,10 +813,140 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
confirm_status=VALUES(confirm_status), sync_batch_id=VALUES(sync_batch_id), sync_time=VALUES(sync_time),
|
|
|
update_time=CURRENT_TIMESTAMP
|
|
|
""", batchId, now);
|
|
|
+
|
|
|
+ yield return Cmd(
|
|
|
+ """
|
|
|
+ INSERT INTO mdp_std_ship_trans
|
|
|
+ (tenant_id, factory_id, source_system, trans_type, order_no, customer_no, item_code, item_name, qty,
|
|
|
+ plan_ship_date, status, linkage_status, source_table, source_row_id, source_biz_key, sync_batch_id, sync_time)
|
|
|
+ SELECT
|
|
|
+ IFNULL(d.tenant_id, 0),
|
|
|
+ d.factory_id,
|
|
|
+ 'AIDOP',
|
|
|
+ 'LINKAGE_PLAN',
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.bill_no')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.custom_no')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.item_number')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.Descr')),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.qty')) AS DECIMAL(18,6)) END,
|
|
|
+ NULLIF(NULLIF(COALESCE(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.sys_capacity_date')), JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.fystarttime'))), 'null'), ''),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.type')),
|
|
|
+ CASE
|
|
|
+ WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.isuse')) = '1' THEN 'LINKED'
|
|
|
+ ELSE 'INACTIVE'
|
|
|
+ END,
|
|
|
+ d.source_table,
|
|
|
+ d.source_row_id,
|
|
|
+ d.source_biz_key,
|
|
|
+ @BatchId,
|
|
|
+ @Now
|
|
|
+ FROM mdp_stg_ship_trans d
|
|
|
+ WHERE d.source_table='LinkagePlan'
|
|
|
+ AND IFNULL(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.bill_no')), '') <> ''
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ order_no=VALUES(order_no), customer_no=VALUES(customer_no), item_code=VALUES(item_code),
|
|
|
+ item_name=VALUES(item_name), qty=VALUES(qty), plan_ship_date=VALUES(plan_ship_date),
|
|
|
+ status=VALUES(status), linkage_status=VALUES(linkage_status), sync_batch_id=VALUES(sync_batch_id),
|
|
|
+ sync_time=VALUES(sync_time), update_time=CURRENT_TIMESTAMP
|
|
|
+ """, batchId, now);
|
|
|
}
|
|
|
|
|
|
private IEnumerable<S1MdpSqlCommand> BuildDwdCommands(string batchId, DateTime now)
|
|
|
{
|
|
|
+ yield return Cmd(
|
|
|
+ """
|
|
|
+ INSERT INTO dwd_requirement_examine_detail
|
|
|
+ (tenant_id, factory_id, stat_date, row_id, parent_row_id, examine_id, order_entry_id, bill_no, morder_no,
|
|
|
+ num, item_number, item_name, bom_number, model, kitting_time, item_type, erp_cls_name, qty, wastage,
|
|
|
+ need_count, sqty, use_qty, self_lack_qty, lack_qty, mo_qty, make_qty, purchase_qty, purchase_occupy_qty,
|
|
|
+ satisfy_time, have_ic_subs, substitute_code, create_time, source_system, sync_batch_id, calc_batch_id, calc_time)
|
|
|
+ SELECT
|
|
|
+ COALESCE(d.tenant_id, r.tenant_id, so.tenant_id, 0),
|
|
|
+ COALESCE(d.factory_id, r.factory_id, so.factory_id),
|
|
|
+ @StatDate,
|
|
|
+ CAST(d.source_row_id AS SIGNED),
|
|
|
+ CASE
|
|
|
+ WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.num')) = '1' THEN NULL
|
|
|
+ ELSE p.parent_row_id
|
|
|
+ END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.examine_id')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.examine_id')) AS SIGNED) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.sentry_id')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.sentry_id')) AS SIGNED) END,
|
|
|
+ COALESCE(so.order_no, JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.bill_no'))),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.morder_no')),
|
|
|
+ CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.num')) AS CHAR),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.item_number')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.item_name')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.bom_number')),
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.model')),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.kitting_time')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.type')) = '1' THEN '替代件' ELSE '标准件' END,
|
|
|
+ COALESCE(
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.erp_cls_name')),
|
|
|
+ CASE JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.erp_cls'))
|
|
|
+ WHEN '0' THEN '配置类'
|
|
|
+ WHEN '1' THEN '自制'
|
|
|
+ WHEN '2' THEN '委外加工'
|
|
|
+ WHEN '3' THEN '外购'
|
|
|
+ WHEN '4' THEN '虚拟件'
|
|
|
+ END
|
|
|
+ ),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.wastage')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.wastage')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.needCount')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.needCount')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.sqty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.sqty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.use_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.use_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.self_lack_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.self_lack_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.lack_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.lack_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.mo_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.mo_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE
|
|
|
+ WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.make_qty')) = '0' AND JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.erp_cls')) = '1'
|
|
|
+ THEN CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.lack_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.lack_qty')) AS DECIMAL(18,4)) END
|
|
|
+ WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.make_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.make_qty')) AS DECIMAL(18,4))
|
|
|
+ END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.purchase_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.purchase_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.purchase_occupy_qty')) REGEXP '^-?[0-9]+(\\.[0-9]+)?$' THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.purchase_occupy_qty')) AS DECIMAL(18,4)) END,
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.satisfy_time')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.haveicsubs')) = '1' THEN '是' ELSE '否' END,
|
|
|
+ JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.substitute_code')),
|
|
|
+ STR_TO_DATE(NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.create_time')), 'null'), ''), '%Y-%m-%d %H:%i:%s.%f'),
|
|
|
+ 'AIDOP',
|
|
|
+ d.sync_batch_id,
|
|
|
+ @BatchId,
|
|
|
+ @Now
|
|
|
+ FROM mdp_stg_so d
|
|
|
+ INNER JOIN mdp_stg_so r ON r.source_table='b_examine_result'
|
|
|
+ AND r.source_row_id = JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.examine_id'))
|
|
|
+ LEFT JOIN mdp_std_so so ON so.tenant_id = COALESCE(r.tenant_id, d.tenant_id)
|
|
|
+ AND so.order_entry_id = CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.sentry_id')) REGEXP '^-?[0-9]+$'
|
|
|
+ THEN CAST(JSON_UNQUOTE(JSON_EXTRACT(r.raw_data,'$.sentry_id')) AS SIGNED) END
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT examine_id, MIN(source_row_id) AS parent_row_id
|
|
|
+ FROM (
|
|
|
+ SELECT JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.examine_id')) AS examine_id, CAST(source_row_id AS SIGNED) AS source_row_id
|
|
|
+ FROM mdp_stg_so
|
|
|
+ WHERE source_table='b_bom_child_examine'
|
|
|
+ AND JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.num')) = '1'
|
|
|
+ AND JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.is_use')) IN ('1', 'true', 'True', 'base64:type16:AQ==')
|
|
|
+ ) x
|
|
|
+ GROUP BY examine_id
|
|
|
+ ) p ON p.examine_id = JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.examine_id'))
|
|
|
+ WHERE d.source_table='b_bom_child_examine'
|
|
|
+ AND JSON_UNQUOTE(JSON_EXTRACT(d.raw_data,'$.is_use')) IN ('1', 'true', 'True', 'base64:type16:AQ==')
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ parent_row_id=VALUES(parent_row_id), order_entry_id=VALUES(order_entry_id), bill_no=VALUES(bill_no),
|
|
|
+ morder_no=VALUES(morder_no), num=VALUES(num), item_number=VALUES(item_number), item_name=VALUES(item_name),
|
|
|
+ bom_number=VALUES(bom_number), model=VALUES(model), kitting_time=VALUES(kitting_time),
|
|
|
+ item_type=VALUES(item_type), erp_cls_name=VALUES(erp_cls_name), qty=VALUES(qty), wastage=VALUES(wastage),
|
|
|
+ need_count=VALUES(need_count), sqty=VALUES(sqty), use_qty=VALUES(use_qty), self_lack_qty=VALUES(self_lack_qty),
|
|
|
+ lack_qty=VALUES(lack_qty), mo_qty=VALUES(mo_qty), make_qty=VALUES(make_qty), purchase_qty=VALUES(purchase_qty),
|
|
|
+ purchase_occupy_qty=VALUES(purchase_occupy_qty), satisfy_time=VALUES(satisfy_time), have_ic_subs=VALUES(have_ic_subs),
|
|
|
+ substitute_code=VALUES(substitute_code), create_time=VALUES(create_time), sync_batch_id=VALUES(sync_batch_id),
|
|
|
+ calc_time=VALUES(calc_time), update_time=CURRENT_TIMESTAMP
|
|
|
+ """, batchId, now);
|
|
|
+
|
|
|
yield return Cmd(
|
|
|
"""
|
|
|
INSERT INTO dwd_ship_trans
|
|
|
@@ -547,13 +1004,19 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
@Now
|
|
|
FROM mdp_std_so so
|
|
|
LEFT JOIN (
|
|
|
- SELECT tenant_id, order_no, IFNULL(order_line, '') AS order_line, IFNULL(item_code, '') AS item_code,
|
|
|
+ SELECT tenant_id, order_no, order_entry_id, IFNULL(order_line, '') AS order_line, IFNULL(item_code, '') AS item_code,
|
|
|
SUM(IFNULL(plan_qty, IFNULL(qty, 0))) AS plan_qty,
|
|
|
MIN(plan_ship_date) AS plan_ship_date
|
|
|
FROM mdp_std_ship_trans
|
|
|
WHERE trans_type='SHIP_PLAN'
|
|
|
- GROUP BY tenant_id, order_no, IFNULL(order_line, ''), IFNULL(item_code, '')
|
|
|
- ) p ON so.tenant_id=p.tenant_id AND so.order_no=p.order_no AND IFNULL(so.order_line, '')=p.order_line AND IFNULL(so.item_code, '')=p.item_code
|
|
|
+ GROUP BY tenant_id, order_no, order_entry_id, IFNULL(order_line, ''), IFNULL(item_code, '')
|
|
|
+ ) p ON so.tenant_id=p.tenant_id
|
|
|
+ AND so.order_no=p.order_no
|
|
|
+ AND IFNULL(so.item_code, '')=p.item_code
|
|
|
+ AND (
|
|
|
+ (p.order_entry_id IS NOT NULL AND so.order_entry_id=p.order_entry_id)
|
|
|
+ OR (p.order_entry_id IS NULL AND IFNULL(so.order_line, '')=p.order_line)
|
|
|
+ )
|
|
|
LEFT JOIN (
|
|
|
SELECT tenant_id, order_no, IFNULL(order_line, '') AS order_line, IFNULL(item_code, '') AS item_code,
|
|
|
SUM(IFNULL(real_qty, IFNULL(qty_to_ship, 0))) AS real_qty,
|
|
|
@@ -750,9 +1213,19 @@ public class S1MdpSyncTransformService : ITransient
|
|
|
{
|
|
|
return metricCode switch
|
|
|
{
|
|
|
- "S1_L1_001" or "S1_L2_010" => 3m,
|
|
|
- "S1_L1_002" or "S1_L2_011" => 95m,
|
|
|
- "S1_L1_003" or "S1_L2_012" => 100m,
|
|
|
+ "S1_L1_001" or "S1_L2_001" or "S1_L2_004" or "S1_L2_010" => 3m,
|
|
|
+ "S1_L1_004" => 60m,
|
|
|
+ "S1_L1_002" or "S1_L2_002" or "S1_L2_005" or "S1_L2_011" or "S1_L2_013" or "S1_L2_014" or "S1_L2_015" => 95m,
|
|
|
+ "S1_L1_003" or "S1_L2_003" or "S1_L2_006" or "S1_L2_012" => 100m,
|
|
|
+ "S1_L3_001" or "S1_L3_101" => 8m,
|
|
|
+ "S1_L3_002" or "S1_L3_102" => 12m,
|
|
|
+ "S1_L3_003" or "S1_L3_103" => 8m,
|
|
|
+ "S1_L3_004" or "S1_L3_104" => 10m,
|
|
|
+ "S1_L3_005" or "S1_L3_105" => 2m,
|
|
|
+ "S1_L4_001" or "S1_L4_101" => 2m,
|
|
|
+ "S1_L4_002" or "S1_L4_102" => 3m,
|
|
|
+ "S1_L4_003" or "S1_L4_103" => 1m,
|
|
|
+ "S1_L4_004" or "S1_L4_104" => 2m,
|
|
|
_ => 0m
|
|
|
};
|
|
|
}
|
|
|
@@ -849,6 +1322,11 @@ internal sealed record S1MdpEntityConfig(
|
|
|
new("S1_SEORDER_CHANGE", "crm_seorder_change", "mdp_stg_so", "Id", "CONCAT(IFNULL(s.`bill_no`,''), ':', CAST(s.`Id` AS CHAR))"),
|
|
|
new("S1_CONTRACT_REVIEW", "ado_contract_review", "mdp_stg_so", "RecID", "COALESCE(s.`BillNo`, CAST(s.`RecID` AS CHAR))"),
|
|
|
new("S1_CONTRACT_REVIEW_FLOW", "ado_contract_review_flow", "mdp_stg_so", "RecID", "CONCAT(IFNULL(s.`ReviewBillNo`,''), ':', IFNULL(s.`StageNo`,''), ':', CAST(s.`RecID` AS CHAR))"),
|
|
|
+ new("S1_PRODUCT_DESIGN", "ado_product_design", "mdp_stg_so", "Id", "COALESCE(s.`BillNo`, CAST(s.`Id` AS CHAR))"),
|
|
|
+ new("S1_PRODUCT_DESIGN_BOM", "ado_product_design_bom", "mdp_stg_so", "Id", "CONCAT(CAST(s.`ProductDesignId` AS CHAR), ':', CAST(s.`Id` AS CHAR))"),
|
|
|
+ new("S1_PRODUCT_DESIGN_ROUTING", "ado_product_design_routing", "mdp_stg_so", "Id", "CONCAT(CAST(s.`ProductDesignId` AS CHAR), ':', CAST(s.`Id` AS CHAR))"),
|
|
|
+ new("S1_REQUIREMENT_EXAMINE_RESULT", "b_examine_result", "mdp_stg_so", "Id", "CONCAT(IFNULL(s.`bill_no`,''), ':', IFNULL(s.`morder_no`,''), ':', CAST(s.`Id` AS CHAR))"),
|
|
|
+ new("S1_REQUIREMENT_EXAMINE_DETAIL", "b_bom_child_examine", "mdp_stg_so", "Id", "CONCAT(IFNULL(s.`examine_id`,''), ':', IFNULL(s.`item_number`,''), ':', CAST(s.`Id` AS CHAR))"),
|
|
|
new("S1_SHIPPING_PLAN", "ShippingPlan", "mdp_stg_ship_trans", "RecID", "COALESCE(s.`LotSerial`, CAST(s.`RecID` AS CHAR))"),
|
|
|
new("S1_SHIPPING_PLAN_DETAIL", "ShippingPlanDetail", "mdp_stg_ship_trans", "RecID", "CONCAT(IFNULL(s.`plan_id`,''), ':', IFNULL(s.`OrdNbr`,''), ':', CAST(s.`RecID` AS CHAR))"),
|
|
|
new("S1_ASN_SHIPPER_MASTER", "ASNBOLShipperMaster", "mdp_stg_ship_trans", "RecID", "COALESCE(s.`Id`, CONCAT(IFNULL(s.`OrdNbr`,''), ':', CAST(s.`RecID` AS CHAR)))"),
|