| | |
| | | "Bash(/tmp/fix_controller.sh)", |
| | | "Bash(chmod +x /tmp/fix2.sh)", |
| | | "Bash(/tmp/fix2.sh)", |
| | | "Bash(\"E:/soft/IntelliJ IDEA 2025.3.4/plugins/maven/lib/maven3/bin/mvn.cmd\" -DskipTests=true -q compile -pl yudao-module-mdm-api,yudao-module-mdm,yudao-module-mes -am)" |
| | | "Bash(\"E:/soft/IntelliJ IDEA 2025.3.4/plugins/maven/lib/maven3/bin/mvn.cmd\" -DskipTests=true -q compile -pl yudao-module-mdm-api,yudao-module-mdm,yudao-module-mes -am)", |
| | | "Bash(JAVA_HOME=\"C:/Program Files/Java/jdk-25\" mvn compile -pl yudao-module-mes -am -q -Dsource=25)", |
| | | "Read(//c/Program Files/Java//**)", |
| | | "Read(//d/Program Files/**)", |
| | | "Bash(where java *)" |
| | | ], |
| | | "deny": [ |
| | | "Bash(rm -rf *)", |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================ |
| | | -- MES ç¼ç è§ååå§åæ°æ® |
| | | -- å
å«ï¼mes_md_auto_code_ruleï¼è§å主表ï¼+ mes_md_auto_code_partï¼è§ååæ®µç»æï¼ |
| | | -- åæ®µç±»åï¼1=è¾å
¥å符, 2=å½åæ¥æ, 3=åºå®å符, 4=æµæ°´å· |
| | | -- å¾ªç¯æ¹å¼ï¼1=æå¹´, 2=ææ, 3=æå¤©, 4=æå°æ¶, 5=æåé, 10=æä¼ å
¥å符 |
| | | -- è¡¥é½æ¹å¼ï¼1=左补é½, 2=å³è¡¥é½ |
| | | -- ============================================================ |
| | | |
| | | -- ==================== 1. ç¼ç è§å主表 ==================== |
| | | |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, padded_char, padded_method, status, remark, creator, updater) VALUES |
| | | -- åºç¡æ°æ® |
| | | (1, 'MD_ITEM_TYPE_CODE', 'ç©æåç±»ç¼ç ', 'ç©æåç±»èªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (2, 'MD_ITEM_CODE', 'ç©æç¼ç ', 'ç©æèªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (3, 'MD_VENDOR_CODE', 'ä¾åºåç¼ç ', 'ä¾åºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (4, 'MD_CLIENT_CODE', '客æ·ç¼ç ', '客æ·èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (5, 'MD_WORKSTATION_CODE', 'å·¥ä½ç«ç¼ç ', 'å·¥ä½ç«èªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (6, 'MD_WORKSHOP_CODE', '车é´ç¼ç ', '车é´èªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (7, 'TM_TOOL_TYPE_CODE', 'å·¥å
·ç±»åç¼ç ', 'å·¥å
·ç±»åèªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | -- ä»å¨ç©æµ |
| | | (10, 'WM_WAREHOUSE_CODE', 'ä»åºç¼ç ', 'ä»åºèªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (11, 'WM_LOCATION_CODE', 'åºåºç¼ç ', 'åºåºèªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (12, 'WM_AREA_CODE', 'åºä½ç¼ç ', 'åºä½èªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (13, 'WM_ARRIVAL_NOTICE_CODE', 'å°è´§éç¥åç¼ç ', 'å°è´§éç¥åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (14, 'WM_ITEM_RECEIPT_CODE', 'éè´å
¥åºåç¼ç ', 'éè´å
¥åºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (15, 'WM_RETURN_VENDOR_CODE', 'éè´éè´§åç¼ç ', 'éè´éè´§åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (16, 'WM_RETURN_ISSUE_CODE', 'ç产éæåç¼ç ', 'ç产éæåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (17, 'WM_SN_CODE', 'SNç ', 'SNç èªå¨ç¼ç ', 18, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (18, 'WM_PACKAGE_CODE', 'è£
ç®±åç¼ç ', 'è£
ç®±åèªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (19, 'WM_BATCH_CODE', 'æ¹æ¬¡ç¼ç ', 'æ¹æ¬¡èªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (20, 'WM_PRODUCT_SALES_CODE', 'éå®åºåºåç¼ç ', 'éå®åºåºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (21, 'WM_MISC_RECEIPT_CODE', 'æé¡¹å
¥åºåç¼ç ', 'æé¡¹å
¥åºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (22, 'WM_MISC_ISSUE_CODE', 'æé¡¹åºåºåç¼ç ', 'æé¡¹åºåºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (23, 'WM_STOCK_TAKING_PLAN_CODE','çç¹æ¹æ¡ç¼ç ', 'çç¹æ¹æ¡èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (24, 'WM_STOCK_TAKING_CODE', 'çç¹ä»»å¡ç¼ç ', 'çç¹ä»»å¡èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (25, 'TRANSFER_CODE', 'è½¬ç§»è°æ¨åç¼ç ', 'è½¬ç§»è°æ¨åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (26, 'WM_OUTSOURCE_ISSUE_CODE','å¤ååæåç¼ç ', 'å¤ååæåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (27, 'WM_OUTSOURCE_RECEIPT_CODE','å¤åå
¥åºåç¼ç ', 'å¤åå
¥åºåèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (28, 'WM_SALES_NOTICE_CODE', 'åè´§éç¥åç¼ç ', 'åè´§éç¥åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (29, 'WM_RETURN_SALES_CODE', 'éå®éè´§åç¼ç ', 'éå®éè´§åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | -- ç产 |
| | | (30, 'PRO_WORK_ORDER_CODE', 'ç产工åç¼ç ', 'ç产工åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (31, 'PRO_TASK_CODE', 'ç产任å¡ç¼ç ', 'ç产任å¡èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (32, 'PRO_ROUTE_CODE', 'å·¥èºè·¯çº¿ç¼ç ', 'å·¥èºè·¯çº¿èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (33, 'PRO_FEEDBACK_CODE', 'ç产æ¥å·¥åç¼ç ', 'ç产æ¥å·¥åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | -- è´¨æ£ |
| | | (40, 'QC_IQC_CODE', 'æ¥ææ£éªåç¼ç ', 'æ¥ææ£éªåèªå¨ç¼ç ', 16, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (41, 'QC_IPQC_CODE', 'è¿ç¨æ£éªåç¼ç ', 'è¿ç¨æ£éªåèªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (42, 'QC_OQC_CODE', 'åºè´§æ£éªåç¼ç ', 'åºè´§æ£éªåèªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (43, 'QC_RQC_CODE', 'éè´§æ£éªåç¼ç ', 'éè´§æ£éªåèªå¨ç¼ç ', 17, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (44, 'QC_DEFECT_CODE', '缺é·ç±»åç¼ç ', '缺é·ç±»åèªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (45, 'QC_INDICATOR_RESULT_CODE','æ ·åæ£éªç»æç¼ç ', 'æ ·åæ£éªç»æèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | -- è®¾å¤ |
| | | (50, 'DV_MACHINERY_CODE', '设å¤ç¼ç ', '设å¤èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (51, 'DV_MACHINERY_TYPE_CODE', '设å¤ç±»åç¼ç ', '设å¤ç±»åèªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (52, 'DV_SUBJECT_CODE', 'ç¹æ£ä¿å
»é¡¹ç®ç¼ç ', 'ç¹æ£ä¿å
»é¡¹ç®èªå¨ç¼ç ', 6, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (53, 'DV_REPAIR_CODE', 'ç»´ä¿®åç¼ç ', 'ç»´ä¿®åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | -- å·¥èºææ¡£ |
| | | (60, 'PD_DOCUMENT_AUDIT_CODE', 'èµæå®¡æ ¸åç¼ç ', 'èµæå®¡æ ¸åèªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (61, 'PD_ARCHIVE_CODE', '彿¡£å°è´¦ç¼ç ', '彿¡£å°è´¦èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (62, 'PD_PROCESS_PARAM_CODE', 'å·¥èºåæ°ç¼ç ', 'å·¥èºåæ°èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'), |
| | | (63, 'PD_PROCESS_PARAM_TEMPLATE_CODE', 'å·¥èºåæ°æ¨¡æ¿ç¼ç ', 'å·¥èºåæ°æ¨¡æ¿èªå¨ç¼ç ', 15, 1, '0', 1, 0, NULL, '1', '1'); |
| | | |
| | | |
| | | -- ==================== 2. ç¼ç è§ååæ®µç»æ ==================== |
| | | -- |
| | | -- é¿åº¦å¯¹ç
§ï¼ |
| | | -- åºå®å符(IT_) = 3, æ¥æ(yyyyMMdd) = 8, æµæ°´å·(001) = 3 |
| | | -- ä¾: IT_001 = 3+3 = 6 â max_length=6 |
| | | -- ä¾: ITEM_20260716_001 = 6+8+3 = 17 â max_length=17 |
| | | -- ä¾: WO_20260716_001 = 3+8+3 = 14 â max_length=15 (çä½é) |
| | | -- |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, date_format, fix_character, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, updater) VALUES |
| | | -- ===== åºç¡æ°æ® ===== |
| | | -- 1. ç©æåç±»ï¼IT_001 = 3+3=6 |
| | | (1, 1, 3, 3, NULL, 'IT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (1, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 2. ç©æï¼ITEM_20260716001 = 6+8+3=17 |
| | | (2, 1, 3, 6, NULL, 'ITEM_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (2, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (2, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 3. ä¾åºåï¼VND_20260716001 = 4+8+3=15 |
| | | (3, 1, 3, 4, NULL, 'VND_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (3, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (3, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 4. 客æ·ï¼CLT_20260716001 = 4+8+3=15 |
| | | (4, 1, 3, 4, NULL, 'CLT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (4, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (4, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 5. å·¥ä½ç«ï¼WS_001 = 3+3=6 |
| | | (5, 1, 3, 3, NULL, 'WS_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (5, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 6. 车é´ï¼WP_001 = 3+3=6 |
| | | (6, 1, 3, 3, NULL, 'WP_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (6, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 7. å·¥å
·ç±»åï¼TL_001 = 3+3=6 |
| | | (7, 1, 3, 3, NULL, 'TL_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (7, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | |
| | | -- ===== ä»å¨ç©æµ ===== |
| | | -- 10. ä»åºï¼WH_001 = 3+3=6 |
| | | (10, 1, 3, 3, NULL, 'WH_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (10, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 11. åºåºï¼LC_001 = 3+3=6 |
| | | (11, 1, 3, 3, NULL, 'LC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (11, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 12. åºä½ï¼AR_001 = 3+3=6 |
| | | (12, 1, 3, 3, NULL, 'AR_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (12, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 13. å°è´§éç¥ï¼AN_20260716001 = 3+8+3=14â15 |
| | | (13, 1, 3, 3, NULL, 'AN_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (13, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (13, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 14. éè´å
¥åºï¼IR_20260716001 = 3+8+3=14â15 |
| | | (14, 1, 3, 3, NULL, 'IR_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (14, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (14, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 15. éè´éè´§ï¼RV_20260716001 = 3+8+3=14â15 |
| | | (15, 1, 3, 3, NULL, 'RV_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (15, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (15, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 16. ç产éæï¼RI_20260716001 = 3+8+3=14â15 |
| | | (16, 1, 3, 3, NULL, 'RI_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (16, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (16, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 17. SNç ï¼SN_20260716000001 = 3+8+4+3=18 |
| | | (17, 1, 3, 3, NULL, 'SN_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (17, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (17, 3, 4, 4, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 18. è£
ç®±ï¼PK_20260716001 = 3+8+3=14â17 |
| | | (18, 1, 3, 3, NULL, 'PK_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (18, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (18, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 19. æ¹æ¬¡ï¼BT_20260716001 = 3+8+3=14â17 |
| | | (19, 1, 3, 3, NULL, 'BT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (19, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (19, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 20. éå®åºåºï¼SL_20260716001 = 3+8+3=14â15 |
| | | (20, 1, 3, 3, NULL, 'SL_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (20, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (20, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 21. æé¡¹å
¥åºï¼MI_20260716001 = 3+8+3=14â15 |
| | | (21, 1, 3, 3, NULL, 'MI_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (21, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (21, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 22. æé¡¹åºåºï¼MO_20260716001 = 3+8+3=14â15 |
| | | (22, 1, 3, 3, NULL, 'MO_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (22, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (22, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 23. çç¹æ¹æ¡ï¼SP_20260716001 = 3+8+3=14â15 |
| | | (23, 1, 3, 3, NULL, 'SP_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (23, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (23, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 24. çç¹ä»»å¡ï¼ST_20260716001 = 3+8+3=14â15 |
| | | (24, 1, 3, 3, NULL, 'ST_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (24, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (24, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 25. è°æ¨ï¼TF_20260716001 = 3+8+3=14â15 |
| | | (25, 1, 3, 3, NULL, 'TF_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (25, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (25, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 26. å¤ååæï¼OI_20260716001 = 3+8+3=14â15 |
| | | (26, 1, 3, 3, NULL, 'OI_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (26, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (26, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 27. å¤åå
¥åºï¼OR_20260716001 = 3+8+3=14â15 |
| | | (27, 1, 3, 3, NULL, 'OR_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (27, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (27, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 28. åè´§éç¥ï¼SN_20260716001 = 3+8+3=14â15 |
| | | (28, 1, 3, 3, NULL, 'SN_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (28, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (28, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 29. éå®éè´§ï¼RS_20260716001 = 3+8+3=14â15 |
| | | (29, 1, 3, 3, NULL, 'RS_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (29, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (29, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | |
| | | -- ===== ç产 ===== |
| | | -- 30. å·¥åï¼WO_20260716001 = 3+8+3=14â15 |
| | | (30, 1, 3, 3, NULL, 'WO_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (30, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (30, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 31. ä»»å¡ï¼TK_20260716001 = 3+8+3=14â15 |
| | | (31, 1, 3, 3, NULL, 'TK_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (31, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (31, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 32. å·¥èºè·¯çº¿ï¼RT_20260716001 = 3+8+3=14â15 |
| | | (32, 1, 3, 3, NULL, 'RT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (32, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (32, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 33. æ¥å·¥ï¼FB_20260716001 = 3+8+3=14â15 |
| | | (33, 1, 3, 3, NULL, 'FB_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (33, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (33, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | |
| | | -- ===== è´¨æ£ ===== |
| | | -- 40. æ¥ææ£éªï¼IQC_20260716001 = 4+8+3=15â16 |
| | | (40, 1, 3, 4, NULL, 'IQC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (40, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (40, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 41. è¿ç¨æ£éªï¼IPQC_20260716001 = 5+8+3=16â17 |
| | | (41, 1, 3, 5, NULL, 'IPQC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (41, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (41, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 42. åºè´§æ£éªï¼OQC_20260716001 = 4+8+3=15â17 |
| | | (42, 1, 3, 4, NULL, 'OQC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (42, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (42, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 43. éè´§æ£éªï¼RQC_20260716001 = 4+8+3=15â17 |
| | | (43, 1, 3, 4, NULL, 'RQC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (43, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (43, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 44. 缺é·ï¼DF_001 = 3+3=6 |
| | | (44, 1, 3, 3, NULL, 'DF_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (44, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 45. æ£éªç»æï¼IR_20260716001 = 3+8+3=14â15 |
| | | (45, 1, 3, 3, NULL, 'IR_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (45, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (45, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | |
| | | -- ===== è®¾å¤ ===== |
| | | -- 50. 设å¤ï¼MC_20260716001 = 3+8+3=14â15 |
| | | (50, 1, 3, 3, NULL, 'MC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (50, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (50, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 51. 设å¤ç±»åï¼MT_001 = 3+3=6 |
| | | (51, 1, 3, 3, NULL, 'MT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (51, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 52. ç¹æ£ä¿å
»ï¼SJ_001 = 3+3=6 |
| | | (52, 1, 3, 3, NULL, 'SJ_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (52, 2, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 53. ç»´ä¿®ï¼RP_20260716001 = 3+8+3=14â15 |
| | | (53, 1, 3, 3, NULL, 'RP_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (53, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (53, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | |
| | | -- ===== å·¥èºææ¡£ ===== |
| | | -- 60. èµæå®¡æ ¸ï¼DA_20260716001 = 3+8+3=14â15 |
| | | (60, 1, 3, 3, NULL, 'DA_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (60, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (60, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 61. 彿¡£ï¼AC_20260716001 = 3+8+3=14â15 |
| | | (61, 1, 3, 3, NULL, 'AC_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (61, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (61, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 62. å·¥èºåæ°ï¼PP_20260716001 = 3+8+3=14â15 |
| | | (62, 1, 3, 3, NULL, 'PP_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (62, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (62, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'), |
| | | -- 63. å·¥èºåæ°æ¨¡æ¿ï¼PT_20260716001 = 3+8+3=14â15 |
| | | (63, 1, 3, 3, NULL, 'PT_', NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (63, 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, '1', '1'), |
| | | (63, 3, 4, 3, NULL, NULL, 1, 1, 1, 3, NULL, '1', '1'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # MES çäº§ç®¡æ§æ ¸æ¥ - åè½ç¬¦åæ§åæ |
| | | |
| | | ## æ ¸æ¥è¦æ±ä¸ç°æåè½å¯¹ç
§ |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±1ï¼ä¿¡æ¯åç³»ç»é¨ç½²ä¸è¿è¡ |
| | | |
| | | > æ ¸æ¥ä¼ä¸æ¯å¦é¨ç½²ç产管æ§ç¸å
³ä¿¡æ¯åç³»ç»ï¼å¦MESå¶é æ§è¡ç³»ç»ãç产管çä¸ç¨æ¨¡åçï¼ç¡®è®¤ç³»ç»å·²æ£å¼æå
¥ä½¿ç¨ä¸å¤äºæ£å¸¸è¿è¡ç¶æã |
| | | |
| | | **符å度ï¼â
符å** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | MESç³»ç»é¨ç½² | â
å·²é¨ç½² | 项ç®å
å«å®æ´ç `yudao-module-mes` 模å | |
| | | | ç产管çä¸ç¨æ¨¡å | â
å·²å
·å¤ | å
å«å·¥å管çãç产任å¡ãæ¥å·¥ãæäº§ç忍¡å | |
| | | | ç³»ç»è¿è¡ç¶æ | â
æ£å¸¸ | ç³»ç»å¯æ£å¸¸ç¼è¯è¿è¡ï¼æ°æ®åºè¡¨åæ°æ®å·²å°±ç»ª | |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±2ï¼ç产工å管çå¶åº¦ä¸ç³»ç»æµç¨å¹é
|
| | | |
| | | > æ ¸æ¥ä¼ä¸æ¯å¦å¶å®ç产工å管çç¸å
³å¶åº¦æä»¶ï¼å
æ¬ç产工å管çå¶åº¦ãç产è¿åº¦è·è¸ªç»åãç©æé¢ç¨/èç¨ç®¡çè§å®çï¼ç¡®è®¤å¶åº¦ä¸æç¡®äºå·¥ååå»ºãæ´¾å·¥ãæ¥å·¥ãæ ¸éã彿¡£çå
¨æµç¨è§èï¼ä¸å¶åº¦è¦æ±ä¸ä¿¡æ¯åç³»ç»æä½æµç¨ç¸å¹é
ã |
| | | |
| | | **符å度ï¼â ï¸ é¨å符åï¼ç³»ç»æµç¨åºæ¬è¦çï¼ä½ç¼ºå°æ ¸éå彿¡£ç¯èï¼** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | å·¥åå建 | â
å·²å®ç° | `POST /mes/pro/work-order/create`ï¼èç¨¿ç¶æ | |
| | | | å·¥å确认(审æ¹) | â
å·²å®ç° | `PUT /mes/pro/work-order/confirm`ï¼è稿â已确认 | |
| | | | 派工(æäº§) | â
å·²å®ç° | ç产任å¡(Task)ä»å·¥åæ´¾çï¼å«å·¥ä½ç«ãå·¥åºãæäº§æ°é | |
| | | | æ¥å·¥ | â
å·²å®ç° | `POST /mes/pro-feedback/create`ï¼æ¯æèªè¡æ¥å·¥åç»ä¸æ¥å·¥ | |
| | | | æ¥å·¥æäº¤ | â
å·²å®ç° | `PUT /mes/pro-feedback/submit`ï¼è稿â审æ¹ä¸ | |
| | | | æ¥å·¥å®¡æ¹ | â
å·²å®ç° | `PUT /mes/pro-feedback/approve`ï¼è§¦åå
¥åº/æ£æ | |
| | | | ç©æé¢ç¨ | â
å·²å®ç° | ç产åæ(ProductIssue)模åï¼å
³èå·¥å | |
| | | | ç©æèç¨(åå²) | â
å·²å®ç° | æ¥å·¥å®¡æ¹æ¶èªå¨æBOMæ£æ(ItemConsume) | |
| | | | æåå
¥åº | â
å·²å®ç° | ç产产åº(ProductProduce)模åï¼å®¡æ¹åèªå¨å
¥åº | |
| | | | **å·¥åæ ¸é** | â **缺失** | æ å·¥åæ ¸éåè½ï¼æ æ³å¯¹å·¥åè¿è¡ç©æ/产éçæç»å¯¹è´¦æ ¸é | |
| | | | **å·¥å彿¡£** | â **缺失** | æ å·¥å彿¡£åè½ï¼å·²å®æ/已忶çå·¥åæ å½æ¡£ç¶æå彿¡£æä½ | |
| | | | å¶åº¦æä»¶ç®¡ç | â ä¸å±äºç³»ç»èå´ | å¶åº¦æä»¶ä¸ºçº¿ä¸ç®¡çï¼ç³»ç»ä¸æä¾å¶åº¦æä»¶ç®¡çåè½ | |
| | | |
| | | **ç³»ç»æä½æµç¨ï¼** |
| | | |
| | | ``` |
| | | å·¥åå建(è稿) â å·¥å确认(已确认) â æ´¾å·¥/æäº§(çæä»»å¡) |
| | | â æ¥å·¥(è稿) â æäº¤(审æ¹ä¸) â 审æ¹éè¿(已宿) |
| | | â èªå¨å
¥åº(å
³é®å·¥åº) / èªå¨æ£æ(åå²å·¥åº) |
| | | â å·¥åå®å·¥(已宿) / å·¥ååæ¶(已忶) |
| | | |
| | | 缺失ç¯èï¼å·¥åæ ¸é â å·¥å彿¡£ |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±3ï¼å·¥åå
¨çå½å¨æçº¿ä¸ç®¡çè½å |
| | | |
| | | > ç°åºæ¼ç¤ºä¿¡æ¯åç³»ç»ççäº§å·¥åæ ¸å¿åè½ï¼ç±ä¼ä¸æä½äººå便¬¡æ¼ç¤ºå·¥åå建ã审æ¹ãä¸åãè¿åº¦æ´æ°ãå®å·¥ç¡®è®¤çå
¨æµç¨æä½ï¼æ ¸å®ç³»ç»å
·å¤å·¥åå
¨çå½å¨æçº¿ä¸ç®¡çè½åï¼åç¯èæä½èç¹æ¸
æ°ãå¯è¿½æº¯ã |
| | | |
| | | **符å度ï¼â ï¸ é¨å符åï¼æ ¸å¿æµç¨å
·å¤ï¼ä½å·¥å级缺å°"ä¸å"ç¯èï¼è¿åº¦æ´æ°ä¾èµæ¥å·¥é´æ¥å®ç°ï¼** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | å·¥åå建 | â
å·²å®ç° | å建工å + èªå¨çæBOM + èªå¨çææ¡ç | |
| | | | å·¥å审æ¹(确认) | â
å·²å®ç° | confirmWorkOrderï¼è稿â已确认 | |
| | | | **å·¥åä¸å** | â ï¸ **å¼±å** | å·¥å确认åå³å¯æäº§/æ¥å·¥ï¼æ ç¬ç«ç"ä¸å"æä½åç¶æï¼ç¡®è®¤å³çæ | |
| | | | è¿åº¦æ´æ° | â
å·²å®ç° | éè¿æ¥å·¥å®¡æ¹åèªå¨ç´¯å `quantityProduced`ï¼é´æ¥æ´æ°è¿åº¦ | |
| | | | å®å·¥ç¡®è®¤ | â
å·²å®ç° | finishWorkOrderï¼çº§è宿ææä»»å¡ | |
| | | | åç¯èå¯è¿½æº¯ | â ï¸ é¨åå
·å¤ | 详è§è¦æ±4åæ | |
| | | |
| | | **å·¥åç¶ææµè½¬ï¼ç°æï¼ï¼** |
| | | |
| | | ``` |
| | | è稿(0) â 已确认(1) â 已宿(2) |
| | | â 已忶(3) |
| | | |
| | | 缺失ï¼å·²ç¡®è®¤ â å·²ä¸å(æªå®ç°ç¬ç«ä¸åç¯è) |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±4ï¼å·¥åæä½çè¿¹å®æ´æ§ä¸å¯è¿½æº¯æ§ |
| | | |
| | | > æ½æ¥ç³»ç»å
è¿æçäº§å·¥åæ°æ®ï¼æå¼å·¥ä¸ãå·¥åºå®å·¥ãæ´ä½å®å·¥ãå¼å¸¸åå·¥åç§ç¶æåç±»æ½æ¥ï¼æ ¸å®æ¯ç¬å·¥åçåç¯èæä½çè¿¹å®æ´ï¼å
嫿ä½äººãæä½æ¶é´ãæä½å
容çä¿¡æ¯ï¼å·¥åç¶ææ´æ°åæ¶ãåç¡®ã |
| | | |
| | | **符å度ï¼â ï¸ é¨å符åï¼åºç¡å®¡è®¡ä¿¡æ¯å
·å¤ï¼ä½æä½ç迹ä¸å¤å®æ´ï¼åç§ç¶æåç±»ä¸å®æ´ï¼** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | å建人/å建æ¶é´ | â
å·²å
·å¤ | BaseDO ç `creator`ã`create_time` åæ®µ | |
| | | | æ´æ°äºº/æ´æ°æ¶é´ | â
å·²å
·å¤ | BaseDO ç `updater`ã`update_time` åæ®µ | |
| | | | æ¥å·¥äºº | â
å·²å
·å¤ | FeedbackDO ç `feedbackUserId` + `feedbackTime` | |
| | | | 审æ¹äºº | â
å·²å
·å¤ | FeedbackDO ç `approveUserId` | |
| | | | å®å·¥æ¶é´ | â
å·²å
·å¤ | WorkOrderDO ç `finishDate` | |
| | | | åæ¶æ¶é´ | â
å·²å
·å¤ | WorkOrderDO ç `cancelDate` | |
| | | | ç³»ç»æä½æ¥å¿ | â
å·²å
·å¤ | `system_operate_log` 表ï¼è®°å½ææAPI请æ±çæä½äººãæ¶é´ãURLãIPç | |
| | | | **å·¥å级æä½æ¶é´çº¿** | â **缺失** | æ å·¥åä¸å±çæä½åå²è¡¨ï¼æ æ³æå·¥åIDæ¥è¯¢"è°å¨ä»ä¹æ¶é´åäºä»ä¹æä½"çæ¶é´çº¿ | |
| | | | **审æ¹äººèªå¨è®°å½** | â **缺失** | æ¥å·¥å®¡æ¹æ¶æªèªå¨å¡«å
`approveUserId` 为å½åç»å½ç¨æ· | |
| | | | **ç¶æåç±»ï¼å¼å·¥ä¸** | â ï¸ å¯¹åºå·¥å"已确认" | ä½"已确认"ä¸çäº"å¼å·¥ä¸"ï¼ç¼ºå°æç¡®çå¼å·¥ç¶æ | |
| | | | **ç¶æåç±»ï¼å·¥åºå®å·¥** | â ï¸ é´æ¥å¯æ¥ | æ¥å·¥ç¶æ=å·²å®æä»£è¡¨å·¥åºå®å·¥ï¼ä½æ "å·¥åºå®å·¥"çå·¥åçº§ç¶æ | |
| | | | **ç¶æåç±»ï¼æ´ä½å®å·¥** | â
å·²å
·å¤ | å·¥åç¶æ=已宿(2) | |
| | | | **ç¶æåç±»ï¼å¼å¸¸åå·¥** | â **缺失** | å·¥åæ "å¼å¸¸åå·¥"ç¶æï¼è¯¦è§è¦æ±6åæ | |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±5ï¼ç³»ç»æ°æ®ä¸å®é
ç产æ§è¡èµææ ¸å¯¹ |
| | | |
| | | > æ ¸å¯¹ç³»ç»å
工忰æ®ä¸å®é
ç产æ§è¡èµæï¼å
æ¬ç©æé¢ç¨åãç产è¿åº¦æ¥æ¥è¡¨ãæåå
¥åºåã设å¤è¿è¡è®°å½çï¼ç¡®è®¤å·¥åä¸ç产éãç©æèç¨ãç产工æçæ°æ®ä¸å®é
ä¸è´ï¼åå·®çå¨åçèå´å
ã |
| | | |
| | | **符å度ï¼â ï¸ é¨å符åï¼æ°æ®å
³èé¾è·¯åå¨ï¼ä½ç¼ºå°æ ¸å¯¹/对账工å
·ååå·®åæè½åï¼** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | ç©æé¢ç¨å | â
å·²å
·å¤ | ç产åæ(ProductIssue)模åï¼å
³è workOrderId | |
| | | | ç©æèç¨è®°å½ | â
å·²å
·å¤ | ç©ææ¶è(ItemConsume)模åï¼æ¥å·¥å®¡æ¹æ¶èªå¨çæï¼å
³è feedbackId | |
| | | | æåå
¥åºå | â
å·²å
·å¤ | ç产产åº(ProductProduce)模åï¼æ¥å·¥å®¡æ¹æ¶èªå¨çæï¼å
³è feedbackId | |
| | | | äº§éæ°æ® | â
å·²å
·å¤ | å·¥å `quantityProduced`ï¼ä»»å¡ `producedQuantity`/`qualifyQuantity`/`unqualifyQuantity` | |
| | | | ç产工æ | â
å·²å
·å¤ | ä»»å¡ `startTime`/`endTime`/`duration`ï¼å·¥å `requestDate`/`finishDate` | |
| | | | 设å¤è¿è¡è®°å½ | â
å·²å
·å¤ | 设å¤ç»´ä¿®/ç¹æ£/ä¿å
»è®°å½æ¨¡å(DvRepair/DvCheckRecord/DvMaintenRecord) | |
| | | | **å·¥å-ç©æå¯¹è´¦** | â **缺失** | æ å·¥åç©ææ ¸é/对账åè½ï¼æ æ³èªå¨æ¯å¯¹BOMéæ±é vs å®é
é¢ç¨é vs å®é
èç¨é | |
| | | | **å·¥å-产é对账** | â **缺失** | æ å·¥åäº§éæ ¸éåè½ï¼æ æ³èªå¨æ¯å¯¹å·¥åæ°é vs æ¥å·¥å计 vs å
¥åºå计 | |
| | | | **åå·®çåæ** | â **缺失** | æ åå·®ç计ç®åé¢è¦åè½ | |
| | | | **ç产è¿åº¦æ¥æ¥è¡¨** | â **缺失** | æ ææ¥æ±æ»ç产è¿åº¦çæ¥è¡¨åè½ | |
| | | |
| | | --- |
| | | |
| | | ### è¦æ±6ï¼å·¥åå¼å¸¸ç®¡çè½å |
| | | |
| | | > æ ¸æ¥ç³»ç»çå·¥åå¼å¸¸ç®¡çè½åï¼æ½æ¥ç³»ç»å
å¼å¸¸å工工åçå¤çè®°å½ï¼æ ¸å®æ¯å¦å
å«å¼å¸¸åå åæãå¤çæªæ½ãå¤å·¥æ¶é´çä¿¡æ¯ï¼å¼å¸¸å·¥åå®ç°éç¯ç®¡çï¼æ é¿ææªå¤ççæ
åµã |
| | | |
| | | **符å度ï¼â ï¸ é¨å符åï¼æå®ç¯å¼å«è®°å½ï¼ä½å·¥å级å¼å¸¸å工管ç严éä¸è¶³ï¼** |
| | | |
| | | | æ ¸æ¥é¡¹ | ç°ç¶ | 说æ | |
| | | |--------|------|------| |
| | | | å®ç¯å¼å«è®°å½ | â
å·²å
·å¤ | AndonRecord 模åï¼è®°å½å¼å«åå ã级å«ãå¤ç½®ç¶æãå¤ç½®äººãå¤ç½®æ¶é´ | |
| | | | å®ç¯å
³èå·¥å | â
å·²å
·å¤ | AndonRecordDO å
³è workOrderId | |
| | | | å®ç¯éç¯ç®¡ç | â ï¸ é¨åå
·å¤ | æ"æªå¤ç½®âå·²å¤ç½®"ç¶ææµè½¬ï¼ä½æ è¶
æ¶é¢è¦åå级æºå¶ | |
| | | | **å·¥å"å¼å¸¸åå·¥"ç¶æ** | â **缺失** | å·¥åç¶æä»
æï¼è稿/已确认/已宿/å·²åæ¶ï¼æ "å¼å¸¸åå·¥"ç¶æ | |
| | | | **å·¥åæå/æèµ·æä½** | â **缺失** | æ pauseWorkOrder / suspendWorkOrder æ¥å£ | |
| | | | **工忢å¤/å¤å·¥æä½** | â **缺失** | æ resumeWorkOrder æ¥å£åå¤å·¥æ¶é´è®°å½ | |
| | | | **å¼å¸¸åå åæ** | â **缺失** | å®ç¯è®°å½ä»
æ reason åæ®µ(å¼å«åå )ï¼æ ç»æåçå¼å¸¸åå åæ(å¦è®¾å¤æ
é/ç©æç缺/è´¨éå¼å¸¸çåç±») | |
| | | | **å¤çæªæ½è®°å½** | â **缺失** | å®ç¯è®°å½ä»
æ remark åæ®µ(夿³¨)ï¼æ ç»æåçå¤çæªæ½è®°å½ | |
| | | | **å¤å·¥æ¶é´è®°å½** | â **缺失** | æ åå·¥å¼å§æ¶é´ãåå·¥ç»ææ¶é´ãåå·¥æ¶é¿çåæ®µ | |
| | | | **é¿ææªå¤çé¢è¦** | â **缺失** | æ å¼å¸¸è¶
æ¶é¢è¦æºå¶ï¼æ æ³åç°é¿ææªå¤ççå¼å¸¸å·¥å | |
| | | | **å¼å¸¸éç¯ç®¡ç** | â **缺失** | å·¥åæ æ³ä»"å¼å¸¸åå·¥"æ¢å¤å°"ç产ä¸"ï¼æ éç¯æµç¨ | |
| | | |
| | | --- |
| | | |
| | | ## 缺失åè½æ±æ» |
| | | |
| | | ### ð´ 严é缺失ï¼ç´æ¥å½±åæ ¸æ¥éè¿ï¼ |
| | | |
| | | | # | 缺失åè½ | 对åºè¦æ± | 说æ | |
| | | |---|---------|---------|------| |
| | | | 1 | **å·¥åå¼å¸¸åå·¥ç¶æä¸éç¯ç®¡ç** | è¦æ±4ã6 | å·¥åæ "å¼å¸¸åå·¥"ç¶æï¼æ æå/å¤å·¥æä½ï¼æ æ³å®ç°å¼å¸¸å·¥åéç¯ç®¡ç | |
| | | | 2 | **å·¥åæä½å岿¶é´çº¿** | è¦æ±4 | æ å·¥åä¸å±æä½åå²è¡¨ï¼æ æ³æå·¥åæ¥è¯¢å®æ´çæä½ç迹æ¶é´çº¿ | |
| | | | 3 | **审æ¹äººèªå¨è®°å½** | è¦æ±4 | æ¥å·¥å®¡æ¹æ¶æªèªå¨å¡«å
审æ¹äººä¸ºå½åç»å½ç¨æ· | |
| | | |
| | | ### ð¡ ä¸åº¦ç¼ºå¤±ï¼å½±åæ ¸æ¥è´¨éä½ä¸è´å½ï¼ |
| | | |
| | | | # | 缺失åè½ | 对åºè¦æ± | 说æ | |
| | | |---|---------|---------|------| |
| | | | 4 | **å·¥åä¸åç¯è** | è¦æ±3 | å·¥åæ ç¬ç«ç"ä¸å"æä½åç¶æï¼ç¡®è®¤å³çæï¼ç¼ºå°ä¸åèç¹ | |
| | | | 5 | **å·¥åæ ¸éåè½** | è¦æ±2 | æ å·¥åç©æ/产éçæç»å¯¹è´¦æ ¸é | |
| | | | 6 | **å·¥å彿¡£åè½** | è¦æ±2 | æ å·¥å彿¡£ç¶æå彿¡£æä½ | |
| | | | 7 | **å·¥å-ç©æå¯¹è´¦** | è¦æ±5 | æ æ³èªå¨æ¯å¯¹BOMéæ±é vs å®é
é¢ç¨é vs å®é
èç¨é | |
| | | | 8 | **å·¥å-产é对账** | è¦æ±5 | æ æ³èªå¨æ¯å¯¹å·¥åæ°é vs æ¥å·¥å计 vs å
¥åºå计 | |
| | | | 9 | **å¼å¸¸åå ç»æååæ** | è¦æ±6 | å®ç¯è®°å½ä»
æææ¬åå ï¼æ å¼å¸¸åç±»(è®¾å¤æ
é/ç©æç缺/è´¨éå¼å¸¸ç) | |
| | | | 10 | **å¤çæªæ½ç»æåè®°å½** | è¦æ±6 | å®ç¯è®°å½ä»
æå¤æ³¨ï¼æ å¤çæªæ½ãå¤å·¥æ¶é´çç»æååæ®µ | |
| | | |
| | | ### ð¢ 轻度缺失ï¼é¦ä¸æ·»è±ï¼ |
| | | |
| | | | # | 缺失åè½ | 对åºè¦æ± | 说æ | |
| | | |---|---------|---------|------| |
| | | | 11 | **åå·®çåæä¸é¢è¦** | è¦æ±5 | æ åå·®ç计ç®åé¢è¦åè½ | |
| | | | 12 | **ç产è¿åº¦æ¥æ¥è¡¨** | è¦æ±5 | æ ææ¥æ±æ»ç产è¿åº¦çæ¥è¡¨ | |
| | | | 13 | **å¼å¸¸è¶
æ¶é¢è¦** | è¦æ±6 | æ é¿ææªå¤çå¼å¸¸çé¢è¦æºå¶ | |
| | | | 14 | **å¼å·¥ä¸/å·¥åºå®å·¥çå·¥åçº§ç¶æ** | è¦æ±4 | å·¥åç¶æç²åº¦ä¸å¤ï¼æ æ³ç´æ¥æ"å¼å·¥ä¸""å·¥åºå®å·¥"åç±» | |
| | | | 15 | **å·¥åèªå¨å®å·¥** | è¦æ±3 | å·¥åå¨ quantityProduced >= quantity æ¶ä¸ä¼èªå¨è½¬ä¸ºå·²å®æï¼éæå¨ finish | |
| | | | 16 | **ä»»å¡"è¿è¡ä¸"ç¶æ** | è¦æ±4 | ä»»å¡ä»
æè稿/已宿/å·²åæ¶ï¼æ "è¿è¡ä¸/ç产ä¸"ç¶æï¼æ æ³åºå"å·²æäº§å¾
ç产"å"æ£å¨ç产" | |
| | | | 17 | **å·¥åå¤çº§å®¡æ¹** | è¦æ±3 | å·¥å确认æ¯åæ¥æä½(è稿â已确认)ï¼æ BPM工使µå¤çº§å®¡æ¹ | |
| | | | 18 | **quantityScheduled/quantityChanged åæ®µ** | è¦æ±5 | å·¥åDOä¸åå¨ä½ä»æªè¢«æ´æ°ï¼å±äºæ»å段 | |
| | | |
| | | --- |
| | | |
| | | ## 建议ä¼å
è¡¥å
çåè½ï¼æä¼å
级æåºï¼ |
| | | |
| | | ### P0 - å¿
须补å
ï¼æ ¸æ¥ç¡¬ä¼¤ï¼ |
| | | |
| | | **1. å·¥åå¼å¸¸åå·¥éç¯ç®¡ç** |
| | | |
| | | - 工忰å¢ç¶æï¼`SUSPENDED(4, "å¼å¸¸åå·¥")` |
| | | - æ°å¢æ¥å£ï¼`PUT /mes/pro/work-order/suspend` â æåå·¥åï¼å·²ç¡®è®¤âå¼å¸¸åå·¥ï¼ï¼è®°å½åå·¥åå ãåå·¥æ¶é´ |
| | | - æ°å¢æ¥å£ï¼`PUT /mes/pro/work-order/resume` â æ¢å¤å·¥åï¼å¼å¸¸åå·¥â已确认ï¼ï¼è®°å½å¤å·¥æ¶é´ãå¤çæªæ½ |
| | | - å·¥åDOæ°å¢å段ï¼`suspendDate`(åå·¥æ¶é´)ã`resumeDate`(å¤å·¥æ¶é´)ã`suspendReason`(åå·¥åå )ã`resumeMeasure`(å¤å·¥æªæ½) |
| | | - ä»»å¡åæ¥æ¯ææå/æ¢å¤ |
| | | |
| | | **2. å·¥åæä½åå²è®°å½** |
| | | |
| | | - æ°å¢è¡¨ `mes_pro_work_order_log`ï¼è®°å½å·¥åå
¨çå½å¨ææä½ |
| | | - åæ®µï¼workOrderIdãoperation(å建/确认/ä¸å/å®å·¥/åæ¶/æå/æ¢å¤)ãoperatorIdãoperateTimeãremark |
| | | - æ°å¢æ¥å£ï¼`GET /mes/pro/work-order/log` â æ¥è¯¢å·¥åæä½å岿¶é´çº¿ |
| | | - å¨å·¥ååç¶æåæ´æä½ä¸èªå¨åå
¥æä½è®°å½ |
| | | - **å¿«æ·æ¹æ¡**ï¼æ¡æ¶å·²æ `@LogRecord`ï¼mzt-biz-logï¼+ `system_operate_log` è¡¨ï¼æ¯æ `bizId` æä¸å¡IDæ¥è¯¢ï¼ï¼CRM/System 模åå·²å¨ç¨ï¼MES 模åä»
éå¨å·¥å Service æ¹æ³ä¸å `@LogRecord` 注解å³å¯å®ç°åºç¡æä½æ¥å¿è®°å½ï¼æ éæ°å»ºè¡¨ |
| | | |
| | | **3. æ¥å·¥å®¡æ¹èªå¨è®°å½å®¡æ¹äºº** |
| | | |
| | | - `approveFeedback` æ¹æ³ä¸èªå¨è®¾ç½® `approveUserId = getLoginUserId()` |
| | | |
| | | **4. å·¥åç¶æè½¬æ¢è®°å½"è°æä½"** |
| | | |
| | | - å·¥åDOæ°å¢å段ï¼`confirmUserId`(确认人)ã`finishUserId`(å®å·¥äºº)ã`cancelUserId`(åæ¶äºº) |
| | | - åç¶æåæ´æ¹æ³ä¸èªå¨å¡«å
å½åç»å½ç¨æ·ID |
| | | |
| | | ### P1 - 建议补å
ï¼æåæ ¸æ¥è´¨éï¼ |
| | | |
| | | **4. å·¥åä¸åç¯è** |
| | | |
| | | - 工忰å¢ç¶æï¼`ISSUED(2, "å·²ä¸å")`ï¼å¨å·²ç¡®è®¤å已宿ä¹é´ï¼ |
| | | - æ°å¢æ¥å£ï¼`PUT /mes/pro/work-order/issue` â ä¸åå·¥åï¼å·²ç¡®è®¤âå·²ä¸åï¼ |
| | | - è°æ´å®å·¥ç¡®è®¤åç½®æ¡ä»¶ï¼å·²ä¸åâ已宿 |
| | | |
| | | **5. å·¥åæ ¸éä¸å½æ¡£** |
| | | |
| | | - 工忰å¢ç¶æï¼`SETTLED(5, "å·²æ ¸é")`ã`ARCHIVED(6, "已彿¡£")` |
| | | - æ ¸éï¼æ¯å¯¹å·¥åBOMéæ±é vs å®é
æ¶èéï¼å·¥åæ°é vs å
¥åºæ°éï¼çææ ¸éæ¥å |
| | | - 彿¡£ï¼æ ¸ééè¿å彿¡£ï¼å½æ¡£ååªè¯»ä¸å¯ä¿®æ¹ |
| | | |
| | | **6. å¼å¸¸è®°å½ç»æåå¢å¼º** |
| | | |
| | | - å®ç¯è®°å½æ°å¢å段ï¼`exceptionType`(å¼å¸¸åç±»ï¼è®¾å¤æ
é/ç©æç缺/è´¨éå¼å¸¸/人åä¸è¶³/å
¶ä»)ã`handleMeasure`(å¤çæªæ½)ã`downtimeStart`(åå·¥å¼å§æ¶é´)ã`downtimeEnd`(åå·¥ç»ææ¶é´)ã`downtimeDuration`(åå·¥æ¶é¿) |
| | | - æ°å¢å¼å¸¸è¶
æ¶é¢è¦ï¼æªå¤ç½®è¶
è¿Nå°æ¶èªå¨å级éç¥ |
| | | |
| | | **7. ä»»å¡ç¶æå¢å¼º** |
| | | |
| | | - 任塿°å¢ç¶æï¼`IN_PROGRESS(1, "è¿è¡ä¸")`ï¼å¨è稿å已宿ä¹é´ |
| | | - æ¥å·¥æäº¤/å®¡æ¹æ¶èªå¨å°ä»»å¡ä»è稿âè¿è¡ä¸ |
| | | - ä¸å·¥åç¶æèå¨ï¼å·¥åæåæ¶ä»»å¡åæ¥æå |
| | | |
| | | **8. å·¥åèªå¨å®å·¥** |
| | | |
| | | - å½å·¥åææä»»å¡åå·²å®å·¥ï¼æ `quantityProduced >= quantity` æ¶ï¼æç¤ºç¨æ·å¯å®å·¥ï¼å¯éèªå¨å®å·¥ï¼ |
| | | - ä¿®å¤ `quantityScheduled` å `quantityChanged` æ»åæ®µï¼æäº§æ¶æ´æ° quantityScheduledï¼è°æ´æ°éæ¶æ´æ° quantityChanged |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # çäº§é¢æ/éæå
³è Task - å端èè°æ¹æ¡ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - çäº§é¢æåºåºåå表页 / æ°å¢ç¼è¾é¡µ / è¡ç®¡ç页 |
| | | - ç产éæåå表页 / æ°å¢ç¼è¾é¡µ / è¡ç®¡ç页 |
| | | - ç产任å¡å表页ï¼éæ© task ç¨ï¼ |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ### 颿æµç¨ |
| | | 1. **æ°å¢é¢æåºåºå**ï¼éæ© Task â å·¥å(workOrderId)ãå·¥ä½ç«(workstationId) ä» Task èªå¨å¸¦å
¥ |
| | | 2. **æ°å¢é¢æåºåºåè¡**ï¼è¡å¯éå¡« taskIdï¼é»è®¤å主表ç taskId |
| | | 3. **宿颿åºåº**ï¼ç³»ç»èªå¨åå»ºä»»å¡ææè®°å½(mes_pro_task_issue)ï¼issuedQuantity = availableQuantity = è¡æ°é |
| | | 4. **忶颿åºåº**ï¼ç³»ç»èªå¨å é¤éè¿è¯¥é¢æåå建ç任塿æè®°å½ |
| | | |
| | | ### éææµç¨ |
| | | 1. **æ°å¢éæå**ï¼éæ© Task â å·¥å(workOrderId)ãå·¥ä½ç«(workstationId) ä» Task èªå¨å¸¦å
¥ |
| | | 2. **æ°å¢éæåè¡**ï¼è¡å¯éå¡« taskIdï¼é»è®¤å主表ç taskId |
| | | 3. **宿éæ**ï¼ç³»ç»èªå¨æ£å任塿æè®°å½ç issuedQuantity å availableQuantity |
| | | 4. **åæ¶éæ**ï¼æ é¢å¤æä½ï¼éææªå®ææ¶ä¸å½±åææè®°å½ï¼ |
| | | |
| | | ### 颿 â éæéç¯ |
| | | |
| | | ``` |
| | | 颿宿 â task_issue: issued=100, available=100, used=0 |
| | | éæå®æ â task_issue: issued=80, available=80, used=0 (éäº20) |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ä¸ã颿åºåºå API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /mes/wm/product-issue/create | åå»ºé¢æåºåºå | |
| | | | PUT | /mes/wm/product-issue/update | ä¿®æ¹é¢æåºåºå | |
| | | | GET | /mes/wm/product-issue/get | è·å¾é¢æåºåºå | |
| | | | GET | /mes/wm/product-issue/page | è·å¾é¢æåºåºåå页 | |
| | | | PUT | /mes/wm/product-issue/submit | æäº¤é¢æåºåºå | |
| | | | PUT | /mes/wm/product-issue/stock | æ§è¡æ£è´§ | |
| | | | PUT | /mes/wm/product-issue/finish | 宿颿åºåºï¼èªå¨å建ææè®°å½ï¼ | |
| | | | PUT | /mes/wm/product-issue/cancel | 忶颿åºåºï¼èªå¨å 餿æè®°å½ï¼ | |
| | | | POST | /mes/wm/product-issue-line/create | åå»ºé¢æåºåºåè¡ | |
| | | | PUT | /mes/wm/product-issue-line/update | ä¿®æ¹é¢æåºåºåè¡ | |
| | | |
| | | ### å建/ä¿®æ¹é¢æåºåºå - 请æ±åæ°åæ´ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | taskId | Long | **æ¯ï¼æ°å¢å¿
å¡«ï¼** | çäº§ä»»å¡ IDï¼ä»¥ task 为主 | |
| | | | workOrderId | Long | **å¦ï¼åå¿
å¡«æ¹ä¸ºéå¡«ï¼** | ç产工å IDï¼ä» task èªå¨å¸¦å
¥ | |
| | | | workstationId | Long | å¦ | å·¥ä½ç« IDï¼ä» task èªå¨å¸¦å
¥ | |
| | | | requiredTime | LocalDateTime | æ¯ | éæ±æ¶é´ | |
| | | |
| | | **请æ±ç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": "ISSUE20260716001", |
| | | "name": "çäº§é¢æ", |
| | | "taskId": 1, |
| | | "requiredTime": "2026-07-16 10:00:00", |
| | | "remark": "" |
| | | } |
| | | ``` |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": 1 }` |
| | | |
| | | ### 颿åºåºå - ååºå段æ°å¢ |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | taskId | Long | çäº§ä»»å¡ ID | |
| | | | taskCode | String | **æ°å¢** ç产任å¡ç¼ç | |
| | | | taskName | String | **æ°å¢** ç产任å¡åç§° | |
| | | | requiredTime | LocalDateTime | éæ±æ¶é´ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 1, |
| | | "code": "ISSUE20260716001", |
| | | "name": "çäº§é¢æ", |
| | | "taskId": 1, |
| | | "taskCode": "TASK001", |
| | | "taskName": "注å¡ä»»å¡", |
| | | "workOrderId": 10, |
| | | "workOrderCode": "WO001", |
| | | "workstationId": 5, |
| | | "workstationName": "è£
é
å·¥ä½ç«", |
| | | "clientCode": "C001", |
| | | "clientName": "ææå®¢æ·", |
| | | "issueDate": null, |
| | | "requiredTime": "2026-07-16 10:00:00", |
| | | "status": 0, |
| | | "remark": "", |
| | | "createTime": "2026-07-16 10:00:00" |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### 颿åºåºåè¡ - 请æ±/ååºå段æ°å¢ |
| | | |
| | | | åæ®µ | ç±»å | è¯·æ± | ååº | 说æ | |
| | | |------|------|------|------|------| |
| | | | taskId | Long | éå¡« | - | çäº§ä»»å¡ IDï¼é»è®¤å主表ç taskId | |
| | | | taskCode | String | - | æ°å¢ | ç产任å¡ç¼ç | |
| | | | taskName | String | - | æ°å¢ | ç产任å¡åç§° | |
| | | |
| | | --- |
| | | |
| | | ## äºãéæå API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /mes/wm/return-issue/create | å建éæå | |
| | | | PUT | /mes/wm/return-issue/update | ä¿®æ¹éæå | |
| | | | GET | /mes/wm/return-issue/get | è·å¾éæå | |
| | | | GET | /mes/wm/return-issue/page | è·å¾éæåå页 | |
| | | | PUT | /mes/wm/return-issue/submit | æäº¤éæå | |
| | | | PUT | /mes/wm/return-issue/stock | å
¥åºä¸æ¶ | |
| | | | PUT | /mes/wm/return-issue/finish | 宿éæï¼èªå¨æ£åææè®°å½å¯ç¨éï¼ | |
| | | | PUT | /mes/wm/return-issue/cancel | åæ¶éæ | |
| | | | POST | /mes/wm/return-issue-line/create | å建éæåè¡ | |
| | | | PUT | /mes/wm/return-issue-line/update | ä¿®æ¹éæåè¡ | |
| | | |
| | | ### å建/ä¿®æ¹éæå - 请æ±åæ°åæ´ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | taskId | Long | **æ¯ï¼æ°å¢å¿
å¡«ï¼** | çäº§ä»»å¡ IDï¼ä»¥ task 为主 | |
| | | | workOrderId | Long | **å¦ï¼åå¿
å¡«æ¹ä¸ºéå¡«ï¼** | ç产工å IDï¼ä» task èªå¨å¸¦å
¥ | |
| | | | workstationId | Long | å¦ | å·¥ä½ç« IDï¼ä» task èªå¨å¸¦å
¥ | |
| | | |
| | | **请æ±ç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": "RI20260716001", |
| | | "name": "ç产éæ", |
| | | "taskId": 1, |
| | | "type": 1, |
| | | "remark": "" |
| | | } |
| | | ``` |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": 1 }` |
| | | |
| | | ### éæå - ååºå段æ°å¢ |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | taskId | Long | **æ°å¢** çäº§ä»»å¡ ID | |
| | | | taskCode | String | **æ°å¢** ç产任å¡ç¼ç | |
| | | | taskName | String | **æ°å¢** ç产任å¡åç§° | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 1, |
| | | "code": "RI20260716001", |
| | | "name": "ç产éæ", |
| | | "taskId": 1, |
| | | "taskCode": "TASK001", |
| | | "taskName": "注å¡ä»»å¡", |
| | | "workOrderId": 10, |
| | | "workOrderCode": "WO001", |
| | | "workstationId": 5, |
| | | "workstationName": "è£
é
å·¥ä½ç«", |
| | | "type": 1, |
| | | "returnDate": null, |
| | | "status": 0, |
| | | "remark": "", |
| | | "createTime": "2026-07-16 10:00:00" |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### éæåè¡ - 请æ±/ååºå段æ°å¢ |
| | | |
| | | | åæ®µ | ç±»å | è¯·æ± | ååº | 说æ | |
| | | |------|------|------|------|------| |
| | | | taskId | Long | éå¡« | - | çäº§ä»»å¡ IDï¼é»è®¤å主表ç taskId | |
| | | | taskCode | String | - | æ°å¢ | ç产任å¡ç¼ç | |
| | | | taskName | String | - | æ°å¢ | ç产任å¡åç§° | |
| | | |
| | | ### éæåå页 - 请æ±åæ°æ°å¢ |
| | | |
| | | | åæ° | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | taskId | Long | **æ°å¢** æçäº§ä»»å¡ ID è¿æ»¤ | |
| | | |
| | | --- |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | ### 颿åºåºå |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | taskId | æ°å¢/ç¼è¾è¡¨å | å¿
å¡«ï¼éæ© Task ä¸ææ¡ | |
| | | | taskCode | å表ã详æ
| ä» Task èªå¨å¸¦å
¥å±ç¤º | |
| | | | taskName | å表ã详æ
| ä» Task èªå¨å¸¦å
¥å±ç¤º | |
| | | | workOrderId | æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼éæ© Task åèªå¨å¡«å
¥ï¼å¯æå¨ä¿®æ¹ | |
| | | | workOrderCode | å表ã详æ
| ä»å·¥åèªå¨å¸¦å
¥å±ç¤º | |
| | | | workstationId | æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼éæ© Task åèªå¨å¡«å
¥ï¼å¯æå¨ä¿®æ¹ | |
| | | | workstationName | å表ã详æ
| ä»å·¥ä½ç«èªå¨å¸¦å
¥å±ç¤º | |
| | | | requiredTime | æ°å¢/ç¼è¾è¡¨åã详æ
| å¿
å¡«ï¼éæ±æ¶é´ | |
| | | | è¡çº§ taskId | è¡æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼é»è®¤å主表 taskId | |
| | | |
| | | ### éæå |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | taskId | æ°å¢/ç¼è¾è¡¨å | å¿
å¡«ï¼éæ© Task ä¸ææ¡ | |
| | | | taskCode | å表ã详æ
| ä» Task èªå¨å¸¦å
¥å±ç¤º | |
| | | | taskName | å表ã详æ
| ä» Task èªå¨å¸¦å
¥å±ç¤º | |
| | | | workOrderId | æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼éæ© Task åèªå¨å¡«å
¥ï¼å¯æå¨ä¿®æ¹ | |
| | | | workOrderCode | å表ã详æ
| ä»å·¥åèªå¨å¸¦å
¥å±ç¤º | |
| | | | workstationId | æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼éæ© Task åèªå¨å¡«å
¥ï¼å¯æå¨ä¿®æ¹ | |
| | | | workstationName | å表ã详æ
| ä»å·¥ä½ç«èªå¨å¸¦å
¥å±ç¤º | |
| | | | è¡çº§ taskId | è¡æ°å¢/ç¼è¾è¡¨å | éå¡«ï¼é»è®¤å主表 taskId | |
| | | |
| | | --- |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | æ°å¢é¢æ/éæå | taskId å¿
å¡«ï¼éæ© task åèªå¨å¸¦å
¥ workOrderId å workstationId | |
| | | | ä¿®æ¹é¢æ/éæå | taskId å¿
å¡«ï¼åæ°å¢è§å | |
| | | | 颿åºåºå®æ | ç³»ç»èªå¨æè¡å建 mes_pro_task_issue ææè®°å½ï¼sourceDocType=PRODUCT_ISSUE | |
| | | | 忶颿åºåº | ç³»ç»èªå¨å é¤éè¿è¯¥é¢æååå»ºçææè®°å½ | |
| | | | éæå®æ | ç³»ç»èªå¨æ£åå¯¹åº task_issue ç issuedQuantity å availableQuantity | |
| | | | è¡çº§ taskId | è¡ç taskId ä¼å
äºä¸»è¡¨ç taskIdï¼å¦æè¡ä¸ºç©ºåå主表ç | |
| | | | ææè®°å½å¹é
| éææ£åæ¶ï¼æ taskId + itemId + sourceDocType=PRODUCT_ISSUE å¹é
ææè®°å½ | |
| | | |
| | | --- |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - **以 task 为主**ï¼åå»ºé¢æ/éæåæ¶ï¼å¿
é¡»å
éæ© taskï¼å·¥ååå·¥ä½ç«ä» task èªå¨å¸¦å
¥ |
| | | - **workOrderId ä¸åæ¯å¿
å¡«**ï¼å端表åä¸ workOrderId æ¹ä¸ºéå¡«ï¼éæ© task åèªå¨å¡«å
¥ |
| | | - **è¡çº§ taskId**ï¼è¡è¡¨æ°å¢ taskId åæ®µï¼å端è¡ç¼è¾æ¶å¯éæ©ä¸åç taskï¼é»è®¤å主表çï¼ |
| | | - **ææè®°å½èªå¨ç®¡ç**ï¼é¢æå®æèªå¨å建ææè®°å½ï¼éæå®æèªå¨æ£åææå¯ç¨éï¼å端æ éé¢å¤æä½ |
| | | - **å页æ¥è¯¢æ¯æ taskId**ï¼é¢æåºåºååéæåå页æ¥å£åæ¯ææ taskId è¿æ»¤æ¥è¯¢ |
| | | - **颿忶**ï¼åæ¶é¢ææ¶ï¼åªæéè¿è¯¥é¢æååå»ºçææè®°å½ä¼è¢«å é¤ï¼æ sourceDocType + sourceDocId å¹é
ï¼ |
| | | - **éææ£å**ï¼éææ£åææè®°å½æ¶ï¼issuedQuantity å availableQuantity æä½ä¸º 0ï¼ä¸ä¼åºç°è´æ° |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # MES ä¸å¡æ°æ®æ¸
ç SQL |
| | | |
| | | ## æ¸
çèå´ |
| | | |
| | | æ¸
ç MES 模åå
¨é¨ä¸å¡æ°æ®ï¼ä¿çç³»ç»é
ç½®ç±»æ°æ®ãæä¾èµé¡ºåºæ§è¡ã |
| | | |
| | | ### æ¸
çåç±» |
| | | |
| | | | åç±» | æ¶å表 | 说æ | |
| | | |------|--------|------| |
| | | | åºåäºå¡/å ç¨ | transaction, stock_reserve | ç产ç¸å
³ biz_type | |
| | | | ç©ææ¶èå | item_consume + è¡/æç» | å岿¶èè®°å½ | |
| | | | 产åºå/å
¥åºå | product_produce, product_receipt + è¡/æç» | çäº§äº§åº | |
| | | | éæå | return_issue + è¡/æç» | çäº§éæ | |
| | | | 颿åºåºå | product_issue + è¡/æç» | çäº§é¢æ | |
| | | | è´¨æ£å | ipqc, rqc, iqc, oqc + è¡/缺é·/ææ | è´¨æ£è®°å½ | |
| | | | æ¥å·¥ | feedback | ç产æ¥å·¥ | |
| | | | 任塿æ | task_issue | ææè®°å½ | |
| | | | çäº§ä»»å¡ | task | æäº§ä»»å¡ | |
| | | | å·¥å | work_order + bom + åæ°è®°å½ | ç产工å | |
| | | | æµè½¬å¡ | card + å·¥åºè®°å½ | ç产æµè½¬å¡ | |
| | | | å®ç¯ | andon_config, andon_record | å®ç¯å¼å« | |
| | | | ä¸ä¸å·¥ | work_record, work_record_log | å·¥ä½ç«ç»å®/ä¸ä¸å·¥ | |
| | | | å·¥èºè·¯çº¿ | route + å·¥åº/产å/BOM | å·¥èºè·¯çº¿åå
³è | |
| | | | å·¥åº | process + å
容 | çäº§å·¥åº | |
| | | | 产åBOM/SIP/SOP | product_bom, product_sip, product_sop | äº§åææ¡£ | |
| | | | ç©æ | item + åç±»/æ¹æ¬¡é
ç½® | MES ç©æ | |
| | | | 计éåä½ | unit_measure | MES 计éåä½ | |
| | | | 客æ·/ä¾åºå | client, vendor | MES 客æ·/ä¾åºå | |
| | | | 车é´/å·¥ä½ç« | workshop, workstation + èµæº | MES 车é´/å·¥ä½ç« | |
| | | | ç¼ç è§å | auto_code_rule + ç»æ/è®°å½ | ç¼ç è§å | |
| | | |
| | | ## å½åæ°æ®é |
| | | |
| | | | 表 | è®°å½æ° | 表 | è®°å½æ° | |
| | | |----|--------|----|--------| |
| | | | mes_pro_work_order | 2 | mes_pro_task | 3 | |
| | | | mes_pro_feedback | 13 | mes_pro_task_issue | 0 | |
| | | | mes_pro_process | 6 | mes_pro_route | 2 | |
| | | | mes_pro_route_process | 5 | mes_pro_route_product | 2 | |
| | | | mes_pro_route_product_bom | 6 | mes_pro_work_order_bom | 3 | |
| | | | mes_wm_product_issue | 4 | mes_wm_return_issue | 3 | |
| | | | mes_wm_item_consume | 5 | mes_wm_transaction(ç产) | 9 | |
| | | | mes_wm_stock_reserve | 1 | mes_md_item | 9 | |
| | | | mes_md_product_bom | 11 | mes_md_workstation | 1 | |
| | | | mes_md_unit_measure | 2 | mes_md_item_type | 5 | |
| | | |
| | | ## æ¸
ç SQL |
| | | |
| | | ```sql |
| | | -- ============================================================ |
| | | -- MES å
¨é¨ä¸å¡æ°æ®æ¸
çèæ¬ |
| | | -- æ§è¡å请确认ï¼è¿äºæ°æ®å¯ä»¥å é¤ï¼ä¸å¯æ¢å¤ï¼ |
| | | -- ============================================================ |
| | | |
| | | -- ==================== 1. åºåå ç¨ï¼ç产ç¸å
³ï¼ ==================== |
| | | DELETE FROM mes_wm_stock_reserve |
| | | WHERE biz_type IN (4, 5); -- 4=çäº§é¢æ, 5=çäº§äº§åº |
| | | |
| | | -- ==================== 2. åºåäºå¡æµæ°´ï¼ç产ç¸å
³ biz_typeï¼ ==================== |
| | | -- 116=çäº§é¢æ, 117=ç产éæ, 118=ç产å
¥åº, 123=ç产æ¶è, 124=产åäº§åº |
| | | DELETE FROM mes_wm_transaction |
| | | WHERE biz_type IN (116, 117, 118, 123, 124); |
| | | |
| | | -- ==================== 3. ç©ææ¶èå ==================== |
| | | DELETE FROM mes_wm_item_consume_detail; |
| | | DELETE FROM mes_wm_item_consume_line; |
| | | DELETE FROM mes_wm_item_consume; |
| | | |
| | | -- ==================== 4. ç产产åºå ==================== |
| | | DELETE FROM mes_wm_product_produce_detail; |
| | | DELETE FROM mes_wm_product_produce_line; |
| | | DELETE FROM mes_wm_product_produce; |
| | | |
| | | -- ==================== 5. ç产å
¥åºå ==================== |
| | | DELETE FROM mes_wm_product_receipt_detail; |
| | | DELETE FROM mes_wm_product_receipt_line; |
| | | DELETE FROM mes_wm_product_receipt; |
| | | |
| | | -- ==================== 6. ç产éæå ==================== |
| | | DELETE FROM mes_wm_return_issue_detail; |
| | | DELETE FROM mes_wm_return_issue_line; |
| | | DELETE FROM mes_wm_return_issue; |
| | | |
| | | -- ==================== 7. çäº§é¢æåºåºå ==================== |
| | | DELETE FROM mes_wm_product_issue_detail; |
| | | DELETE FROM mes_wm_product_issue_line; |
| | | DELETE FROM mes_wm_product_issue; |
| | | |
| | | -- ==================== 8. è´¨æ£è®°å½ ==================== |
| | | DELETE FROM mes_qc_indicator_result_detail; |
| | | DELETE FROM mes_qc_indicator_result; |
| | | DELETE FROM mes_qc_defect_record; |
| | | DELETE FROM mes_qc_ipqc_line; |
| | | DELETE FROM mes_qc_ipqc; |
| | | DELETE FROM mes_qc_rqc_line; |
| | | DELETE FROM mes_qc_rqc; |
| | | DELETE FROM mes_qc_iqc_line; |
| | | DELETE FROM mes_qc_iqc; |
| | | DELETE FROM mes_qc_oqc_line; |
| | | DELETE FROM mes_qc_oqc; |
| | | |
| | | -- ==================== 9. ç产æ¥å·¥ ==================== |
| | | DELETE FROM mes_pro_feedback; |
| | | |
| | | -- ==================== 10. 任塿æè®°å½ ==================== |
| | | DELETE FROM mes_pro_task_issue; |
| | | |
| | | -- ==================== 11. çäº§ä»»å¡ ==================== |
| | | DELETE FROM mes_pro_task; |
| | | |
| | | -- ==================== 12. å·¥ååæ°è®°å½ ==================== |
| | | DELETE FROM mes_pro_work_order_param_record_detail; |
| | | DELETE FROM mes_pro_work_order_param_record; |
| | | |
| | | -- ==================== 13. å·¥å BOM ==================== |
| | | DELETE FROM mes_pro_work_order_bom; |
| | | |
| | | -- ==================== 14. ç产工å ==================== |
| | | DELETE FROM mes_pro_work_order; |
| | | |
| | | -- ==================== 15. æµè½¬å¡ ==================== |
| | | DELETE FROM mes_pro_card_process; |
| | | DELETE FROM mes_pro_card; |
| | | |
| | | -- ==================== 16. å®ç¯ ==================== |
| | | DELETE FROM mes_pro_andon_record; |
| | | DELETE FROM mes_pro_andon_config; |
| | | |
| | | -- ==================== 17. ä¸ä¸å·¥è®°å½ ==================== |
| | | DELETE FROM mes_pro_work_record_log; |
| | | DELETE FROM mes_pro_work_record; |
| | | |
| | | -- ==================== 18. å·¥èºè·¯çº¿äº§å BOM ==================== |
| | | DELETE FROM mes_pro_route_product_bom; |
| | | |
| | | -- ==================== 19. å·¥èºè·¯çº¿äº§å ==================== |
| | | DELETE FROM mes_pro_route_product; |
| | | |
| | | -- ==================== 20. å·¥èºè·¯çº¿å·¥åº ==================== |
| | | DELETE FROM mes_pro_route_process; |
| | | |
| | | -- ==================== 21. å·¥èºè·¯çº¿ ==================== |
| | | DELETE FROM mes_pro_route; |
| | | |
| | | -- ==================== 22. å·¥åºå
容 ==================== |
| | | DELETE FROM mes_pro_process_content; |
| | | |
| | | -- ==================== 23. çäº§å·¥åº ==================== |
| | | DELETE FROM mes_pro_process; |
| | | |
| | | -- ==================== 24. 产å SOP ==================== |
| | | DELETE FROM mes_md_product_sop; |
| | | |
| | | -- ==================== 25. 产å SIP ==================== |
| | | DELETE FROM mes_md_product_sip; |
| | | |
| | | -- ==================== 26. 产å BOM ==================== |
| | | DELETE FROM mes_md_product_bom; |
| | | |
| | | -- ==================== 27. ç©ææ¹æ¬¡é
ç½® ==================== |
| | | DELETE FROM mes_md_item_batch_config; |
| | | |
| | | -- ==================== 28. MES ç©æ ==================== |
| | | DELETE FROM mes_md_item; |
| | | |
| | | -- ==================== 29. ç©æåç±» ==================== |
| | | DELETE FROM mes_md_item_type; |
| | | |
| | | -- ==================== 30. 计éåä½ ==================== |
| | | DELETE FROM mes_md_unit_measure; |
| | | |
| | | -- ==================== 31. å®¢æ· ==================== |
| | | DELETE FROM mes_md_client; |
| | | |
| | | -- ==================== 32. ä¾åºå ==================== |
| | | DELETE FROM mes_md_vendor; |
| | | |
| | | -- ==================== 33. å·¥ä½ç«èµæº ==================== |
| | | DELETE FROM mes_md_workstation_machine; |
| | | DELETE FROM mes_md_workstation_tool; |
| | | DELETE FROM mes_md_workstation_worker; |
| | | |
| | | -- ==================== 34. å·¥ä½ç« ==================== |
| | | DELETE FROM mes_md_workstation; |
| | | |
| | | -- ==================== 35. è½¦é´ ==================== |
| | | DELETE FROM mes_md_workshop; |
| | | |
| | | -- ==================== 36. è´¨æ£æ¹æ¡ ==================== |
| | | DELETE FROM mes_qc_template_indicator; |
| | | DELETE FROM mes_qc_template_item; |
| | | DELETE FROM mes_qc_template; |
| | | |
| | | -- ==================== 37. 缺é·ç±»å ==================== |
| | | DELETE FROM mes_qc_defect; |
| | | |
| | | -- ==================== 38. è´¨æ£ææ ==================== |
| | | DELETE FROM mes_qc_indicator; |
| | | |
| | | -- ==================== 39. ç¼ç è§å ==================== |
| | | DELETE FROM mes_md_auto_code_record; |
| | | DELETE FROM mes_md_auto_code_part; |
| | | DELETE FROM mes_md_auto_code_rule; |
| | | ``` |
| | | |
| | | ## éªè¯ SQL |
| | | |
| | | ```sql |
| | | -- éªè¯æ¸
çç»æï¼é¢æå
¨é¨ä¸º 0 |
| | | SELECT 'mes_pro_work_order' as tbl, COUNT(*) as cnt FROM mes_pro_work_order WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_task', COUNT(*) FROM mes_pro_task WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_feedback', COUNT(*) FROM mes_pro_feedback WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_task_issue', COUNT(*) FROM mes_pro_task_issue WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_process', COUNT(*) FROM mes_pro_process WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_route', COUNT(*) FROM mes_pro_route WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_route_process', COUNT(*) FROM mes_pro_route_process WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_route_product', COUNT(*) FROM mes_pro_route_product WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_pro_route_product_bom', COUNT(*) FROM mes_pro_route_product_bom WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_product_issue', COUNT(*) FROM mes_wm_product_issue WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_return_issue', COUNT(*) FROM mes_wm_return_issue WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_item_consume', COUNT(*) FROM mes_wm_item_consume WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_product_produce', COUNT(*) FROM mes_wm_product_produce WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_product_receipt', COUNT(*) FROM mes_wm_product_receipt WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_item', COUNT(*) FROM mes_md_item WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_item_type', COUNT(*) FROM mes_md_item_type WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_product_bom', COUNT(*) FROM mes_md_product_bom WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_unit_measure', COUNT(*) FROM mes_md_unit_measure WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_client', COUNT(*) FROM mes_md_client WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_vendor', COUNT(*) FROM mes_md_vendor WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_workstation', COUNT(*) FROM mes_md_workstation WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_md_workshop', COUNT(*) FROM mes_md_workshop WHERE deleted=0 |
| | | UNION ALL SELECT 'mes_wm_stock_reserve(ç产)', COUNT(*) FROM mes_wm_stock_reserve WHERE deleted=0 AND biz_type IN (4, 5) |
| | | UNION ALL SELECT 'mes_wm_transaction(ç产)', COUNT(*) FROM mes_wm_transaction WHERE deleted=0 AND biz_type IN (116, 117, 118, 123, 124); |
| | | ``` |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - ä»¥ä¸ SQL 使ç¨ç©çå é¤ï¼DELETEï¼ï¼**æ§è¡åä¸å¯æ¢å¤** |
| | | - æ§è¡é¡ºåºå¾éè¦ï¼å
å å表/æç»ï¼åå 主表ï¼é¿å
å¤é®çº¦ææ¥é |
| | | - **åºåè®°å½(mes_wm_material_stock)䏿¸
ç**ï¼æ¸
çäºå¡æµæ°´åï¼åºåå°è´¦å¯è½ææ®çæ°éï¼å¦ééç½®éåç¬å¤ç |
| | | - **ä»åº/åºåº/åºä½(mes_wm_warehouse ç)䏿¸
ç**ï¼åºç¡è®¾æ½æ°æ®ä¿ç |
| | | - **æ¹æ¬¡(mes_wm_batch)䏿¸
ç**ï¼æ¹æ¬¡åºç¡æ°æ®ä¿ç |
| | | - **éè´/éå®/è°æ¨çå
¶ä»ä¸å¡æ°æ®ä¸æ¸
ç**ï¼åªæ¸
ç MES ç产ç¸å
³ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产æ¥å·¥ - å端èè°æ¹æ¡ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - å¾
æ¥å·¥å°è´¦ï¼æ¥å·¥å
¥å£ï¼æå·¥åºçéä»»å¡ï¼éæ©ä»»å¡è¿è¡æ¥å·¥ï¼ |
| | | - ç产æ¥å·¥ï¼æ°å¢/ç¼è¾æ¥å·¥åï¼ |
| | | - æ¥å·¥å®¡æ¹ï¼å®¡æ¹/驳åæä½ï¼ |
| | | - æ¥å·¥è¯¦æ
ï¼æ¥çæ¥å·¥ä¿¡æ¯ + 追溯产åº/æ¶è/è´¨æ£ï¼ |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ``` |
| | | 1. å¾
æ¥å·¥å°è´¦(æå·¥åºçé) â éæ©ä»»å¡ â æ¥å·¥ |
| | | 鿩任å¡åï¼èªå¨å¸¦å
¥ï¼taskIdãworkOrderIdãrouteIdãprocessIdã |
| | | workstationIdãitemIdãscheduledQuantity(æäº§æ°é) |
| | | |
| | | 2. 填忥工 â ä¿å(è稿) â æäº¤(审æ¹ä¸) â 审æ¹éè¿(已宿/å¾
æ£éª) |
| | | - è´¨æ£å·¥åºï¼åªéå¡«æ¥å·¥æ°éï¼åæ ¼/ä¸åæ ¼ç±è´¨æ£ç»æåå¡« |
| | | - éè´¨æ£å·¥åºï¼éå¡«åæ ¼å + ä¸è¯åæ°é |
| | | |
| | | 3. 审æ¹é©³å â éåè稿 â ä¿®æ¹åéæ°æäº¤ |
| | | ``` |
| | | |
| | | ## ç¶ææµè½¬ |
| | | |
| | | ### ç产任å¡ç¶æ |
| | | |
| | | | ç¶æå¼ | ç¶æå | 说æ | |
| | | |--------|--------|------| |
| | | | 0 | è稿(è¿è¡ä¸) | 坿¥å·¥ | |
| | | | 4 | 已宿 | ä¸å¯æ¥å·¥ | |
| | | | 5 | 已忶 | ä¸å¯æ¥å·¥ | |
| | | |
| | | ### ç产æ¥å·¥ç¶æ |
| | | |
| | | | ç¶æå¼ | ç¶æå | 坿§è¡æä½ | 说æ | |
| | | |--------|--------|-----------|------| |
| | | | 0 | è稿 | ç¼è¾ãå é¤ãæäº¤ | åå§ç¶æ | |
| | | | 2 | 审æ¹ä¸ | 审æ¹ã驳å | å·²æäº¤å¾
å®¡æ¹ | |
| | | | 3 | å¾
æ£éª | â | å
³é®+è´¨æ£å·¥åºå®¡æ¹åè¿å
¥ï¼çIPQCåè° | |
| | | | 4 | 已宿 | â | æç»ç¶æ | |
| | | |
| | | --- |
| | | |
| | | ## API |
| | | |
| | | ### ä¸ãå¾
æ¥å·¥å°è´¦æ¥å£ |
| | | |
| | | #### 1.1 å¾
æ¥å·¥å°è´¦ï¼åé¡µï¼ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro/task/pending-feedback-page | å·²æäº§ä¸ä»æå¾
æ¥å·¥éçä»»å¡ | |
| | | |
| | | **说æï¼** æ¤æ¥å£ä»
è¿åç¶æ=è¿è¡ä¸(0)ä¸ `quantity - produced_quantity > 0` çä»»å¡ï¼æ¯æ¥å·¥é¡µé¢çå
¥å£æ°æ®æºã |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | processId | Long | å¦ | å·¥åºç¼å·ï¼æå·¥åºçéä»»å¡ï¼ | |
| | | | routeId | Long | å¦ | å·¥èºè·¯çº¿ç¼å· | |
| | | | workOrderId | Long | å¦ | ç产工åç¼å· | |
| | | | workstationId | Long | å¦ | å·¥ä½ç«ç¼å· | |
| | | | code | String | å¦ | ä»»å¡ç¼ç ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | name | String | å¦ | ä»»å¡åç§°ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | checkFlag | Boolean | å¦ | æ¯å¦è´¨æ£å·¥åº | |
| | | | createTime | String[] | å¦ | å建æ¶é´èå´ | |
| | | | pageNo | Integer | æ¯ | 页ç ï¼é»è®¤1ï¼ | |
| | | | pageSize | Integer | æ¯ | æ¯é¡µæ¡æ°ï¼é»è®¤10ï¼ | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | ä»»å¡ç¼å· | |
| | | | code | String | ä»»å¡ç¼ç | |
| | | | name | String | ä»»å¡åç§° | |
| | | | workOrderId | Long | å·¥åç¼å· | |
| | | | workOrderCode | String | å·¥åç¼ç | |
| | | | workOrderName | String | å·¥ååç§° | |
| | | | workstationId | Long | å·¥ä½ç«ç¼å· | |
| | | | workstationCode | String | å·¥ä½ç«ç¼ç | |
| | | | workstationName | String | å·¥ä½ç«åç§° | |
| | | | routeId | Long | å·¥èºè·¯çº¿ç¼å· | |
| | | | processId | Long | å·¥åºç¼å· | |
| | | | processName | String | å·¥åºåç§° | |
| | | | itemId | Long | 产åç©æç¼å· | |
| | | | itemCode | String | ç©æç¼ç | |
| | | | itemName | String | ç©æåç§° | |
| | | | itemSpecification | String | è§æ ¼åå· | |
| | | | unitMeasureName | String | 计éåä½ | |
| | | | quantity | BigDecimal | æäº§æ°é | |
| | | | producedQuantity | BigDecimal | å·²ç产æ°é | |
| | | | qualifyQuantity | BigDecimal | åæ ¼åæ°é | |
| | | | unqualifyQuantity | BigDecimal | ä¸è¯åæ°é | |
| | | | pendingQuantity | BigDecimal | å¾
æ¥å·¥æ°éï¼= æäº§ - å·²çäº§ï¼ | |
| | | | inTransitQuantity | BigDecimal | å¨éæ¥å·¥æ°éï¼è稿/审æ¹ä¸/å¾
æ£éªç¶æçæ¥å·¥éåè®¡ï¼ | |
| | | | reportableQuantity | BigDecimal | 坿¥å·¥æ°éï¼= æäº§ - å·²ç产 - å¨éï¼ | |
| | | | feedbackRate | BigDecimal | æ¥å·¥å®æç(%)ï¼å¦ 50.00 表示 50% | |
| | | | checkFlag | Boolean | æ¯å¦è´¨æ£å·¥åº | |
| | | | clientId | Long | 客æ·ç¼å· | |
| | | | clientName | String | 客æ·åç§° | |
| | | | startTime | LocalDateTime | å¼å§ç产æ¶é´ | |
| | | | endTime | LocalDateTime | ç»æç产æ¶é´ | |
| | | | duration | Integer | ç产æ¶é¿ï¼å·¥ä½æ¥ï¼ | |
| | | | requestDate | LocalDateTime | éæ±æ¥æ | |
| | | | status | Integer | ä»»å¡ç¶æ | |
| | | | remark | String | 夿³¨ | |
| | | | createTime | LocalDateTime | å建æ¶é´ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "list": [ |
| | | { |
| | | "id": 1, |
| | | "code": "PT202503150001", |
| | | "name": "注å¡ä»»å¡", |
| | | "workOrderId": 10, |
| | | "workOrderCode": "MO202503120008", |
| | | "workOrderName": "åä¸èºä¸å", |
| | | "workstationId": 5, |
| | | "workstationCode": "WS-001", |
| | | "workstationName": "注å¡å·¥ä½ç«", |
| | | "routeId": 3, |
| | | "processId": 7, |
| | | "processName": "注å¡", |
| | | "itemId": 75, |
| | | "itemCode": "I-075", |
| | | "itemName": "åä¸èºä¸å", |
| | | "itemSpecification": "ä¸åå", |
| | | "unitMeasureName": "个", |
| | | "quantity": 5000.00, |
| | | "producedQuantity": 2000.00, |
| | | "qualifyQuantity": 1950.00, |
| | | "unqualifyQuantity": 50.00, |
| | | "pendingQuantity": 3000.00, |
| | | "inTransitQuantity": 500.00, |
| | | "reportableQuantity": 2500.00, |
| | | "feedbackRate": 40.00, |
| | | "checkFlag": true, |
| | | "status": 0, |
| | | "createTime": "2025-03-15 10:00:00" |
| | | } |
| | | ], |
| | | "total": 1 |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### 1.2 æ¥è¯¢ä»»å¡è¯¦æ
|
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro/task/get | æ ¹æ®IDè·åä»»å¡è¯¦æ
| |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | ä»»å¡ç¼å· | |
| | | |
| | | **ååºå段ï¼** å 1.1 ååºå段ï¼åæ¡å¯¹è±¡ï¼éåé¡µï¼ |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 1, |
| | | "code": "PT202503150001", |
| | | "reportableQuantity": 2500.00, |
| | | "checkFlag": true |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### äºãç产æ¥å·¥æ¥å£ |
| | | |
| | | #### 2.1 å建æ¥å·¥ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /mes/pro-feedback/create | æ°å»ºæ¥å·¥åï¼ç¶æ=èç¨¿ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | code | String | æ¯ | æ¥å·¥åç¼å· | |
| | | | type | Integer | æ¯ | æ¥å·¥ç±»åï¼1=èªè¡æ¥å·¥ï¼2=ç»ä¸æ¥å·¥ | |
| | | | workstationId | Long | æ¯ | å·¥ä½ç«ç¼å· | |
| | | | routeId | Long | æ¯ | å·¥èºè·¯çº¿ç¼å· | |
| | | | processId | Long | æ¯ | å·¥åºç¼å· | |
| | | | workOrderId | Long | æ¯ | ç产工åç¼å· | |
| | | | taskId | Long | æ¯ | ç产任å¡ç¼å· | |
| | | | itemId | Long | æ¯ | 产åç©æç¼å· | |
| | | | feedbackQuantity | BigDecimal | æ¯ | æ¬æ¬¡æ¥å·¥æ°éï¼å¿
é¡» > 0ï¼ | |
| | | | feedbackUserId | Long | æ¯ | æ¥å·¥äººç¼å· | |
| | | | feedbackTime | LocalDateTime | æ¯ | æ¥å·¥æ¶é´ | |
| | | | approveUserId | Long | æ¯ | å®¡æ ¸äººç¼å· | |
| | | | qualifiedQuantity | BigDecimal | æ¡ä»¶å¿
å¡« | åæ ¼åæ°éï¼éè´¨æ£å·¥åºå¿
å¡«ï¼ | |
| | | | unqualifiedQuantity | BigDecimal | æ¡ä»¶å¿
å¡« | ä¸è¯åæ°éï¼éè´¨æ£å·¥åºå¿
å¡«ï¼ | |
| | | | uncheckQuantity | BigDecimal | å¦ | å¾
æ£æµæ°é | |
| | | | laborScrapQuantity | BigDecimal | å¦ | å·¥åºæ°é | |
| | | | materialScrapQuantity | BigDecimal | å¦ | æåºæ°é | |
| | | | otherScrapQuantity | BigDecimal | å¦ | å
¶ä»åºåæ°é | |
| | | | scheduledQuantity | BigDecimal | å¦ | æäº§æ°é | |
| | | | expireDate | LocalDateTime | å¦ | è¿ææ¥æ | |
| | | | lotNumber | String | å¦ | ç产æ¹å· | |
| | | | remark | String | å¦ | 夿³¨ | |
| | | |
| | | **ååºï¼** `Long`ï¼æ¥å·¥è®°å½IDï¼ |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": 1024 |
| | | } |
| | | ``` |
| | | |
| | | **æ°æ®å¸¦å
¥è¯´æï¼** |
| | | |
| | | ä»å¾
æ¥å·¥å°è´¦éæ©ä»»å¡åï¼ä»¥ä¸å段èªå¨å¸¦å
¥æ¥å·¥è¡¨åï¼æ éç¨æ·æå¨å¡«åï¼ |
| | | |
| | | | æ¥å·¥è¡¨ååæ®µ | æ°æ®æ¥æº | æ¥æºå段 | |
| | | |-------------|---------|---------| |
| | | | taskId | ä»»å¡ | id | |
| | | | workOrderId | ä»»å¡ | workOrderId | |
| | | | routeId | ä»»å¡ | routeId | |
| | | | processId | ä»»å¡ | processId | ä»»å¡ | processId | |
| | | | workstationId | ä»»å¡ | workstationId | |
| | | | itemId | ä»»å¡ | itemId | |
| | | | scheduledQuantity | ä»»å¡ | quantityï¼æäº§æ°éï¼ | |
| | | |
| | | ç¨æ·éæå¨å¡«åï¼æ¥å·¥æ°éãåæ ¼/ä¸è¯åæ°éãæ¥å·¥äººãæ¥å·¥æ¶é´ãå®¡æ ¸äººçã |
| | | |
| | | --- |
| | | |
| | | #### 2.2 æ´æ°æ¥å·¥ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /mes/pro-feedback/update | ä¿®æ¹æ¥å·¥åï¼ä»
èç¨¿ç¶æå¯ä¿®æ¹ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** å 2.1ï¼éé¢å¤ä¼ idï¼ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | --- |
| | | |
| | | #### 2.3 æäº¤æ¥å·¥ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /mes/pro-feedback/submit | è稿 â 审æ¹ä¸ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | **ç¶æååï¼** è稿(0) â 审æ¹ä¸(2) |
| | | |
| | | --- |
| | | |
| | | #### 2.4 å®¡æ¹æ¥å·¥ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /mes/pro-feedback/approve | 审æ¹éè¿ï¼è§¦åå
¥åº/æ£æ/è´¨æ£ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": true // true=审æ¹å®æ(å·²å
¥åº)ï¼false=è¿å
¥å¾
æ£éª(çè´¨æ£åè°) |
| | | } |
| | | ``` |
| | | |
| | | **ç¶æååï¼** |
| | | |
| | | | åºæ¯ | ç¶æåå | è¿åå¼ | |
| | | |------|---------|--------| |
| | | | éå
³é®å·¥åº | 审æ¹ä¸(2) â 已宿(4) | true | |
| | | | å
³é®+éè´¨æ£å·¥åº | 审æ¹ä¸(2) â 已宿(4)ï¼åæ¶å
¥åº | true | |
| | | | å
³é®+è´¨æ£å·¥åº | 审æ¹ä¸(2) â å¾
æ£éª(3)ï¼çIPQCåè° | false | |
| | | |
| | | --- |
| | | |
| | | #### 2.5 驳忥工 |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /mes/pro-feedback/reject | 审æ¹ä¸ â è稿 | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | **ç¶æååï¼** 审æ¹ä¸(2) â è稿(0) |
| | | |
| | | --- |
| | | |
| | | #### 2.6 æ¥è¯¢æ¥å·¥è¯¦æ
|
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro-feedback/get | è·ååæ¡æ¥å·¥è¯¦æ
| |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | ç¼å· | |
| | | | code | String | æ¥å·¥åç¼å· | |
| | | | type | Integer | æ¥å·¥ç±»åï¼1=èªè¡æ¥å·¥ï¼2=ç»ä¸æ¥å·¥ | |
| | | | channel | String | æ¥å·¥éå¾ | |
| | | | feedbackTime | LocalDateTime | æ¥å·¥æ¶é´ | |
| | | | workstationId | Long | å·¥ä½ç«ç¼å· | |
| | | | workstationCode | String | å·¥ä½ç«ç¼ç | |
| | | | workstationName | String | å·¥ä½ç«åç§° | |
| | | | routeId | Long | å·¥èºè·¯çº¿ç¼å· | |
| | | | routeCode | String | å·¥èºè·¯çº¿ç¼ç | |
| | | | processId | Long | å·¥åºç¼å· | |
| | | | processCode | String | å·¥åºç¼ç | |
| | | | processName | String | å·¥åºåç§° | |
| | | | checkFlag | Boolean | æ¯å¦éè¦æ£éª | |
| | | | workOrderId | Long | å·¥åç¼å· | |
| | | | workOrderCode | String | å·¥åç¼ç | |
| | | | workOrderName | String | å·¥ååç§° | |
| | | | taskId | Long | ä»»å¡ç¼å· | |
| | | | taskCode | String | ä»»å¡ç¼ç | |
| | | | itemId | Long | ç©æç¼å· | |
| | | | itemCode | String | ç©æç¼ç | |
| | | | itemName | String | ç©æåç§° | |
| | | | itemSpecification | String | è§æ ¼åå· | |
| | | | unitMeasureId | Long | åä½ç¼å· | |
| | | | unitMeasureName | String | åä½åç§° | |
| | | | scheduledQuantity | BigDecimal | æäº§æ°é | |
| | | | feedbackQuantity | BigDecimal | æ¥å·¥æ°é | |
| | | | qualifiedQuantity | BigDecimal | åæ ¼åæ°é | |
| | | | unqualifiedQuantity | BigDecimal | ä¸è¯åæ°é | |
| | | | uncheckQuantity | BigDecimal | å¾
æ£æµæ°é | |
| | | | laborScrapQuantity | BigDecimal | å·¥åºæ°é | |
| | | | materialScrapQuantity | BigDecimal | æåºæ°é | |
| | | | otherScrapQuantity | BigDecimal | å
¶ä»åºåæ°é | |
| | | | feedbackUserId | Long | æ¥å·¥äººç¼å· | |
| | | | feedbackUserNickname | String | æ¥å·¥äººæµç§° | |
| | | | approveUserId | Long | å®¡æ ¸äººç¼å· | |
| | | | approveUserNickname | String | å®¡æ ¸äººæµç§° | |
| | | | status | Integer | ç¶æ | |
| | | | remark | String | 夿³¨ | |
| | | | createTime | LocalDateTime | å建æ¶é´ | |
| | | |
| | | --- |
| | | |
| | | #### 2.7 æ¥å·¥å页æ¥è¯¢ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro-feedback/page | å页æ¥è¯¢æ¥å·¥å表 | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | code | String | å¦ | æ¥å·¥åç¼å·ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | type | Integer | å¦ | æ¥å·¥ç±»å | |
| | | | workOrderId | Long | å¦ | ç产工åç¼å· | |
| | | | taskId | Long | å¦ | ç产任å¡ç¼å·ï¼ç²¾ç¡®å¹é
ï¼ | |
| | | | taskCode | String | å¦ | ç产任å¡ç¼ç ï¼æ¨¡ç³å¹é
ï¼å¦ "PT202503"ï¼ | |
| | | | status | Integer | å¦ | ç¶æ | |
| | | | itemId | Long | å¦ | 产åç©æç¼å· | |
| | | | feedbackUserId | Long | å¦ | æ¥å·¥äººç¼å· | |
| | | | creator | String | å¦ | è®°å½äººç¼å· | |
| | | | feedbackTime | String[] | å¦ | æ¥å·¥æ¶é´èå´ | |
| | | | pageNo | Integer | æ¯ | 页ç | |
| | | | pageSize | Integer | æ¯ | æ¯é¡µæ¡æ° | |
| | | |
| | | **ååºå段ï¼** å 2.6ï¼å页åè¡¨ï¼ |
| | | |
| | | **æ¥è¯¢è¯´æï¼** |
| | | |
| | | | åºæ¯ | ç¨æ³ | ç¤ºä¾ | |
| | | |------|------|------| |
| | | | æä»»å¡ç¼ç æ¨¡ç³æ¥è¯¢ | ä¼ taskCode | `taskCode=PT202503` å¹é
PT202503150001ãPT202503150002 ç | |
| | | | æä»»å¡ID精确æ¥è¯¢ | ä¼ taskId | `taskId=1024` | |
| | | | åæ¶ä¼ taskId å taskCode | taskId ä¼å
精确å¹é
ï¼taskCode é¢å¤æ¨¡ç³è¿æ»¤ | ä¸è¬ä¸åæ¶ä¼ | |
| | | | ä¸ä¼ ä»»å¡ç¸å
³åæ° | æ¥è¯¢æææ¥å·¥ | â | |
| | | |
| | | --- |
| | | |
| | | #### 2.8 æä»»å¡æ¥è¯¢æ¥å·¥åå² |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro-feedback/list-by-task | æ¥è¯¢æä»»å¡ä¸æææ¥å·¥è®°å½ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | taskId | Long | æ¯ | ä»»å¡ç¼å· | |
| | | |
| | | **ååºå段ï¼** `List<MesProFeedbackRespVO>`ï¼å 2.6 åæ®µï¼æ°ç»å½¢å¼ï¼ |
| | | |
| | | **说æï¼** è¿å该任å¡ä¸ææç¶æçæ¥å·¥è®°å½ï¼è稿/审æ¹ä¸/å¾
æ£éª/已宿ï¼ï¼ç¨äºå¨ä»»å¡è¯¦æ
ä¸å±ç¤ºæ¥å·¥åå²ã |
| | | |
| | | --- |
| | | |
| | | #### 2.9 æ¥å·¥è¿½æº¯ä¿¡æ¯ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro-feedback/trace/{id} | æ¥å·¥ + äº§åº + æ¶è + IPQCæ£éª | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å·ï¼è·¯å¾åæ°ï¼ | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | feedback | MesProFeedbackRespVO | æ¥å·¥ä¿¡æ¯ï¼å 2.6 åæ®µï¼ | |
| | | | productProduce | Object | ç产产åºåï¼å
³é®å·¥åºææï¼å¦å nullï¼ | |
| | | | productProduceLines | Array | äº§åºæç»è¡ï¼æåæ ¼/ä¸åæ ¼/å¾
æ£éªæè¡ï¼ | |
| | | | itemConsume | Object | ç©ææ¶èåï¼åå²å·¥åºææï¼å¦å nullï¼ | |
| | | | itemConsumeLines | Array | æ¶èæç»è¡ï¼æ BOM ç©ææè¡ï¼ | |
| | | | ipqcList | Array | IPQC è¿ç¨æ£éªåå表ï¼å
³é®+鿣éªå·¥åºææï¼ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "feedback": { |
| | | "id": 1024, |
| | | "code": "FB202503160001", |
| | | "status": 4, |
| | | "feedbackQuantity": 500.00, |
| | | "qualifiedQuantity": 490.00, |
| | | "unqualifiedQuantity": 10.00 |
| | | }, |
| | | "productProduce": { |
| | | "id": 50, |
| | | "code": "PP202503160001" |
| | | }, |
| | | "productProduceLines": [ |
| | | { "id": 101, "qualityStatus": 1, "quantity": 490.00 }, |
| | | { "id": 102, "qualityStatus": 2, "quantity": 10.00 } |
| | | ], |
| | | "itemConsume": null, |
| | | "itemConsumeLines": [], |
| | | "ipqcList": [] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### 2.10 å 餿¥å·¥ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | DELETE | /mes/pro-feedback/delete | å 餿¥å·¥ï¼ä»
èç¨¿ç¶æå¯å é¤ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | æ¥å·¥ç¼å· | |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | --- |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | ### å¾
æ¥å·¥å°è´¦å表 |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | code | å表 | ä»»å¡ç¼ç | |
| | | | workOrderCode + workOrderName | å表 | å·¥åç¼ç +åç§° | |
| | | | workstationName | å表 | å·¥ä½ç« | |
| | | | processName | å表 | å·¥åºåç§° | |
| | | | itemCode + itemName | å表 | ç©æç¼ç +åç§° | |
| | | | quantity | å表 | æäº§æ°é | |
| | | | producedQuantity | å表 | å·²ç产æ°é | |
| | | | reportableQuantity | å表 | 坿¥å·¥æ°éï¼é«äº®æ¾ç¤ºï¼ | |
| | | | feedbackRate | å表 | æ¥å·¥å®æç(%) | |
| | | | checkFlag | å表 | æ¯å¦è´¨æ£ï¼æ ç¾å±ç¤ºï¼ | |
| | | |
| | | ### æ¥å·¥è¡¨å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | taskId â taskCode | 表åï¼åªè¯»ï¼ | ä»ä»»å¡èªå¨å¸¦å
¥ | |
| | | | workOrderId â workOrderCode + workOrderName | 表åï¼åªè¯»ï¼ | ä»ä»»å¡èªå¨å¸¦å
¥ | |
| | | | processId â processName | 表åï¼åªè¯»ï¼ | ä»ä»»å¡èªå¨å¸¦å
¥ | |
| | | | workstationId â workstationName | 表åï¼åªè¯»ï¼ | ä»ä»»å¡èªå¨å¸¦å
¥ | |
| | | | itemId â itemCode + itemName | 表åï¼åªè¯»ï¼ | ä»ä»»å¡èªå¨å¸¦å
¥ | |
| | | | scheduledQuantity | 表åï¼åªè¯»ï¼ | æäº§æ°éï¼ä»ä»»å¡å¸¦å
¥ | |
| | | | feedbackQuantity | 表åï¼å¯ç¼è¾ï¼ | æ¬æ¬¡æ¥å·¥æ°éï¼å¿
å¡« | |
| | | | qualifiedQuantity | 表åï¼æ¡ä»¶å¯ç¼è¾ï¼ | éè´¨æ£å·¥åºå¿
å¡«ï¼è´¨æ£å·¥åºéèæç¦ç¨ | |
| | | | unqualifiedQuantity | 表åï¼æ¡ä»¶å¯ç¼è¾ï¼ | éè´¨æ£å·¥åºå¿
å¡«ï¼è´¨æ£å·¥åºéèæç¦ç¨ | |
| | | | feedbackUserId â feedbackUserNickname | 表åï¼å¯ç¼è¾ï¼ | æ¥å·¥äººï¼éæ©ç¨æ· | |
| | | | feedbackTime | 表åï¼å¯ç¼è¾ï¼ | æ¥å·¥æ¶é´ï¼é»è®¤å½åæ¶é´ | |
| | | | approveUserId â approveUserNickname | 表åï¼å¯ç¼è¾ï¼ | å®¡æ ¸äººï¼éæ©ç¨æ· | |
| | | | remark | 表åï¼å¯ç¼è¾ï¼ | 夿³¨ | |
| | | |
| | | ### æ¥å·¥å表 |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | code | å表 | æ¥å·¥åç¼å· | |
| | | | workOrderCode | å表 | å·¥åç¼ç | |
| | | | taskCode | å表 | ä»»å¡ç¼ç | |
| | | | processName | å表 | å·¥åº | |
| | | | itemName | å表 | ç©æ | |
| | | | feedbackQuantity | å表 | æ¥å·¥æ°é | |
| | | | qualifiedQuantity | å表 | åæ ¼å | |
| | | | unqualifiedQuantity | å表 | ä¸è¯å | |
| | | | feedbackUserNickname | å表 | æ¥å·¥äºº | |
| | | | approveUserNickname | å表 | å®¡æ ¸äºº | |
| | | | status | å表 | ç¶æï¼åå
¸æ ç¾ï¼ä¸åç¶æä¸åé¢è²ï¼ | |
| | | | feedbackTime | å表 | æ¥å·¥æ¶é´ | |
| | | |
| | | **æç´¢æ¡ä»¶ï¼** |
| | | |
| | | | åæ®µ | æ§ä»¶ç±»å | 说æ | |
| | | |------|---------|------| |
| | | | taskCode | è¾å
¥æ¡ | ç产任å¡ç¼ç ï¼æ¨¡ç³å¹é
ï¼ä¸»è¦æç´¢æ¡ä»¶ï¼ | |
| | | | code | è¾å
¥æ¡ | æ¥å·¥åç¼å·ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | status | 䏿鿩 | ç¶æçé | |
| | | | feedbackTime | æ¥æèå´ | æ¥å·¥æ¶é´èå´ | |
| | | |
| | | --- |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | æ¥å·¥æ°éä¸é | æ¥å·¥æ°éä¸åºè¶
è¿ä»»å¡ç `reportableQuantity`ï¼å¯æ¥å·¥æ°éï¼ï¼å端åºåæ ¡éªæç¤º | |
| | | | è´¨æ£å·¥åºæ¥å·¥ | checkFlag=true æ¶ï¼åªéå¡«æ¥å·¥æ°éï¼åæ ¼/ä¸åæ ¼æ°éç±è´¨æ£ç»æåå¡«ï¼å端åºéèæç¦ç¨åæ ¼/ä¸è¯åè¾å
¥ | |
| | | | éè´¨æ£å·¥åºæ¥å·¥ | checkFlag=false æ¶ï¼åæ ¼å + ä¸è¯åæ°éå¿
é¡» > 0ï¼åç«¯åºæ ¡éª | |
| | | | èç¨¿ç¶ææä½ | ä»
è稿(0)ç¶æå¯ç¼è¾ãå é¤ | |
| | | | 审æ¹ä¸ç¶ææä½ | ä»
审æ¹ä¸(2)ç¶æå¯å®¡æ¹ã驳å | |
| | | | å¾
æ£éªç¶æ | å¾
æ£éª(3)ç¶æä¸å¯æä½ï¼çIPQCè´¨æ£å®æåç³»ç»èªå¨åè°æ´æ°ä¸ºå·²å®æ(4) | |
| | | | 审æ¹è¿åå¼ | approve æ¥å£è¿å true=已宿ï¼false=å¾
æ£éªï¼åç«¯åºæ ¹æ®è¿åå¼å±ç¤ºä¸åæç¤º | |
| | | | 任塿°æ®å¸¦å
¥ | ä»å¾
æ¥å·¥å°è´¦éæ©ä»»å¡åï¼7ä¸ªåæ®µèªå¨å¸¦å
¥æ¥å·¥è¡¨åï¼è§æ°æ®å¸¦å
¥è¯´æï¼ï¼ç¨æ·ä¸å¯ä¿®æ¹ | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - æ¥å·¥åç¼å·(code)ç±åç«¯çææè°ç¨èªå¨ç¼ç æ¥å£è·åï¼å建æ¶å¿
ä¼ |
| | | - æ¥å·¥ç±»å(type)åæ®µï¼1=èªè¡æ¥å·¥ï¼2=ç»ä¸æ¥å·¥ï¼åç«¯æ ¹æ®ä¸å¡åºæ¯éæ© |
| | | - å®¡æ¹æ¯ç®åæéæ§å¶ï¼`mes:pro-feedback:approve`ï¼ï¼éBPM工使µï¼ææéçç¨æ·ç´æ¥ç¹å»å®¡æ¹å³å¯ |
| | | - 审æ¹éè¿åä¼èªå¨è§¦åï¼å岿£æï¼åå²å·¥åºï¼ã产åºå
¥åºï¼å
³é®å·¥åºï¼ï¼è¿äºæ¯å端èªå¨å¤ççï¼å端æ éé¢å¤æä½ |
| | | - å¾
æ£éªç¶æçæ¥å·¥åï¼å
¶åæ ¼/ä¸åæ ¼æ°éä¼å¨IPQCè´¨æ£å®æåç±å端èªå¨åå¡«ï¼å端æ éæå¨æ´æ° |
| | | - å¾
æ¥å·¥å°è´¦ç `reportableQuantity` å·²æ£é¤å¨éæ¥å·¥éï¼å端å¯ç´æ¥ç¨æ¤å¼åæ¥å·¥æ°éä¸éæ ¡éª |
| | | - å 餿ä½ä»
èç¨¿ç¶æå¯ç¨ï¼å®¡æ¹ä¸/å¾
æ£éª/å·²å®æç¶æä¸å¯å é¤ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å·¥åçäº§åæ°è®°å½ - å端èè°æ¹æ¡ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - å·¥å详æ
ï¼æ°å¢"åæ°è®°å½"Tabï¼æ¥ç/管çå·¥åçåæ°è®°å½ï¼ |
| | | - åæ°è®°å½æ°å¢/ç¼è¾å¼¹çªï¼éæ©åæ°æ¨¡æ¿ï¼å¡«ååæ°å¼ï¼ |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ``` |
| | | 1. è¿å
¥å·¥å详æ
â 忢å°"åæ°è®°å½"Tab â æ¥çè¯¥å·¥åææåæ°è®°å½ |
| | | 2. ç¹å»"æ°å¢åæ°è®°å½" â å¼¹çªéæ©åæ°æ¨¡æ¿ â èªå¨å 载模æ¿ä¸çåæ°å表ï¼åæ°åãåä½ãæ¯å¦å¿
å¡«ï¼ |
| | | 3. å¡«åååæ°å¼ â ä¿åï¼ä¸æ¡è®°å½ = æ¨¡æ¿ + ææåæ°çå¡«åå¼ï¼ |
| | | 4. åä¸å·¥åå¯å¤æ¬¡æ°å¢åæ°è®°å½ï¼æ¯ç次/æ¯æ¹æ¬¡è®°å½ä¸æ¬¡ï¼ |
| | | 5. ç¼è¾æ¶åªè½ä¿®æ¹å¡«åå¼å夿³¨ï¼ä¸è½æ´æ¢æ¨¡æ¿ |
| | | 6. å é¤è®°å½æ¶æ´æ¡è®°å½ï¼å«ææåæ°æç»ï¼ä¸èµ·å é¤ |
| | | ``` |
| | | |
| | | ## æ°æ®æ¨¡å说æ |
| | | |
| | | ``` |
| | | åæ°è®°å½ï¼ä¸»è¡¨ï¼ åæ°è®°å½æç» |
| | | âââââââââââââââââââââââ âââââââââââââââââââââââââââ |
| | | â id: 1 â â id: 101 â |
| | | â workOrderId: 10 âââ1:Nââââ recordId: 1 â |
| | | â templateId: 2 â â paramName: 温度 â |
| | | â templateCode: CSMB002â â paramType: 2 (æ°å¼) â |
| | | â templateName: æ³¨å¡æ¨¡æ¿â â unitMeasureName: â â |
| | | â recordNo: BATCH-001 â â paramValue: 200 â |
| | | â remark: é¦ä»¶è®°å½ â ââââââââââââââââââââââââââ⤠|
| | | âââââââââââââââââââââââ â id: 102 â |
| | | â recordId: 1 â |
| | | â paramName: åå â |
| | | â paramType: 2 (æ°å¼) â |
| | | â unitMeasureName: MPa â |
| | | â paramValue: 50 â |
| | | âââââââââââââââââââââââââââ |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## API |
| | | |
| | | ### ä¸ãåæ°æ¨¡æ¿æ¥å£ï¼å·²æï¼ç¨äºä¸æéæ©ï¼ |
| | | |
| | | #### 1.1 è·ååæ°æ¨¡æ¿ç²¾ç®å表 |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pd/process-param-template/page | è·ååæ°æ¨¡æ¿å页å表 | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | pageNo | Integer | æ¯ | 页ç | |
| | | | pageSize | Integer | æ¯ | æ¯é¡µæ¡æ°ï¼å»ºè®® 100ï¼ç¨äºä¸æï¼ | |
| | | |
| | | **ååºå段ï¼å
³é®å段ï¼ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | 模æ¿ç¼å· | |
| | | | templateCode | String | 模æ¿ç¼ç | |
| | | | templateName | String | 模æ¿åç§° | |
| | | | templateType | Integer | 模æ¿ç±»å | |
| | | |
| | | --- |
| | | |
| | | #### 1.2 è·ååæ°æ¨¡æ¿è¯¦æ
ï¼å«æç»ï¼ç¨äºå è½½åæ°åè¡¨ï¼ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pd/process-param-template/get | è·åæ¨¡æ¿ + åæ°æç» | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | 模æ¿ç¼å· | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 2, |
| | | "templateCode": "CSMB202607100002", |
| | | "templateName": "注å¡åæ°æ¨¡æ¿", |
| | | "templateType": 1, |
| | | "details": [ |
| | | { |
| | | "id": 3, |
| | | "paramCode": "TEMP", |
| | | "paramName": "温度", |
| | | "paramType": 2, |
| | | "unitMeasureId": 5, |
| | | "unitMeasureName": "â", |
| | | "required": true |
| | | }, |
| | | { |
| | | "id": 4, |
| | | "paramCode": "PRESS", |
| | | "paramName": "åå", |
| | | "paramType": 2, |
| | | "unitMeasureId": 8, |
| | | "unitMeasureName": "MPa", |
| | | "required": true |
| | | }, |
| | | { |
| | | "id": 5, |
| | | "paramCode": "TIME", |
| | | "paramName": "ä¿åæ¶é´", |
| | | "paramType": 2, |
| | | "unitMeasureId": 12, |
| | | "unitMeasureName": "s", |
| | | "required": false |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **æ°æ®å¸¦å
¥è¯´æï¼** éæ©æ¨¡æ¿åï¼å° `details` å表渲æä¸ºè¡¨åè¡ï¼æ¯è¡å±ç¤ºåæ°å + åä½ + è¾å
¥æ¡ï¼`required=true` çåæ°æ è®°å¿
å¡«ã |
| | | |
| | | --- |
| | | |
| | | ### äºãå·¥ååæ°è®°å½æ¥å£ |
| | | |
| | | #### 2.1 åå»ºåæ°è®°å½ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /mes/pro/work-order-param-record/create | 为工ååå»ºä¸æ¡åæ°è®°å½ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | workOrderId | Long | æ¯ | å·¥åç¼å·ï¼URL åæ°ï¼ | |
| | | | templateId | Long | æ¯ | åæ°æ¨¡æ¿ç¼å· | |
| | | | recordNo | String | å¦ | è®°å½åºå·/æ¹æ¬¡å· | |
| | | | remark | String | å¦ | 夿³¨ | |
| | | | details | Array | æ¯ | åæ°æç»å表 | |
| | | | details[].templateDetailId | Long | æ¯ | æ¨¡æ¿æç»ç¼å·ï¼æ¥èªæ¨¡æ¿è¯¦æ
ç details[].idï¼ | |
| | | | details[].paramValue | String | æ¡ä»¶å¿
å¡« | åæ°å¼ï¼å¿
å¡«åæ°ä¸è½ä¸ºç©ºï¼ | |
| | | |
| | | **请æ±ç¤ºä¾ï¼** |
| | | |
| | | ``` |
| | | POST /mes/pro/work-order-param-record/create?workOrderId=10 |
| | | |
| | | { |
| | | "templateId": 2, |
| | | "recordNo": "BATCH-001", |
| | | "remark": "é¦ä»¶è®°å½", |
| | | "details": [ |
| | | { "templateDetailId": 3, "paramValue": "200" }, |
| | | { "templateDetailId": 4, "paramValue": "50" }, |
| | | { "templateDetailId": 5, "paramValue": "30" } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **ååºï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": 1024 |
| | | } |
| | | ``` |
| | | |
| | | **æ¥å£è°ç¨æ¶åºï¼** |
| | | |
| | | ``` |
| | | 1. ç¨æ·ç¹å»"æ°å¢åæ°è®°å½" |
| | | 2. è°ç¨ GET /mes/pd/process-param-template/page è·å模æ¿ä¸æå表 |
| | | 3. ç¨æ·éæ©æ¨¡æ¿ |
| | | 4. è°ç¨ GET /mes/pd/process-param-template/get?id=xxx è·å模æ¿åæ°æç» |
| | | 5. åç«¯å° details 渲æä¸ºè¡¨åï¼åæ°å + åä½ + è¾å
¥æ¡ï¼ |
| | | 6. ç¨æ·å¡«ååæ°å¼ |
| | | 7. è°ç¨ POST /mes/pro/work-order-param-record/create æäº¤ |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### 2.2 æ´æ°åæ°è®°å½ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /mes/pro/work-order-param-record/update | æ´æ°åæ°è®°å½ï¼ä»
ä¿®æ¹å¡«åå¼ï¼ä¸è½æ¢æ¨¡æ¿ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | è®°å½ç¼å· | |
| | | | templateId | Long | æ¯ | åæ°æ¨¡æ¿ç¼å·ï¼å¿
é¡»ä¸å建æ¶ä¸è´ï¼å¦åæ¥éï¼ | |
| | | | recordNo | String | å¦ | è®°å½åºå·/æ¹æ¬¡å· | |
| | | | remark | String | å¦ | 夿³¨ | |
| | | | details | Array | æ¯ | åæ°æç»å表 | |
| | | | details[].templateDetailId | Long | æ¯ | æ¨¡æ¿æç»ç¼å· | |
| | | | details[].paramValue | String | æ¡ä»¶å¿
å¡« | åæ°å¼ | |
| | | |
| | | **请æ±ç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "id": 1024, |
| | | "templateId": 2, |
| | | "recordNo": "BATCH-001", |
| | | "remark": "é¦ä»¶è®°å½ï¼å·²ä¿®æ£ï¼", |
| | | "details": [ |
| | | { "templateDetailId": 3, "paramValue": "210" }, |
| | | { "templateDetailId": 4, "paramValue": "52" }, |
| | | { "templateDetailId": 5, "paramValue": "28" } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | **ä¸å¡è§åï¼** ä¸å
è®¸æ´æ¢æ¨¡æ¿ï¼templateId å¿
é¡»ä¸åè®°å½ä¸è´ï¼ï¼å¦éæ¢æ¨¡æ¿è¯·å é¤åéæ°å建ã |
| | | |
| | | --- |
| | | |
| | | #### 2.3 å é¤åæ°è®°å½ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | DELETE | /mes/pro/work-order-param-record/delete | å é¤åæ°è®°å½ï¼çº§èå 餿ç»ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | è®°å½ç¼å· | |
| | | |
| | | **ååºï¼** `{ "code": 0, "data": true }` |
| | | |
| | | --- |
| | | |
| | | #### 2.4 è·ååæ°è®°å½è¯¦æ
|
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro/work-order-param-record/get | è·ååæ¡è®°å½ï¼å«æç»ï¼ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | è®°å½ç¼å· | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | è®°å½ç¼å· | |
| | | | workOrderId | Long | å·¥åç¼å· | |
| | | | templateId | Long | 模æ¿ç¼å· | |
| | | | templateCode | String | 模æ¿ç¼ç ï¼å¿«ç
§ï¼ | |
| | | | templateName | String | 模æ¿åç§°ï¼å¿«ç
§ï¼ | |
| | | | recordNo | String | è®°å½åºå· | |
| | | | remark | String | 夿³¨ | |
| | | | createTime | LocalDateTime | å建æ¶é´ | |
| | | | details | Array | åæ°æç»å表 | |
| | | | details[].id | Long | æç»ç¼å· | |
| | | | details[].templateDetailId | Long | æ¨¡æ¿æç»ç¼å· | |
| | | | details[].paramCode | String | åæ°ç¼ç | |
| | | | details[].paramName | String | åæ°åç§° | |
| | | | details[].paramType | Integer | åæ°ç±»å | |
| | | | details[].unitMeasureId | Long | 计éåä½ç¼å· | |
| | | | details[].unitMeasureName | String | 计éåä½åç§° | |
| | | | details[].paramValue | String | åæ°å¼ | |
| | | | details[].remark | String | 夿³¨ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 1024, |
| | | "workOrderId": 10, |
| | | "templateId": 2, |
| | | "templateCode": "CSMB202607100002", |
| | | "templateName": "注å¡åæ°æ¨¡æ¿", |
| | | "recordNo": "BATCH-001", |
| | | "remark": "é¦ä»¶è®°å½", |
| | | "createTime": "2026-07-15 14:30:00", |
| | | "details": [ |
| | | { "id": 101, "templateDetailId": 3, "paramCode": "TEMP", "paramName": "温度", "paramType": 2, "unitMeasureName": "â", "paramValue": "200" }, |
| | | { "id": 102, "templateDetailId": 4, "paramCode": "PRESS", "paramName": "åå", "paramType": 2, "unitMeasureName": "MPa", "paramValue": "50" }, |
| | | { "id": 103, "templateDetailId": 5, "paramCode": "TIME", "paramName": "ä¿åæ¶é´", "paramType": 2, "unitMeasureName": "s", "paramValue": "30" } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### 2.5 æå·¥åå页æ¥è¯¢åæ°è®°å½ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/pro/work-order-param-record/page-by-work-order | æå·¥åæ¥è¯¢åæ°è®°å½å页 | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | workOrderId | Long | æ¯ | å·¥åç¼å·ï¼URL åæ°ï¼ | |
| | | | recordNo | String | å¦ | è®°å½åºå·ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | templateName | String | å¦ | 模æ¿åç§°ï¼æ¨¡ç³å¹é
ï¼ | |
| | | | createTime | String[] | å¦ | å建æ¶é´èå´ | |
| | | | pageNo | Integer | æ¯ | 页ç | |
| | | | pageSize | Integer | æ¯ | æ¯é¡µæ¡æ° | |
| | | |
| | | **ååºå段ï¼** å 2.4ï¼å页åè¡¨ï¼æ¯æ¡è®°å½å« details æç»ï¼ |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "list": [ |
| | | { |
| | | "id": 1024, |
| | | "templateName": "注å¡åæ°æ¨¡æ¿", |
| | | "recordNo": "BATCH-001", |
| | | "createTime": "2026-07-15 14:30:00", |
| | | "details": [ |
| | | { "paramName": "温度", "unitMeasureName": "â", "paramValue": "200" }, |
| | | { "paramName": "åå", "unitMeasureName": "MPa", "paramValue": "50" }, |
| | | { "paramName": "ä¿åæ¶é´", "unitMeasureName": "s", "paramValue": "30" } |
| | | ] |
| | | }, |
| | | { |
| | | "id": 1025, |
| | | "templateName": "注å¡åæ°æ¨¡æ¿", |
| | | "recordNo": "BATCH-002", |
| | | "createTime": "2026-07-15 22:15:00", |
| | | "details": [ |
| | | { "paramName": "温度", "unitMeasureName": "â", "paramValue": "210" }, |
| | | { "paramName": "åå", "unitMeasureName": "MPa", "paramValue": "52" }, |
| | | { "paramName": "ä¿åæ¶é´", "unitMeasureName": "s", "paramValue": "28" } |
| | | ] |
| | | } |
| | | ], |
| | | "total": 2 |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | ### åæ°è®°å½å表ï¼å·¥å详æ
Tabï¼ |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | recordNo | å表 | è®°å½åºå·/æ¹æ¬¡å· | |
| | | | templateName | å表 | åæ°æ¨¡æ¿åç§° | |
| | | | ååæ°å¼ | å表ï¼å±å¼è¡ææ ç¾å¼ï¼ | æ¾ç¤º"åæ°å: å¼ åä½"ï¼å¦"温度: 200 â" | |
| | | | createTime | å表 | è®°å½æ¶é´ | |
| | | | æä½å | å表 | ç¼è¾ãå é¤æé® | |
| | | |
| | | **å表å±ç¤ºå»ºè®®ï¼** æ¯æ¡è®°å½å¯å±å¼æ¥çææåæ°æç»ï¼æå¨å表ä¸ç¨æ ç¾å¼å±ç¤ºå
³é®åæ°å¼ã |
| | | |
| | | ### åæ°è®°å½æ°å¢/ç¼è¾å¼¹çª |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | templateId | å¼¹çªé¡¶é¨ï¼ä¸æéæ©ï¼ | æ°å¢æ¶å¯éï¼ç¼è¾æ¶åªè¯» | |
| | | | recordNo | å¼¹çªï¼è¾å
¥æ¡ï¼ | è®°å½åºå·/æ¹æ¬¡å· | |
| | | | åæ°æç»å表 | å¼¹çªä¸»ä½ï¼å¨æè¡¨åï¼ | æ ¹æ®æ¨¡æ¿å è½½ï¼è§ä¸æ¹ | |
| | | | remark | å¼¹çªåºé¨ï¼ææ¬åï¼ | 夿³¨ | |
| | | |
| | | **åæ°æç»å¨æè¡¨åï¼** éæ©æ¨¡æ¿åï¼èªå¨å è½½åæ°å表渲æä¸ºè¡¨åè¡ï¼ |
| | | |
| | | | 模æ¿å段 | 表åå±ç¤º | 说æ | |
| | | |---------|---------|------| |
| | | | paramName | æ ç¾ææ¬ | å¦"温度" | |
| | | | unitMeasureName | æ ç¾åç¼ | å¦"â"ï¼æ¾ç¤ºå¨è¾å
¥æ¡å³ä¾§ | |
| | | | required | å¿
å¡«æ è®° | required=true æ¶å çº¢è²æå· | |
| | | | paramType | è¾å
¥æ§ä»¶ç±»å | 1=ææ¬æ¡ï¼2=æ°åæ¡ï¼3=å¼å
³ï¼4=æ¥æéæ©å¨ | |
| | | | paramValue | è¾å
¥æ¡ | ç¨æ·å¡«åçåæ°å¼ | |
| | | |
| | | --- |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | éæ©æ¨¡æ¿åå è½½åæ° | è°ç¨æ¨¡æ¿è¯¦æ
æ¥å£ï¼å° details 渲æä¸ºè¡¨åè¡ | |
| | | | å¿
å¡«åæ°æ ¡éª | required=true çåæ°ï¼paramValue ä¸è½ä¸ºç©ºï¼å¦åæäº¤æ¶æ¥é | |
| | | | ä¸å
è®¸æ´æ¢æ¨¡æ¿ | ç¼è¾æ¶ templateId å¿
é¡»ä¸å建æ¶ä¸è´ï¼å¦éæ¢æ¨¡æ¿è¯·å é¤åéæ°å建 | |
| | | | 夿¬¡è®°å½ | åä¸å·¥åå¯åå»ºå¤æ¡åæ°è®°å½ï¼å䏿¨¡æ¿ä¹å¯å¤æ¬¡è®°å½ï¼ | |
| | | | å¿«ç
§æºå¶ | è®°å½æ¶å¿«ç
§æ¨¡æ¿çåæ°å®ä¹ï¼åç»æ¨¡æ¿åæ´ä¸å½±å已记å½çæ°æ® | |
| | | | å é¤çº§è | å é¤è®°å½æ¶ï¼è¯¥è®°å½ä¸ææåæ°æç»ä¸èµ·å é¤ | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - åæ°ç±»å(paramType)åå
¸ï¼1=ææ¬ï¼2=æ°å¼ï¼3=å¸å°ï¼4=æ¥æï¼åç«¯å¯æ ¹æ®ç±»å渲æä¸åçè¾å
¥æ§ä»¶ |
| | | - æ°å¢æ¶å
鿍¡æ¿åå¡«å¼ï¼å»ºè®®æ¨¡æ¿éæ©åç«å³è°ç¨æ¨¡æ¿è¯¦æ
æ¥å£å è½½åæ°å表 |
| | | - ç¼è¾æ¶æ¨¡æ¿å段置ç°ä¸å¯ä¿®æ¹ï¼åªè½ä¿®æ¹ paramValue å recordNoãremark |
| | | - å·¥ååæ°è®°å½çæéå¤ç¨å·¥åæéï¼å建/ä¿®æ¹/å é¤ç¨ `mes:pro-work-order:update`ï¼æ¥è¯¢ç¨ `mes:pro-work-order:query` |
| | | - å䏿¨¡æ¿å¨åå·¥åä¸å¯åå»ºå¤æ¬¡è®°å½ï¼å¦æ¯ç次/æ¯æ¹æ¬¡è®°å½ä¸æ¬¡ï¼ï¼éè¿ recordNo åºå |
| | |
| | | private String specification; |
| | | |
| | | @Schema(description = "ç©æç±»åï¼1åæ, 2åæå, 3æå, 4è¾
æ", example = "1") |
| | | private Integer itemType; |
| | | private Long itemType; |
| | | |
| | | @Schema(description = "计éåä½ID", example = "1") |
| | | private Long unitMeasureId; |
| | |
| | | @Schema(description = "è´¨éç¶æå¿
å¡«", example = "false") |
| | | private Boolean qualityStatusFlag; |
| | | |
| | | private Long mdmItemId; |
| | | |
| | | } |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemPageReqVO; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.category.MdmItemCategoryDO; |
| | |
| | | import cn.iocoder.yudao.module.mdm.service.category.MdmItemCategoryService; |
| | | import cn.iocoder.yudao.module.mdm.service.unit.MdmUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.api.item.MesMdItemApi; |
| | | import cn.iocoder.yudao.module.mes.api.item.MesMdItemTypeApi; |
| | | import cn.iocoder.yudao.module.mes.api.item.dto.MesMdItemSyncReqDTO; |
| | | import cn.iocoder.yudao.module.mes.api.item.dto.MesMdItemTypeRespDTO; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | @Resource |
| | | private MdmItemBatchConfigMapper itemBatchConfigMapper; |
| | | |
| | | @Resource |
| | | private MesMdItemTypeApi mesMdItemTypeApi; |
| | | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createItem(MdmItemSaveReqVO createReqVO) { |
| | |
| | | saveBatchConfig(item.getId(), createReqVO); |
| | | |
| | | // åæ¥å° MESï¼å¾é syncMes æ¶ï¼ |
| | | createReqVO.setId(item.getId()); |
| | | if (Boolean.TRUE.equals(createReqVO.getSyncMes())) { |
| | | syncItemToMes(createReqVO); |
| | | } |
| | |
| | | // è§£æåç±» id -> codeï¼ä½¿ç¨ MDM æ¬å°åç±»æå¡ï¼ |
| | | String itemTypeCode = null; |
| | | if (reqVO.getCategoryId() != null) { |
| | | MdmItemCategoryDO category = itemCategoryService.getItemCategory(reqVO.getCategoryId()); |
| | | if (category != null) { |
| | | itemTypeCode = category.getCode(); |
| | | } |
| | | } else if (reqVO.getItemType() != null) { |
| | | // æ ¹æ® itemType æ¥æ¾å¯¹åºåç±»ç¼ç |
| | | // itemType: 1åæ, 2åæå, 3æå, 4è¾
æ |
| | | String itemTypeName = convertItemTypeToName(reqVO.getItemType()); |
| | | List<MdmItemCategoryDO> categories = itemCategoryService.getItemCategoryList( |
| | | itemCategoryService.getItemCategoryChildrenList(null).stream().map(MdmItemCategoryDO::getId).collect(Collectors.toSet())); |
| | | itemTypeCode = categories.stream() |
| | | .filter(c -> c.getName() != null && c.getName().equals(itemTypeName)) |
| | | .findFirst() |
| | | .map(MdmItemCategoryDO::getCode) |
| | | .orElse(null); |
| | | CommonResult<MesMdItemTypeRespDTO> itemType = mesMdItemTypeApi.getItemType(reqVO.getCategoryId()); |
| | | itemTypeCode = itemType.getData().getCode(); |
| | | } |
| | | // ç»è£
忥 DTO |
| | | MesMdItemSyncReqDTO syncReqDTO = new MesMdItemSyncReqDTO(); |
| | | syncReqDTO.setCode(reqVO.getCode()); |
| | | syncReqDTO.setMdmItemId(reqVO.getId()); |
| | | syncReqDTO.setName(reqVO.getName()); |
| | | syncReqDTO.setSpecification(reqVO.getSpecification()); |
| | | syncReqDTO.setUnitCode(unitCode); |
| | |
| | | @Schema(description = "è´¨éç¶æå¿
å¡«", example = "false") |
| | | private Boolean qualityStatusFlag; |
| | | |
| | | private Long mdmItemId; |
| | | |
| | | } |
| | |
| | | MesMdItemSaveReqVO saveReqVO = buildSaveReqVO(syncReqDTO); |
| | | Long itemId = itemService.createItem(saveReqVO); |
| | | // åæ¥æ¹æ¬¡é
ç½® |
| | | saveBatchConfig(itemId, syncReqDTO); |
| | | // saveBatchConfig(itemId, syncReqDTO); |
| | | return itemId; |
| | | } |
| | | |
| | |
| | | itemId = existItem.getId(); |
| | | } |
| | | // åæ¥æ¹æ¬¡é
ç½® |
| | | saveBatchConfig(itemId, syncReqDTO); |
| | | // saveBatchConfig(itemId, syncReqDTO); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Schema(description = "æ¯å¦åæ¥å° MDM", example = "true") |
| | | private Boolean syncMdm; |
| | | |
| | | private Long mdmItemId; |
| | | |
| | | } |
| | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼å·", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼ç ï¼æ¨¡ç³å¹é
ï¼", example = "PT202503") |
| | | private String taskCode; |
| | | |
| | | @Schema(description = "æ¥å·¥æ¶é´") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime[] feedbackTime; |
| | |
| | | @NotNull(message = "æ¥å·¥ç±»åä¸è½ä¸ºç©º") |
| | | private Integer type; |
| | | |
| | | @Schema(description = "å·¥ä½ç«ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "å·¥ä½ç«ä¸è½ä¸ºç©º") |
| | | @Schema(description = "å·¥ä½ç«ç¼å·", example = "1") |
| | | private Long workstationId; |
| | | |
| | | @Schema(description = "å·¥èºè·¯çº¿ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "å·¥èºè·¯çº¿ä¸è½ä¸ºç©º") |
| | | @Schema(description = "å·¥èºè·¯çº¿ç¼å·", example = "1") |
| | | private Long routeId; |
| | | |
| | | @Schema(description = "å·¥åºç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "å·¥åºä¸è½ä¸ºç©º") |
| | | @Schema(description = "å·¥åºç¼å·", example = "1") |
| | | private Long processId; |
| | | |
| | | @Schema(description = "ç产工åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç产工åä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç产工åç¼å·", example = "1") |
| | | private Long workOrderId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç产任å¡ä¸è½ä¸ºç©º") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "产åç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") |
| | | @NotNull(message = "产åç©æä¸è½ä¸ºç©º") |
| | | @Schema(description = "产åç©æç¼å·", example = "100") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "è¿ææ¥æ") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderParamRecordDetailMapper; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderParamRecordService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | |
| | | @Tag(name = "管çåå° - MES ç产工ååæ°è®°å½") |
| | | @RestController |
| | | @RequestMapping("/mes/pro/work-order-param-record") |
| | | @Validated |
| | | public class MesProWorkOrderParamRecordController { |
| | | |
| | | @Resource |
| | | private MesProWorkOrderParamRecordService paramRecordService; |
| | | @Resource |
| | | private MesProWorkOrderParamRecordDetailMapper paramRecordDetailMapper; |
| | | @Resource |
| | | private MesMdUnitMeasureService unitMeasureService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建工ååæ°è®°å½") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')") |
| | | public CommonResult<Long> createParamRecord(@RequestParam("workOrderId") Long taskId, |
| | | @Valid @RequestBody MesProWorkOrderParamRecordSaveReqVO createReqVO) { |
| | | return success(paramRecordService.createParamRecord(taskId, createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°å·¥ååæ°è®°å½") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')") |
| | | public CommonResult<Boolean> updateParamRecord(@Valid @RequestBody MesProWorkOrderParamRecordSaveReqVO updateReqVO) { |
| | | paramRecordService.updateParamRecord(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤å·¥ååæ°è®°å½") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')") |
| | | public CommonResult<Boolean> deleteParamRecord(@RequestParam("id") Long id) { |
| | | paramRecordService.deleteParamRecord(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾å·¥ååæ°è®°å½") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')") |
| | | public CommonResult<MesProWorkOrderParamRecordRespVO> getParamRecord(@RequestParam("id") Long id) { |
| | | MesProWorkOrderParamRecordDO record = paramRecordService.getParamRecord(id); |
| | | if (record == null) { |
| | | return success(null); |
| | | } |
| | | return success(buildRecordRespVOList(ListUtil.of(record)).get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page-by-work-order") |
| | | @Operation(summary = "æå·¥åè·å¾åæ°è®°å½å页") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')") |
| | | public CommonResult<PageResult<MesProWorkOrderParamRecordRespVO>> getParamRecordPageByWorkOrderId( |
| | | @RequestParam("taskId") Long taskId, |
| | | @Valid MesProWorkOrderParamRecordPageReqVO pageReqVO) { |
| | | PageResult<MesProWorkOrderParamRecordDO> pageResult = |
| | | paramRecordService.getParamRecordPageByWorkOrderId(taskId, pageReqVO); |
| | | return success(new PageResult<>(buildRecordRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | // ==================== æ¼æ¥ VO ==================== |
| | | |
| | | private List<MesProWorkOrderParamRecordRespVO> buildRecordRespVOList(List<MesProWorkOrderParamRecordDO> list) { |
| | | if (CollUtil.isEmpty(list)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // 1. æ¹éè·åææè®°å½çæç» |
| | | List<MesProWorkOrderParamRecordDetailDO> allDetails = paramRecordDetailMapper.selectListByRecordIds( |
| | | convertSet(list, MesProWorkOrderParamRecordDO::getId)); |
| | | Map<Long, List<MesProWorkOrderParamRecordDetailDO>> detailMap = allDetails.stream() |
| | | .collect(Collectors.groupingBy(MesProWorkOrderParamRecordDetailDO::getRecordId)); |
| | | |
| | | // 2. æ¹éè·å计éåä½ |
| | | Set<Long> unitMeasureIds = convertSet(allDetails, MesProWorkOrderParamRecordDetailDO::getUnitMeasureId); |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(unitMeasureIds); |
| | | |
| | | // 3. æ¼æ¥ VO |
| | | return BeanUtils.toBean(list, MesProWorkOrderParamRecordRespVO.class, vo -> { |
| | | List<MesProWorkOrderParamRecordDetailDO> details = detailMap.get(vo.getId()); |
| | | if (CollUtil.isNotEmpty(details)) { |
| | | List<MesProWorkOrderParamRecordRespVO.DetailResp> detailResps = BeanUtils.toBean( |
| | | details, MesProWorkOrderParamRecordRespVO.DetailResp.class, |
| | | detailResp -> MapUtils.findAndThen(unitMeasureMap, detailResp.getUnitMeasureId(), |
| | | unit -> detailResp.setUnitMeasureName(unit.getName())) |
| | | ); |
| | | vo.setDetails(detailResps); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | | |
| | | @Schema(description = "管çåå° - MES ç产工ååæ°è®°å½å页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class MesProWorkOrderParamRecordPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "è®°å½åºå·/æ¹æ¬¡å·", example = "BATCH-001") |
| | | private String recordNo; |
| | | |
| | | @Schema(description = "模æ¿åç§°", example = "注å¡åæ°æ¨¡æ¿") |
| | | private String templateName; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime[] createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - MES ç产工ååæ°è®°å½ Response VO") |
| | | @Data |
| | | public class MesProWorkOrderParamRecordRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç产订åç¼å·", example = "1") |
| | | private Long workOrderId; |
| | | |
| | | @Schema(description = "ç产工åç¼å·") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "åæ°æ¨¡æ¿ç¼å·", example = "1") |
| | | private Long templateId; |
| | | |
| | | @Schema(description = "模æ¿ç¼ç ", example = "CSMB001") |
| | | private String templateCode; |
| | | |
| | | @Schema(description = "模æ¿åç§°", example = "注å¡åæ°æ¨¡æ¿") |
| | | private String templateName; |
| | | |
| | | @Schema(description = "è®°å½åºå·/æ¹æ¬¡å·", example = "BATCH-001") |
| | | private String recordNo; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | private LocalDateTime createTime; |
| | | |
| | | @Schema(description = "åæ°æç»å表") |
| | | private List<DetailResp> details; |
| | | |
| | | @Schema(description = "åæ°æç»ååº") |
| | | @Data |
| | | public static class DetailResp { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¨¡æ¿æç»ç¼å·", example = "1") |
| | | private Long templateDetailId; |
| | | |
| | | @Schema(description = "åæ°ç¼ç ", example = "TEMP") |
| | | private String paramCode; |
| | | |
| | | @Schema(description = "åæ°åç§°", example = "温度") |
| | | private String paramName; |
| | | |
| | | @Schema(description = "åæ°ç±»å", example = "1") |
| | | private Integer paramType; |
| | | |
| | | @Schema(description = "计éåä½ç¼å·", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "â") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "åæ°å¼", example = "200") |
| | | private String paramValue; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.Valid; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - MES ç产工ååæ°è®°å½æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class MesProWorkOrderParamRecordSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·ï¼ä¿®æ¹æ¶å¿
ä¼ ï¼", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "åæ°æ¨¡æ¿ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "åæ°æ¨¡æ¿ä¸è½ä¸ºç©º") |
| | | private Long templateId; |
| | | |
| | | @Schema(description = "è®°å½åºå·/æ¹æ¬¡å·", example = "BATCH-001") |
| | | private String recordNo; |
| | | |
| | | @Schema(description = "åæ°æç»å表", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotEmpty(message = "åæ°æç»ä¸è½ä¸ºç©º") |
| | | @Valid |
| | | private List<DetailItem> details; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "åæ°æç»é¡¹") |
| | | @Data |
| | | public static class DetailItem { |
| | | |
| | | @Schema(description = "æ¨¡æ¿æç»ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "æ¨¡æ¿æç»ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long templateDetailId; |
| | | |
| | | @Schema(description = "åæ°å¼", example = "200") |
| | | private String paramValue; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssueSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueDO; |
| | | import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productissue.MesWmProductIssueService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | |
| | | private MesMdWorkstationService workstationService; |
| | | @Resource |
| | | private MesProWorkOrderService workOrderService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | @Resource |
| | | private MesMdClientService clientService; |
| | | |
| | |
| | | convertSet(list, MesWmProductIssueDO::getWorkstationId)); |
| | | Map<Long, MesProWorkOrderDO> workOrderMap = workOrderService.getWorkOrderMap( |
| | | convertSet(list, MesWmProductIssueDO::getWorkOrderId)); |
| | | Map<Long, MesProTaskDO> taskMap = taskService.getTaskMap( |
| | | convertSet(list, MesWmProductIssueDO::getTaskId)); |
| | | Map<Long, MesMdClientDO> clientMap = clientService.getClientMap( |
| | | convertSet(workOrderMap.values(), MesProWorkOrderDO::getClientId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmProductIssueRespVO.class, vo -> { |
| | | MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), |
| | | workstation -> vo.setWorkstationName(workstation.getName())); |
| | | MapUtils.findAndThen(taskMap, vo.getTaskId(), task -> |
| | | vo.setTaskCode(task.getCode()).setTaskName(task.getName())); |
| | | MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), workOrder -> { |
| | | vo.setWorkOrderCode(workOrder.getCode()); |
| | | MapUtils.findAndThen(clientMap, workOrder.getClientId(), client -> |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLinePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueLineDO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productissue.MesWmProductIssueLineService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | |
| | | @Resource |
| | | private MesWmProductIssueLineService issueLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | private MesMdItemService mdmItemService; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | private MesMdUnitMeasureService unitMeasureService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "åå»ºé¢æåºåºåè¡") |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | Map<Long, MesMdItemDO> itemMap = mdmItemService.getItemMap( |
| | | convertSet(list, MesWmProductIssueLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | Map<Long, MesProTaskDO> taskMap = taskService.getTaskMap( |
| | | convertSet(list, MesWmProductIssueLineDO::getTaskId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmProductIssueLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()).setMdmItemId(item.getMdmItemId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | unit -> vo.setUnitMeasureName(unit.getName())); |
| | | }); |
| | | MapUtils.findAndThen(taskMap, vo.getTaskId(), task -> |
| | | vo.setTaskCode(task.getCode()).setTaskName(task.getName())); |
| | | }); |
| | | } |
| | | |
| | |
| | | @Schema(description = "çäº§ä»»å¡ ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼ç ", example = "TASK001") |
| | | private String taskCode; |
| | | |
| | | @Schema(description = "ç产任å¡åç§°", example = "注å¡ä»»å¡") |
| | | private String taskName; |
| | | |
| | | @Schema(description = "é¢ææ¥æ") |
| | | private LocalDateTime issueDate; |
| | | |
| | |
| | | @NotBlank(message = "颿ååç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "ç产工å ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç产工å ID ä¸è½ä¸ºç©º") |
| | | @Schema(description = "çäº§ä»»å¡ ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "çäº§ä»»å¡ ID ä¸è½ä¸ºç©º") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产工å ID", example = "1") |
| | | private Long workOrderId; |
| | | |
| | | @Schema(description = "å·¥ä½ç« ID", example = "1") |
| | |
| | | @Schema(description = "颿åID", example = "1") |
| | | private Long issueId; |
| | | |
| | | @Schema(description = "ç产任å¡ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼ç ", example = "TASK001") |
| | | private String taskCode; |
| | | |
| | | @Schema(description = "ç产任å¡åç§°", example = "注å¡ä»»å¡") |
| | | private String taskName; |
| | | |
| | | @Schema(description = "ç©æID", example = "1") |
| | | private Long itemId; |
| | | |
| | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | private Long mdmItemId; |
| | | |
| | | } |
| | |
| | | @NotNull(message = "颿åIDä¸è½ä¸ºç©º") |
| | | private Long issueId; |
| | | |
| | | @Schema(description = "ç产任å¡ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç©æID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç©æIDä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | |
| | | private MesMdWorkstationService workstationService; |
| | | @Resource |
| | | private MesProWorkOrderService workOrderService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建ç产éæå") |
| | |
| | | convertSet(list, MesWmReturnIssueDO::getWorkstationId)); |
| | | Map<Long, MesProWorkOrderDO> workOrderMap = workOrderService.getWorkOrderMap( |
| | | convertSet(list, MesWmReturnIssueDO::getWorkOrderId)); |
| | | Map<Long, MesProTaskDO> taskMap = taskService.getTaskMap( |
| | | convertSet(list, MesWmReturnIssueDO::getTaskId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmReturnIssueRespVO.class, vo -> { |
| | | MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), |
| | | workstation -> vo.setWorkstationName(workstation.getName())); |
| | | MapUtils.findAndThen(taskMap, vo.getTaskId(), task -> |
| | | vo.setTaskCode(task.getCode()).setTaskName(task.getName())); |
| | | MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), |
| | | workOrder -> vo.setWorkOrderCode(workOrder.getCode())); |
| | | }); |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.line.MesWmReturnIssueLinePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.line.MesWmReturnIssueLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.line.MesWmReturnIssueLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | |
| | | @Resource |
| | | private MesWmReturnIssueLineService issueLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | private MesMdItemService mdmItemService; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | private MesMdUnitMeasureService unitMeasureService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建ç产éæåè¡") |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | Map<Long, MesMdItemDO> itemMap = mdmItemService.getItemMap( |
| | | convertSet(list, MesWmReturnIssueLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | Map<Long, MesProTaskDO> taskMap = taskService.getTaskMap( |
| | | convertSet(list, MesWmReturnIssueLineDO::getTaskId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmReturnIssueLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | unit -> vo.setUnitMeasureName(unit.getName())); |
| | | }); |
| | | MapUtils.findAndThen(taskMap, vo.getTaskId(), task -> |
| | | vo.setTaskCode(task.getCode()).setTaskName(task.getName())); |
| | | }); |
| | | } |
| | | |
| | |
| | | @Schema(description = "ç产工å ID", example = "1") |
| | | private Long workOrderId; |
| | | |
| | | @Schema(description = "çäº§ä»»å¡ ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "éæç±»å", example = "1") |
| | | private Integer type; |
| | | |
| | |
| | | @Schema(description = "ç产工åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "WO20250226001") |
| | | private String workOrderCode; |
| | | |
| | | @Schema(description = "çäº§ä»»å¡ ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼ç ", example = "TASK001") |
| | | private String taskCode; |
| | | |
| | | @Schema(description = "ç产任å¡åç§°", example = "注å¡ä»»å¡") |
| | | private String taskName; |
| | | |
| | | @Schema(description = "å·¥ä½ç« ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long workstationId; |
| | | |
| | |
| | | @NotBlank(message = "éæååç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "ç产工å ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç产工å ID ä¸è½ä¸ºç©º") |
| | | @Schema(description = "çäº§ä»»å¡ ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "çäº§ä»»å¡ ID ä¸è½ä¸ºç©º") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产工å ID", example = "1") |
| | | private Long workOrderId; |
| | | |
| | | @Schema(description = "å·¥ä½ç« ID", example = "1") |
| | |
| | | @Schema(description = "éæå ID", example = "1") |
| | | private Long issueId; |
| | | |
| | | @Schema(description = "çäº§ä»»å¡ ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç产任å¡ç¼ç ", example = "TASK001") |
| | | private String taskCode; |
| | | |
| | | @Schema(description = "ç产任å¡åç§°", example = "注å¡ä»»å¡") |
| | | private String taskName; |
| | | |
| | | @Schema(description = "ç©æ ID", example = "1") |
| | | private Long itemId; |
| | | |
| | |
| | | @NotNull(message = "éæå ID ä¸è½ä¸ºç©º") |
| | | private Long issueId; |
| | | |
| | | @Schema(description = "çäº§ä»»å¡ ID", example = "1") |
| | | private Long taskId; |
| | | |
| | | @Schema(description = "ç©æ ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç©æ ID ä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | |
| | | @TableId |
| | | private Long id; |
| | | /** |
| | | * MDM ç©æ ID |
| | | * |
| | | * å
³è mdm_item.id |
| | | */ |
| | | private Long mdmItemId; |
| | | /** |
| | | * ç©æç¼ç |
| | | */ |
| | | private String code; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½ DO |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @TableName("mes_pro_work_order_param_record") |
| | | @KeySequence("mes_pro_work_order_param_record_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MesProWorkOrderParamRecordDO extends BaseDO { |
| | | |
| | | /** |
| | | * ç¼å· |
| | | */ |
| | | @TableId |
| | | private Long id; |
| | | /** |
| | | * ç产工åç¼å· |
| | | * |
| | | * å
³è {@link MesProWorkOrderDO#getId()} |
| | | */ |
| | | private Long workOrderId; |
| | | |
| | | |
| | | private Long taskId; |
| | | /** |
| | | * åæ°æ¨¡æ¿ç¼å· |
| | | * |
| | | * å
³è {@link MesPdProcessParamTemplateDO#getId()} |
| | | */ |
| | | private Long templateId; |
| | | /** |
| | | * 模æ¿ç¼ç ï¼å¿«ç
§ï¼ |
| | | */ |
| | | private String templateCode; |
| | | /** |
| | | * 模æ¿åç§°ï¼å¿«ç
§ï¼ |
| | | */ |
| | | private String templateName; |
| | | /** |
| | | * è®°å½åºå·/æ¹æ¬¡å· |
| | | */ |
| | | private String recordNo; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDetailDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½æç» DO |
| | | * |
| | | * å¿«ç
§è¡¨ï¼è®°å½æ¶å¿«ç
§æ¨¡æ¿åæ°å®ä¹ï¼åç»æ¨¡æ¿åæ´ä¸å½±å已记å½çæ°æ®ã |
| | | * template_detail_id ä»
使º¯æºï¼ä¸ä»æ¨¡æ¿æç»ä¸»è¡¨è¯»åæ¾ç¤ºå¼ã |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @TableName("mes_pro_work_order_param_record_detail") |
| | | @KeySequence("mes_pro_work_order_param_record_detail_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MesProWorkOrderParamRecordDetailDO extends BaseDO { |
| | | |
| | | /** |
| | | * ç¼å· |
| | | */ |
| | | @TableId |
| | | private Long id; |
| | | /** |
| | | * åæ°è®°å½ç¼å· |
| | | * |
| | | * å
³è {@link MesProWorkOrderParamRecordDO#getId()} |
| | | */ |
| | | private Long recordId; |
| | | /** |
| | | * æ¨¡æ¿æç»ç¼å·ï¼ä»
使º¯æºï¼ |
| | | * |
| | | * å
³è {@link MesPdProcessParamTemplateDetailDO#getId()} |
| | | */ |
| | | private Long templateDetailId; |
| | | /** |
| | | * åæ°ç¼ç ï¼å¿«ç
§ï¼ |
| | | */ |
| | | private String paramCode; |
| | | /** |
| | | * åæ°åç§°ï¼å¿«ç
§ï¼ |
| | | */ |
| | | private String paramName; |
| | | /** |
| | | * åæ°ç±»åï¼å¿«ç
§ï¼ |
| | | */ |
| | | private Integer paramType; |
| | | /** |
| | | * 计éåä½ç¼å·ï¼å¿«ç
§ï¼ |
| | | */ |
| | | private Long unitMeasureId; |
| | | /** |
| | | * åæ°å¼ |
| | | */ |
| | | private String paramValue; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | * å
³è {@link MesProWorkOrderDO#getId()} |
| | | */ |
| | | private Long workOrderId; |
| | | // TODO @èè¿ï¼ãçé®ï¼ä¸è¦å¨ãè¿ä¸ªåæ®µçæ¥æºï¼ |
| | | /** |
| | | * çäº§ä»»å¡ ID |
| | | * |
| | | * å
³è {@link MesProTaskDO#getId()} |
| | | */ |
| | | private Long taskId; |
| | | // TODO @èè¿ï¼ãçé®ï¼ä¸è¦å¨ãè¿ä¸ªåæ®µçæ´æ°æ¶é´ï¼ |
| | | /** |
| | | * é¢ææ¥æ |
| | | */ |
| | |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | |
| | | */ |
| | | private Long issueId; |
| | | /** |
| | | * çäº§ä»»å¡ ID |
| | | * |
| | | * å
³è {@link MesProTaskDO#getId()} |
| | | */ |
| | | private Long taskId; |
| | | /** |
| | | * ç©æ ID |
| | | * |
| | | * å
³è {@link MesMdItemDO#getId()} |
| | |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | |
| | | */ |
| | | private Long workOrderId; |
| | | /** |
| | | * çäº§ä»»å¡ ID |
| | | * |
| | | * å
³è {@link MesProTaskDO#getId()} |
| | | */ |
| | | private Long taskId; |
| | | /** |
| | | * å·¥ä½ç« ID |
| | | * |
| | | * å
³è {@link MesMdWorkstationDO#getId()} |
| | |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; |
| | |
| | | */ |
| | | private Long issueId; |
| | | /** |
| | | * çäº§ä»»å¡ ID |
| | | * |
| | | * å
³è {@link MesProTaskDO#getId()} |
| | | */ |
| | | private Long taskId; |
| | | /** |
| | | * åºåè®°å½ ID |
| | | * |
| | | * å
³è {@link MesWmMaterialStockDO#getId()} |
| | |
| | | } |
| | | |
| | | default MesMdItemTypeDO selectByCode(String code) { |
| | | return selectOne(MesMdItemTypeDO::getName, code); |
| | | return selectOne(MesMdItemTypeDO::getCode, code); |
| | | } |
| | | |
| | | default Long selectCountByParentId(Long parentId) { |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.Collection; |
| | |
| | | public interface MesProFeedbackMapper extends BaseMapperX<MesProFeedbackDO> { |
| | | |
| | | default PageResult<MesProFeedbackDO> selectPage(MesProFeedbackPageReqVO reqVO) { |
| | | // 彿任å¡ç¼ç æ¨¡ç³æ¥è¯¢æ¶ï¼éè¦ JOIN ä»»å¡è¡¨ |
| | | if (StrUtil.isNotBlank(reqVO.getTaskCode())) { |
| | | MPJLambdaWrapperX<MesProFeedbackDO> query = new MPJLambdaWrapperX<>(); |
| | | query.selectAll(MesProFeedbackDO.class); |
| | | query.leftJoin(MesProTaskDO.class, on -> on |
| | | .eq(MesProTaskDO::getId, MesProFeedbackDO::getTaskId)); |
| | | query.like(MesProTaskDO::getCode, reqVO.getTaskCode()); |
| | | query.likeIfPresent(MesProFeedbackDO::getCode, reqVO.getCode()) |
| | | .eqIfPresent(MesProFeedbackDO::getType, reqVO.getType()) |
| | | .eqIfPresent(MesProFeedbackDO::getWorkOrderId, reqVO.getWorkOrderId()) |
| | | .eqIfPresent(MesProFeedbackDO::getTaskId, reqVO.getTaskId()) |
| | | .eqIfPresent(MesProFeedbackDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(MesProFeedbackDO::getFeedbackTime, reqVO.getFeedbackTime()) |
| | | .eqIfPresent(MesProFeedbackDO::getItemId, reqVO.getItemId()) |
| | | .eqIfPresent(MesProFeedbackDO::getFeedbackUserId, reqVO.getFeedbackUserId()) |
| | | .eqIfPresent(MesProFeedbackDO::getCreator, reqVO.getCreator()) |
| | | .orderByDesc(MesProFeedbackDO::getId); |
| | | return selectPage(reqVO, query); |
| | | } |
| | | // 䏿¶åä»»å¡ç¼ç æ¥è¯¢æ¶ï¼èµ°æ®éæ¥è¯¢ |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MesProFeedbackDO>() |
| | | .likeIfPresent(MesProFeedbackDO::getCode, reqVO.getCode()) |
| | | .eqIfPresent(MesProFeedbackDO::getType, reqVO.getType()) |
| | | .eqIfPresent(MesProFeedbackDO::getWorkOrderId, reqVO.getWorkOrderId()) |
| | | .eqIfPresent(MesProFeedbackDO::getTaskId, reqVO.getTaskId()) |
| | | .eqIfPresent(MesProFeedbackDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(MesProFeedbackDO::getFeedbackTime, reqVO.getFeedbackTime()) |
| | | .eqIfPresent(MesProFeedbackDO::getItemId, reqVO.getItemId()) |
| | |
| | | .orderByDesc(MesProTaskIssueDO::getId)); |
| | | } |
| | | |
| | | default List<MesProTaskIssueDO> selectListBySourceDoc(String sourceDocType, Long sourceDocId) { |
| | | return selectList(new LambdaQueryWrapperX<MesProTaskIssueDO>() |
| | | .eq(MesProTaskIssueDO::getSourceDocType, sourceDocType) |
| | | .eq(MesProTaskIssueDO::getSourceDocId, sourceDocId)); |
| | | } |
| | | |
| | | default void deleteBySourceDoc(String sourceDocType, Long sourceDocId) { |
| | | delete(new LambdaQueryWrapperX<MesProTaskIssueDO>() |
| | | .eq(MesProTaskIssueDO::getSourceDocType, sourceDocType) |
| | | .eq(MesProTaskIssueDO::getSourceDocId, sourceDocId)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDetailDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½æç» Mapper |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @Mapper |
| | | public interface MesProWorkOrderParamRecordDetailMapper extends BaseMapperX<MesProWorkOrderParamRecordDetailDO> { |
| | | |
| | | default List<MesProWorkOrderParamRecordDetailDO> selectListByRecordId(Long recordId) { |
| | | return selectList(new LambdaQueryWrapperX<MesProWorkOrderParamRecordDetailDO>() |
| | | .eq(MesProWorkOrderParamRecordDetailDO::getRecordId, recordId) |
| | | .orderByAsc(MesProWorkOrderParamRecordDetailDO::getId)); |
| | | } |
| | | |
| | | default List<MesProWorkOrderParamRecordDetailDO> selectListByRecordIds(Collection<Long> recordIds) { |
| | | return selectList(new LambdaQueryWrapperX<MesProWorkOrderParamRecordDetailDO>() |
| | | .in(MesProWorkOrderParamRecordDetailDO::getRecordId, recordIds) |
| | | .orderByAsc(MesProWorkOrderParamRecordDetailDO::getId)); |
| | | } |
| | | |
| | | default void deleteByRecordId(Long recordId) { |
| | | delete(new LambdaQueryWrapperX<MesProWorkOrderParamRecordDetailDO>() |
| | | .eq(MesProWorkOrderParamRecordDetailDO::getRecordId, recordId)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½ Mapper |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @Mapper |
| | | public interface MesProWorkOrderParamRecordMapper extends BaseMapperX<MesProWorkOrderParamRecordDO> { |
| | | |
| | | default PageResult<MesProWorkOrderParamRecordDO> selectPageByWorkOrderId(Long taskId, |
| | | MesProWorkOrderParamRecordPageReqVO pageReqVO) { |
| | | return selectPage(pageReqVO, new LambdaQueryWrapperX<MesProWorkOrderParamRecordDO>() |
| | | .eq(MesProWorkOrderParamRecordDO::getTaskId, taskId) |
| | | .likeIfPresent(MesProWorkOrderParamRecordDO::getRecordNo, pageReqVO.getRecordNo()) |
| | | .likeIfPresent(MesProWorkOrderParamRecordDO::getTemplateName, pageReqVO.getTemplateName()) |
| | | .betweenIfPresent(MesProWorkOrderParamRecordDO::getCreateTime, pageReqVO.getCreateTime()) |
| | | .orderByDesc(MesProWorkOrderParamRecordDO::getId)); |
| | | } |
| | | |
| | | default List<MesProWorkOrderParamRecordDO> selectListByWorkOrderId(Long workOrderId) { |
| | | return selectList(new LambdaQueryWrapperX<MesProWorkOrderParamRecordDO>() |
| | | .eq(MesProWorkOrderParamRecordDO::getWorkOrderId, workOrderId) |
| | | .orderByDesc(MesProWorkOrderParamRecordDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | .orderByDesc(MesWmProductIssueLineDO::getId)); |
| | | } |
| | | |
| | | default List<MesWmProductIssueLineDO> selectListByTaskId(Long taskId) { |
| | | return selectList(MesWmProductIssueLineDO::getTaskId, taskId); |
| | | } |
| | | |
| | | default List<MesWmProductIssueLineDO> selectListByIssueId(Long issueId) { |
| | | return selectList(MesWmProductIssueLineDO::getIssueId, issueId); |
| | | } |
| | |
| | | .likeIfPresent(MesWmProductIssueDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesWmProductIssueDO::getWorkstationId, reqVO.getWorkstationId()) |
| | | .eqIfPresent(MesWmProductIssueDO::getWorkOrderId, reqVO.getWorkOrderId()) |
| | | .eqIfPresent(MesWmProductIssueDO::getTaskId, reqVO.getTaskId()) |
| | | .eqIfPresent(MesWmProductIssueDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(MesWmProductIssueDO::getIssueDate, reqVO.getIssueDate()) |
| | | .orderByDesc(MesWmProductIssueDO::getId)); |
| | |
| | | .likeIfPresent(MesWmReturnIssueDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesWmReturnIssueDO::getWorkstationId, reqVO.getWorkstationId()) |
| | | .eqIfPresent(MesWmReturnIssueDO::getWorkOrderId, reqVO.getWorkOrderId()) |
| | | .eqIfPresent(MesWmReturnIssueDO::getTaskId, reqVO.getTaskId()) |
| | | .eqIfPresent(MesWmReturnIssueDO::getType, reqVO.getType()) |
| | | .orderByDesc(MesWmReturnIssueDO::getId)); |
| | | } |
| | |
| | | ErrorCode PRO_WORK_ORDER_PRODUCT_MISMATCH = new ErrorCode(1_040_502_005, "å½å产åç©æä¸ç产工å产åä¸ä¸è´"); |
| | | ErrorCode PRO_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, "ç产工åBOMä¸åå¨"); |
| | | |
| | | // ========== MES ç产管ç-ç产工ååæ°è®°å½ï¼1-040-502-200ï¼ ========== |
| | | ErrorCode PRO_WORK_ORDER_PARAM_RECORD_NOT_EXISTS = new ErrorCode(1_040_502_200, "å·¥ååæ°è®°å½ä¸åå¨"); |
| | | ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL = new ErrorCode(1_040_502_201, "åæ°æ¨¡æ¿æ²¡ææç»ï¼æ æ³å建记å½"); |
| | | ErrorCode PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE = new ErrorCode(1_040_502_202, "åæ°æç»ä¸å±äºæé模æ¿"); |
| | | ErrorCode PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING = new ErrorCode(1_040_502_203, "å¿
å¡«åæ°ã{}ãæªå¡«å"); |
| | | ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NOT_CHANGE = new ErrorCode(1_040_502_204, "ä¸å
è®¸æ´æ¢åæ°æ¨¡æ¿ï¼è¯·å é¤åéæ°å建"); |
| | | |
| | | // ========== MES ç产管ç-ç产任å¡ï¼1-040-503-000ï¼ ========== |
| | | ErrorCode PRO_TASK_NOT_EXISTS = new ErrorCode(1_040_503_000, "ç产任å¡ä¸åå¨"); |
| | | ErrorCode PRO_TASK_ALREADY_FINISHED = new ErrorCode(1_040_503_001, "ç产任å¡å·²å®ææå·²åæ¶ï¼ä¸è½ç»§ç»æä½"); |
| | |
| | | ErrorCode WM_PRODUCT_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_708_201, "æ£è´§æç»çç©æä¸é¢æåè¡çç©æä¸ä¸è´"); |
| | | ErrorCode WM_PRODUCT_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_708_202, "æ£è´§æç»ä¸å±äºæå®ç颿åºåºå"); |
| | | ErrorCode WM_PRODUCT_ISSUE_NO_DETAIL = new ErrorCode(1_040_708_203, "颿åºåºåæ²¡ææ£è´§æç»ï¼æ æ³æ§è¡é¢åº"); |
| | | ErrorCode WM_PRODUCT_ISSUE_TASK_NOT_EXISTS = new ErrorCode(1_040_708_204, "ç产任å¡ä¸åå¨"); |
| | | |
| | | // ========== MES ä»åºç®¡ç-ç产å
¥åºåï¼1-040-709-000ï¼ ========== |
| | | ErrorCode WM_PRODUCT_PRODUCE_NOT_EXISTS = new ErrorCode(1_040_709_000, "ç产å
¥åºåä¸åå¨"); |
| | |
| | | */ |
| | | private void syncItemToMdm(MesMdItemDO item, MesMdItemSaveReqVO saveReqVO) { |
| | | // 1. è·åç©æç±»å对åºç itemType |
| | | Integer itemType = null; |
| | | Long itemType = null; |
| | | if (item.getItemTypeId() != null) { |
| | | MesMdItemTypeDO itemTypeDO = itemTypeService.getItemType(item.getItemTypeId()); |
| | | if (itemTypeDO != null) { |
| | | // MES: ITEM=ç©æ, PRODUCT=产å -> MDM: 1=åæ, 2=åæå, 3=æå, 4=è¾
æ |
| | | itemType = convertMesItemTypeToMdm(itemTypeDO.getItemOrProduct(), itemTypeDO.getName()); |
| | | // itemType = convertMesItemTypeToMdm(itemTypeDO.getItemOrProduct(), itemTypeDO.getName()); |
| | | itemType = itemTypeDO.getId(); |
| | | } |
| | | } |
| | | |
| | |
| | | * @return ç©æ |
| | | */ |
| | | MesMdmItemDO validateItemExists(Long id); |
| | | |
| | | MesMdmItemDO mesValidateItemExists(Long id); |
| | | /** |
| | | * æ ¡éªç©æåå¨ä¸å¯ç¨ |
| | | * |
| | |
| | | package cn.iocoder.yudao.module.mes.service.mdm; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.mdm.MesMdmItemMapper; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private MesMdmItemMapper mesMdmItemMapper; |
| | | @Autowired |
| | | private MesMdItemService mesMdItemService; |
| | | |
| | | @Override |
| | | public MesMdmItemDO getItem(Long id) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public MesMdmItemDO mesValidateItemExists(Long itemId) { |
| | | MesMdItemDO mesItem = mesMdItemService.getItem(itemId); |
| | | if (mesItem == null) { |
| | | throw exception(MD_ITEM_NOT_EXISTS); |
| | | } |
| | | MesMdmItemDO item = mesMdmItemMapper.selectById(mesItem.getMdmItemId()); |
| | | if (item == null) { |
| | | throw exception(MD_ITEM_NOT_EXISTS); |
| | | } |
| | | return item; |
| | | } |
| | | |
| | | @Override |
| | | public MesMdmItemDO validateItemExistsAndEnable(Long id) { |
| | | MesMdmItemDO item = validateItemExists(id); |
| | | if (item.getStatus() != null && item.getStatus() == 1) { |
| | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO; |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback.MesProFeedbackMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductBomService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | |
| | | private MesProRouteProcessService routeProcessService; |
| | | @Resource |
| | | private MesProRouteProductBomService routeProductBomService; |
| | | @Resource |
| | | private MesMdWorkstationService workstationService; |
| | | @Resource |
| | | @Lazy // é¿å
循ç¯ä¾èµ |
| | | private MesProTaskService taskService; |
| | |
| | | MesWmProductProduceDO produce = productProduceService.generateProductProduce(feedback, false); |
| | | productProduceService.finishProductProduce(produce.getId()); |
| | | updateTaskAndWorkOrderByFeedback(feedback); |
| | | } else { |
| | | // 4.3 éå
³é®å·¥åºï¼åªæ´æ°ä»»å¡çå·²ç产æ°éï¼å·¥å䏿´æ°ï¼å·¥ååªçå
³é®å·¥åºäº§åºï¼ |
| | | taskService.updateProducedQuantity(feedback.getTaskId(), |
| | | feedback.getFeedbackQuantity(), |
| | | ObjectUtil.defaultIfNull(feedback.getQualifiedQuantity(), BigDecimal.ZERO), |
| | | ObjectUtil.defaultIfNull(feedback.getUnqualifiedQuantity(), BigDecimal.ZERO)); |
| | | } |
| | | |
| | | // 5. éå
³é®å·¥åº / å
³é®éè´¨æ£å·¥åºï¼ç´æ¥å®æï¼æ¸
é¶ uncheckQuantity 鲿¢ !key+check çèæ°æ®ï¼ |
| | |
| | | /** |
| | | * æ ¡éªæ¥å·¥åçä¸å¡æ°æ®ï¼å建 & ä¿®æ¹å
±ç¨ï¼ |
| | | * |
| | | * <p>以ç产任å¡ä¸ºæ ¸å¿ï¼å端åªéä¼ taskIdï¼workOrderIdãrouteIdãprocessIdãitemIdãworkstationId |
| | | * ä»ä»»å¡èªå¨å¡«å
ï¼æ éå端éå¤ä¼ å
¥ã |
| | | * |
| | | * @param reqVO æ¥å·¥è¯·æ± |
| | | * @return å
³èççäº§ä»»å¡ |
| | | */ |
| | | private MesProTaskDO validateFeedbackData(MesProFeedbackSaveReqVO reqVO) { |
| | | // 1. æ ¡éªå·¥ä½ç«åå¨ |
| | | MesMdWorkstationDO workstation = workstationService.validateWorkstationExists(reqVO.getWorkstationId()); |
| | | if (ObjUtil.notEqual(workstation.getProcessId(), reqVO.getProcessId())) { |
| | | throw exception(PRO_WORKSTATION_PROCESS_MISMATCH); |
| | | } |
| | | // 1. æ ¡éªä»»å¡åå¨ä¸æªç»æ |
| | | MesProTaskDO task = taskService.validateTaskNotFinished(reqVO.getTaskId()); |
| | | |
| | | // 2.1 æ ¡éªå·¥èºè·¯çº¿ + å·¥åºé
ç½®ææ |
| | | // 2. ä»ä»»å¡èªå¨å¡«å
å
³èåæ®µï¼å端æ éä¼ å
¥ï¼å端ç»ä¸ä»ä»»å¡è·åï¼ |
| | | reqVO.setWorkOrderId(task.getWorkOrderId()); |
| | | reqVO.setRouteId(task.getRouteId()); |
| | | reqVO.setProcessId(task.getProcessId()); |
| | | reqVO.setItemId(task.getItemId()); |
| | | reqVO.setWorkstationId(task.getWorkstationId()); |
| | | |
| | | // 3. æ ¡éªå·¥èºè·¯çº¿ + å·¥åºé
ç½®ææ |
| | | MesProRouteProcessDO routeProcess = routeProcessService.getRouteProcessByRouteIdAndProcessId( |
| | | reqVO.getRouteId(), reqVO.getProcessId()); |
| | | task.getRouteId(), task.getProcessId()); |
| | | if (routeProcess == null) { |
| | | throw exception(PRO_FEEDBACK_ROUTE_PROCESS_INVALID); |
| | | } |
| | | // 2.2 æ ¡éªæ°é |
| | | // 4.1 æ ¡éªæ°é |
| | | boolean checkFlag = Boolean.TRUE.equals(routeProcess.getCheckFlag()); |
| | | if (checkFlag) { |
| | | // éè¦æ£éªï¼åªéå¡«æ¥å·¥æ°éï¼ä¸å¿
é¡» > 0 |
| | |
| | | } |
| | | } |
| | | |
| | | // 3. æ ¡éªå·¥å已确认 |
| | | MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); |
| | | if (ObjUtil.notEqual(workOrder.getProductId(), reqVO.getItemId())) { |
| | | throw exception(PRO_WORK_ORDER_PRODUCT_MISMATCH); |
| | | } |
| | | |
| | | // 4. æ ¡éªä»»å¡åå¨ä¸æªç»æï¼å·²å®æ/已忶ï¼ï¼å¹¶è¿åä»»å¡ç¨äºåä½ itemId |
| | | MesProTaskDO task = taskService.validateTaskNotFinished(reqVO.getTaskId()); |
| | | validateTaskRelation(task, workstation, workOrder, reqVO); |
| | | return task; |
| | | } |
| | | |
| | | private void validateTaskRelation(MesProTaskDO task, MesMdWorkstationDO workstation, |
| | | MesProWorkOrderDO workOrder, MesProFeedbackSaveReqVO reqVO) { |
| | | if (ObjUtil.notEqual(task.getWorkOrderId(), workOrder.getId())) { |
| | | throw exception(PRO_TASK_WORK_ORDER_MISMATCH); |
| | | } |
| | | if (ObjUtil.notEqual(task.getWorkstationId(), workstation.getId())) { |
| | | throw exception(PRO_TASK_WORKSTATION_MISMATCH); |
| | | } |
| | | if (ObjUtil.notEqual(task.getRouteId(), reqVO.getRouteId()) |
| | | || ObjUtil.notEqual(task.getProcessId(), reqVO.getProcessId())) { |
| | | throw exception(PRO_TASK_ROUTE_PROCESS_MISMATCH); |
| | | } |
| | | if (ObjUtil.notEqual(task.getItemId(), reqVO.getItemId())) { |
| | | throw exception(PRO_TASK_ITEM_MISMATCH); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | */ |
| | | Long getTaskIssueCountByUnitMeasureId(Long unitMeasureId); |
| | | |
| | | /** |
| | | * æ ¹æ®æ¥æºåæ®å 餿æè®°å½ |
| | | * |
| | | * @param sourceDocType æ¥æºåæ®ç±»å |
| | | * @param sourceDocId æ¥æºåæ®ç¼å· |
| | | */ |
| | | void deleteTaskIssueBySourceDoc(String sourceDocType, Long sourceDocId); |
| | | |
| | | } |
| | |
| | | return taskIssueMapper.selectCountByUnitMeasureId(unitMeasureId); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteTaskIssueBySourceDoc(String sourceDocType, Long sourceDocId) { |
| | | taskIssueMapper.deleteBySourceDoc(sourceDocType, sourceDocId); |
| | | } |
| | | |
| | | private void validateTaskIssueExists(Long id) { |
| | | if (taskIssueMapper.selectById(id) == null) { |
| | | throw exception(PRO_TASK_ISSUE_NOT_EXISTS); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.pro.workorder; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½ Service æ¥å£ |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | public interface MesProWorkOrderParamRecordService { |
| | | |
| | | /** |
| | | * å建工ååæ°è®°å½ |
| | | * |
| | | * @param workOrderId å·¥åç¼å· |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return è®°å½ç¼å· |
| | | */ |
| | | Long createParamRecord(Long workOrderId, @Valid MesProWorkOrderParamRecordSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°å·¥ååæ°è®°å½ï¼ä»
æ´æ°å¡«åå¼ï¼ä¸æ¢æ¨¡æ¿ï¼ |
| | | * |
| | | * @param updateReqVO æ´æ°ä¿¡æ¯ |
| | | */ |
| | | void updateParamRecord(@Valid MesProWorkOrderParamRecordSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å é¤å·¥ååæ°è®°å½ |
| | | * |
| | | * @param id è®°å½ç¼å· |
| | | */ |
| | | void deleteParamRecord(Long id); |
| | | |
| | | /** |
| | | * è·å¾å·¥ååæ°è®°å½ |
| | | * |
| | | * @param id è®°å½ç¼å· |
| | | * @return åæ°è®°å½ |
| | | */ |
| | | MesProWorkOrderParamRecordDO getParamRecord(Long id); |
| | | |
| | | /** |
| | | * è·å¾å·¥ååæ°è®°å½å页 |
| | | * |
| | | * @param workOrderId å·¥åç¼å· |
| | | * @param pageReqVO å页æ¥è¯¢ |
| | | * @return åæ°è®°å½å页 |
| | | */ |
| | | PageResult<MesProWorkOrderParamRecordDO> getParamRecordPageByWorkOrderId(Long taskId, |
| | | MesProWorkOrderParamRecordPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * è·å¾å·¥ååæ°è®°å½å表 |
| | | * |
| | | * @param workOrderId å·¥åç¼å· |
| | | * @return åæ°è®°å½å表 |
| | | */ |
| | | List<MesProWorkOrderParamRecordDO> getParamRecordListByWorkOrderId(Long workOrderId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.pro.workorder; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderParamRecordDetailMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderParamRecordMapper; |
| | | import cn.iocoder.yudao.module.mes.service.pd.processparamtemplate.MesPdProcessParamTemplateService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * MES ç产工ååæ°è®°å½ Service å®ç°ç±» |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesProWorkOrderParamRecordServiceImpl implements MesProWorkOrderParamRecordService { |
| | | |
| | | @Resource |
| | | private MesProWorkOrderParamRecordMapper paramRecordMapper; |
| | | @Resource |
| | | private MesProWorkOrderParamRecordDetailMapper paramRecordDetailMapper; |
| | | @Resource |
| | | private MesProWorkOrderService workOrderService; |
| | | @Resource |
| | | private MesPdProcessParamTemplateService templateService; |
| | | @Autowired |
| | | private MesProTaskService mesProTaskService; |
| | | @Autowired |
| | | private MesProWorkOrderService mesProWorkOrderService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createParamRecord(Long taskId, MesProWorkOrderParamRecordSaveReqVO createReqVO) { |
| | | // 1. æ ¡éªå·¥ååå¨ |
| | | |
| | | // 2. æ ¡éªæ¨¡æ¿åå¨ï¼è·å模æ¿ä¿¡æ¯ + æç»å表 |
| | | MesPdProcessParamTemplateDO template = templateService.validateProcessParamTemplateExists(createReqVO.getTemplateId()); |
| | | List<MesPdProcessParamTemplateDetailDO> templateDetails = |
| | | templateService.getProcessParamTemplateDetailListByTemplateId(createReqVO.getTemplateId()); |
| | | if (CollUtil.isEmpty(templateDetails)) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL); |
| | | } |
| | | |
| | | // 3. æå»ºæç» templateDetailId â templateDetail çæ å°ï¼ç¨äºå¿«ç
§ |
| | | Map<Long, MesPdProcessParamTemplateDetailDO> detailMap = templateDetails.stream() |
| | | .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d)); |
| | | |
| | | // 4. æ ¡éªå¿
å¡«åæ°é½æå¼ |
| | | for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : createReqVO.getDetails()) { |
| | | MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId()); |
| | | if (templateDetail == null) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE); |
| | | } |
| | | if (Boolean.TRUE.equals(templateDetail.getRequired()) |
| | | && (item.getParamValue() == null || item.getParamValue().isBlank())) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName()); |
| | | } |
| | | } |
| | | MesProTaskDO task = mesProTaskService.getTask(taskId); |
| | | MesProWorkOrderDO workOrder = mesProWorkOrderService.getWorkOrder(task.getWorkOrderId()); |
| | | // 5. æå
¥ä¸»è¡¨ï¼å¿«ç
§æ¨¡æ¿ç¼ç ãåç§°ï¼ |
| | | MesProWorkOrderParamRecordDO record = MesProWorkOrderParamRecordDO.builder() |
| | | .workOrderId(workOrder.getId()) |
| | | .taskId(taskId) |
| | | .templateId(template.getId()) |
| | | .templateCode(template.getTemplateCode()) |
| | | .templateName(template.getTemplateName()) |
| | | .recordNo(createReqVO.getRecordNo()) |
| | | .remark(createReqVO.getRemark()) |
| | | .build(); |
| | | paramRecordMapper.insert(record); |
| | | |
| | | // 6. æå
¥æç»è¡¨ï¼å¿«ç
§åæ°å®ä¹ + ç¨æ·å¡«åå¼ï¼ |
| | | List<MesProWorkOrderParamRecordDetailDO> detailDOs = createReqVO.getDetails().stream() |
| | | .map(item -> { |
| | | MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId()); |
| | | return MesProWorkOrderParamRecordDetailDO.builder() |
| | | .recordId(record.getId()) |
| | | .templateDetailId(templateDetail.getId()) |
| | | .paramCode(templateDetail.getParamCode()) |
| | | .paramName(templateDetail.getParamName()) |
| | | .paramType(templateDetail.getParamType()) |
| | | .unitMeasureId(templateDetail.getUnitMeasureId()) |
| | | .paramValue(item.getParamValue()) |
| | | .build(); |
| | | }).toList(); |
| | | paramRecordDetailMapper.insertBatch(detailDOs); |
| | | |
| | | return record.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateParamRecord(MesProWorkOrderParamRecordSaveReqVO updateReqVO) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesProWorkOrderParamRecordDO record = validateParamRecordExists(updateReqVO.getId()); |
| | | |
| | | // 2. æ ¡éªæ¨¡æ¿æªåæ´ï¼ä¸å
è®¸æ¢æ¨¡æ¿ï¼åªè½ä¿®æ¹å¡«åå¼ï¼ |
| | | if (!record.getTemplateId().equals(updateReqVO.getTemplateId())) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NOT_CHANGE); |
| | | } |
| | | |
| | | // 3. è·åæ¨¡æ¿æç»ï¼æ ¡éªå¿
å¡«åæ° |
| | | List<MesPdProcessParamTemplateDetailDO> templateDetails = |
| | | templateService.getProcessParamTemplateDetailListByTemplateId(record.getTemplateId()); |
| | | Map<Long, MesPdProcessParamTemplateDetailDO> detailMap = templateDetails.stream() |
| | | .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d)); |
| | | |
| | | for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : updateReqVO.getDetails()) { |
| | | MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId()); |
| | | if (templateDetail == null) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE); |
| | | } |
| | | if (Boolean.TRUE.equals(templateDetail.getRequired()) |
| | | && (item.getParamValue() == null || item.getParamValue().isBlank())) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName()); |
| | | } |
| | | } |
| | | |
| | | // 4. æ´æ°ä¸»è¡¨ |
| | | MesProWorkOrderParamRecordDO updateObj = new MesProWorkOrderParamRecordDO(); |
| | | updateObj.setId(updateReqVO.getId()); |
| | | updateObj.setRecordNo(updateReqVO.getRecordNo()); |
| | | updateObj.setRemark(updateReqVO.getRemark()); |
| | | paramRecordMapper.updateById(updateObj); |
| | | |
| | | // 5. å 餿§æç» + æå
¥æ°æç» |
| | | paramRecordDetailMapper.deleteByRecordId(record.getId()); |
| | | List<MesProWorkOrderParamRecordDetailDO> detailDOs = updateReqVO.getDetails().stream() |
| | | .map(item -> { |
| | | MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId()); |
| | | return MesProWorkOrderParamRecordDetailDO.builder() |
| | | .recordId(record.getId()) |
| | | .templateDetailId(templateDetail.getId()) |
| | | .paramCode(templateDetail.getParamCode()) |
| | | .paramName(templateDetail.getParamName()) |
| | | .paramType(templateDetail.getParamType()) |
| | | .unitMeasureId(templateDetail.getUnitMeasureId()) |
| | | .paramValue(item.getParamValue()) |
| | | .build(); |
| | | }).toList(); |
| | | paramRecordDetailMapper.insertBatch(detailDOs); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteParamRecord(Long id) { |
| | | // 1. æ ¡éªåå¨ |
| | | validateParamRecordExists(id); |
| | | // 2. å é¤ä¸»è¡¨ + æç» |
| | | paramRecordMapper.deleteById(id); |
| | | paramRecordDetailMapper.deleteByRecordId(id); |
| | | } |
| | | |
| | | @Override |
| | | public MesProWorkOrderParamRecordDO getParamRecord(Long id) { |
| | | return paramRecordMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<MesProWorkOrderParamRecordDO> getParamRecordPageByWorkOrderId(Long taskId, |
| | | MesProWorkOrderParamRecordPageReqVO pageReqVO) { |
| | | return paramRecordMapper.selectPageByWorkOrderId(taskId, pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public List<MesProWorkOrderParamRecordDO> getParamRecordListByWorkOrderId(Long workOrderId) { |
| | | return paramRecordMapper.selectListByWorkOrderId(workOrderId); |
| | | } |
| | | |
| | | // ==================== æ ¡éªæ¹æ³ ==================== |
| | | |
| | | private MesProWorkOrderParamRecordDO validateParamRecordExists(Long id) { |
| | | MesProWorkOrderParamRecordDO record = paramRecordMapper.selectById(id); |
| | | if (record == null) { |
| | | throw exception(PRO_WORK_ORDER_PARAM_RECORD_NOT_EXISTS); |
| | | } |
| | | return record; |
| | | } |
| | | |
| | | } |
| | |
| | | // æ ¡éªç©æå¨å·¥å BOM ä¸ |
| | | validateItemInWorkOrderBom(reqVO.getIssueId(), reqVO.getItemId()); |
| | | // æ ¡éªç©æåå¨ |
| | | mdmItemService.validateItemExistsAndEnable(reqVO.getItemId()); |
| | | mdmItemService.mesValidateItemExists(reqVO.getItemId()); |
| | | } |
| | | |
| | | private void validateItemInWorkOrderBom(Long issueId, Long itemId) { |
| | |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssuePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssueSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskIssueDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.task.MesProTaskIssueMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.productissue.MesWmProductIssueMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductIssueStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockReserveBizTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskIssueService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.stockreserve.MesWmStockReserveService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | |
| | | @Resource |
| | | private MesProWorkOrderService workOrderService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | @Resource |
| | | private MesProTaskIssueService taskIssueService; |
| | | @Resource |
| | | private MesProTaskIssueMapper taskIssueMapper; |
| | | @Resource |
| | | private MesMdItemService mdmItemService; |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | | @Resource |
| | | private MesWmWarehouseService warehouseService; |
| | |
| | | // 1. æ ¡éªå
³èæ°æ® |
| | | validateProductIssueSaveData(createReqVO); |
| | | |
| | | // 2. æå
¥ä¸»è¡¨ |
| | | // 2. ä» task èªå¨å¸¦å
¥ workOrderId å workstationId |
| | | MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId()); |
| | | if (createReqVO.getWorkOrderId() == null) { |
| | | createReqVO.setWorkOrderId(task.getWorkOrderId()); |
| | | } |
| | | if (createReqVO.getWorkstationId() == null) { |
| | | createReqVO.setWorkstationId(task.getWorkstationId()); |
| | | } |
| | | |
| | | // 3. æå
¥ä¸»è¡¨ |
| | | MesWmProductIssueDO issue = BeanUtils.toBean(createReqVO, MesWmProductIssueDO.class); |
| | | issue.setStatus(MesWmProductIssueStatusEnum.PREPARE.getStatus()); |
| | | issueMapper.insert(issue); |
| | |
| | | // 1.2 æ ¡éªå
³èæ°æ® |
| | | validateProductIssueSaveData(updateReqVO); |
| | | |
| | | // 2. æ´æ°ä¸»è¡¨ |
| | | // 2. ä» task èªå¨å¸¦å
¥ workOrderId å workstationId |
| | | MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId()); |
| | | if (updateReqVO.getWorkOrderId() == null) { |
| | | updateReqVO.setWorkOrderId(task.getWorkOrderId()); |
| | | } |
| | | if (updateReqVO.getWorkstationId() == null) { |
| | | updateReqVO.setWorkstationId(task.getWorkstationId()); |
| | | } |
| | | |
| | | // 3. æ´æ°ä¸»è¡¨ |
| | | MesWmProductIssueDO updateObj = BeanUtils.toBean(updateReqVO, MesWmProductIssueDO.class); |
| | | issueMapper.updateById(updateObj); |
| | | } |
| | |
| | | // 3. éåæææç»ï¼å建åºåäºå¡ï¼æ£ååºå + è®°å½æµæ°´ï¼ |
| | | createTransactionList(issue); |
| | | |
| | | // 4. æ´æ°åºåºåç¶æ + é¢ææ¥æ |
| | | // 4. èªå¨åå»ºä»»å¡ææè®°å½ |
| | | createTaskIssueRecords(issue); |
| | | |
| | | // 5. æ´æ°åºåºåç¶æ + é¢ææ¥æ |
| | | issueMapper.updateById(new MesWmProductIssueDO() |
| | | .setId(id).setStatus(MesWmProductIssueStatusEnum.FINISHED.getStatus()) |
| | | .setIssueDate(LocalDateTime.now())); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 颿åºåºå®ææ¶ï¼èªå¨åå»ºä»»å¡ææè®°å½ |
| | | * æè¡éåï¼æ¯è¡åå»ºä¸æ¡ task_issue è®°å½ |
| | | */ |
| | | private void createTaskIssueRecords(MesWmProductIssueDO issue) { |
| | | List<MesWmProductIssueLineDO> lines = issueLineService.getProductIssueLineListByIssueId(issue.getId()); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | return; |
| | | } |
| | | |
| | | // æ¹éæ¥è¯¢ç©æä¿¡æ¯ï¼è·å unitMeasureIdï¼ |
| | | Map<Long, MesMdItemDO> itemMap = mdmItemService.getItemMap( |
| | | CollectionUtils.convertSet(lines, MesWmProductIssueLineDO::getItemId)); |
| | | |
| | | // è·åæç»å表ï¼ç¨äºæå batchCode |
| | | List<MesWmProductIssueDetailDO> details = issueDetailService.getProductIssueDetailListByIssueId(issue.getId()); |
| | | Map<Long, List<MesWmProductIssueDetailDO>> detailMapByLineId = CollectionUtils.convertMultiMap( |
| | | details, MesWmProductIssueDetailDO::getLineId); |
| | | |
| | | for (MesWmProductIssueLineDO line : lines) { |
| | | // è¡ç taskId ä¼å
ï¼å¦åå主表ç taskId |
| | | Long taskId = line.getTaskId() != null ? line.getTaskId() : issue.getTaskId(); |
| | | if (taskId == null) { |
| | | continue; |
| | | } |
| | | |
| | | // è·åç©æåä½ |
| | | MesMdItemDO item = itemMap.get(line.getItemId()); |
| | | Long unitMeasureId = item != null ? item.getUnitMeasureId() : null; |
| | | |
| | | // è·åæ¹æ¬¡å·ï¼å该è¡ç¬¬ä¸ä¸ªæç»ç batchCode |
| | | String batchCode = null; |
| | | List<MesWmProductIssueDetailDO> lineDetails = detailMapByLineId.get(line.getId()); |
| | | if (CollUtil.isNotEmpty(lineDetails)) { |
| | | MesWmProductIssueDetailDO firstDetail = lineDetails.get(0); |
| | | batchCode = firstDetail.getBatchCode(); |
| | | } |
| | | |
| | | // åå»ºä»»å¡ææè®°å½ |
| | | MesProTaskIssueDO taskIssue = MesProTaskIssueDO.builder() |
| | | .taskId(taskId) |
| | | .workOrderId(issue.getWorkOrderId()) |
| | | .workstationId(issue.getWorkstationId()) |
| | | .sourceDocType("PRODUCT_ISSUE") |
| | | .sourceDocId(issue.getId()) |
| | | .sourceLineId(line.getId()) |
| | | .sourceDocCode(issue.getCode()) |
| | | .batchCode(batchCode) |
| | | .itemId(line.getItemId()) |
| | | .unitMeasureId(unitMeasureId) |
| | | .issuedQuantity(line.getQuantity()) |
| | | .availableQuantity(line.getQuantity()) // åå§å
¨å¯ç¨ |
| | | .usedQuantity(BigDecimal.ZERO) |
| | | .build(); |
| | | taskIssueMapper.insert(taskIssue); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void cancelProductIssue(Long id) { |
| | |
| | | |
| | | // éæ¾åºåå ç¨ |
| | | stockReserveService.releaseReserve(MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(), id); |
| | | |
| | | // å é¤éè¿è¯¥é¢æåå建ç任塿æè®°å½ |
| | | taskIssueService.deleteTaskIssueBySourceDoc("PRODUCT_ISSUE", id); |
| | | |
| | | // åæ¶ |
| | | issueMapper.updateById(new MesWmProductIssueDO() |
| | |
| | | */ |
| | | private void validateProductIssueSaveData(MesWmProductIssueSaveReqVO reqVO) { |
| | | validateCodeUnique(reqVO.getId(), reqVO.getCode()); |
| | | workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); |
| | | // æ ¡éª task åå¨ |
| | | MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId()); |
| | | // æ ¡éª task å
³èçå·¥å已确认 |
| | | Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId(); |
| | | if (workOrderId != null) { |
| | | workOrderService.validateWorkOrderConfirmed(workOrderId); |
| | | } |
| | | if (reqVO.getWorkstationId() != null) { |
| | | workstationService.validateWorkstationExistsAndEnable(reqVO.getWorkstationId()); |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssuePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskIssueDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.task.MesProTaskIssueMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | |
| | | @Resource |
| | | private MesProWorkOrderService workOrderService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | @Resource |
| | | private MesProTaskIssueMapper taskIssueMapper; |
| | | @Resource |
| | | private MesMdmItemService mdmItemService; |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | |
| | | // 1. æ ¡éªå
³èæ°æ® |
| | | validateReturnIssueSaveData(createReqVO); |
| | | |
| | | // 2. æå
¥ä¸»è¡¨ |
| | | // 2. ä» task èªå¨å¸¦å
¥ workOrderId å workstationId |
| | | MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId()); |
| | | if (createReqVO.getWorkOrderId() == null) { |
| | | createReqVO.setWorkOrderId(task.getWorkOrderId()); |
| | | } |
| | | if (createReqVO.getWorkstationId() == null) { |
| | | createReqVO.setWorkstationId(task.getWorkstationId()); |
| | | } |
| | | |
| | | // 3. æå
¥ä¸»è¡¨ |
| | | MesWmReturnIssueDO issue = BeanUtils.toBean(createReqVO, MesWmReturnIssueDO.class); |
| | | issue.setStatus(MesWmReturnIssueStatusEnum.PREPARE.getStatus()); |
| | | issueMapper.insert(issue); |
| | |
| | | // 1.2 æ ¡éªå
³èæ°æ® |
| | | validateReturnIssueSaveData(updateReqVO); |
| | | |
| | | // 2. æ´æ°ä¸»è¡¨ |
| | | // 2. ä» task èªå¨å¸¦å
¥ workOrderId å workstationId |
| | | MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId()); |
| | | if (updateReqVO.getWorkOrderId() == null) { |
| | | updateReqVO.setWorkOrderId(task.getWorkOrderId()); |
| | | } |
| | | if (updateReqVO.getWorkstationId() == null) { |
| | | updateReqVO.setWorkstationId(task.getWorkstationId()); |
| | | } |
| | | |
| | | // 3. æ´æ°ä¸»è¡¨ |
| | | MesWmReturnIssueDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnIssueDO.class); |
| | | issueMapper.updateById(updateObj); |
| | | |
| | | // 3. éæç±»ååæ´æ¶ï¼å·æ°ææè¡çè´¨éç¶æ |
| | | // 4. éæç±»ååæ´æ¶ï¼å·æ°ææè¡çè´¨éç¶æ |
| | | if (ObjUtil.notEqual(oldIssue.getType(), updateReqVO.getType())) { |
| | | issueLineService.updateReturnIssueQualityStatusByIssueId(updateReqVO.getId(), updateReqVO.getType()); |
| | | } |
| | |
| | | // 2. éåæææç»ï¼å建åºåäºå¡ï¼å¢å åºå + è®°å½æµæ°´ï¼ |
| | | createTransactionList(issue); |
| | | |
| | | // 3. æ´æ°éæåç¶æ |
| | | // 3. æ£å任塿æè®°å½çå¯ç¨é |
| | | updateTaskIssueOnReturn(issue); |
| | | |
| | | // 4. æ´æ°éæåç¶æ |
| | | issueMapper.updateById(new MesWmReturnIssueDO() |
| | | .setId(id).setStatus(MesWmReturnIssueStatusEnum.FINISHED.getStatus())); |
| | | } |
| | |
| | | .setBizType(MesBizTypeConstants.WM_RETURN_ISSUE).setBizId(issue.getId()) |
| | | .setBizCode(issue.getCode()).setBizLineId(detail.getLineId()) |
| | | .setRelatedTransactionId(outTransactionId)); // å
³èåºåºäºå¡ |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * éæå®ææ¶ï¼æ£å任塿æè®°å½çå¯ç¨é |
| | | * æè¡éåï¼æ¾å°å¯¹åºç task_issue è®°å½ï¼æ£å availableQuantityãissuedQuantity |
| | | */ |
| | | private void updateTaskIssueOnReturn(MesWmReturnIssueDO issue) { |
| | | List<MesWmReturnIssueLineDO> lines = issueLineService.getReturnIssueLineListByIssueId(issue.getId()); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | return; |
| | | } |
| | | for (MesWmReturnIssueLineDO line : lines) { |
| | | Long taskId = line.getTaskId() != null ? line.getTaskId() : issue.getTaskId(); |
| | | if (taskId == null) { |
| | | continue; |
| | | } |
| | | // æ¥æ¾è¯¥ task + item + æ¥æºä¸ºé¢æåºåºå çææè®°å½ |
| | | List<MesProTaskIssueDO> taskIssues = taskIssueMapper.selectListByTaskId(taskId); |
| | | MesProTaskIssueDO matchedIssue = CollUtil.findOne(taskIssues, |
| | | ti -> ti.getItemId().equals(line.getItemId()) |
| | | && "PRODUCT_ISSUE".equals(ti.getSourceDocType())); |
| | | if (matchedIssue != null) { |
| | | // æ£åææéåå¯ç¨é |
| | | BigDecimal newIssuedQty = matchedIssue.getIssuedQuantity().subtract(line.getQuantity()); |
| | | BigDecimal newAvailableQty = matchedIssue.getAvailableQuantity().subtract(line.getQuantity()); |
| | | matchedIssue.setIssuedQuantity(newIssuedQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newIssuedQty); |
| | | matchedIssue.setAvailableQuantity(newAvailableQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newAvailableQty); |
| | | taskIssueMapper.updateById(matchedIssue); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | private void validateReturnIssueSaveData(MesWmReturnIssueSaveReqVO reqVO) { |
| | | validateCodeUnique(reqVO.getId(), reqVO.getCode()); |
| | | workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); |
| | | // æ ¡éª task åå¨ |
| | | MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId()); |
| | | // æ ¡éª task å
³èçå·¥å已确认 |
| | | Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId(); |
| | | if (workOrderId != null) { |
| | | workOrderService.validateWorkOrderConfirmed(workOrderId); |
| | | } |
| | | if (reqVO.getWorkstationId() != null) { |
| | | workstationService.validateWorkstationExistsAndEnable(reqVO.getWorkstationId()); |
| | | } |