| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- -- 1.0.322.sql S2 排程正确性重构 G1:按产线补齐工作日历。
- -- 使 S1 CapacityDateCalculator(按 ProdLine + ShiftsHours1)与后续 S2 产线维度排程可用。
- -- 班制已决策:周一~周五 IsWorkDay=1,周六周日=0,ShiftsHours1=10.5(待办 P-027 业务复核)。
- -- 幂等:以 (tenant_id, TRIM(ProdLine), WeekDay) 判存在,只新增不修改。
- -- 强制 TRIM(Line):避免尾随空格导致同一产线播种 14 行、触发 Count!=7 静默退化。
- -- ============================================================================
- SET NAMES utf8mb4;
- INSERT INTO ShopCalendarWorkCtr
- (ProdLine, WorkCtr, WeekDay, IsWorkDay, ShiftsHours1,
- IsActive, IsConfirm, tenant_id, CreateUser, UpdateUser, CreateTime, UpdateTime)
- SELECT
- l.ProdLine,
- '',
- d.WeekDay,
- CASE WHEN d.WeekDay BETWEEN 1 AND 5 THEN 1 ELSE 0 END,
- 10.5,
- 1,
- 0,
- l.tenant_id,
- 'sys', 'sys', NOW(), NOW()
- FROM (
- SELECT DISTINCT tenant_id, TRIM(Line) AS ProdLine
- FROM ProdLineDetail
- WHERE IFNULL(IsActive, 0) = 1
- AND TRIM(IFNULL(Line, '')) <> ''
- ) l
- CROSS JOIN (
- SELECT 0 AS WeekDay UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
- UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
- ) d
- LEFT JOIN (
- SELECT tenant_id AS t, TRIM(IFNULL(ProdLine, '')) AS pl, WeekDay AS wd
- FROM ShopCalendarWorkCtr
- ) c ON c.t = l.tenant_id AND c.pl = l.ProdLine AND c.wd = d.WeekDay
- WHERE c.t IS NULL;
- -- G2 存量回填:修正 WorkOrdRouting 错误映射(Rate 曾误写入 MachBdnRate)
- -- 仅回填仍能关联到 ProdLineDetail 的活跃关键工序行。
- UPDATE WorkOrdRouting r
- INNER JOIN ProdLineDetail b
- ON b.Part = r.ItemNum AND b.Op = r.OP AND b.tenant_id = r.tenant_id
- SET
- r.StdRunTime = CASE WHEN IFNULL(b.Rate, 0) > 0 THEN 1.0 / b.Rate ELSE r.StdRunTime END,
- r.RunCrew = CAST(IFNULL(NULLIF(TRIM(IFNULL(b.RunCrew, '')), ''), '0') AS DECIMAL(18, 4)),
- r.Line = LEFT(TRIM(IFNULL(b.Line, '')), 8),
- r.ProdLine = LEFT(TRIM(IFNULL(b.Line, '')), 8),
- r.MachBdnRate = 0,
- r.UpdateTime = NOW()
- WHERE IFNULL(r.IsActive, 0) = 1
- AND IFNULL(r.MilestoneOp, 0) = 1
- AND IFNULL(b.IsActive, 0) = 1;
|