| docs/feedback_qc_flag_source.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/process_multi_output_design.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/product_receipt_stock_timing.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/production_feedback_qc_fix_plan.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/qc_source_link_frontend_integration.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/task_reporter_assignment.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
docs/feedback_qc_flag_source.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ # æ¥å·¥è´¨æ£æ è¯åå¼è°æ´ - å端èè°æ¹æ¡ ## æ¶åé¡µé¢ - ç产订åï¼å·¥åå·¥åºå表ãå·¥åºç¼è¾ï¼ - MES ç产任å¡ï¼ä»»å¡å表ãä»»å¡è¯¦æ ãå¾ æ¥å·¥å°è´¦ï¼ - MES ç产æ¥å·¥ï¼æ°å¢/ä¿®æ¹ã审æ¹ï¼ - ç产工ä½å°ï¼ä»»å¡åè¡¨ãæ¥å·¥é¡µç¾ï¼ ## ä¸å¡èæ¯ å·¥åå建æ¶å¯ä»¥å¨ãå·¥åºã页ç¾åç¬å¾éæ¬å·¥åæ¯éå·¥åºæ¯å¦è´¨æ£ï¼è¯¥é ç½®ä¿åå¨å·¥åå·¥åºå¿«ç § `mes_pro_work_order_process`ã æ¤åæ¥å·¥å®¡æ¹ãä»»å¡å表ãå·¥ä½å°å¤æãæ¯å¦éè¦è´¨æ£ãæ¶è¯»åçæ¯å·¥èºè·¯çº¿æ¨¡æ¿ `mes_pro_route_process`ï¼å¯¼è´å·¥åä¸å¾éãè´¨æ£ãä½å·¥èºè·¯çº¿è¯¥å·¥åºä¸ºãå¦ãæ¶ï¼æ¥å·¥å®¡æ¹èµ°çæ¯å æ£åæ¯ï¼äº§åºç´æ¥æåæ ¼å ¥åºï¼ä¸çæå¾ æ£ä»»å¡ï¼ä»»å¡æ¥å®å·¥åä¸ä¼è¿å ¥è´¨æ£ã è°æ´åç»ä¸ä¸ºï¼**ä¸å¾ä»¥å·¥åå·¥åºå¿«ç §çãè´¨æ£ãæ è¯ä¸ºå**ï¼ä» å¨å·¥åæªç»´æ¤å¯¹åºå·¥åºæ¶åéå·¥èºè·¯çº¿æ¨¡æ¿ã ## è®°è´¦/æµç¨è§å | åºæ¯ | è§å | |------|------| | å·¥åå·¥åºå¾éè´¨æ£ | æ¥å·¥å®¡æ¹åçæãå¾ æ£éªã产åºï¼è¿å ¥å¾ æ£ä»»å¡ï¼è´¨æ£å®æåæå ¥åº | | å·¥åå·¥åºæªå¾éè´¨æ£ | æ¥å·¥å®¡æ¹åæåæ ¼/ä¸åæ ¼æ°éç´æ¥å®æå ¥åº | | å·¥åæªç»´æ¤è¯¥å·¥åº | åé读åå·¥èºè·¯çº¿å·¥åºçè´¨æ£æ è¯ | | å岿 è¯ | ä¸è´¨æ£æ è¯ä¸è´ï¼å·¥åå·¥åºå¿«ç §ä¼å ï¼å·¥èºè·¯çº¿å åº | ## API æ¥å£è·¯å¾ã请æ±åæ°ãååºç»æåæ ååï¼ä» `checkFlag` åæ®µçå弿¥æºè°æ´ã | æ¹æ³ | è·¯å¾ | 说æ | |------|------|------| | GET | /mes/pro/task/get | ä»»å¡è¯¦æ ï¼`checkFlag` æ¹ä¸ºåå·¥åå·¥åºå¿«ç § | | GET | /mes/pro/task/page | ä»»å¡å页ï¼åä¸ | | GET | /mes/pro/task/pending-feedback-page | å¾ æ¥å·¥å°è´¦ï¼åä¸ | | GET | /mes/pro/feedback/get | æ¥å·¥è¯¦æ ï¼`checkFlag` æ¹ä¸ºåå·¥åå·¥åºå¿«ç § | | GET | /mes/pro/feedback/page | æ¥å·¥å页ï¼åä¸ | | PUT | /mes/pro/feedback/update | æ ¡éªå£å¾æ¹ä¸ºå·¥åå·¥åºå¿«ç §ï¼éæ£å·¥åºåªæ ¡éªæ¥å·¥æ°éï¼ | | POST | /mes/pro/feedback/approve | å®¡æ¹æå·¥åå·¥åºå¿«ç §å³å®æ¯å¦è¿å ¥è´¨æ£ | ## åæ®µå±ç¤ºè§å | åæ®µ | å±ç¤ºä½ç½® | åå说æ | |------|----------|----------| | checkFlag | ç产任å¡å表ãä»»å¡éæ©å¼¹çª | åå·¥åå·¥åºå¿«ç §ï¼è¡¨ç¤ºè¯¥ä»»å¡äº§åºæ¯å¦éè¦è´¨æ£ | | checkFlag | æ¥å·¥è¡¨åæ°éåºå | 为 true æ¶åªå¡«æ¥å·¥æ°éï¼ä¸º false æ¶å¡«åæ ¼/ä¸åæ ¼æ°é | | backflushFlag | ä»»å¡å表 | åå·¥åå·¥åºå¿«ç §ï¼è¡¨ç¤ºè¯¥å·¥åºæ¯å¦å岿£æ | ## å¤äº§åºç©æçæ£éªè§å åä¸éå·¥åºå¯è½åæ¶äº§åºå¤ä¸ªç©æï¼ä¸»äº§åº + è产åºï¼æ¥æºä¸ºå·¥åå·¥åºå¿«ç § `outputItemId`ï¼ï¼éè¦æ£éªæ¶ï¼ | åºæ¯ | è§å | |------|------| | æ¥å·¥å®¡æ¹ | æ¯ä¸ªäº§åºç©æåçæä¸æ¡ãå¾ æ£éªã产åºè¡ï¼äº§åºåä¿ææªå®æï¼æ¥å·¥ç¶æä¸ºå¾ æ£éª | | å¾ æ£ä»»å¡ | æ¯æ¡äº§åºè¡åç°ä¸ºä¸æ¡å¾ æ£è®°å½ï¼ç©æå产åºè¡ç©æï¼å·¥åºåæ¥å·¥åå·¥åº | | å建è¿ç¨æ£éªå | æ£éªç©æææ¥æºäº§åºè¡ç¡®å®ï¼ä¸ååä»»å¡ç©æï¼ï¼å·¥åºåæ¥å·¥åå·¥åº | | 宿æå¼ æ£éªå | åªæå该æ£éªå对åºç产åºè¡ï¼çæåæ ¼/ä¸åæ ¼æç»ï¼ | | 宿æ¥å·¥ | å䏿¥å·¥çææäº§åºè¡é½æ£éªå®æåï¼äº§åºåæå®æå ¥åºï¼æ¥å·¥/ä»»å¡è¿åº¦æåå | | æ°éå£å¾ | æ¥å·¥åä¸ä»»å¡çåæ ¼/ä¸åæ ¼/åºåæ°éåªç»è®¡ä¸»äº§åºç©æï¼è产åºç©æåç¬æ£éªãåç¬å ¥åº | | æ£éªæ¨¡æ¿ | æ¯ä¸ªäº§åºç©æé½å¿ é¡»åç¬é ç½®å¯ç¨çè¿ç¨æ£éªæ¨¡æ¿ï¼IPQCï¼ï¼å¦åå®¡æ¹æå»ºåä¼æç¤ºç¼ºå¤± | ## 注æäºé¡¹ - å·¥åå·¥åºå¾éãè´¨æ£ãæ¶ï¼è¯¥å·¥åºçæ¯ä¸ªäº§åºç©æé½å¿ 须已é ç½®å¯ç¨çè¿ç¨æ£éªæ¨¡æ¿ï¼IPQCï¼ï¼å¦å审æ¹ä¼æç¤ºãæªé ç½®å¯ç¨çè¿ç¨æ£éªæ¨¡æ¿ãã - å端å¦èªè¡è°ç¨ `/mes/pro/route-process/get-by-route-and-process` æ¨å¯¼ `checkFlag`ï¼åºæ¹ä¸ºä¼å 使ç¨ä»»å¡ææ¥å·¥æ¥å£è¿åç `checkFlag`ï¼é¿å ä¸å端审æ¹å£å¾ä¸ä¸è´ã - è¿ç¨æ£éªåçç©æç±åç«¯ææ¥æºäº§åºè¡ç¡®å®ï¼å端æ éä¼ `itemId`ï¼ä¼ äºä¹ä¸ä¼æ¹åæ£éªç©æã - åå²ä»»å¡ RW2611070009 å·²æ `scripts/feedback-qc-rollback-20261107/01_rollback_rw2611070009.sql` å `03_rollback_per_material_ipqc.sql` å鿥工åãä»»å¡è¿åº¦ã产åº/èªå¨å ¥åºååè¿ç¨æ£éªåï¼å¯éæ°æ¥å·¥éªè¯è´¨æ£æµç¨ã docs/process_multi_output_design.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,251 @@ # ä¸éå·¥åºå¤äº§åºï¼è产åï¼è®¾è®¡ä¸æ¹é æ¹æ¡ > ç¶æï¼å¾ 确认ï¼ç¡®è®¤åå宿½ > æ¥æï¼2026-11-07 ## 1. èæ¯ ä¸é®æäº§é¢è§æ¶ï¼å·¥å `WO_202611070001` å¨å·¥åºãéè¯å è£ ãè¢«æ¦æªï¼ ``` å·¥åºéè¯å è£ å¯¹åºå¤ä¸ªäº§åºï¼è¯·æå·¥æäº§ç¡®è®¤åäº§åºæ°é ``` æ¥æºï¼`MesProBatchScheduleService.java:252-260`ãå½åæäº§æ¨¡åæ¯ãä¸éå·¥åº = ä¸ä¸ªä»»å¡ = ä¸ä¸ªäº§åºç©æãï¼æ£æµå°å·¥åºäº§åºå¤äºä¸ä¸ªæ¶ç´æ¥æéã ä½å·¥èºè·¯çº¿æ¬èº«å 许ä¸éå·¥åºé ç½®å¤ä¸ªäº§åºï¼`mes_pro_route_process_output`ï¼ï¼å·¥åå·¥åºå¿«ç §ä¹ä¿åäºå¤ä¸ªäº§åºï¼`mes_pro_work_order_process.output_item_id`ï¼éå·åéï¼ã䏿¸¸çä»»å¡ãæ¥å·¥ãç产产åºåå齿¯åç©ææ¨¡åï¼å æ¤å¤äº§åºç®åå¤äºãè½é ãä¸è½æãä¸è½æ£ç¡®æµè½¬ãçç¶æã åæ¶ææ¥åç°å ä¸ªå ³èé®é¢ï¼ | ä½ç½® | ç°ç¶é®é¢ | |------|----------| | `MesProBatchScheduleService` | å¤äº§åºç´æ¥æç»ï¼æ æ³æ¹éæäº§ | | `schedule-form.vue:128` | æäº§æ¶æ `outputItemId`ï¼éå·ä¸²ï¼ç´æ¥å½ `itemId` ä¼ ç»ä»»å¡ï¼å¤äº§åºæ¶ä¼ä¼ éæ³å¼ | | `MesProTaskServiceImpl.resolveTaskItemId` | å第ä¸ä¸ªäº§åºï¼é¡ºåºä¸ç¡®å® | | `MesWmProductProduceServiceImpl` | ä¸ä¸ªæ¥å·¥åªçæä¸ä¸ªç©æç产åºè¡ | | `MesProWorkOrderBomController.buildWorkOrderItems` | 产åºâå·¥åºæææ å°åªå CSV 第ä¸ä¸ªäº§åº | | `mes_pro_route_process_output` | åéåå¨éå¤è¡ï¼route_process 126/127/128/129 å ± 4 ç»ï¼ | ## 2. ä¸å¡å®ä¹ï¼å·²ç¡®è®¤ï¼ 1. **å䏿¬¡å å·¥åæ¶äº§åºå¤ä¸ªç©æ**ï¼è产å/å¯äº§åï¼ï¼ä¸æ¯åä¸å·¥åºåå«ç产ã 2. åäº§åºæ°éç±**å·¥èºè·¯çº¿å·¥åºäº§åºé ç½®ä¸çåºå®é æ¯**å³å®ï¼ä»¥ä¸»äº§åºä¸ºåºå `1`ï¼ - 主产åºï¼æ¯å å·¥ 1 个主产åºï¼ - å ¶å®äº§åºï¼æ¯å å·¥ 1 个主产åºéå¸¦çæ°éï¼å¦ `2` 表示 1 个主产åºåæ¶äº§åº 2 个åä½ï¼ã 3. æäº§ãæ¥å·¥ãå·¥åè¿åº¦ãæ¥å·¥æ£æé½ä»¥**ä¸»äº§åºæ°é**为åï¼å ¶å®äº§åºæé æ¯èªå¨æ¢ç®ã 4. ä¸ä¸ªå·¥åºä»ç¶**åªçæä¸ä¸ªç产任å¡ãåªæ¥ä¸æ¬¡å·¥**ï¼äº§åºåæäº§åºç©æææå¤è¡ã ## 3. æ»ä½æ¹æ¡ ``` å·¥èºè·¯çº¿å·¥åº âââ 产åºé ç½®ï¼itemId, é æ¯ quantity, ä¸»äº§åº mainFlagï¼ â â¼ å·¥åå·¥åºå¿«ç §ï¼output_item_id éå·ä¸²ï¼ä¸»äº§åºæç¬¬ä¸ä½ï¼ â â¼ ç产任å¡ï¼ä¸æ¡ï¼itemId = 主产åºï¼quantity = ä¸»äº§åºæ°éï¼ â â¼ æ¥å·¥ï¼ä¸æ¬¡ï¼feedback.itemId = 主产åºï¼ â â¼ ç产产åºåï¼ä¸ä¸ªåå¤´ï¼æ¯ä¸ªäº§åºä¸è¡ line + 䏿¡ detailï¼ â ⼠产åå ¥åºåï¼ä¸ä¸ªåå¤´ï¼æ¯è¡ä¸ä¸ªäº§åºï¼ ``` æ ¸å¿ååï¼**䏿°å¢ä»»å¡ç»´åº¦ã䏿¹æ¥å·¥æ¨¡å**ï¼åªå¨äº§åºåçææ¶æé æ¯å±å¼å¤è¡ãè¿æ ·æäº§å·¥æ¶ãæ¥å·¥æ£æãå·¥åå·²ç产æ°éç计ç®é½ä¸åå½±åã ## 4. æ°æ®æ¨¡å ### 4.1 `mes_pro_route_process_output` å¢å åæ®µ ```sql ALTER TABLE mes_pro_route_process_output ADD COLUMN quantity DECIMAL(18,6) NOT NULL DEFAULT 1.000000 COMMENT 'é æ¯ï¼æ¯1个主产åºçé带æ°éï¼ä¸»äº§åºåºå®ä¸º1' AFTER item_id; ALTER TABLE mes_pro_route_process_output ADD COLUMN main_flag TINYINT NOT NULL DEFAULT 0 COMMENT 'æ¯å¦ä¸»äº§åºï¼1æ¯ 0å¦' AFTER quantity; ``` 说æï¼ - 主产åºç `quantity` åºå®ä¸º 1ï¼ç±æå¡ç«¯å¼ºå¶ï¼å ¶å®äº§åºå¿ é¡» > 0ã - åä¸éå·¥åºï¼åä¸å½å±äº§ååç»å ï¼æå¤ä¸ä¸ª `main_flag = 1`ï¼æå¡å±æ ¡éªï¼ä¸åæ°æ®åºå¯ä¸ç´¢å¼ï¼`product_id` å 许为 NULLï¼å¯ä¸ç´¢å¼æ æ³çº¦æï¼ã - å·¥åºäº§åºåéé仿 `product_id IS NULL OR product_id = å½å产å` è¿æ»¤ï¼è¥è¿æ»¤å没æä¸»äº§åºï¼è¿è¡æ¶åéåæåºç¬¬ä¸æ¡ã ### 4.2 å·¥åå·¥åºå¿«ç § `mes_pro_work_order_process.output_item_id` ç»§ç»ä½¿ç¨éå·ä¸²ï¼**åªè°æ´é¡ºåºï¼ä¸»äº§åºæç¬¬ä¸ä½**ï¼å ¶ä½æ sort æåºã åå ï¼ç°æä»»å¡å建ãBOM å±å¼ãå端å±ç¤ºé½æåã第ä¸ä¸ªãçå åºé»è¾ï¼ä¿æç¬¬ä¸ä½æ¯ä¸»äº§åºå¯ä»¥æå°åæ¹å¨ã é æ¯ä¸å¿«ç §å°å·¥åï¼çæäº§åºåæ¶æ `(routeId, processId, productId, itemId)` åæ¥è·¯çº¿é ç½®ï¼æ¥ä¸å°æ¶é»è®¤ 1ã > è¾¹çï¼è·¯çº¿å¯ç¨åä¸å 许ç¼è¾ï¼åç¨âä¿®æ¹âåå¯ç¨æ¶ï¼åå²å·¥åçé æ¯ä¼è·é路线ååãå¦éå»ç»ï¼åç»å¯å¢å å·¥åå·¥åºäº§åºå¿«ç §è¡¨ï¼æ¬æ¹æ¡æä¸å¼å ¥ã ### 4.3 åéæ°æ®æ¸ ç ```sql -- 1) å é¤éå¤äº§åºå½å±è¡ï¼ä¿çæ¯ç»æå° id DELETE o1 FROM mes_pro_route_process_output o1 JOIN mes_pro_route_process_output o2 ON o1.route_process_id = o2.route_process_id AND o1.item_id = o2.item_id AND (o1.product_id = o2.product_id OR (o1.product_id IS NULL AND o2.product_id IS NULL)) AND o1.id > o2.id; -- 2) æ¯éå·¥åºåå¡«ä¸ä¸ªä¸»äº§åºï¼æåºæå°ãååºå id æå°ï¼ UPDATE mes_pro_route_process_output o JOIN ( SELECT route_process_id, MIN(id) AS keep_id FROM ( SELECT route_process_id, id, ROW_NUMBER() OVER (PARTITION BY route_process_id ORDER BY sort IS NULL, sort, id) AS rn FROM mes_pro_route_process_output ) t WHERE rn = 1 GROUP BY route_process_id ) m ON m.keep_id = o.id SET o.main_flag = 1; ``` > 注ï¼å¦ææéå·¥åºæä¸åå½å±äº§åé ç½®äºä¸å产åºï¼ä¸»äº§åºæå ¨å±å䏿¡ï¼è¿è¡æ¶è¥å½å产åè¿æ»¤åä¸å«è¯¥è¡ï¼åéåæåºç¬¬ä¸æ¡ã ## 5. å端æ¹é æ¸ å | æä»¶ | æ¹å¨ | |------|------| | `MesProRouteProcessOutputDO` | å¢å `quantity`ã`mainFlag` åæ®µ | | `MesProRouteProcessSaveReqVO.OutputItem` | å¢å `quantity`ã`mainFlag`ï¼ä¿åæ¶æ ¡éªä¸»äº§åºå¯ä¸ãé æ¯ > 0 | | `MesProRouteProcessOutputVO` / `RespVO` | ååºå¢å `quantity`ã`mainFlag` | | `MesProRouteProcessServiceImpl` | ä¿åé æ¯/主产åºï¼`resolveOutputItemId` æã主产åºä¼å + sortãæ¼æ¥ï¼`getOutputItemIdsByRouteProcessId` è¿å顺åºä¸»äº§åºä¼å ï¼æ°å¢ `getProcessOutputs(routeProcessId, productId)` è¿å `itemId + ratio + mainFlag` | | `MesProWorkOrderProcessServiceImpl.getProcessListByProductId` | 已走 `getRouteProcessListByProductId`ï¼ä¿è¯ CSV 主产åºå¨é¦ä½ | | `MesProBatchScheduleService` | å é¤ãå¤ä¸ªäº§åºãæéï¼ä»»å¡ç©æå主产åºï¼é¢è§å¢å warningãå·¥åº X å« N 个è产åºï¼æä¸»äº§åºæäº§ã | | `MesProTaskServiceImpl.resolveTaskItemId` | å主产åºï¼ä¾èµä¸é¢çæåºä¿è¯å第ä¸ä¸ªå³ä¸»äº§åºï¼ | | `MesWmProductProduceServiceImpl.generateProductProduce` | æäº§åºå表çæå¤è¡ï¼æ¯è¡ `itemId` = 产åºç©æï¼`quantity` = æ¥å·¥æ°é Ã é æ¯ï¼æ¹æ¬¡æåèªç©æçæ | | `MesWmProductProduceServiceImpl.splitPendingAndFinishProduce` | IPQC 宿æ¶ï¼é¤æºè¡å¤æåä¸åæ ¼çæåå产åºåå å ¶å®å¾ æ£è¡ | | `MesProWorkOrderBomController.buildWorkOrderItems` | 产åºâå·¥åºæææ å°è¦çå ¨é¨äº§åºï¼èäº§åºæã轮次 = max(éæ±é / æ¯è½®äº§åºé)ãåªå±å¼ä¸æ¬¡ï¼é¿å éå¤è®¡ç® | | `MesProFeedbackServiceImpl` | ä¸åï¼æ¥å·¥ç©æä»ä¸ºä¸»äº§åºï¼ï¼å¦é卿¥å·¥åå±ç¤ºè产åºï¼ä» ååªè¯»å±ç¤º | | `MesWmItemConsumeServiceImpl` | ä¸åï¼ä¸æ¬¡æ¥å·¥æå·¥åº BOM à æ¥å·¥æ°éæ£ä¸æ¬¡æï¼å¤©ç¶æ£ç¡®ï¼ | | `MesWmProductReceiptServiceImpl` | ä¸åï¼äº§åºåå¤è¡ â å ¥åºåå¤è¡ï¼ç°æé»è¾å·²æ¯æï¼ | | `ErrorCodeConstants` | æ°å¢ï¼`PRO_ROUTE_PROCESS_OUTPUT_MAIN_REQUIRED`ï¼1_040_501_104ï¼ã`PRO_ROUTE_PROCESS_OUTPUT_RATIO_INVALID`ï¼_105ï¼ã`PRO_ROUTE_PROCESS_OUTPUT_MAIN_DUPLICATE`ï¼_106ï¼ | ## 6. æ ¸å¿ç®æ³ ### 6.1 æ°éæ¢ç® ``` 主产åºï¼qty_main = feedbackQuantity å ¶å®äº§åº iï¼qty_i = feedbackQuantity à ratio_i ``` - é æ¯å è®¸å°æ°ï¼å¦ 0.5 kg / 1 个ï¼ï¼ä¿ç 6 ä½ã - ä¸å强å¶åæ´ï¼å¦éæç©æè®¡éåä½åæ´ï¼åç»å¨äº§åºçæå¤è¡¥å ã ### 6.2 æ¹éæäº§ 1. å·¥åºç®æ æ°é `targetQuantity` 仿æ¶ç忍ï¼ä¸»äº§åºå£å¾ï¼ã 2. è§£æè¯¥å·¥åºä¸»äº§åºç©æï¼ä¼å å `main_flag = 1` ä¸å½å±å½å产åç产åºï¼æ²¡æååæåºç¬¬ä¸æ¡ã 3. 任塿°é = `targetQuantity - å·²æä»»å¡æ°é`ï¼ä»»å¡ç©æ = 主产åºã 4. ä¸åå 为åå¨å ¶å®äº§åºèæ¥éï¼å ¶å®äº§åºä¸çæä»»å¡ã 5. é¢è§ç»æå¯¹å¤äº§åºå·¥åºè¿½å 䏿¡é黿 warning æç¤ºã ### 6.3 æ¥å·¥ â 产åºå `generateProductProduce` å ï¼ 1. è§£æäº§åºå表ï¼å·¥åå·¥åºå¿«ç §ç `output_item_id`ï¼é¡ºåºå³ä¸»äº§åºä¼å ï¼â© è·¯çº¿é æ¯é ç½®ï¼ç¼ºå¤±é æ¯æ 1ã 2. æ æ£éªï¼æ¯ä¸ªäº§åºæãåæ ¼æ° / ä¸åæ ¼æ°ãåçæä¸è¡ï¼æ²¿ç¨ç°ææåè§åï¼ï¼æ°éåèªä¹é æ¯ã 3. éè¦æ£éªï¼æ¯ä¸ªäº§åºçæä¸æ¡ãå¾ æ£éªãè¡ï¼çå¾ IPQCã 4. æ¹æ¬¡å·æå产åºç©æåå«çæï¼æ²¿ç¨ `getOrGenerateBatchCode`ï¼ã 5. æç»è¡çä»åºæ²¿ç¨ `resolveOutputTarget(workOrderId, processId, itemId, feedbackId)`ï¼ - å·¥åå·¥åºé ç½®äºä»åº â ææäº§åºè¡é½ç¨è¯¥ä»åºï¼ - å¦åæäº§åºç©ææ¥è·¯çº¿äº§åä»åºï¼ - æ«éå·¥åºä»è¦æ±å®é ä»åºï¼ä¸é´å·¥åºä»å¯è½èæçº¿è¾¹åºã ### 6.4 IPQC - æ£éªä»ä»¥ä¸»äº§åºå¾ æ£è¡ä¸ºæºè¡ï¼IPQC å䏿¥å·¥åä¸ä¸å¯¹åºï¼ã - æ£éªå®ææ¶ï¼æä¸»äº§åºè¡ç `åæ ¼æ° / å¾ æ£æ°é` å¾å°åæ ¼ç `r`ï¼å¯¹å产åºåå å ¶å®å¾ æ£è¡æ§è¡ï¼ - `åæ ¼_i = è¡æ°é à r`ï¼ä¿ç 6 ä½ï¼ï¼ - `ä¸åæ ¼_i = è¡æ°é - åæ ¼_i`ã - è¡æ°é为 0 ç产åºä¸çæäº§åºåè¡ã ### 6.5 ç©æéæ±å±å¼ `buildWorkOrderItems` è°æ´ï¼ 1. æ¯ä¸ªäº§åºç©æé½å»ºç«ãäº§åº â æ¬å·¥åºææé æ¹ãæ å°ï¼ä¸ååªå第ä¸ä¸ªï¼ã 2. éå±å±å¼æ¶ï¼å¯¹å±äºåä¸å·¥åºçå¤ä¸ªäº§åºå æè½®æ¬¡å½å¹¶ï¼ ``` runs = max(å产åºéæ±é / è¯¥äº§åºæ¯è½®äº§åºé) æ¯è½®äº§åºéï¼ä¸»äº§åº = 1ï¼å ¶å®äº§åº = ratio ``` ç¨ `runs` å±å¼ä¸æ¬¡è¯¥å·¥åºææï¼é¿å åå·¥åºäº§åºåå«å±å¼å¯¼è´ç©æéå¤ã 3. åªæä¸ä¸ªäº§åºçå·¥åºä¿æç°æé»è¾ä¸åã ## 7. å端æ¹é æ¸ å | é¡µé¢ / æä»¶ | æ¹å¨ | |-------------|------| | `pro/route/components/output-attribution.vue` | æ¯è¡å¢å ãé æ¯ãInputNumberï¼é»è®¤ 1ãæå° 0.000001ï¼ãã主产åºãRadioï¼åæ¢ä¸»äº§åºæ¶èªå¨æä¸ä¸è¡ä¸»äº§åºåæ¶ | | `pro/route/data.ts` å·¥åºå表 | ãæ¬å·¥åºäº§åºãåå±ç¤º `åç§° Ã é æ¯`ï¼ä¸»äº§åºå æ è®° | | å·¥åå建/ç¼è¾ â å·¥åºä¸äº§åº | å±ç¤ºè产åºåé æ¯ï¼åªè¯»ï¼ | | `pro/task/modules/schedule-form.vue` | ä¿®å¤ `item-id` ä¼ å ¥ï¼åå·¥åå·¥åºè¾åºç第ä¸ä¸ª idï¼ä¸»äº§åºï¼ï¼ä¸è¦ç´æ¥ä¼ éå·ä¸² | | æäº§é¢è§å¼¹çª | å¤äº§åºå·¥åºæ¾ç¤ºæç¤ºææ¡ï¼éé»æï¼ | | ç产产åºå / 产åå ¥åºå | ç°æå表æè¡å±ç¤ºï¼æ 鿰页é¢ï¼ç¡®è®¤å¤è¡æ£å¸¸æ¾ç¤ºï¼æ¥æºåä»æäº§åºåå±ç¤º | ## 8. å ¼å®¹æ§ä¸è¾¹ç | åºæ¯ | å¤ç | |------|------| | åéå·¥å缺å°ä¸»äº§åºæ è®° | è¿è¡æ¶åæåºç¬¬ä¸æ¡ä½ä¸ºä¸»äº§åº | | åéå·¥åå¿«ç § CSV 顺åºä¸è·¯çº¿ä¸ä¸è´ | ä»¥å¿«ç § CSV ç¬¬ä¸æ¡ä¸ºä¸»äº§åºï¼é æ¯æç©æåæ¥è·¯çº¿ | | å¯äº§åºå¨è·¯çº¿äº§å䏿²¡æä»åºé ç½® | ä¼å ç¨å·¥åå·¥åºä»åºï¼ä¸é´å·¥åºåéèæçº¿è¾¹åºï¼æ«éå·¥åºä»è¦æ±å®é ä»åºï¼ä¸ç°ææ ¡éªä¸è´ï¼ | | æ¥å·¥åªæ¥ä¸»äº§åºæ°é | å¯äº§åºæ°éç±é æ¯æ¨å¯¼ï¼ä¸å 许åç¬ä¿®æ¹ï¼é¿å ä¸ä¸»äº§åºè±èï¼ | | å·¥åºåªæä¸ä¸ªäº§åº | å ¨é¨é»è¾éåä¸ºç°æè¡ä¸º | | åä¸å·¥åºå·²æåå²ä»»å¡ï¼å¤ä»»å¡ï¼ | ä¸èªå¨åå¹¶ï¼æ°æäº§ä»æãå·²æä»»å¡æ°éå计ã计ç®å©ä½é | | 产åºå½å±éå¤è¡ | ç±è¿ç§»èæ¬æ¸ çï¼æå¡å±ä¿åæ¶æ `productId + itemId` å»éï¼å·²æé»è¾ï¼ | ## 9. è¿ç§»èæ¬ ç®å½ï¼`scripts/process-multi-output-20261107/` - `01_ddl.sql`ï¼å `quantity`ã`main_flag` å - `02_cleanup.sql`ï¼æ¸ çéå¤äº§åºè¡ + åå¡«ä¸»äº§åº èæ¬ä¸å å« `tenant_id`ï¼æ¬é¡¹ç®ä¸ä½¿ç¨å¤ç§æ·ï¼ã ## 10. éªæ¶æ¸ å 1. å·¥èºè·¯çº¿ãéè¯å è£ ãé ç½® 2 个产åºï¼å ¶ä¸ 1 个主产åºãé æ¯åå«ä¸º 1 / 2ï¼ä¿åæåï¼é ç½®ä¸¤ä¸ªä¸»äº§åºæ¶è¢«æ¦æªã 2. æ°å»ºå·¥åå¹¶çæå·¥åºï¼å¿«ç § `output_item_id` 主产åºå¨ç¬¬ä¸ä½ã 3. ä¸é®æäº§é¢è§éè¿ï¼çæ 1 个任å¡ï¼ç©æä¸ºä¸»äº§åºï¼æ°é = 工忰éã 4. æ¥å·¥ 100ï¼äº§åºåçæ 2 è¡ï¼ä¸»äº§åº 100ãå¯äº§åº 200ï¼é æ¯ 2ï¼ã 5. 产åå ¥åºåçæ 2 è¡ï¼æ°éåä»åºæ£ç¡®ã 6. å¼å¯ IPQCï¼æ£éªä¸»äº§åºåæ ¼ 90/100ï¼äº§åºåä¸¤è¡æ 90% æåï¼90/10ã180/20ï¼ã 7. å·¥åå·²ç产æ°éåªå¢å 100ï¼ä¸éå¤ç´¯å ã 8. æ¥å·¥èªå¨æ£æï¼æå·¥åº BOM à 100 æ£ä¸æ¬¡ï¼ä¸å å¤äº§åºé夿£æã 9. ç©æéæ±å±å¼ä¸éå¤è®¡ç®è¯¥å·¥åºææã 10. åéå产åºå·¥åºåè½å彿£å¸¸ã ## 11. 宿½é¡ºåº 1. DDL + DO/VO + 路线ä¿å/读åï¼å«ä¸»äº§åºãé æ¯ãæåºï¼ 2. æ°æ®æ¸ çèæ¬ + åéåå¡« 3. æäº§è§£éï¼`MesProBatchScheduleService`ãå端 schedule-form ä¿®å¤ï¼ 4. æ¥å·¥äº§åºåå¤è¡ + IPQC æå 5. å ¥åºåå½ 6. ç©æéæ±å±å¼è产åºå½å¹¶ 7. å端产åºé ç½®ãå表å±ç¤ºãæç¤º ## 12. å¾ ç¡®è®¤ 1. è产åºçè´¨æ£æ¯å¦å ¨é¨è·é主产åºåæ ¼çï¼æ¬æ¹æ¡é»è®¤è·éï¼ã 2. æ¥å·¥ç颿¯å¦éè¦å±ç¤ºèäº§åºæç»ï¼æ¬æ¹æ¡é»è®¤åªå±ç¤ºä¸»äº§åºï¼äº§åºåéä½ç°ï¼ã 3. é æ¯æ¯å¦å 许æå·¥åè¦çï¼æ¬æ¹æ¡é»è®¤åªå¨å·¥èºè·¯çº¿ç»´æ¤ï¼å·¥ååªè¯»ï¼ã docs/product_receipt_stock_timing.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ # 产åå ¥åºåºåè®°è´¦æ¶ç¹è°æ´ - å端èè°æ¹æ¡ ## æ¶åé¡µé¢ - 产åå ¥åºï¼å表ãæäº¤ãæ§è¡ä¸æ¶ãæ§è¡å ¥åºï¼ - åºåäºå¡æµæ°´ - åºåå°è´¦ / ç©æåºå ## ä¸å¡èæ¯ æ¤åæ¥å·¥å®¡æ¹çæäº§åºååï¼äº§åºå宿æ¶å°±ææåç´æ¥è®°å ¥å®é ä»åºåºåï¼å¯¼è´ã产åå ¥åºåè¿æªæäº¤ãæªæ§è¡ä¸æ¶ãæªæ§è¡å ¥åºãæ¶ï¼åºåäºå¡æµæ°´éå·²ç»åºç°äº§å产åºå ¥åºè®°å½ãåºåæ°éä¹å·²å¢å ã è°æ´åç»ä¸ä¸ºï¼**产åå ¥åºåæ§è¡å ¥åºæ¶æç»è®°å®é ä»åºåºå**ï¼ä¸éè´å ¥åºçæ§è¡å ¥åºå£å¾ä¸è´ã ## è®°è´¦è§å | åºæ¯ | è®°è´¦æ¶ç¹ | 说æ | |------|----------|------| | ä¸é´å·¥åºäº§åºå°èæçº¿è¾¹åº | æ¥å·¥å®¡æ¹çæäº§åºåå¹¶å®ææ¶ | 车é´å¨å¶åºåï¼ä¸éå·¥åºåå²é¢ç¨ä¾èµè¯¥åºåï¼ä¿æç«å³è®°è´¦ | | 产åºå°å®é ä»åºï¼æå/åæåï¼ | 产åå ¥åºåãæ§è¡å ¥åºãæ¶ | äºå¡ç±»å `产å产åº` ä¸å产çå®é ä»åºå ¥åºï¼æ¹ä¸º `çäº§å ¥åº` å ¥åºäºå¡ | | èªå¨çæç产åå ¥åºåï¼AUTO-PR-*ï¼ | æ§è¡å ¥åºæ¶ | ä» ç»è®°å®é ä»åºå ¥åº | | æå·¥å建ç产åå ¥åºå | æ§è¡å ¥åºæ¶ | ä¿æãèæçº¿è¾¹åºåºåº + å®é ä»åºå ¥åºã | ## API æ¥å£è·¯å¾ã请æ±åæ°ãååºç»æåæ ååã ## åæ®µå±ç¤ºè§å | åæ®µ | å±ç¤ºä½ç½® | åå说æ | |------|----------|----------| | åºåäºå¡æµæ°´ | åºåäºå¡æµæ°´é¡µé¢ | 产åºå°å®é ä»åºçè®°å½ï¼ä¸å¡ç±»åç±ã产å产åºãå为ãçäº§å ¥åºãï¼ä¸æ¶é´ç¹å为æ§è¡å ¥åºæ¶é´ | | åºåæ°é | åºåå°è´¦ãç©æåºå | æå/åæååºå卿§è¡å ¥åºåæå¢å | | 产åå ¥åºåæç»ä»åº | 产åå ¥åºè¯¦æ | ä»ä¸ºé¢å¡«çç®æ ä»åºï¼æ§è¡å ¥åºæ¶ææç»æç»ä»åºè®°è´¦ | ## ä¸å¡è§å说æ | åºæ¯ | è§å | |------|------| | 产åå ¥åºå为è稿 / å¾ ä¸æ¶ / å¾ æ§è¡å ¥åº | å®é ä»åºåºåä¸åï¼ä¸äº§çåºåäºå¡æµæ°´ | | æ§è¡å ¥åº | æä¸æ¶æç»çå®é ä»åºãåºä½ãåºåºç»è®°å ¥åºäºå¡ï¼å¹¶å¢å åºå | | èªå¨å ¥åºååå¨æç»æåèæçº¿è¾¹åº | è·³è¿è®°è´¦ï¼äº§åºå宿æ¶å·²è®°è´¦ï¼ï¼é¿å éå¤ | | 产åºå°èæçº¿è¾¹åºï¼ä¸é´å·¥åºï¼ | ä»ç«å³è®°è´¦ï¼å¦åä¸éå·¥åºåå²ä¼æ¥ãåºåä¸è¶³ã | ## 注æäºé¡¹ - å岿ªå®æçèªå¨å ¥åºå AUTO-PR-37 å·²æ `scripts/product-receipt-stock-timing-20261107/01_cleanup_early_transactions.sql` å²éæåè®°è´¦çåºåä¸äºå¡ï¼åç»æ§è¡å ¥åºä¼æ£å¸¸å ¥è´¦ã - AUTO-PR-36 缺å°ä¸æ¶æç»æ æ³æ§è¡å ¥åºï¼å ¶æåè®°è´¦çåºåææªå²éï¼å¦éè¡¥é½æç»åå ¥åºï¼é¡»å æèæ¬æ³¨éå²é对åºäºå¡ï¼å¦åä¼éå¤è®°è´¦ã - 已宿çå ¥åºåä¸åå½±åï¼ä¸éå¤è®°è´¦ã docs/production_feedback_qc_fix_plan.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,270 @@ # ç产æ¥å·¥èªå¨æ£æ / è´¨æ£æµè½¬ / 产åºå ¥åº ä¿®æ¹æ¹æ¡ > èå´ï¼MES ç产æ¥å·¥ï¼feedbackï¼å®¡æ¹ â å岿£æ â è¿ç¨æ£éªï¼IPQCï¼â 产åºå ¥åº > ç¶æï¼å¾ è¯å®¡ > æ¶å模åï¼`yudao-module-mes`ï¼pro / qc / wmï¼ ## ä¸ãèæ¯ å½åæ¥å·¥é¾è·¯å·²å®ç°èªå¨åï¼ä½å¨ä»¥ä¸ç¯èå卿°æ®æ£ç¡®æ§ä¸æµç¨éç¯é®é¢ï¼ - èªå¨æ£æï¼åå²ï¼ç¼ºå°å¯ç¨éæ ¡éªï¼ä¸ä¸åæ ¼å/ä¸é´å·¥åºçè´¦å¡å£å¾ä¸æ¸ æ° - è´¨æ£å®æåè°æ²¡æååä»»å¡ãå·¥åãMPS æ°é - è¿ç¨æ£éªæ°é没æä¸éæ ¡éªï¼ä¸ä¸åæ ¼åææ£å¸¸åå ¥è´¦ - 产åºå ¥åºå¨æ«éå·¥åºæªé 置产åºä»åºæ¶ï¼æåæ»çèæçº¿è¾¹åº - ãæ²¡æè´¨æ£æ¹æ¡ãæ¶ï¼æ¥å·¥è¿å ¥å¾ æ£åæ æ³å建è¿ç¨æ£éªåï¼æ°¸ä¹ å¡å¨å¾ æ£ç¶æ æ¬ææ¡£æ±æ»é®é¢ãæ ¹å ä¸ä¿®æ¹æ¹æ¡ï¼ä¾è¯å®¡å宿½ã ## äºãç°ç¶é¾è·¯ ### 2.1 æ è´¨æ£ï¼å·¥åº checkFlag = 0ï¼ ``` æ¥å·¥å®¡æ¹ approveFeedback ââ åå²å·¥åºï¼ ââ æ¯ â çææ¶èå + æ£çº¿è¾¹åº + çæåå²é¢æåè¯ ââ çæäº§åºåï¼æåæ ¼/ä¸åæ ¼æè¡ + æç»ï¼ ââ finishProductProduce ââ ä¸ºãææè¡ãå建 IN åºåäºå¡ï¼å«ä¸åæ ¼è¡ï¼ ââ æ´æ°äº§åºåä¸ºå·²å®æ ââ è¥ä¸ºæ«éå·¥åº â çæäº§åå ¥åºåï¼ä» åæ ¼è¡ï¼ç¶æ=èç¨¿ï¼ æ¥å·¥å®æ ``` ### 2.2 æè´¨æ£ï¼å·¥åº checkFlag = 1ï¼ ``` æ¥å·¥å®¡æ¹ approveFeedback ââ å岿£æï¼åä¸ï¼æ£æåçå¨è´¨æ£ä¹åï¼ ââ çæäº§åºåï¼åªå»ºä¸æ¡ãå¾ æ£éªãè¡ï¼ä¸å»ºæç» ââ æ¥å·¥ç¶æ â å¾ æ£éª å¾ æ£ä»»å¡é¡µï¼quality_status = å¾ æ£éª ç产åºè¡ï¼ ââ å建è¿ç¨æ£éªåï¼éç©æå·²é ç½® IPQC æ£éªæ¨¡æ¿ï¼ ââ 宿æ£éª finishIpqc ââ æåæ ¼/ä¸åæ ¼æå¾ æ£è¡ãçææç» ââ finishProductProduceï¼å ¥åºï¼æ«éçæå ¥åºåï¼ ââ ååæ¥å·¥åæ ¼/ä¸åæ ¼/åºåæ°éï¼ç¶æ â 已宿 ââ ä¸åæ ¼èªå¨çæ NCR ``` ## ä¸ãé®é¢æ±æ» | ç¼å· | ä¼å 级 | 模å | é®é¢æè¦ | |---|---|---|---| | Q1 | P0 | è´¨æ£åå | è´¨æ£å®æåè°æªæ´æ°ä»»å¡/å·¥å/MPS æ°é | | Q2 | P0 | æ¥å·¥ | å ³é®å·¥åºæ°éæ´æ°æ¶ç¹æ©äºäº§åºåçæï¼åæ ¼/ä¸åæ ¼æä¸º 0 | | Q3 | P1 | æ¥å·¥ | æ«éå·¥åºè¥éå ³é®å·¥åºï¼å·¥å/MPS å·²ç产æ°éæ°¸ä¸ç´¯å | | Q4 | P1 | æ¥å·¥ | è·¯çº¿å·¥åºæ¥ä¸å°æ¶ï¼éé»é级为ãä¸è´¨æ£ã䏿£æã | | Q5 | P0 | è¿ç¨æ£éª | è´¨æ£æ°éæ ä¸è´æ§/ä¸éæ ¡éªï¼å¯è¶ éå ¥åº | | Q6 | P0 | è¿ç¨æ£éª/å ¥åº | ä¸åæ ¼å乿æ£å¸¸ååå»ºå ¥åºäºå¡ï¼æ··å ¥å¯ç¨åºå | | Q7 | P1 | è¿ç¨æ£éª | å ¨é¨ä¸åæ ¼æåæ ¼æ°ä¸º 0 æ¶äº§ç 0 æ°éèæ°æ® | | Q8 | P1 | è¿ç¨æ£éª | åä¸å¾ æ£è¡å¯éå¤å建å¤å¼ æ£éªå | | Q9 | P2 | è¿ç¨æ£éª | æå·¥/å¯¼å ¥åå»ºçæ£éªåé taskId å åºååï¼å¯è½ä¸²åæå¤±è´¥ | | Q10 | P1 | è¿ç¨æ£éª | æ æ£éªæ¨¡æ¿æ¶å建æ¥éä¸æç¡®ï¼æ¥å·¥å¡å¨å¾ æ£ | | P1 | P0 | 产åºå ¥åº | æ«éå·¥åºæªé 置产åºä»æ¶ï¼æåæ»çèæçº¿è¾¹åº | | P2 | P1 | 产åºå ¥åº | èªå¨å ¥åºååªå»ºè¡ä¸å»ºæç»ï¼æ§è¡å ¥åºå¿ ç¶å¤±è´¥ | | P3 | P2 | 产åºå ¥åº | å¾ æ£æé´äº§åå®å ¨ä¸å ¥è´¦ï¼è´¦å¤ï¼ | | D1 | P1 | èªå¨æ£æ | å岿£ææ å¯ç¨éæ ¡éªï¼çº¿è¾¹åºå¯è¢«æ£æè´æ° | | D2 | P2 | èªå¨æ£æ | åä¸å·¥åº BOM åºç°åä¸ç©æå¤è¡æ¶ï¼éå¤å ç¨å䏿¹æ¬¡ | ## åãä¿®æ¹æ¹æ¡ ### Q1 è´¨æ£å®æåè°è¡¥ååä»»å¡/å·¥å/MPS - ä½ç½®ï¼`MesProFeedbackServiceImpl.java:632-658` - ç°è±¡ï¼æ¹æ³æ³¨éåçã4. æ´æ°ä»»å¡/å·¥åçå·²ç产æ°éãï¼ä½åªå¯¹å å对象 `set` äºä¸¤ä¸ªåæ®µï¼æ²¡æè°ç¨ `updateTaskAndWorkOrderByFeedback`ãç»æè´¨æ£å·¥åºçåæ ¼/ä¸åæ ¼æ°ä¸è¿ä»»å¡ï¼æ«éå·¥åºä¸ºè´¨æ£å·¥åºæ¶ï¼å·¥å `quantity_produced` ä¸ MPS `quantity_produced` ä¸ç´¯å ï¼MPS/éå®è®¢åçãçäº§å®æãå¤å®æ°¸è¿ä¸æ»¡è¶³ã - æ¹æ¡ï¼ 1. 第 5 æ¥ä¹åéæ°è¯»åæ¥å·¥åææ°æ°æ®ï¼ç¶æå·²æ¹ä¸ºå·²å®æï¼ä¸æ°éå·²ååï¼ã 2. è°ç¨ä¸ç´æ¥å ¥åºåæ¯ç»ä¸çè¿åº¦æ´æ°æ¹æ³ `updateTaskAndWorkOrderByFeedback(feedback)`ã 3. å é¤ç¬¬ 655 è¡æ æç `feedback.setQualifiedQuantity(...)` è°ç¨ã - å½±åï¼ä»»å¡ãå·¥åãMPSãéå®è®¢åçäº§å®æäºä»¶çæ°éå£å¾ä¿®æ£ã ### Q2 ä¿®æ£å ³é®å·¥åºæ°éæ´æ°æ¶ç¹ - ä½ç½®ï¼`MesProFeedbackServiceImpl.java:330-360` - ç°è±¡ï¼`keyFlag=true` æ¶å è°ç¨ `updateTaskAndWorkOrderByFeedback`ï¼èè¯¥æ¹æ³æ¯æ `feedbackId` èå产åºåè¡è®¡ç®åæ ¼/ä¸åæ ¼æ°ï¼æ¤æ¶äº§åºåå°æªçæï¼èåç»ææä¸º 0ã - æ¹æ¡ï¼äºéä¸ï¼æ¨èæ¹æ¡ Aï¼ï¼ - **Aï¼ç»ä¸æ¶å£ï¼**ï¼æãä»»å¡/å·¥å/MPS è¿åº¦æ´æ°ãä» `approveFeedback` ä¸ç§»é¤ï¼ç»ä¸æ¾å°äº§åºåçæ/宿ä¹åæ§è¡ï¼æ è´¨æ£å¨ `finishProductProduce` ä¹åè°ç¨ï¼æè´¨æ£å¨ `updateProFeedbackWhenIpqcFinish` ä¸è°ç¨ã`approveFeedback` åªè´è´£æ£æãçæäº§åºååç¶ææµè½¬ã - **Bï¼å屿´æ°ï¼**ï¼`approveFeedback` åªç´¯å `producedQuantity`ï¼ä¸ä¾èµäº§åºåï¼ï¼åæ ¼/ä¸åæ ¼æ°å¨äº§åºå宿ååç¬ç´¯å ã - å½±åï¼å ³é®å·¥åºçä»»å¡åæ ¼æ°ãä¸åæ ¼æ°æ¢å¤æ£ç¡®ã ### Q3 æ«éå·¥åºå·¥å/MPS æ´æ°ä¸ keyFlag è§£è¦ - ä½ç½®ï¼`MesProFeedbackServiceImpl.java:338-347` - ç°è±¡ï¼å·¥å `quantity_produced` å MPS `quantity_produced` çç´¯å 被æ¾å¨ `keyFlag=true` 忝å ï¼ä¸å é¨å夿æ¯å¦æ«éå·¥åºãè¥æ«éå·¥åºæªé ç½®ãå ³é®å·¥åºãï¼å·¥åäº§åºæ°¸è¿ä¸º 0ã - æ¹æ¡ï¼å°ãæ¯å¦æ«éå·¥åºã夿ç¬ç«åºæ¥ï¼åªè¦æ¬æ¬¡æ¥å·¥å·¥åºæ¯æ«éå·¥åºï¼æ 论 `keyFlag` ä¸å¦é½æ´æ°å·¥å/MPSã`keyFlag` åªå½±åæ¯å¦éè¦éå¤ç´¯å ä¸é´å·¥åºäº§åºï¼æç°æä¸å¡æå¾ä¿çï¼ã - é确认ï¼ä¸é´å·¥åºæ¯å¦è®¡å ¥å·¥å产åºãè¥ä¸è®¡å ¥ï¼åä» æ«éå·¥åºç´¯å ï¼è¥è®¡å ¥ï¼åææå·¥åºé½ç´¯å ï¼äºè åªä¿çä¸ç§å£å¾ã ### Q4 路线工åºç¼ºå¤±ä¸åéé»é级 - ä½ç½®ï¼`MesProFeedbackServiceImpl.java:300-314` - ç°è±¡ï¼`getRouteProcessByRouteIdAndProcessId` è¿å null æ¶ï¼`keyFlag`ã`checkFlag`ã`backflushFlag` å ¨é¨æ false å¤çï¼æ¢ä¸æ£æä¹ä¸è¿è´¨æ£ï¼ä¸æ²¡æä»»ä½æç¤ºã - æ¹æ¡ï¼ 1. æ¥è¯¢ä¸å°è·¯çº¿å·¥åºæ¶æåºä¸å¡å¼å¸¸ï¼æç¤ºãæ¥å·¥å·¥åºæªå¨å·¥èºè·¯çº¿ä¸æ¾å°ï¼è¯·æ£æ¥å·¥åå·¥èºè·¯çº¿é ç½®ãï¼ã 2. è¥ä¸å¡å 许å岿°æ®åå¨ï¼åè³å°è®°å½ error æ¥å¿å¹¶å¨æ¥å£è¿åä¸æç¤ºï¼ç¦æ¢éé»ã - å½±åï¼é¿å å é ç½®ç¼ºå¤±å¯¼è´ææä¸æ£ãè´¨æ£è·³è¿å´æ 人åç°ã ### Q5 è¿ç¨æ£éªæ°éä¸è´æ§æ ¡éª - ä½ç½®ï¼`MesQcIpqcServiceImpl.java:225-244`ï¼`MesWmProductProduceServiceImpl.java:270-325` - ç°è±¡ï¼å®ææ£éªåªæ ¡éªãæ£æµç»è®ºé空 + è³å°ä¸æ¡æ£æµé¡¹ãï¼ä¸æ ¡éªï¼ - `æ£æµæ°é = åæ ¼æ°é + ä¸åæ ¼æ°é` - `æ£æµæ°é â¤ å¾ æ£äº§åºè¡æ°é` - åæï¼å¯å¡«åºè¶ è¿æ¥å·¥æ°éçåæ ¼æ°ï¼æè¡åæå¡«æ¥æ°çæå ¥åºæç»ï¼é æè¶ éå ¥åºã - æ¹æ¡ï¼`finishIpqc` 卿´æ°ç¶æåå¢å æ ¡éªï¼ 1. åæ ¼æ°ãä¸åæ ¼æ°ä¸å¾ä¸ºè´ã 2. åæ ¼æ° + ä¸åæ ¼æ° = æ£æµæ°éã 3. è¥æ¥æºä¸ºæ¥å·¥äº§åºè¡ï¼æ£æµæ°éä¸å¾å¤§äºè¯¥å¾ æ£è¡çæ°éã 4. æ ¡éªå¤±è´¥è¿åæç¡®é误ç ï¼æ°å¢ `QC_IPQC_QUANTITY_MISMATCH`ã`QC_IPQC_QUANTITY_EXCEEDS_SOURCE`ï¼ã - 忥ï¼`MesWmProductProduceServiceImpl#splitPendingAndFinishProduce` å¢å å åºæ ¡éªï¼é²æ¢ç»è¿ IPQC ç´æ¥è°ç¨ã ### Q6 ä¸åæ ¼åä¸å¾ææ£å¸¸åå ¥è´¦ - ä½ç½®ï¼`MesWmProductProduceServiceImpl.java:96ã110-134`ï¼`MesWmProductReceiptServiceImpl.java:106-112` - ç°è±¡ï¼`finishProductProduce` 坹䏿æäº§åºåè¡å建 IN äºå¡ï¼å« `FAIL` è¡ï¼ï¼ä»åºä¸ºæ£å¸¸äº§åºä»/线边åºï¼è产åå ¥åºååªå¯¹ `PASS` è¡çæãç»æä¸åæ ¼åæåºåãæ åæ®ï¼ä¸åæ ¼åæ··æ¾ï¼å¯è¢«åç»é¢ç¨æåè´§ãNCR åªå»ºåï¼ä¸ååºåé离ã - æ¹æ¡ï¼éä¸å¡ç¡®è®¤ï¼äºéä¸ï¼ï¼ - **Aï¼æ¨èï¼ä¸åæ ¼åå ¥ä¸è¯åä»**ï¼`resolveOutputTarget` å¢å æè´¨éç¶æéæ©ä»åºï¼`FAIL` è¡é»è®¤å ¥ä¸è¯åä»ï¼å¯é ç½®ï¼ï¼`PASS` è¡å ¥æ£å¸¸äº§åºä»ã - **B ä¸åæ ¼åä¸å ¥è´¦**ï¼åªå¯¹ `PASS` è¡å建 IN äºå¡ï¼`FAIL` è¡ä» ä¿ç产åºè®°å½ï¼ç± NCR åç»å¤ç½®ï¼è¿å·¥/æ¥åºï¼æ¶åèµ°åºåäºå¡ã - æ 论åªç§ï¼é½è¦æ±ãåºåäºå¡è¡ãä¸ãå ¥åºåè¡ãå£å¾ä¸è´ã ### Q7 å ¨é¨ä¸åæ ¼/é¶æ°éä¸å产çèæ°æ® - ä½ç½®ï¼`MesWmProductProduceServiceImpl.java:282-321` - ç°è±¡ï¼åæ ¼æ°ä¸º 0 æ¶ï¼å¾ æ£è¡ä»è¢«æ¹æ `PASS`ãæ°é 0ï¼å¹¶çæ 0 æ°éæç»å 0 æ°éå ¥åºäºå¡ã - æ¹æ¡ï¼ 1. åæ ¼æ°ä¸º 0 ä¸ä¸åæ ¼æ° > 0 æ¶ï¼å¾ æ£è¡ç´æ¥æ 记为 `FAIL`ï¼ä¸çæåæ ¼æç»ã 2. æ°é为 0 çè¡ä¸å建æç»ãä¸å建åºåäºå¡ã 3. è¥åæ ¼æ°ä¸ä¸åæ ¼æ°å为 0ï¼å®ææ£éªç´æ¥æ¥éã ### Q8 鲿¢åä¸å¾ æ£è¡éå¤å»ºæ£éªå - ä½ç½®ï¼äº§åºè¡ DOï¼`MesQcIpqcServiceImpl.java:368-371` - ç°è±¡ï¼äº§åºè¡æ²¡æå IPQC çå ³èåæ®µï¼å建æ¶åªæ ¡éª `PENDING`ã第ä¸å¼ æ£éªå宿åå¯éå¤å建å¤å¼ ï¼ç¬¬äºå¼ 宿æ¶å 产åºå已宿æå¼å¸¸åæ»ï¼ç䏿 æ³å®æçæ£éªåã - æ¹æ¡ï¼ 1. `mes_wm_product_produce_line` å¢å `ipqc_id`ï¼BIGINTï¼å¯ç©ºï¼ã 2. `createIpqc` æ ¡éªäº§åºè¡ `ipqc_id` 为空ï¼å建æåååå `ipqc_id`ã 3. å¾ æ£ä»»å¡ SQL å¢å `ppl.ipqc_id IS NULL` è¿æ»¤ã 4. å 餿£éªåæ¶æ¸ é¤ `ipqc_id`ï¼ä» èç¨¿ç¶æå 许å é¤ï¼ã - æ°æ®åºåæ´è§ç¬¬å èã ### Q9 æå·¥/å¯¼å ¥åå»ºçæ£éªåååå¯é æ§ - ä½ç½®ï¼`MesQcIpqcServiceImpl.java:279-297` - ç°è±¡ï¼æ²¡ææ¥æºåæ®æ¶ï¼æ `taskId` æ¾ç¬¬ä¸å¼ ãå¾ æ£éªãæ¥å·¥å åºãåä¸ä»»å¡å¤å¼ å¾ æ£ä¼ä¸²åï¼`sourceLineId` ä¸ºç©ºæ¶æåç´æ¥æå¼å¸¸ã - æ¹æ¡ï¼ 1. æ¥æºä¸ºæ¥å·¥æ¶å¼ºå¶è¦æ± `sourceDocId` + `sourceLineId`ï¼å端åªå 许ä»å¾ æ£ä»»å¡é¡µåèµ·ï¼ã 2. ç§»é¤æ `taskId` çæµååçé»è¾ï¼æ¹ä¸ºæ æ³å®ä½æ¥æºæ¶æç¡®æ¥éæè·³è¿å¹¶è®°å½ warningã 3. å¯¼å ¥åå»ºçæ£éªåä¸å è®¸å ³èæ¥æºï¼å®æå䏿¨è¿æ¥å·¥ï¼ä¿æç°ç¶ä½ææ¥å¿ï¼ã ### Q10 æ æ£éªæ¨¡æ¿æ¶çæç¤ºä¸ç¶æå¤ç - ä½ç½®ï¼`MesQcIpqcServiceImpl.java:140-143`ï¼`MesQcTemplateItemServiceImpl.java:118-141` - ç°è±¡ï¼ç©ææªé ç½® IPQC æ¨¡æ¿æ¶å建æ£éªåæ `QC_NO_TEMPLATE`ï¼ç°åºé¾ä»¥å®ä½ï¼æ¥å·¥å·²è¿å ¥å¾ æ£ï¼è¥æ æ³å建æ£éªå伿°¸ä¹ å¡ä½ã - æ¹æ¡ï¼ 1. æ¥éææ¡æç¡®ä¸ºãç©æãxxxãæªé ç½® IPQC æ£éªæ¹æ¡ï¼è¯·å å¨è´¨æ£æ¨¡æ¿ä¸ä¸ºè¯¥ç©æå¯ç¨è¿ç¨æ£éªãã 2. å¾ æ£ä»»å¡å表å¢å ãæ¯å¦å¯æ£éªãæç¤ºï¼ä¾æ®æ¨¡æ¿å¹é ç»æï¼ï¼é¿å ç¨æ·ç²ç®ç¹å建ã 3. æ¥å·¥å®¡æ¹æ¶è¥å·¥åº `checkFlag=1`ï¼å¢å 䏿¬¡æ¨¡æ¿å卿§é¢æ£ï¼ç¼ºå¤±æ¶å¨å®¡æ¹åç´æ¥æç¤ºï¼é¿å æ¥å·¥è¿å ¥å¾ æ£åæå¤±è´¥ï¼ã - éç¡®è®¤ï¼æ¯å¦å è®¸ãæ æ¨¡æ¿ä½æå·¥åºæ£éªæ è¯ãçæ¥å·¥ç´æ¥æ¾è¡å¹¶è®°ä¸ºå æ£ã ### P1 æ«éå·¥åºäº§åºä»å åºçç¥ - ä½ç½®ï¼`MesWmProductProduceServiceImpl.java:327-354`ï¼`MesWmProductReceiptServiceImpl.java:269-273` - ç°è±¡ï¼æ«éå·¥åºæªé 置产åºä»æ¶åéèæçº¿è¾¹åºï¼äº§åºäºå¡è®°å ¥çº¿è¾¹åºï¼èªå¨å ¥åºååå `produceId != null` è·³è¿è½¬ç§»äºå¡ï¼æåæ°¸è¿çå¨çº¿è¾¹åºï¼ä¸ä¼è¿å ¥æåä»ã - æ¹æ¡ï¼æ¨è Aï¼ï¼ - **A 强å¶é ç½®**ï¼æ«éå·¥åºå¿ é¡»é ç½®æ¥å·¥ä»åºï¼å·¥åå·¥åºæå·¥èºè·¯çº¿äº§åï¼ï¼`resolveOutputTarget` 卿«éå·¥åºä¸å 许åéèæçº¿è¾¹åºï¼ç¼ºå¤±æ¶å®¡æ¹æ¥éã - **B èªå¨è½¬ç§»**ï¼èªå¨å ¥åºå宿æ¶ï¼è¥æç»ä»åºä¸ºèæçº¿è¾¹åºï¼è¡¥åãçº¿è¾¹åº OUT + å®é ä» INãï¼éè¦å ¥åºåè½ç¡®å®ç®æ æåä»ã - åæ¶æç¡®ï¼ä¸é´å·¥åºäº§åºæ¯å¦å 许è¿å®é ä»ãè¥å 许ï¼åºåæ¥çæå¯¹åºçåæåå ¥åºåï¼é¿å ãæåºåæ åæ®ãã ### P2 èªå¨å ¥åºåè¡¥é½æç» - ä½ç½®ï¼`MesWmProductReceiptServiceImpl.java:160-168`ï¼`finishProductReceipt` æç»éç©ºæ ¡éª `:264-267` - ç°è±¡ï¼èªå¨çæç产åå ¥åºååªæè¡ã没ææç»ï¼æ§è¡å ¥åºä¼å ãæ æç»ã失败ï¼å¿ 须人工补ã - æ¹æ¡ï¼`generateProductReceipt` çæè¡çåæ¶ï¼æäº§åºåæç»çæå ¥åºæç»ï¼ä»åºãåºä½ãåºåºãæ¹æ¬¡ãæ°éåå¯ä» `mes_wm_product_produce_detail` 带åºï¼ãè¥éç¨ P1-Aï¼äº§åºç´æ¥å ¥æåä»ï¼ï¼åå ¥åºåä» ä½ä¸å¡åè¯ï¼éå¨é¡µé¢ä¸æç¡®æ è¯ãèªå¨åæ®ï¼æ éæ§è¡å ¥åºãï¼ææ¹ä¸ºç±äº§åºåç´æ¥çæå·²å®æå ¥åºåã ### P3 å¾ æ£æé´äº§åä¸å ¥è´¦ï¼è®¾è®¡æè¡¡ï¼ - ä½ç½®ï¼`MesWmProductProduceServiceImpl.java:190-195` - ç°è±¡ï¼`checkFlag=true` æ¶ä¸çæä»»ä½åºåäºå¡ï¼äº§åå¨å¾ æ£æé´å¤äºè´¦å¤ç¶æã - æ¹æ¡ï¼å¦éä¸¥æ ¼åºå管çï¼å¯å¨å®¡æ¹æ¶å å°å¾ æ£æ°éå ¥ãå¾ æ£ä»ãï¼è´¨æ£å®æååãå¾ æ£ä» â åæ ¼ä» / ä¸è¯åä»ã转移ï¼è¥æ¥åå½åå£å¾ï¼åå¨ææ¡£ä¸æ¥è¡¨ä¸è¯´æå¾ æ£äº§åä¸è®¡åºåã ### D1 å岿£æå¯ç¨éæ ¡éª - ä½ç½®ï¼`MesWmItemConsumeServiceImpl.java:126-159ã192` - ç°è±¡ï¼çº¿è¾¹åºæ åºåæä¸è¶³æ¶ä»çææ æ¹æ¬¡æç»ï¼ä¸åºåäºå¡ `checkFlag=false` å 许è´åºåï¼æ£æè´æ°æ æç¤ºã - æ¹æ¡ï¼ 1. ä¸¥æ ¼æ¨¡å¼ï¼åå²åæ ¡éªçº¿è¾¹åºå¯ç¨éï¼ä¸è¶³æ¶æ¥éå¹¶æç¤ºãè¯·å æ§è¡çäº§é¢æãã 2. å®½æ¾æ¨¡å¼ï¼è¥ä¸å¡å 许è´åºåï¼ï¼ä¿çæ£åï¼ä½è¿å/è®°å½é¢è¦ï¼å¹¶å¨æ¥å·¥å®¡æ¹ç»æä¸æç¤ºå¯ç¨éä¸è¶³ã - é确认ï¼çº¿è¾¹åºæ¯å¦å 许è´åºåã建议é»è®¤ä¸¥æ ¼æ¨¡å¼ã ### D2 åä¸ç©æå¤è¡éå¤å ç¨æ¹æ¬¡ - ä½ç½®ï¼`MesWmItemConsumeServiceImpl.java:126-159` - ç°è±¡ï¼æ¯æ¡æ¶èè¡ç¬ç«æ¥è¯¢åºåå¿«ç §å FIFOï¼åä¸å·¥åº BOM è¥åºç°åä¸ç©æå¤è¡ï¼ä¼éå¤å ç¨å䏿¹æ¬¡ã - æ¹æ¡ï¼ 1. æå¡ç«¯æ ¡éªåä¸å·¥åº BOM ç©æä¸å¯éå¤ï¼ä¿åæ¶æ¥éï¼ã 2. æ¶èçææ¶æ `itemId` åå¹¶åååé æ¹æ¬¡ã 3. æè å¨å åä¸ç»´æ¤ãå·²åé éãï¼æ¯æ¡è¡çå¯ç¨é = åºåæ°é - å·²åé éã ## äºãéè¦ç¡®è®¤çä¸å¡å³ç | ç¼å· | å³çç¹ | å¤é | |---|---|---| | 1 | ä¸åæ ¼ååºåå»å | å ¥ä¸è¯åä» / ä¸å ¥è´¦ç± NCR å¤ç½® / å»ç» | | 2 | å·¥åå·²ç产æ°éå£å¾ | åªç´¯è®¡æ«éå·¥åº / 累计ææå·¥åº | | 3 | æ«éå·¥åºäº§åºä» | 强å¶é ç½® / èªå¨ä»çº¿è¾¹åºè½¬ç§»å°æåä» | | 4 | ä¸é´å·¥åºäº§åº | åªå ¥çº¿è¾¹åº / å è®¸å ¥å®é ä»å¹¶çæåæåå ¥åºå | | 5 | 线边åºè´åºå | ç¦æ¢ / å 许并é¢è¦ | | 6 | å¾ æ£æé´åºå | ä¸å ¥è´¦ï¼ç°ç¶ï¼/ å ¥å¾ æ£ä» | | 7 | æ æ£éªæ¨¡æ¿ä½å·¥åºè¦æ±æ£éª | æ¥å·¥å®¡æ¹æ¶æ¥é / å è®¸å æ£æ¾è¡ | ## å ãæ°æ®åºåæ´ ```sql -- Q8ï¼äº§åºè¡å ³èè¿ç¨æ£éªåï¼é²æ¢éå¤å»ºå ALTER TABLE mes_wm_product_produce_line ADD COLUMN ipqc_id BIGINT NULL COMMENT 'è¿ç¨æ£éªåID' AFTER quality_status; CREATE INDEX idx_ppl_ipqc_id ON mes_wm_product_produce_line (ipqc_id); ``` > è¥ Q6 éæ©ãä¸åæ ¼åå ¥ä¸è¯åä»ãï¼éè¡¥å ä¸è¯åä»çé 置项ï¼å»ºè®®å¤ç¨ä»åºç±»ååæ®µææ°å¢åå ¸ï¼ï¼ä¸æ°å¢ä¸å¡è¡¨å段åå ç¡®è®¤ç°æä»åºæ¨¡åã ## ä¸ã宿½é¡ºåº 1. **ç¬¬ä¸æ¹ï¼æ°æ®æ£ç¡®æ§ï¼P0ï¼** - Q1 è´¨æ£åè°è¡¥åä»»å¡/å·¥å/MPS - Q2 è°æ´æ°éæ´æ°æ¶ç¹ - Q5 è´¨æ£æ°éæ ¡éª - Q6 ä¸åæ ¼åå ¥è´¦å£å¾ 2. **ç¬¬äºæ¹ï¼æµç¨éç¯ï¼P1ï¼** - Q3 æ«éå·¥åºä¸ keyFlag è§£è¦ - Q4 路线工åºç¼ºå¤±æ¥é - Q7 é¶æ°éèæ°æ® - Q8 éå¤å»ºåï¼å« DDLï¼ - Q10 模æ¿ç¼ºå¤±æç¤º - P1 æ«é产åºä»çç¥ - P2 èªå¨å ¥åºæç» 3. **ç¬¬ä¸æ¹ï¼å¥å£®æ§ï¼P2ï¼** - Q9 æ¥æºåæ®å¼ºæ ¡éª - D1 å¯ç¨éæ ¡éª - D2 BOM éå¤ç©æ - P3 å¾ æ£ä»ï¼å¯éï¼ ## å «ãæµè¯éªè¯æ¸ å - [ ] éåå²å·¥åºæ¥å·¥ï¼ä¸æ£æãç´æ¥å ¥åºãæ«éçæå ¥åºå - [ ] åå²å·¥åºæ¥å·¥ï¼æ¶èåæ°é = åä½ç¨æ à æ¥å·¥æ°éï¼FIFO æ¹æ¬¡æ£ç¡®ï¼åºåæ£åæ£ç¡® - [ ] åå²å·¥åºçº¿è¾¹åºä¸è¶³ï¼æç¡®è®¤çæ¨¡å¼æ¥éæé¢è¦ - [ ] æ éæ£éª + æ«éå·¥åºï¼äº§åºäºå¡ä¸å ¥åºåä¸è´ - [ ] 鿣éªï¼æ¥å·¥è¿å ¥å¾ æ£ï¼å¾ æ£é¡µåºç°äº§åºè¡ - [ ] æ IPQC 模æ¿ï¼å建æ£éªåç»åºæç¡®æç¤º - [ ] IPQC å ¨é¨åæ ¼ï¼æ¥å·¥å®æã产åºå ¥åºãä»»å¡/å·¥å/MPS æ°éæ£ç¡® - [ ] IPQC é¨åä¸åæ ¼ï¼åæ ¼åå ¥æ£å¸¸ä»ãä¸åæ ¼åæç¡®è®¤å£å¾å¤çï¼NCR çæ - [ ] IPQC å ¨é¨ä¸åæ ¼ï¼ä¸äº§ç 0 æ°éæç»ä¸äºå¡ï¼ä»»å¡/å·¥åæ°éæ£ç¡® - [ ] IPQC æ°éè¶ è¿å¾ æ£æ°éï¼è¢«æ¦æª - [ ] åä¸å¾ æ£è¡éå¤å»ºåï¼ç¬¬äºå¼ è¢«æ¦æª - [ ] å ³é®å·¥åº + è´¨æ£ï¼åæ ¼/ä¸åæ ¼æ°éè¿å ¥ä»»å¡ - [ ] æ«éå·¥åºéå ³é®ï¼å·¥å/MPS 产åºç´¯å - [ ] æ«éå·¥åºæªé 置产åºä»ï¼æç¡®è®¤çç¥æ¥éæè½¬ç§» - [ ] èªå¨å ¥åºåï¼æç»é½å ¨ï¼å¯å®æå ¥åºï¼ææç¡®ä¸ºå æ§è¡åè¯ï¼ - [ ] 审æ¹éå¤æäº¤ï¼æ£æã产åºåãå ¥åºååä¸éå¤ docs/qc_source_link_frontend_integration.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,121 @@ # è´¨æ£åå ³èç产æ¥å·¥/éå®åºåº - å端èè°æ¹æ¡ ## æ¶åé¡µé¢ - è´¨é管ç â è¿ç¨æ£éªï¼IPQCï¼å表ã详æ - è´¨é管ç â åºè´§æ£éªï¼OQCï¼å表ã详æ - ç产管ç â ç产æ¥å·¥ï¼åªè¯»åèï¼æ¥å·¥åå·ãç¶æãçå·ï¼ - ä»å¨ç®¡ç â éå®åºåºåï¼åªè¯»åèï¼åºåºåå·ãæç»çå·ãè´¨éç¶æï¼ ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å ¥ ### è¿ç¨æ£éªï¼IPQCï¼å ³èç产æ¥å·¥ 1. è´¨æ£å·¥åºæ¥å·¥å®¡æ¹éè¿åï¼æ¥å·¥å转为ãå¾ æ£éªï¼3ï¼ãï¼åæ¶çæè´¨éç¶æä¸ºãå¾ æ£éªï¼0ï¼ãç产åºè¡ï¼äº§åºè¡çå·æ¥èªç产工åã 2. è´¨æ£åç¬ç«æ°å»ºæå¯¼å ¥ IPQC åï¼å¡«åæ£æµæ°éãåæ ¼æ°éãä¸åæ ¼æ°éå¹¶ä¸ä¼ æ£éªéä»¶ï¼å®æåç±åç«¯ææ°éèªå¨å¤å®ï¼ä¸åæ ¼æ°é为 0 â æ ¡éªéè¿ï¼1ï¼ï¼å¦åæ ¡éªä¸éè¿ï¼2ï¼ã 3. å¨å·²å®æä¸æªå ³èæ¥æºç IPQC 详æ 页ç¹å»ãå ³èç产æ¥å·¥ãï¼å端è°ç¨å鿥å£ãå端èªå¨ä½¿ç¨æ¬åçãç©æ + çå·ãçéï¼åªè¿åç©æãçå·ãæ°éä¸å½åè´¨æ£åå®å ¨ä¸è´ï¼ä¸ä»å¤äºå¾ æ£éªç¶æçæ¥å·¥äº§åºè¡ã 4. ç¨æ·éä¸ä¸æ¡åéåæäº¤å ³èãåç«¯æ ¡éªéè¿åååï¼æ¥å·¥åç¶æ â 已宿ï¼4ï¼ãæåæ ¼/ä¸åæ ¼æ°éæå产åºè¡å¹¶å®æäº§åºå ¥åºãååä»»å¡è´¨éæ°éãæ£æ¥å·¥åæ¯å¦å®å·¥ã 5. å ³èæååï¼è´¨æ£å详æ åºæ¾ç¤ºæ¥æºåæ®ç±»åãæ¥æºåæ®ç¼å·ãæ¥æºè¡ IDï¼å¹¶éèãå ³èç产æ¥å·¥ãæé®ã ### åºè´§æ£éªï¼OQCï¼å ³èéå®åºåº 1. éå®åºåºåæäº¤æ¶ï¼å¾éãéè¦åºè´§æ£éªãçæç»è´¨éç¶æç½®ä¸ºãå¾ æ£éªï¼0ï¼ãï¼åºåºåç¶æè¿å ¥ãå¾ æ£æµï¼1ï¼ããæäº¤å¨ä½ä¸åèªå¨å建 OQC åã 2. è´¨æ£åç¬ç«æ°å»ºæå¯¼å ¥ OQC åï¼å¡«åæ£æµæ°éãåæ ¼æ°éãä¸åæ ¼æ°éå¹¶ä¸ä¼ æ£éªéä»¶ï¼å®æååæ ·ææ°éèªå¨å¤å® 1/2ã 3. å¨å·²å®æä¸æªå ³èæ¥æºç OQC 详æ 页ç¹å»ãå ³èéå®åºåºãï¼å端è°ç¨å鿥å£ãå端èªå¨ä½¿ç¨æ¬åçãç©æ + çå·ãçéï¼åªè¿ååºåºåç¶æä¸ºãå¾ æ£æµããæç»å¾éäºåºè´§æ£éªãå°æªå ³èè´¨æ£åï¼ä¸ç©æãçå·ãæ°éä¸å½åè´¨æ£åå®å ¨ä¸è´çæç»ã 4. ç¨æ·éä¸ä¸æ¡åéåæäº¤å ³èãå端åååºåºæç»çè´¨æ£å ID ä¸è´¨éç¶æï¼åæ ¼ â PASSï¼ä¸åæ ¼ â FAILï¼ã 5. å½è¯¥åºåºåææéæ£éªæç»é½åä¸ºåæ ¼åï¼åºåºåèªå¨ä»ãå¾ æ£æµï¼1ï¼ãæµè½¬å°ãå¾ æ£è´§ï¼2ï¼ããåå¨ä¸åæ ¼æç»æ¶ä¿æãå¾ æ£æµãï¼çå¾ åç»å¤ç½®ï¼ä¸ä¼èªå¨åæ¶æ´å¼ åºåºåã ## API | æ¹æ³ | è·¯å¾ | 说æ | |------|------|------| | GET | /mes/qc/source-link/feedback-candidates | æ¥è¯¢ IPQC å¯å ³èçç产æ¥å·¥äº§åºè¡åé | | POST | /mes/qc/source-link/feedback | å° IPQC å ³è尿宿¥å·¥äº§åºè¡ | | GET | /mes/qc/source-link/sales-candidates | æ¥è¯¢ OQC å¯å ³èçéå®åºåºæç»åé | | POST | /mes/qc/source-link/sales | å° OQC å ³èå°æå®éå®åºåºæç» | æéç ï¼ | æ¥å£ | æéç | |------|--------| | feedback-candidatesãfeedback | mes:qc-ipqc:update | | sales-candidatesãsales | mes:qc-oqc:update | **请æ±åæ°ï¼åéæ¥è¯¢ï¼ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | qcId | Long | æ¯ | å½åè´¨æ£å IDï¼IPQC æ OQCï¼ | **请æ±åæ°ï¼æäº¤å ³èï¼ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | qcId | Long | æ¯ | å½åè´¨æ£å ID | | lineId | Long | æ¯ | å鿥å£è¿åç lineIdï¼æ¥å·¥äº§åºè¡ ID æéå®åºåºæç» IDï¼ | **åéååºå段ï¼** | åæ®µ | ç±»å | 说æ | |------|------|------| | lineId | Long | å¾ æ£æç» IDï¼æäº¤å ³èæ¶åä¼ | | documentId | Long | æ¥æºåæ® IDï¼æ¥å·¥å ID æéå®åºåºå ID | | documentCode | String | æ¥æºåæ®ç¼å·ï¼æ¥å·¥åå·æåºåºåå· | | reelNo | String | çå· | | quantity | BigDecimal | å¾ æ£æ°é | **åéååºç¤ºä¾ï¼** ```json { "code": 0, "data": [ { "lineId": 123, "documentId": 456, "documentCode": "BG20261104001", "reelNo": "PAN-001", "quantity": 200 } ] } ``` **å ³èæåååºï¼** `{ "code": 0, "data": true }` ## åæ®µå±ç¤ºè§å | åæ®µ | å±ç¤ºä½ç½® | 说æ | |------|----------|------| | sourceDocCode | è´¨æ£å详æ | å·²å ³èæ¶å±ç¤ºæ¥æºåæ®ç¼å·ï¼æªå ³èæ¶æ¾ç¤ºç©º | | sourceDocType | è´¨æ£å详æ | å端è¿å 304=ç产æ¥å·¥ï¼119=éå®åºåº | | sourceLineId | è´¨æ£å详æ | å·²å ³èæ¶é空ï¼ç¨äºå¤ææ¯å¦éèå ³èæé® | | reelNo | è´¨æ£åå表ã详æ | å·²å®æè´¨æ£åå¿ é¡»é空æè½åèµ·å ³è | | documentCode | åéå¼¹çª | æ¥å·¥åå·æéå®åºåºåå· | | reelNo | åéå¼¹çª | çå·ï¼ç¨äºäººå·¥å¤æ ¸ | | quantity | åéå¼¹çª | å¾ æ£æ°éï¼åºä¸è´¨æ£åæ£æµæ°éä¸è´ | ## ä¸å¡è§å | åºæ¯ | è§å | |------|------| | IPQC å ³èåç½®æ¡ä»¶ | è´¨æ£åç¶æå¿ é¡»ä¸ºå·²å®æï¼4ï¼ï¼ä¸ sourceDocTypeãsourceDocIdãsourceLineId å为空ï¼çå·é空 | | IPQC å鿡件 | 产åºè¡è´¨éç¶æä¸ºå¾ æ£éªï¼0ï¼ãå ³èæ¥å·¥åç¶æä¸ºå¾ æ£éªï¼3ï¼ãç©æä¸è´ãç产工åä¸è´ï¼è´¨æ£åæå®äºçäº§ä»»å¡æ¶ä»»å¡ä¹å¿ é¡»ä¸è´ï¼çå·ä¸è´ï¼æ¥å·¥äº§åºè¡æ°éçäºè´¨æ£åæ£æµæ°é | | IPQC å ³èåå | æ¥å·¥åè½¬å·²å®æï¼4ï¼ï¼æåæ ¼/ä¸åæ ¼æ°éæå产åºè¡å¹¶å®æäº§åºå ¥åºï¼ååä»»å¡è´¨éæ°éä¸å·¥åè¿åº¦ | | OQC å ³èåç½®æ¡ä»¶ | è´¨æ£åç¶æå¿ é¡»ä¸ºå·²å®æï¼4ï¼ï¼ä¸ sourceDocTypeãsourceDocIdãsourceLineId å为空ï¼çå·é空 | | OQC å鿡件 | åºåºåç¶æä¸ºå¾ æ£æµï¼1ï¼ãæç»å¾ééè¦åºè´§æ£éªãæç»å°æªå ³èè´¨æ£åãç©æä¸è´ã客æ·ä¸è´ï¼è´¨æ£åå¡«åå®¢æ·æ¶ï¼ãçå·ä¸è´ãæç»æ°éçäºè´¨æ£åæ£æµæ°é | | OQC å ³èåå | åºåºæç»åå ¥è´¨æ£å ID ä¸è´¨éç¶æï¼å ¨é¨éæ£æç»åæ ¼ååºåºåè½¬å¾ æ£è´§ï¼2ï¼ | | ä¸å¯¹ä¸çº¦æ | 䏿¡å¾ æ£æç»åªè½è¢«ä¸å¼ è´¨æ£åå ³èï¼ä¸å¼ è´¨æ£ååªè½å ³è䏿¡æ¥æºæç» | | çå·æ¥æº | IPQC åç产工åçå·ï¼OQC åéå®è®¢åæç»çå·ï¼ä¸¤å¤åä¸å模ç³å¹é ï¼ä» å»é¤é¦å°¾ç©ºæ ¼åæ¯è¾ | | æ°é约æ | è´¨æ£åæ£æµæ°éå¿ é¡»å¤§äº 0 ä¸ä¸å¾ æ£æç»æ°éå®å ¨ç¸ç | ## 注æäºé¡¹ - å ³èæä½ä¸å¯éå¤ï¼è´¨æ£åå·²å ³èæ¥æºåï¼è¯¦æ 页åºéèå ³èå ¥å£ï¼éå¤æäº¤ä¼è¢«å端æç»å¹¶æç¤ºå·²å ³èæ¥æºåæ®ç¼å·ã - åéå表为空ä¸ä»£è¡¨æ¥å£å¼å¸¸ï¼å¤ä¸ºçå·ãæ°éæåæ®ç¶æä¸æ»¡è¶³ï¼åç«¯åºæç¤ºç¨æ·æ ¸å¯¹çå·ä¸æ£æµæ°éï¼å¹¶å·æ°éè¯ã - å端é误æç¤ºä¼æãåæ®ç¶æ / ç©æ / å·¥å / ä»»å¡ / çå· / æ°é / å·²å ³èãç»åºå ·ä½ç»´åº¦ä¸åæ¹å®é å¼ï¼å端åºç´æ¥å±ç¤ºå端 messageï¼ä¸è¦æ¿æ¢ä¸ºç»ä¸çâæä½å¤±è´¥âã - å®æè´¨æ£åæ¶åç«¯ä¼æ ¡éªï¼åæ ¼æ°éä¸ä¸åæ ¼æ°éä¹åå¿ é¡»å¤§äº 0 ä¸çäºæ£æµæ°éï¼å¹¶ä¸å¿ 须已ä¸ä¼ è³å°ä¸ä»½æ£éªéä»¶ï¼æªæ»¡è¶³æ¶ä¸å è®¸å®æã - è´¨æ£ç»è®ºç±æ°éèªå¨è®¡ç®ï¼åç«¯å®æå¼¹çªæ éåè®©ç¨æ·éæ©å¤å®ç»æï¼æäº¤çå¤å®å¼ä¼è¢«å端è¦çã - æ°å»ºè´¨æ£åä¸åä¾èµè´¨æ£æ¹æ¡ï¼å端ä¼å¿½ç¥ templateIdï¼ä¹ä¸ä¼èªå¨çææ£éªææ è¡ï¼åç«¯è¡¨åæ éåå¼ºæ ¡éªè´¨æ£æ¹æ¡ã - éå®åºåºåæäº¤åä¸åèªå¨å建 OQCï¼åâæäº¤å³çææ£éªåâçæç¤ºææ¡ååç»è·³è½¬éåæ¥è°æ´ã - å ³èæååéå·æ°è´¨æ£å详æ 䏿¥æºåæ®å表ï¼é¿å ç»§ç»å±ç¤ºæ§çç¶æä¸å ³èä¿¡æ¯ã docs/task_reporter_assignment.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,99 @@ # çäº§ä»»å¡æ¥å·¥äººéå¶ - å端èè°æ¹æ¡ ## æ¶åé¡µé¢ - MES ç产任å¡ï¼æ°å¢/ç¼è¾å¼¹çªï¼ - ç产工ä½å°ï¼ä»»å¡å表ãå·¥ä½ç«éæ©å¼¹çªï¼ - MES ç产æ¥å·¥ï¼æ°å¢/ä¿®æ¹/æäº¤ãå¿«æ·æ¥å·¥ãæ¹éæ¥å·¥ãå¯¼å ¥ï¼ ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å ¥ 1. çäº§ä»»å¡æ°å¢/ç¼è¾æ¶éæ©ãæ¥å·¥äººãï¼å¯å¤éï¼ï¼ä¿åååå ¥ä»»å¡è¡¨ã 2. å·¥ä½å°æå½åç»å½äººè¿æ»¤å¾ æ¥å·¥ä»»å¡ï¼åªæ¾ç¤ºæ¥å·¥äººå å«å½åç»å½äººçä»»å¡ã 3. æ¥å·¥æ¶åç«¯åæ¬¡æ ¡éªï¼ä» ä»»å¡çæ¥å·¥äººå¯ä»¥å建ãä¿®æ¹ãæäº¤æ¥å·¥åã 4. æ°å»ºä»»å¡æªæå®æ¥å·¥äººæ¶ï¼èªå¨å该工ä½ç«é 置人åï¼å²ä½ä¸å¯ç¨ç¨æ·ï¼ä½ä¸ºæ¥å·¥äººï¼ä¸é®æäº§çèªå¨çæä»»å¡åæ ·éç¨ã 5. 任塿²¡ææ¥å·¥äººï¼å·¥ä½ç«æªé 置人åï¼æ¶ï¼ä»»ä½äººå¨å·¥ä½å°é½çä¸å°ã乿 æ³æ¥å·¥ã ## API | æ¹æ³ | è·¯å¾ | 说æ | |------|------|------| | POST | /mes/pro/task/create | å建任å¡ï¼æ°å¢ `assigneeUserIds` | | PUT | /mes/pro/task/update | æ´æ°ä»»å¡ï¼æ°å¢ `assigneeUserIds` | | GET | /mes/pro/task/get | ä»»å¡è¯¦æ ï¼ååºæ°å¢ `assigneeUserIds`ã`assigneeUserNames` | | GET | /mes/pro/task/page | ä»»å¡å页ï¼ååºæ°å¢ `assigneeUserIds`ã`assigneeUserNames` | | GET | /mes/pro/task/pending-feedback-page | å¾ æ¥å·¥å°è´¦ï¼æ°å¢ `onlyMine` åæ° | | GET | /mes/pro/task/pending-count-by-workstation | æå·¥ä½ç«ç»è®¡å¾ æ¥å·¥æ°ï¼æ°å¢ `onlyMine` åæ° | **ä»»å¡ä¿å请æ±åæ°æ°å¢ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | assigneeUserIds | Long[] | å¦ | æ¥å·¥äººç¨æ·ç¼å·åè¡¨ï¼æ°å¢æ¶ä¸ä¼ æä¼ 空表示ä¸éå¶ï¼æ´æ°æ¶ä¼ null 表示ä¸ä¿®æ¹ï¼ä¼ 空æ°ç»è¡¨ç¤ºæ¸ 空éå¶ | **ä»»å¡ååºå段æ°å¢ï¼** | åæ®µ | ç±»å | 说æ | |------|------|------| | assigneeUserIds | Long[] | æ¥å·¥äººç¨æ·ç¼å·å表ï¼ç©ºæ°ç»è¡¨ç¤ºä¸éå¶ | | assigneeUserNames | String | æ¥å·¥äººå§åï¼å¤ä¸ªç¨é¡¿å·âãâåé | **å¾ æ¥å·¥å°è´¦è¯·æ±åæ°æ°å¢ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | onlyMine | Boolean | å¦ | 为 true æ¶ä» è¿åå½åç»å½äººå¯æ¥å·¥çä»»å¡ï¼å«æªé ç½®æ¥å·¥äººçä»»å¡ï¼ | **请æ±ç¤ºä¾ï¼** ``` GET /mes/pro/task/pending-feedback-page?workstationId=10&pageNo=1&pageSize=200&onlyMine=true GET /mes/pro/task/pending-count-by-workstation?onlyMine=true ``` **ååºç¤ºä¾ï¼** ```json { "code": 0, "data": { "list": [ { "id": 1001, "code": "PT202611070001", "assigneeUserIds": [1024, 1025], "assigneeUserNames": "å¼ ä¸ãæå" } ], "total": 1 } } ``` ## åæ®µå±ç¤ºè§å | åæ®µ | å±ç¤ºä½ç½® | 说æ | |------|----------|------| | assigneeUserIds | 任塿°å¢/ç¼è¾å¼¹çª | å¤é䏿ï¼éé¡¹æ¥æºä¸ºå·¥ä½ç«äººåï¼ç¼è¾æ¶åæ¾ | | assigneeUserNames | ä»»å¡å表ï¼å¯éï¼ | éå·/é¡¿å·åéçå§å串ï¼çº¯å±ç¤º | ## ä¸å¡è§å说æ | åºæ¯ | è§å | |------|------| | 任塿ªé ç½®æ¥å·¥äºº | æ äººå¯æ¥å·¥ï¼ä¸å¨ä»»ä½äººçå·¥ä½å°æ¾ç¤º | | ä»»å¡å·²é ç½®æ¥å·¥äºº | ä» å表å 人åå¯ä»¥å建ãä¿®æ¹ãæäº¤æ¥å·¥å | | æ°å»ºä»»å¡æªæå®æ¥å·¥äºº | èªå¨åå·¥ä½ç«é 置人åä½ä¸ºæ¥å·¥äºº | | æ¹éä¸é®æäº§ | åå»ºä»»å¡æ¶èªå¨å¸¦å·¥ä½ç«é 置人åä½ä¸ºæ¥å·¥äºº | | å·¥ä½å°ä»»å¡å表 | è°ç¨ `pending-feedback-page` æ¶ä¼ `onlyMine=true`ï¼ä» æ¾ç¤ºæ¥å·¥äººå«èªå·±çä»»å¡ | | å·¥ä½å°å·¥ä½ç«å¡ç | è°ç¨ `pending-count-by-workstation` æ¶ä¼ `onlyMine=true`ï¼ä»»å¡æ°å£å¾ä¸å表ä¸è´ | | 管ç端任å¡å°è´¦ | ä¸ä¼ `onlyMine`ï¼æ¥çå ¨é¨ä»»å¡ | | æ¥å·¥å¯¼å ¥ | å¤ç¨å建/ä¿®æ¹æ ¡éªï¼å¯¼å ¥äººéä¸ºä»»å¡æ¥å·¥äºº | ## 注æäºé¡¹ - æ°å¢é误ç `1_040_506_018`ï¼ãæ¨ä¸æ¯è¯¥ç产任å¡çæ¥å·¥äººï¼æ æ³æ¥å·¥ãï¼å端å¯ç´æ¥å±ç¤ºå端 messageã - `assigneeUserIds` æ´æ°è¯ä¹ï¼`null` ä¸ä¿®æ¹ï¼ç©ºæ°ç»æ¸ 空æ¥å·¥äººï¼æ¸ 空åè¯¥ä»»å¡æ äººå¯æ¥å·¥ï¼ï¼é空æ°ç»è¦çã - ä»»å¡è¡¨éå æ§è¡è¿ç§»èæ¬ `scripts/task-reporter-20261107/01_ddl.sql` å¢å `assignee_user_ids` åã - åå²ä»»å¡å·²éè¿ `scripts/task-reporter-20261107/02_backfill.sql` æå·¥ä½ç«äººååå¡«æ¥å·¥äººï¼å·¥ä½ç«æªé 置人åï¼å²ä½ï¼çä»»å¡ä»ä¸ºç©ºï¼è¿äºä»»å¡å¨è¡¥é½æ¥å·¥äººåä¸ä¼åºç°å¨å·¥ä½å°ã - å·¥ä½ç«äººååèªãå·¥ä½ç«-å²ä½ãé ç½®ï¼`mes_md_workstation_worker`ï¼ä¸ææå¯ç¨ç¨æ·ã