质量管理模块:指标按产品/类别/工序维护与绑定、不合格处理方式、检验提交入库判定
- 新增 QualityMetricController:按产品+检验类别+工序维护检测指标,支持标准绑定
- 指标查询按 inspectType/process 过滤,原材料/过程/出厂指标隔离
- 不合格管理新增处理方式(返工/报废/让步接收)字段及字典脚本
- 检验提交:仅合格入库,缺少采购单/产品信息时跳过入库不报错
- 补充演示数据与单元测试
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- éèå¹¶åç¨âå·¥åºç»´æ¤âèåï¼MySQLï¼å¯é夿§è¡ï¼ã |
| | | -- å·¥åºæ°æ®å /productProcess/list æ¥å£ç»§ç»ä¿çï¼ä¾è¿ç¨æ£éªåææ ç»å®éæ©å·¥åºã |
| | | |
| | | UPDATE sys_menu |
| | | SET visible = '1', |
| | | status = '1', |
| | | update_by = 'admin', |
| | | update_time = NOW(), |
| | | remark = CONCAT(IFNULL(remark, ''), IF(IFNULL(remark, '') = '', '', 'ï¼'), '已忶ç¬ç«å·¥åºç»´æ¤èå') |
| | | WHERE menu_name = 'å·¥åºç»´æ¤' |
| | | AND (visible <> '1' OR status <> '1'); |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- è´¨éç®¡çæ¼ç¤ºæ°æ®ï¼MySQL 5.7+/8.0ï¼å¯é夿§è¡ï¼ |
| | | -- è¦çï¼ææ ç»´æ¤ãåæææ£éªãè¿ç¨æ£éªãåºåæ£éªãä¸åæ ¼ç®¡çã |
| | | -- æ§è¡å请å
æ§è¡ 20261029_quality_unqualified_deal_type.sqlã |
| | | -- é»è®¤ä½¿ç¨ admin ç¨æ·æå±ç§æ·ï¼å¦ä¸åå¨ adminï¼åä½¿ç¨æå°ç§æ· IDï¼æååéå° 0ã |
| | | |
| | | SET @demo_tenant_id = COALESCE( |
| | | (SELECT tenant_id FROM sys_user WHERE user_name = 'admin' LIMIT 1), |
| | | (SELECT MIN(tenant_id) FROM sys_user WHERE tenant_id IS NOT NULL), |
| | | 0 |
| | | ); |
| | | |
| | | -- ä¸ãåºç¡æ¼ç¤ºäº§ååå·¥åº |
| | | INSERT INTO product (parent_id, product_name, tenant_id) |
| | | SELECT NULL, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM product WHERE product_name = 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO product (parent_id, product_name, tenant_id) |
| | | SELECT NULL, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM product WHERE product_name = 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO product (parent_id, product_name, tenant_id) |
| | | SELECT NULL, 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼', @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM product WHERE product_name = 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO product_process (name, no, remark, create_time, update_time, tenant_id) |
| | | SELECT 'ç²¾å å·¥ï¼æ¼ç¤ºï¼', 'DEMO-P-001', 'è´¨éç®¡çæ¼ç¤ºå·¥åº', NOW(), NOW(), @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM product_process WHERE no = 'DEMO-P-001' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | SET @raw_product_id = ( |
| | | SELECT id FROM product WHERE product_name = 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @process_product_id = ( |
| | | SELECT id FROM product WHERE product_name = 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @final_product_id = ( |
| | | SELECT id FROM product WHERE product_name = 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @demo_process_id = ( |
| | | SELECT id FROM product_process WHERE no = 'DEMO-P-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | |
| | | -- äºãä¸ç±»æ£éªæ å |
| | | INSERT INTO quality_test_standard |
| | | (standard_no, standard_name, remark, create_time, create_user, update_time, update_user, |
| | | tenant_id, state, inspect_type, process_id) |
| | | SELECT 'QM-DEMO-RAW-001', 'å·¥ä¸éæ¿æ¥ææ£éªæ å', 'æ¼ç¤ºæ°æ®', NOW(), 1, NOW(), 1, |
| | | @demo_tenant_id, '0', 0, NULL |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-RAW-001' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard |
| | | (standard_no, standard_name, remark, create_time, create_user, update_time, update_user, |
| | | tenant_id, state, inspect_type, process_id) |
| | | SELECT 'QM-DEMO-PROCESS-001', 'ç²¾å¯è½´æ¿ç²¾å å·¥æ£éªæ å', 'æ¼ç¤ºæ°æ®', NOW(), 1, NOW(), 1, |
| | | @demo_tenant_id, '0', 1, @demo_process_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-PROCESS-001' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard |
| | | (standard_no, standard_name, remark, create_time, create_user, update_time, update_user, |
| | | tenant_id, state, inspect_type, process_id) |
| | | SELECT 'QM-DEMO-FINAL-001', 'æ§å¶å¨æ»æåºåæ£éªæ å', 'æ¼ç¤ºæ°æ®', NOW(), 1, NOW(), 1, |
| | | @demo_tenant_id, '0', 2, NULL |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-FINAL-001' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | SET @raw_standard_id = ( |
| | | SELECT id FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-RAW-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @process_standard_id = ( |
| | | SELECT id FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-PROCESS-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @final_standard_id = ( |
| | | SELECT id FROM quality_test_standard |
| | | WHERE standard_no = 'QM-DEMO-FINAL-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | |
| | | -- ä¸ãæ åææ åæ° |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT 'å度', 'mm', '2.00±0.10', '1.95~2.05', '2.00', NOW(), 1, NOW(), 1, @demo_tenant_id, @raw_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @raw_standard_id AND parameter_item = 'å度' |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT '表é¢è´¨é', '/', 'æ åä¼¤ãæ æ°§åæ', 'æ å¯è§ç¼ºé·', 'æ£å¸¸', NOW(), 1, NOW(), 1, @demo_tenant_id, @raw_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @raw_standard_id AND parameter_item = '表é¢è´¨é' |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT 'å¤å¾', 'mm', '20.00±0.05', '19.98~20.02', '20.00', NOW(), 1, NOW(), 1, @demo_tenant_id, @process_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @process_standard_id AND parameter_item = 'å¤å¾' |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT 'å度', 'mm', 'â¤0.02', 'â¤0.015', '0.01', NOW(), 1, NOW(), 1, @demo_tenant_id, @process_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @process_standard_id AND parameter_item = 'å度' |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT 'ç»ç¼çµé»', 'MΩ', 'â¥100', 'â¥120', '150', NOW(), 1, NOW(), 1, @demo_tenant_id, @final_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @final_standard_id AND parameter_item = 'ç»ç¼çµé»' |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_param |
| | | (parameter_item, unit, standard_value, control_value, default_value, |
| | | create_time, create_user, update_time, update_user, tenant_id, test_standard_id) |
| | | SELECT 'åè½æµè¯', '/', 'å
¨é¨åè½éè¿', 'è¿ç»è¿è¡30åéæ å¼å¸¸', 'éè¿', NOW(), 1, NOW(), 1, @demo_tenant_id, @final_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_param |
| | | WHERE test_standard_id = @final_standard_id AND parameter_item = 'åè½æµè¯' |
| | | ); |
| | | |
| | | -- åã产å䏿 åç»å® |
| | | INSERT INTO quality_test_standard_binding |
| | | (product_id, test_standard_id, create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT @raw_product_id, @raw_standard_id, NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_binding |
| | | WHERE product_id = @raw_product_id AND test_standard_id = @raw_standard_id |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_binding |
| | | (product_id, test_standard_id, create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT @process_product_id, @process_standard_id, NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_binding |
| | | WHERE product_id = @process_product_id AND test_standard_id = @process_standard_id |
| | | ); |
| | | |
| | | INSERT INTO quality_test_standard_binding |
| | | (product_id, test_standard_id, create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT @final_product_id, @final_standard_id, NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_test_standard_binding |
| | | WHERE product_id = @final_product_id AND test_standard_id = @final_standard_id |
| | | ); |
| | | |
| | | -- äºãåææãè¿ç¨ãåºåæ£éªè®°å½ï¼æ¯ç±»å
å«åæ ¼ä¸ä¸åæ ¼ï¼ |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 0, DATE_SUB(CURDATE(), INTERVAL 5 DAY), 'åä¸é屿ææéå
¬å¸', NULL, NULL, 'å¼ è´¨æ£', |
| | | @raw_product_id, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', 'AL-2.0', 'å¼ ', 120, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, NULL, @raw_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 0 AND product_id = @raw_product_id AND check_result = 'åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 0, DATE_SUB(CURDATE(), INTERVAL 4 DAY), 'åæ¹è½»åéæéå
¬å¸', NULL, NULL, 'æè´¨æ£', |
| | | @raw_product_id, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', 'AL-2.0', 'å¼ ', 80, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'ä¸åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, 'å度åèï¼è¾¹ç¼åå¨å伤', @raw_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 0 AND product_id = @raw_product_id AND check_result = 'ä¸åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 1, DATE_SUB(CURDATE(), INTERVAL 3 DAY), NULL, 'å
é¨ç产', 'ç²¾å å·¥ï¼æ¼ç¤ºï¼', 'çè´¨æ£', |
| | | @process_product_id, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', 'BR-6204', 'å¥', 300, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, NULL, @process_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 1 AND product_id = @process_product_id AND check_result = 'åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 1, DATE_SUB(CURDATE(), INTERVAL 2 DAY), NULL, 'å
é¨ç产', 'ç²¾å å·¥ï¼æ¼ç¤ºï¼', '赵质æ£', |
| | | @process_product_id, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', 'BR-6204', 'å¥', 35, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'ä¸åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, 'å¤å¾è¶
å·®ï¼ååº¦ä¸æ»¡è¶³è¦æ±', @process_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 1 AND product_id = @process_product_id AND check_result = 'ä¸åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 2, DATE_SUB(CURDATE(), INTERVAL 1 DAY), NULL, 'ååèªå¨åç§ææéå
¬å¸', NULL, 'éè´¨æ£', |
| | | @final_product_id, 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼', 'CTRL-A8', 'å°', 60, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, NULL, @final_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 2 AND product_id = @final_product_id AND check_result = 'åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 2, CURDATE(), NULL, 'å䏿ºè½è£
夿éå
¬å¸', NULL, 'å¨è´¨æ£', |
| | | @final_product_id, 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼', 'CTRL-A8', 'å°', 12, 'è´¨éç®¡çæ¼ç¤ºæ°æ®', 'ä¸åæ ¼', |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 1, 'ç»ç¼çµé»åä½ï¼åè½æµè¯é´ææ§å¤±æ', @final_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE inspect_type = 2 AND product_id = @final_product_id AND check_result = 'ä¸åæ ¼' |
| | | AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | SET @raw_ok_id = (SELECT id FROM quality_inspect WHERE inspect_type = 0 AND product_id = @raw_product_id AND check_result = 'åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | SET @raw_ng_id = (SELECT id FROM quality_inspect WHERE inspect_type = 0 AND product_id = @raw_product_id AND check_result = 'ä¸åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | SET @process_ok_id = (SELECT id FROM quality_inspect WHERE inspect_type = 1 AND product_id = @process_product_id AND check_result = 'åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | SET @process_ng_id = (SELECT id FROM quality_inspect WHERE inspect_type = 1 AND product_id = @process_product_id AND check_result = 'ä¸åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | SET @final_ok_id = (SELECT id FROM quality_inspect WHERE inspect_type = 2 AND product_id = @final_product_id AND check_result = 'åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | SET @final_ng_id = (SELECT id FROM quality_inspect WHERE inspect_type = 2 AND product_id = @final_product_id AND check_result = 'ä¸åæ ¼' AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1); |
| | | |
| | | -- å
ãæ£éªæç»ãä½¿ç¨ UNION ALL åç»ä¸æé¤å·²åå¨é¡¹ã |
| | | INSERT INTO quality_inspect_param |
| | | (parameter_item, unit, standard_value, control_value, test_value, inspect_id, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT d.parameter_item, d.unit, d.standard_value, d.control_value, d.test_value, d.inspect_id, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | FROM ( |
| | | SELECT 'å度' parameter_item, 'mm' unit, '2.00±0.10' standard_value, '1.95~2.05' control_value, '2.01' test_value, @raw_ok_id inspect_id |
| | | UNION ALL SELECT '表é¢è´¨é', '/', 'æ åä¼¤ãæ æ°§åæ', 'æ å¯è§ç¼ºé·', 'æ£å¸¸', @raw_ok_id |
| | | UNION ALL SELECT 'å度', 'mm', '2.00±0.10', '1.95~2.05', '1.86', @raw_ng_id |
| | | UNION ALL SELECT '表é¢è´¨é', '/', 'æ åä¼¤ãæ æ°§åæ', 'æ å¯è§ç¼ºé·', 'è¾¹ç¼å伤', @raw_ng_id |
| | | UNION ALL SELECT 'å¤å¾', 'mm', '20.00±0.05', '19.98~20.02', '20.01', @process_ok_id |
| | | UNION ALL SELECT 'å度', 'mm', 'â¤0.02', 'â¤0.015', '0.01', @process_ok_id |
| | | UNION ALL SELECT 'å¤å¾', 'mm', '20.00±0.05', '19.98~20.02', '20.18', @process_ng_id |
| | | UNION ALL SELECT 'å度', 'mm', 'â¤0.02', 'â¤0.015', '0.05', @process_ng_id |
| | | UNION ALL SELECT 'ç»ç¼çµé»', 'MΩ', 'â¥100', 'â¥120', '156', @final_ok_id |
| | | UNION ALL SELECT 'åè½æµè¯', '/', 'å
¨é¨åè½éè¿', 'è¿ç»è¿è¡30åéæ å¼å¸¸', 'éè¿', @final_ok_id |
| | | UNION ALL SELECT 'ç»ç¼çµé»', 'MΩ', 'â¥100', 'â¥120', '62', @final_ng_id |
| | | UNION ALL SELECT 'åè½æµè¯', '/', 'å
¨é¨åè½éè¿', 'è¿ç»è¿è¡30åéæ å¼å¸¸', 'é´ææ§å¤±æ', @final_ng_id |
| | | ) d |
| | | WHERE d.inspect_id IS NOT NULL |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect_param p |
| | | WHERE p.inspect_id = d.inspect_id AND p.parameter_item = d.parameter_item |
| | | ); |
| | | |
| | | -- ä¸ãä¸åæ ¼åè®°å½ï¼å
å«å¾
å¤çãè¿å·¥å®æåæ¥åºå®æä¸ç§å±ç¤ºç¶æã |
| | | INSERT INTO quality_unqualified |
| | | (inspect_type, inspect_state, check_time, check_name, product_id, product_name, model, unit, |
| | | quantity, defective_phenomena, deal_type, deal_result, deal_name, deal_time, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT 0, 0, DATE_SUB(CURDATE(), INTERVAL 4 DAY), 'æè´¨æ£', @raw_product_id, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', |
| | | 'AL-2.0', 'å¼ ', 80, 'å度åèï¼è¾¹ç¼åå¨å伤', NULL, NULL, NULL, NULL, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_unqualified |
| | | WHERE inspect_type = 0 AND product_id = @raw_product_id |
| | | AND defective_phenomena = 'å度åèï¼è¾¹ç¼åå¨å伤' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_unqualified |
| | | (inspect_type, inspect_state, check_time, check_name, product_id, product_name, model, unit, |
| | | quantity, defective_phenomena, deal_type, deal_result, deal_name, deal_time, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT 1, 1, DATE_SUB(CURDATE(), INTERVAL 2 DAY), '赵质æ£', @process_product_id, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', |
| | | 'BR-6204', 'å¥', 35, 'å¤å¾è¶
å·®ï¼ååº¦ä¸æ»¡è¶³è¦æ±', 'rework', 'å·²è¿å·¥å¹¶å¤æ£åæ ¼', 'é±ä¸»ç®¡', DATE_SUB(CURDATE(), INTERVAL 1 DAY), |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_unqualified |
| | | WHERE inspect_type = 1 AND product_id = @process_product_id |
| | | AND defective_phenomena = 'å¤å¾è¶
å·®ï¼ååº¦ä¸æ»¡è¶³è¦æ±' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | INSERT INTO quality_unqualified |
| | | (inspect_type, inspect_state, check_time, check_name, product_id, product_name, model, unit, |
| | | quantity, defective_phenomena, deal_type, deal_result, deal_name, deal_time, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT 2, 1, CURDATE(), 'å¨è´¨æ£', @final_product_id, 'æ§å¶å¨æ»æï¼æ¼ç¤ºï¼', |
| | | 'CTRL-A8', 'å°', 12, 'ç»ç¼çµé»åä½ï¼åè½æµè¯é´ææ§å¤±æ', 'scrap', 'ç¡®è®¤æ æ³è¿ä¿®ï¼å·²é离æ¥åº', 'å主管', CURDATE(), |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_unqualified |
| | | WHERE inspect_type = 2 AND product_id = @final_product_id |
| | | AND defective_phenomena = 'ç»ç¼çµé»åä½ï¼åè½æµè¯é´ææ§å¤±æ' AND tenant_id = @demo_tenant_id |
| | | ); |
| | | |
| | | -- æ§è¡ç»ææè¦ |
| | | SELECT @demo_tenant_id AS tenant_id, |
| | | (SELECT COUNT(*) FROM quality_test_standard WHERE standard_no LIKE 'QM-DEMO-%' AND tenant_id = @demo_tenant_id) AS demo_standards, |
| | | (SELECT COUNT(*) FROM quality_inspect WHERE check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®' AND tenant_id = @demo_tenant_id) AS demo_inspections, |
| | | (SELECT COUNT(*) FROM quality_unqualified WHERE product_name LIKE '%ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id) AS demo_unqualified; |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ä¸åæ ¼åå¤çæ¹å¼å段ååå
¸æ°æ®ï¼MySQLï¼ |
| | | -- å¯é夿§è¡ï¼ä»
å¨å段/åå
¸ä¸å卿¶å建ã |
| | | |
| | | SET @deal_type_column_exists = ( |
| | | SELECT COUNT(*) |
| | | FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'quality_unqualified' |
| | | AND COLUMN_NAME = 'deal_type' |
| | | ); |
| | | SET @deal_type_column_sql = IF( |
| | | @deal_type_column_exists = 0, |
| | | 'ALTER TABLE quality_unqualified ADD COLUMN deal_type VARCHAR(32) NULL COMMENT ''å¤çæ¹å¼ï¼reworkè¿å·¥ãscrapæ¥åºãconcessionè®©æ¥æ¥æ¶'' AFTER defective_phenomena', |
| | | 'SELECT 1' |
| | | ); |
| | | PREPARE deal_type_column_stmt FROM @deal_type_column_sql; |
| | | EXECUTE deal_type_column_stmt; |
| | | DEALLOCATE PREPARE deal_type_column_stmt; |
| | | |
| | | INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) |
| | | SELECT 'è´¨éå¤çæ¹å¼', 'quality_deal_type', '0', 'admin', NOW(), 'ä¸åæ ¼åå¤çæ¹å¼' |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM sys_dict_type WHERE dict_type = 'quality_deal_type' |
| | | ); |
| | | |
| | | INSERT INTO sys_dict_data |
| | | (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, |
| | | is_default, status, create_by, create_time, remark) |
| | | SELECT 1, 'è¿å·¥', 'rework', 'quality_deal_type', '', 'warning', 'N', '0', 'admin', NOW(), 'è¿å·¥å¤ç' |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM sys_dict_data |
| | | WHERE dict_type = 'quality_deal_type' AND dict_value = 'rework' |
| | | ); |
| | | |
| | | INSERT INTO sys_dict_data |
| | | (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, |
| | | is_default, status, create_by, create_time, remark) |
| | | SELECT 2, 'æ¥åº', 'scrap', 'quality_deal_type', '', 'danger', 'N', '0', 'admin', NOW(), 'æ¥åºå¤ç' |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM sys_dict_data |
| | | WHERE dict_type = 'quality_deal_type' AND dict_value = 'scrap' |
| | | ); |
| | | |
| | | INSERT INTO sys_dict_data |
| | | (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, |
| | | is_default, status, create_by, create_time, remark) |
| | | SELECT 3, 'è®©æ¥æ¥æ¶', 'concession', 'quality_deal_type', '', 'info', 'N', '0', 'admin', NOW(), 'è®©æ¥æ¥æ¶' |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM sys_dict_data |
| | | WHERE dict_type = 'quality_deal_type' AND dict_value = 'concession' |
| | | ); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- è´¨éç®¡çæ¼ç¤ºæ°æ®è¡¥å
ï¼MySQL 5.7+/8.0ï¼å¯é夿§è¡ï¼ |
| | | -- å¨ 20261029_quality_demo_data.sql åºç¡ä¸è¡¥å
ï¼ |
| | | -- 1) è®©æ¥æ¥æ¶å¤çæ¹å¼çä¸åæ ¼è®°å½ |
| | | -- 2) å¾
å¤çç¶æçä¸åæ ¼è®°å½ |
| | | -- 3) æªæäº¤ï¼è稿ï¼çæ£éªåï¼ä¾¿äºéªè¯æäº¤æ ¡éªä¸åè¡¨ç¶æ |
| | | |
| | | SET @demo_tenant_id = COALESCE( |
| | | (SELECT tenant_id FROM sys_user WHERE user_name = 'admin' LIMIT 1), |
| | | (SELECT MIN(tenant_id) FROM sys_user WHERE tenant_id IS NOT NULL), |
| | | 0 |
| | | ); |
| | | |
| | | SET @raw_product_id = ( |
| | | SELECT id FROM product WHERE product_name = 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @process_product_id = ( |
| | | SELECT id FROM product WHERE product_name = 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @raw_standard_id = ( |
| | | SELECT id FROM quality_test_standard WHERE standard_no = 'QM-DEMO-RAW-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @process_standard_id = ( |
| | | SELECT id FROM quality_test_standard WHERE standard_no = 'QM-DEMO-PROCESS-001' AND tenant_id = @demo_tenant_id ORDER BY id LIMIT 1 |
| | | ); |
| | | |
| | | -- ä¸ãä¸åæ ¼è®°å½ï¼è®©æ¥æ¥æ¶ï¼å·²å¤çï¼ |
| | | INSERT INTO quality_unqualified |
| | | (inspect_type, inspect_state, check_time, check_name, product_id, product_name, model, unit, |
| | | quantity, defective_phenomena, deal_type, deal_result, deal_name, deal_time, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT 0, 1, DATE_SUB(CURDATE(), INTERVAL 3 DAY), 'æè´¨æ£', @raw_product_id, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', |
| | | 'AL-2.0', 'å¼ ', 15, '表é¢è½»å¾®å伤ï¼ä¸å½±åè£
é
使ç¨', 'concession', 'ç»ææ¯è¯å®¡è®©æ¥æ¥æ¶ï¼éå®ç¨é', 'é±ä¸»ç®¡', DATE_SUB(CURDATE(), INTERVAL 2 DAY), |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_unqualified |
| | | WHERE tenant_id = @demo_tenant_id AND defective_phenomena = '表é¢è½»å¾®å伤ï¼ä¸å½±åè£
é
使ç¨' |
| | | ); |
| | | |
| | | -- äºãä¸åæ ¼è®°å½ï¼è¿ç¨æ£éªå¾
å¤ç |
| | | INSERT INTO quality_unqualified |
| | | (inspect_type, inspect_state, check_time, check_name, product_id, product_name, model, unit, |
| | | quantity, defective_phenomena, deal_type, deal_result, deal_name, deal_time, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT 1, 0, CURDATE(), '赵质æ£', @process_product_id, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', |
| | | 'BR-6204', 'å¥', 20, 'å度è¶
å·®ï¼éè¯å®¡å¤ç', NULL, NULL, NULL, NULL, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_unqualified |
| | | WHERE tenant_id = @demo_tenant_id AND defective_phenomena = 'å度è¶
å·®ï¼éè¯å®¡å¤ç' |
| | | ); |
| | | |
| | | -- ä¸ãè稿æ£éªåï¼æªæäº¤ï¼å¾
å¤å®ï¼ |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 0, CURDATE(), 'åä¸é屿ææéå
¬å¸', NULL, NULL, 'å¼ è´¨æ£', |
| | | @raw_product_id, 'å·¥ä¸éæ¿ï¼æ¼ç¤ºï¼', 'AL-2.0', 'å¼ ', 50, 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿', NULL, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 0, NULL, @raw_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE tenant_id = @demo_tenant_id AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿' AND inspect_type = 0 |
| | | ); |
| | | |
| | | INSERT INTO quality_inspect |
| | | (inspect_type, check_time, supplier, customer, process, check_name, product_id, product_name, |
| | | model, unit, quantity, check_company, check_result, create_time, create_user, update_time, |
| | | update_user, tenant_id, inspect_state, defective_phenomena, test_standard_id) |
| | | SELECT 1, CURDATE(), NULL, 'å
é¨ç产', 'ç²¾å å·¥ï¼æ¼ç¤ºï¼', 'çè´¨æ£', |
| | | @process_product_id, 'ç²¾å¯è½´æ¿ï¼æ¼ç¤ºï¼', 'BR-6204', 'å¥', 100, 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿', NULL, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id, 0, NULL, @process_standard_id |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect |
| | | WHERE tenant_id = @demo_tenant_id AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿' AND inspect_type = 1 |
| | | ); |
| | | |
| | | SET @raw_draft_id = ( |
| | | SELECT id FROM quality_inspect |
| | | WHERE tenant_id = @demo_tenant_id AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿' AND inspect_type = 0 ORDER BY id LIMIT 1 |
| | | ); |
| | | SET @process_draft_id = ( |
| | | SELECT id FROM quality_inspect |
| | | WHERE tenant_id = @demo_tenant_id AND check_company = 'è´¨éç®¡çæ¼ç¤ºæ°æ®-è稿' AND inspect_type = 1 ORDER BY id LIMIT 1 |
| | | ); |
| | | |
| | | -- åãè稿æ£éªåçæ£éªé¡¹ç®ï¼æ£éªå¼ç空ï¼ç¨äºéªè¯æäº¤åæ ¡éªï¼ |
| | | INSERT INTO quality_inspect_param |
| | | (parameter_item, unit, standard_value, control_value, test_value, inspect_id, |
| | | create_time, create_user, update_time, update_user, tenant_id) |
| | | SELECT d.parameter_item, d.unit, d.standard_value, d.control_value, NULL, d.inspect_id, |
| | | NOW(), 1, NOW(), 1, @demo_tenant_id |
| | | FROM ( |
| | | SELECT 'å度' parameter_item, 'mm' unit, '2.00±0.10' standard_value, '1.95~2.05' control_value, @raw_draft_id inspect_id |
| | | UNION ALL SELECT '表é¢è´¨é', '/', 'æ åä¼¤ãæ æ°§åæ', 'æ å¯è§ç¼ºé·', @raw_draft_id |
| | | UNION ALL SELECT 'å¤å¾', 'mm', '20.00±0.05', '19.98~20.02', @process_draft_id |
| | | UNION ALL SELECT 'å度', 'mm', 'â¤0.02', 'â¤0.015', @process_draft_id |
| | | ) d |
| | | WHERE d.inspect_id IS NOT NULL |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM quality_inspect_param p |
| | | WHERE p.inspect_id = d.inspect_id AND p.parameter_item = d.parameter_item |
| | | ); |
| | | |
| | | -- ç»ææè¦ |
| | | SELECT @demo_tenant_id AS tenant_id, |
| | | (SELECT COUNT(*) FROM quality_inspect WHERE tenant_id = @demo_tenant_id AND check_company LIKE 'è´¨éç®¡çæ¼ç¤ºæ°æ®%') AS inspections, |
| | | (SELECT COUNT(*) FROM quality_unqualified WHERE tenant_id = @demo_tenant_id) AS unqualified, |
| | | (SELECT COUNT(*) FROM quality_unqualified WHERE tenant_id = @demo_tenant_id AND deal_type = 'concession') AS concession_count; |
| | |
| | | qualityInspect.setProductMainId(productionProductMain.getId()); |
| | | qualityInspect.setProductModelId(productModel.getId()); |
| | | qualityInspectMapper.insert(qualityInspect); |
| | | List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList( |
| | | new LambdaQueryWrapper<QualityTestStandardBinding>() |
| | | .eq(QualityTestStandardBinding::getProductId, product.getId())); |
| | | if (qualityTestStandardBindings.size()>0){ |
| | | qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() |
| | | .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId())) |
| | | .forEach(qualityTestStandardParam -> { |
| | | qualityTestStandardParamMapper.selectListByProductId( |
| | | product.getId(), inspectType, inspectType == 1 ? productProcess.getName() : null) |
| | | .forEach(qualityTestStandardParam -> { |
| | | QualityInspectParam param = new QualityInspectParam(); |
| | | BeanUtils.copyProperties(qualityTestStandardParam, param); |
| | | param.setId(null); |
| | | param.setInspectId(qualityInspect.getId()); |
| | | qualityInspectParamMapper.insert(param); |
| | | }); |
| | | } |
| | | /*æ´æ°å·¥ååç产订å*/ |
| | | ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); |
| | | productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity())); |
| | |
| | | qualityInspect.setUnit(saleProduct.getUnit()); |
| | | qualityInspect.setQuantity(saleProduct.getQuantity()); |
| | | qualityInspectMapper.insert(qualityInspect); |
| | | List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList( |
| | | new LambdaQueryWrapper<QualityTestStandardBinding>() |
| | | .eq(QualityTestStandardBinding::getProductId, saleProduct.getProductId())); |
| | | if (qualityTestStandardBindings.size()>0){ |
| | | qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() |
| | | .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId())) |
| | | .forEach(qualityTestStandardParam -> { |
| | | QualityInspectParam param = new QualityInspectParam(); |
| | | com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param); |
| | | param.setId(null); |
| | | param.setInspectId(qualityInspect.getId()); |
| | | qualityInspectParamMapper.insert(param); |
| | | }); |
| | | } |
| | | qualityTestStandardParamMapper.selectListByProductId(saleProduct.getProductId(), 0, null) |
| | | .forEach(qualityTestStandardParam -> { |
| | | QualityInspectParam param = new QualityInspectParam(); |
| | | com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param); |
| | | param.setId(null); |
| | | param.setInspectId(qualityInspect.getId()); |
| | | qualityInspectParamMapper.insert(param); |
| | | }); |
| | | } |
| | | |
| | | private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) { |
| | |
| | | import com.ruoyi.quality.service.IQualityInspectParamService; |
| | | import com.ruoyi.quality.service.IQualityInspectService; |
| | | import com.ruoyi.quality.service.IQualityUnqualifiedService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | */ |
| | | @PostMapping("/add") |
| | | public AjaxResult add(@RequestBody QualityInspectDto qualityInspectDto) { |
| | | String validationMessage = validateInspect(qualityInspectDto, false); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | return AjaxResult.success(qualityInspectService.add(qualityInspectDto)); |
| | | } |
| | | |
| | |
| | | */ |
| | | @PostMapping("/update") |
| | | public AjaxResult update(@RequestBody QualityInspectDto qualityInspectDto) { |
| | | String validationMessage = validateInspect(qualityInspectDto, true); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | QualityInspect stored = qualityInspectService.getById(qualityInspectDto.getId()); |
| | | if (stored == null) { |
| | | return AjaxResult.error("æ£éªè®°å½ä¸åå¨"); |
| | | } |
| | | if (Integer.valueOf(1).equals(stored.getInspectState())) { |
| | | return AjaxResult.error("å·²æäº¤çæ£éªè®°å½ä¸è½ä¿®æ¹"); |
| | | } |
| | | return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspectDto)); |
| | | } |
| | | |
| | |
| | | public void down(HttpServletResponse response,@RequestBody QualityInspect qualityInspect) { |
| | | qualityInspectService.down(response, qualityInspect); |
| | | } |
| | | |
| | | private String validateInspect(QualityInspectDto inspect, boolean requireId) { |
| | | if (inspect == null) { |
| | | return "æ£éªæ°æ®ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (requireId && inspect.getId() == null) { |
| | | return "æ£éªè®°å½IDä¸è½ä¸ºç©º"; |
| | | } |
| | | if (inspect.getInspectType() == null || inspect.getInspectType() < 0 || inspect.getInspectType() > 2) { |
| | | return "æ£éªç±»å«ä¸æ£ç¡®"; |
| | | } |
| | | if (inspect.getProductId() == null) { |
| | | return "è¯·éæ©äº§å"; |
| | | } |
| | | if (inspect.getCheckTime() == null) { |
| | | return "è¯·éæ©æ£æµæ¥æ"; |
| | | } |
| | | if (inspect.getQuantity() == null || inspect.getQuantity().signum() <= 0) { |
| | | return "æ£éªæ°éå¿
须大äº0"; |
| | | } |
| | | if (!"åæ ¼".equals(inspect.getCheckResult()) && !"ä¸åæ ¼".equals(inspect.getCheckResult())) { |
| | | return "è¯·éæ©ææçæ£æµç»æ"; |
| | | } |
| | | if (inspect.getInspectType() == 1 && StringUtils.isBlank(inspect.getProcess())) { |
| | | return "è¿ç¨æ£éªå¿
须鿩工åº"; |
| | | } |
| | | if (CollectionUtils.isEmpty(inspect.getQualityInspectParams())) { |
| | | return "å½åäº§åæªé
ç½®æ£éªææ ï¼è¯·å
ç»´æ¤ææ "; |
| | | } |
| | | for (QualityInspectParam parameter : inspect.getQualityInspectParams()) { |
| | | if (StringUtils.isBlank(parameter.getParameterItem())) { |
| | | return "æ£éªé¡¹ç®ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (StringUtils.isBlank(parameter.getTestValue())) { |
| | | return "请填åâ" + parameter.getParameterItem() + "âçæ£éªå¼"; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.quality.dto.QualityMetricBindingDto; |
| | | import com.ruoyi.quality.dto.QualityMetricDto; |
| | | import com.ruoyi.quality.mapper.QualityTestStandardBindingMapper; |
| | | import com.ruoyi.quality.mapper.QualityTestStandardParamMapper; |
| | | import com.ruoyi.quality.pojo.QualityTestStandard; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardBinding; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardParam; |
| | | import com.ruoyi.quality.service.IQualityTestStandardService; |
| | | import com.ruoyi.quality.service.QualityTestStandardBindingService; |
| | | import com.ruoyi.quality.service.QualityTestStandardParamService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.DeleteMapping; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * æäº§åç»´æ¤æ£æµææ ã |
| | | * |
| | | * å端çâææ ç»´æ¤â页é¢ä»¥äº§å为å
¥å£ï¼æ¬æ¥å£å°äº§åãæ£æµæ å䏿 ååæ°ç |
| | | * ä¸å±æ°æ®ç»æå°è£
ä¸ºé¡µé¢æéçåå±ææ æä½ï¼å¹¶ææ£éªç±»å«/å·¥åºéç¦»ææ æ± ã |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/quality/qualityMetric") |
| | | @RequiredArgsConstructor |
| | | public class QualityMetricController { |
| | | |
| | | private static final int INSPECT_TYPE_PROCESS = 1; |
| | | |
| | | private final QualityTestStandardParamMapper qualityTestStandardParamMapper; |
| | | private final QualityTestStandardParamService qualityTestStandardParamService; |
| | | private final QualityTestStandardBindingService qualityTestStandardBindingService; |
| | | private final IQualityTestStandardService qualityTestStandardService; |
| | | private final QualityTestStandardBindingMapper qualityTestStandardBindingMapper; |
| | | |
| | | @GetMapping("/listPage") |
| | | public AjaxResult listPage(Page<QualityTestStandardParam> page, |
| | | @RequestParam("productId") Long productId, |
| | | @RequestParam(value = "inspectType", required = false) Integer inspectType, |
| | | @RequestParam(value = "processId", required = false) Long processId) { |
| | | IPage<QualityTestStandardParam> result = qualityTestStandardParamMapper |
| | | .selectPageByProductId(page, productId, inspectType, processId); |
| | | return AjaxResult.success(result); |
| | | } |
| | | |
| | | @GetMapping("/product/{productId}") |
| | | public AjaxResult listByProduct(@PathVariable("productId") Long productId, |
| | | @RequestParam(value = "inspectType", required = false) Integer inspectType, |
| | | @RequestParam(value = "process", required = false) String process) { |
| | | return AjaxResult.success(qualityTestStandardParamMapper |
| | | .selectListByProductId(productId, inspectType, process)); |
| | | } |
| | | |
| | | @PostMapping("/add") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult add(@RequestBody QualityMetricDto metric) { |
| | | normalizeInspectType(metric); |
| | | String validationMessage = validateMetric(metric, true); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | |
| | | Long testStandardId = getOrCreateTestStandard(metric.getProductId(), |
| | | metric.getInspectType(), metric.getProcessId()); |
| | | QualityTestStandardParam parameter = copyEditableFields(metric, new QualityTestStandardParam()); |
| | | parameter.setTestStandardId(testStandardId); |
| | | if (!qualityTestStandardParamService.save(parameter)) { |
| | | throw new ServiceException("ä¿åæ£æµææ 失败"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | @PostMapping("/update") |
| | | public AjaxResult update(@RequestBody QualityMetricDto metric) { |
| | | String validationMessage = validateMetric(metric, false); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | if (metric.getId() == null) { |
| | | return AjaxResult.error("ææ IDä¸è½ä¸ºç©º"); |
| | | } |
| | | |
| | | QualityTestStandardParam parameter = qualityTestStandardParamService.getById(metric.getId()); |
| | | if (parameter == null) { |
| | | return AjaxResult.error("æ£æµææ ä¸åå¨"); |
| | | } |
| | | copyEditableFields(metric, parameter); |
| | | if (!qualityTestStandardParamService.updateById(parameter)) { |
| | | throw new ServiceException("ä¿®æ¹æ£æµææ 失败"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/del") |
| | | public AjaxResult delete(@RequestBody List<Long> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); |
| | | } |
| | | if (!qualityTestStandardParamService.removeBatchByIds(ids)) { |
| | | throw new ServiceException("å 餿£æµææ 失败"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, |
| | | @RequestParam("productId") Long productId, |
| | | @RequestParam(value = "inspectType", required = false) Integer inspectType, |
| | | @RequestParam(value = "process", required = false) String process) { |
| | | List<QualityTestStandardParam> list = qualityTestStandardParamMapper |
| | | .selectListByProductId(productId, inspectType, process); |
| | | ExcelUtil<QualityTestStandardParam> util = new ExcelUtil<>(QualityTestStandardParam.class); |
| | | util.exportExcel(response, list, "æ£æµææ "); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å
¨é¨æ£æµæ åï¼ä¾âææ ç»å®â页é¢éæ©ã |
| | | */ |
| | | @GetMapping("/standardList") |
| | | public AjaxResult standardList() { |
| | | return AjaxResult.success(qualityTestStandardService.list( |
| | | Wrappers.<QualityTestStandard>lambdaQuery() |
| | | .orderByDesc(QualityTestStandard::getId))); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢äº§åå·²ç»å®çæ£æµæ åã |
| | | */ |
| | | @GetMapping("/bindingList") |
| | | public AjaxResult bindingList(@RequestParam("productId") Long productId) { |
| | | return AjaxResult.success(qualityTestStandardBindingMapper.selectBindingByProductId(productId)); |
| | | } |
| | | |
| | | /** |
| | | * ç»å®äº§å䏿£æµæ åã |
| | | */ |
| | | @PostMapping("/binding") |
| | | public AjaxResult bind(@RequestBody QualityMetricBindingDto binding) { |
| | | if (binding.getProductId() == null) { |
| | | return AjaxResult.error("请å
éæ©äº§å"); |
| | | } |
| | | if (binding.getTestStandardId() == null) { |
| | | return AjaxResult.error("è¯·éæ©æ£æµæ å"); |
| | | } |
| | | long exists = qualityTestStandardBindingService.count( |
| | | Wrappers.<QualityTestStandardBinding>lambdaQuery() |
| | | .eq(QualityTestStandardBinding::getProductId, binding.getProductId()) |
| | | .eq(QualityTestStandardBinding::getTestStandardId, binding.getTestStandardId())); |
| | | if (exists > 0) { |
| | | return AjaxResult.error("该æ åå·²ç»å®å°æ¤äº§å"); |
| | | } |
| | | QualityTestStandardBinding entity = new QualityTestStandardBinding(); |
| | | entity.setProductId(binding.getProductId()); |
| | | entity.setTestStandardId(binding.getTestStandardId()); |
| | | if (!qualityTestStandardBindingService.save(entity)) { |
| | | throw new ServiceException("ç»å®æ£æµæ å失败"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | /** |
| | | * è§£é¤äº§å䏿£æµæ åçç»å®ã |
| | | */ |
| | | @DeleteMapping("/binding") |
| | | public AjaxResult unbind(@RequestBody List<Integer> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); |
| | | } |
| | | if (!qualityTestStandardBindingService.removeBatchByIds(ids)) { |
| | | throw new ServiceException("è§£é¤ç»å®å¤±è´¥"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | private void normalizeInspectType(QualityMetricDto metric) { |
| | | if (metric != null && metric.getInspectType() == null) { |
| | | metric.setInspectType(0); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¥æ¾æå建ä¸â产å + æ£éªç±»å« + å·¥åºâå¹é
çæ£æµæ åï¼å¹¶å»ºç«äº§åç»å®ã |
| | | */ |
| | | private Long getOrCreateTestStandard(Long productId, Integer inspectType, Long processId) { |
| | | int type = inspectType == null ? 0 : inspectType; |
| | | List<QualityTestStandardBinding> bindings = qualityTestStandardBindingService.list( |
| | | Wrappers.<QualityTestStandardBinding>lambdaQuery() |
| | | .eq(QualityTestStandardBinding::getProductId, productId) |
| | | .orderByAsc(QualityTestStandardBinding::getId)); |
| | | if (!bindings.isEmpty()) { |
| | | List<Integer> standardIds = bindings.stream() |
| | | .map(QualityTestStandardBinding::getTestStandardId) |
| | | .collect(Collectors.toList()); |
| | | com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<QualityTestStandard> wrapper = |
| | | Wrappers.<QualityTestStandard>lambdaQuery() |
| | | .in(QualityTestStandard::getId, standardIds) |
| | | .eq(QualityTestStandard::getInspectType, type); |
| | | // ä»
è¿ç¨æ£éªæå·¥åºåºåæ åï¼åææ/åºåæ£éªå¿½ç¥å·¥åº |
| | | if (type == INSPECT_TYPE_PROCESS && processId != null) { |
| | | wrapper.eq(QualityTestStandard::getProcessId, processId.intValue()); |
| | | } |
| | | QualityTestStandard matched = qualityTestStandardService.getOne( |
| | | wrapper.orderByAsc(QualityTestStandard::getId).last("limit 1")); |
| | | if (matched != null) { |
| | | return matched.getId(); |
| | | } |
| | | } |
| | | |
| | | QualityTestStandard standard = new QualityTestStandard(); |
| | | String suffix = inspectTypeSuffix(type) + (processId == null ? "" : "-" + processId); |
| | | standard.setStandardNo("AUTO-" + productId + "-" + suffix); |
| | | standard.setStandardName("äº§åæ£æµææ -" + productId + "-" + suffix); |
| | | standard.setState("1"); |
| | | standard.setInspectType(type); |
| | | if (processId != null) { |
| | | standard.setProcessId(processId.intValue()); |
| | | } |
| | | if (!qualityTestStandardService.save(standard) || standard.getId() == null) { |
| | | throw new ServiceException("åå»ºäº§åæ£æµæ å失败"); |
| | | } |
| | | |
| | | QualityTestStandardBinding binding = new QualityTestStandardBinding(); |
| | | binding.setProductId(productId); |
| | | binding.setTestStandardId(Math.toIntExact(standard.getId())); |
| | | if (!qualityTestStandardBindingService.save(binding)) { |
| | | throw new ServiceException("建ç«äº§å䏿£æµæ åå
³è失败"); |
| | | } |
| | | return standard.getId(); |
| | | } |
| | | |
| | | private String inspectTypeSuffix(int inspectType) { |
| | | switch (inspectType) { |
| | | case 1: |
| | | return "PROCESS"; |
| | | case 2: |
| | | return "FINAL"; |
| | | default: |
| | | return "RAW"; |
| | | } |
| | | } |
| | | |
| | | private String validateMetric(QualityMetricDto metric, boolean requireProduct) { |
| | | if (metric == null) { |
| | | return "ææ æ°æ®ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (requireProduct && metric.getProductId() == null) { |
| | | return "请å
éæ©äº§å"; |
| | | } |
| | | if (metric.getInspectType() != null |
| | | && metric.getInspectType() == INSPECT_TYPE_PROCESS |
| | | && metric.getProcessId() == null) { |
| | | return "è¿ç¨æ£éªè¯·å
鿩工åº"; |
| | | } |
| | | if (StringUtils.isBlank(metric.getParameterItem())) { |
| | | return "ææ åç§°ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (StringUtils.isBlank(metric.getUnit())) { |
| | | return "åä½ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (StringUtils.isBlank(metric.getStandardValue())) { |
| | | return "æ åå¼ä¸è½ä¸ºç©º"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private QualityTestStandardParam copyEditableFields(QualityMetricDto source, |
| | | QualityTestStandardParam target) { |
| | | target.setParameterItem(source.getParameterItem()); |
| | | target.setUnit(source.getUnit()); |
| | | target.setStandardValue(source.getStandardValue()); |
| | | target.setControlValue(source.getControlValue()); |
| | | target.setDefaultValue(source.getDefaultValue()); |
| | | return target; |
| | | } |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.quality.pojo.QualityUnqualified; |
| | | import com.ruoyi.quality.service.IQualityUnqualifiedService; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | */ |
| | | @PostMapping("/add") |
| | | public AjaxResult add(@RequestBody QualityUnqualified qualityUnqualified) { |
| | | return AjaxResult.success(qualityUnqualifiedService.save(qualityUnqualified)); |
| | | if (qualityUnqualified != null && qualityUnqualified.getInspectState() == null) { |
| | | qualityUnqualified.setInspectState(0); |
| | | } |
| | | String validationMessage = validateUnqualified(qualityUnqualified, false); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | if (!qualityUnqualifiedService.save(qualityUnqualified)) { |
| | | throw new ServiceException("æ°å¢ä¸åæ ¼è®°å½å¤±è´¥"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @PostMapping("/update") |
| | | public AjaxResult update(@RequestBody QualityUnqualified qualityUnqualified) { |
| | | return AjaxResult.success(qualityUnqualifiedService.updateById(qualityUnqualified)); |
| | | String validationMessage = validateUnqualified(qualityUnqualified, true); |
| | | if (validationMessage != null) { |
| | | return AjaxResult.error(validationMessage); |
| | | } |
| | | if (qualityUnqualifiedService.getById(qualityUnqualified.getId()) == null) { |
| | | return AjaxResult.error("ä¸åæ ¼è®°å½ä¸åå¨"); |
| | | } |
| | | if (!qualityUnqualifiedService.updateById(qualityUnqualified)) { |
| | | throw new ServiceException("ä¿®æ¹ä¸åæ ¼è®°å½å¤±è´¥"); |
| | | } |
| | | return AjaxResult.success(true); |
| | | } |
| | | |
| | | /** |
| | |
| | | qualityUnqualifiedService.qualityUnqualifiedExport(response, qualityUnqualified); |
| | | } |
| | | |
| | | private String validateUnqualified(QualityUnqualified record, boolean requireId) { |
| | | if (record == null) { |
| | | return "ä¸åæ ¼æ°æ®ä¸è½ä¸ºç©º"; |
| | | } |
| | | if (requireId && record.getId() == null) { |
| | | return "ä¸åæ ¼è®°å½IDä¸è½ä¸ºç©º"; |
| | | } |
| | | if (record.getInspectType() == null || record.getInspectType() < 0 || record.getInspectType() > 2) { |
| | | return "æ£éªç±»å«ä¸æ£ç¡®"; |
| | | } |
| | | if (record.getInspectState() == null |
| | | || (record.getInspectState() != 0 && record.getInspectState() != 1)) { |
| | | return "å¤çç¶æä¸æ£ç¡®"; |
| | | } |
| | | if (record.getProductId() == null) { |
| | | return "è¯·éæ©äº§å"; |
| | | } |
| | | if (record.getQuantity() == null || record.getQuantity().signum() <= 0) { |
| | | return "ä¸åæ ¼æ°éå¿
须大äº0"; |
| | | } |
| | | if (StringUtils.isBlank(record.getDefectivePhenomena())) { |
| | | return "请填åä¸åæ ¼åå æç°è±¡"; |
| | | } |
| | | if (Integer.valueOf(1).equals(record.getInspectState())) { |
| | | if (StringUtils.isBlank(record.getDealType())) { |
| | | return "è¯·éæ©å¤çæ¹å¼"; |
| | | } |
| | | if (StringUtils.isBlank(record.getDealResult())) { |
| | | return "请填åå¤çç»æ"; |
| | | } |
| | | if (StringUtils.isBlank(record.getDealName())) { |
| | | return "请填åå¤ç人"; |
| | | } |
| | | if (record.getDealTime() == null) { |
| | | return "è¯·éæ©å¤çæ¥æ"; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * ææ ç»å®å表å±ç¤ºå¯¹è±¡ï¼äº§å䏿£æµæ åçå
³èä¿¡æ¯ã |
| | | */ |
| | | @Data |
| | | public class QualityMetricBindingDto implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** ç»å®å
³ç³»ID */ |
| | | private Integer id; |
| | | |
| | | /** 产åID */ |
| | | private Long productId; |
| | | |
| | | /** æ£æµæ åID */ |
| | | private Integer testStandardId; |
| | | |
| | | /** æ åç¼å· */ |
| | | private String standardNo; |
| | | |
| | | /** æ ååç§° */ |
| | | private String standardName; |
| | | |
| | | /** æ£éªç±»å«(0:åæææ£éª;1:è¿ç¨æ£éª;2:åºåæ£éª) */ |
| | | private Integer inspectType; |
| | | |
| | | /** å·¥åºID */ |
| | | private Integer processId; |
| | | |
| | | /** å·¥åºåç§° */ |
| | | private String processName; |
| | | |
| | | /** ç¶æ */ |
| | | private String state; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.dto; |
| | | |
| | | import com.ruoyi.quality.pojo.QualityTestStandardParam; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * æäº§åç»´æ¤æ£æµææ çå端交äºå¯¹è±¡ã |
| | | */ |
| | | @Data |
| | | public class QualityMetricDto extends QualityTestStandardParam implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** ææ æå±äº§åID */ |
| | | private Long productId; |
| | | |
| | | /** æ£éªç±»å«(0:åæææ£éª;1:è¿ç¨æ£éª;2:åºåæ£éª) */ |
| | | private Integer inspectType; |
| | | |
| | | /** å·¥åºID(è¿ç¨æ£éªæ¶ä½¿ç¨) */ |
| | | private Long processId; |
| | | } |
| | |
| | | package com.ruoyi.quality.mapper; |
| | | |
| | | import com.ruoyi.quality.dto.QualityMetricBindingDto; |
| | | import com.ruoyi.quality.dto.QualityTestStandardBindingDto; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardBinding; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | |
| | | public interface QualityTestStandardBindingMapper extends BaseMapper<QualityTestStandardBinding> { |
| | | |
| | | List<QualityTestStandardBindingDto> listBinding(@Param("testStandardId") Long testStandardId); |
| | | |
| | | List<QualityMetricBindingDto> selectBindingByProductId(@Param("productId") Long productId); |
| | | } |
| | |
| | | package com.ruoyi.quality.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardParam; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | |
| | | @Mapper |
| | | public interface QualityTestStandardParamMapper extends BaseMapper<QualityTestStandardParam> { |
| | | |
| | | List<QualityTestStandardParam> selectListByProductId(@Param("productId") Long productId); |
| | | List<QualityTestStandardParam> selectListByProductId(@Param("productId") Long productId, |
| | | @Param("inspectType") Integer inspectType, |
| | | @Param("process") String process); |
| | | |
| | | IPage<QualityTestStandardParam> selectPageByProductId(Page<QualityTestStandardParam> page, |
| | | @Param("productId") Long productId, |
| | | @Param("inspectType") Integer inspectType, |
| | | @Param("processId") Long processId); |
| | | } |
| | |
| | | private String defectivePhenomena; |
| | | |
| | | /** |
| | | * å¤çæ¹å¼(åå
¸ quality_deal_typeï¼è¿å·¥/æ¥åº/è®©æ¥æ¥æ¶ç) |
| | | */ |
| | | @Excel(name = "å¤çæ¹å¼", readConverterExp = "rework=è¿å·¥,scrap=æ¥åº,concession=è®©æ¥æ¥æ¶") |
| | | private String dealType; |
| | | |
| | | /** |
| | | * å¤çç»æ |
| | | */ |
| | | @Excel(name = "å¤çç»æ") |
| | |
| | | import com.deepoove.poi.XWPFTemplate; |
| | | import com.deepoove.poi.config.Configure; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.HackLoopTableRenderPolicy; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | |
| | | import com.ruoyi.sales.mapper.SalesLedgerProductMapper; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | QualityInspect qualityInspect = new QualityInspect(); |
| | | BeanUtils.copyProperties(qualityInspectDto,qualityInspect); |
| | | qualityInspect.setInspectState(0);//é»è®¤æªæäº¤ |
| | | qualityInspectMapper.insert(qualityInspect); |
| | | int inserted = qualityInspectMapper.insert(qualityInspect); |
| | | if (inserted <= 0 || qualityInspect.getId() == null) { |
| | | throw new ServiceException("æ°å¢æ£éªè®°å½å¤±è´¥"); |
| | | } |
| | | for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) { |
| | | qualityInspectParam.setInspectId(qualityInspect.getId()); |
| | | } |
| | | qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams()); |
| | | return 0; |
| | | if (!qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams())) { |
| | | throw new ServiceException("ä¿åæ£éªé¡¹ç®å¤±è´¥"); |
| | | } |
| | | return inserted; |
| | | } |
| | | |
| | | @Override |
| | | public QualityInspectDto getDetailById(Integer id) { |
| | | QualityInspect qualityInspect = qualityInspectMapper.selectById(id); |
| | | if (qualityInspect == null) { |
| | | throw new ServiceException("æ£éªè®°å½ä¸åå¨"); |
| | | } |
| | | List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id)); |
| | | QualityInspectDto qualityInspectDto = new QualityInspectDto(); |
| | | BeanUtils.copyProperties(qualityInspect,qualityInspectDto); |
| | |
| | | //æäº¤ |
| | | @Override |
| | | public int submit(QualityInspect inspect) { |
| | | if (inspect == null || inspect.getId() == null) { |
| | | throw new ServiceException("æ£éªè®°å½IDä¸è½ä¸ºç©º"); |
| | | } |
| | | QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId()); |
| | | if (qualityInspect == null) { |
| | | throw new ServiceException("æ£éªè®°å½ä¸åå¨"); |
| | | } |
| | | if (Integer.valueOf(1).equals(qualityInspect.getInspectState())) { |
| | | throw new ServiceException("æ£éªè®°å½å·²æäº¤ï¼è¯·å¿é夿ä½"); |
| | | } |
| | | if (!"åæ ¼".equals(qualityInspect.getCheckResult()) |
| | | && !"ä¸åæ ¼".equals(qualityInspect.getCheckResult())) { |
| | | throw new ServiceException("请å
宿æ£éªç»æå¤å®"); |
| | | } |
| | | List<QualityInspectParam> inspectParams = qualityInspectParamService.list( |
| | | Wrappers.<QualityInspectParam>lambdaQuery() |
| | | .eq(QualityInspectParam::getInspectId, inspect.getId())); |
| | | if (inspectParams.isEmpty()) { |
| | | throw new ServiceException("æ£éªé¡¹ç®ä¸ºç©ºï¼ä¸è½æäº¤"); |
| | | } |
| | | for (QualityInspectParam parameter : inspectParams) { |
| | | if (StringUtils.isBlank(parameter.getTestValue())) { |
| | | throw new ServiceException("æ£éªé¡¹ç®â" + parameter.getParameterItem() + "âå°æªå¡«åæ£éªå¼"); |
| | | } |
| | | } |
| | | /*夿ä¸åæ ¼*/ |
| | | if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("ä¸åæ ¼")){ |
| | | QualityUnqualified qualityUnqualified = new QualityUnqualified(); |
| | | BeanUtils.copyProperties(qualityInspect,qualityUnqualified); |
| | | qualityUnqualified.setInspectState(0);//å¾
å¤ç |
| | | List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId())); |
| | | String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(",")); |
| | | qualityUnqualified.setDefectivePhenomena(text+"è¿äºææ ä¸åå¨ä¸åæ ¼");//ä¸åæ ¼ç°è±¡ |
| | | qualityUnqualifiedMapper.insert(qualityUnqualified); |
| | |
| | | |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | if (qualityInspect.getInspectType() == 0) { |
| | | if ("åæ ¼".equals(qualityInspect.getCheckResult())) { |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(1); |
| | | procurementRecordOutAdd.setTypeName("éè´åæææ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId())); |
| | | if (qualityInspect.getPurchaseLedgerId() == null) { |
| | | throw new BaseException("è¯·éæ©éè´å"); |
| | | } |
| | | // åæ ¼ä¸å
³èäºéè´å/产åä¿¡æ¯æ¶æèªå¨å
¥åºï¼ä¿¡æ¯ä¸å
¨æ¶è·³è¿å
¥åºä½æ£å¸¸æäº¤ |
| | | if ("åæ ¼".equals(qualityInspect.getCheckResult()) |
| | | && qualityInspect.getPurchaseLedgerId() != null) { |
| | | SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId()); |
| | | if (salesLedgerProduct != null) { |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(1); |
| | | procurementRecordOutAdd.setTypeName("éè´åæææ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId())); |
| | | |
| | | ArrayList<Details> detailss = new ArrayList<>(); |
| | | Details details = new Details(); |
| | | details.setId(Math.toIntExact(salesLedgerProduct.getId())); |
| | | details.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details.setWarnNum(salesLedgerProduct.getWarnNum()); |
| | | details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); |
| | | details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | details.setProductModelId(qualityInspect.getProductModelId()); |
| | | detailss.add( details); |
| | | procurementRecordOutAdd.setDetails(detailss); |
| | | procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.add(procurementRecordOutAdd); |
| | | ArrayList<Details> detailss = new ArrayList<>(); |
| | | Details details = new Details(); |
| | | details.setId(Math.toIntExact(salesLedgerProduct.getId())); |
| | | details.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details.setWarnNum(salesLedgerProduct.getWarnNum()); |
| | | details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); |
| | | details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | details.setProductModelId(qualityInspect.getProductModelId()); |
| | | detailss.add( details); |
| | | procurementRecordOutAdd.setDetails(detailss); |
| | | procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.add(procurementRecordOutAdd); |
| | | } |
| | | } |
| | | }else if (qualityInspect.getInspectType() == 1) { |
| | | //æ¥è¯¢UnitPrice/TotalPrice |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(2); |
| | | procurementRecordOutAdd.setTypeName("ç产è¿ç¨æ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | List<Details> details = new ArrayList<>(); |
| | | Details details1 = new Details(); |
| | | details1.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details1.setProductModelId(qualityInspect.getProductModelId()); |
| | | procurementRecordOutAdd.setDetails(details); |
| | | // è¿ç¨æ£éªä»
åæ ¼æ¶å
¥åºï¼ä¸åæ ¼åç±ä¸é¢çä¸åæ ¼ç®¡çæµç¨å¤ç |
| | | if ("åæ ¼".equals(qualityInspect.getCheckResult())) { |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(2); |
| | | procurementRecordOutAdd.setTypeName("ç产è¿ç¨æ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | List<Details> details = new ArrayList<>(); |
| | | Details details1 = new Details(); |
| | | details1.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details1.setProductModelId(qualityInspect.getProductModelId()); |
| | | procurementRecordOutAdd.setDetails(details); |
| | | |
| | | ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() |
| | | .salesLedgerProductId(0) |
| | | .inboundBatches( "ç产åæåå
¥åº") |
| | | .inboundNum(details1.getInboundQuantity()) |
| | | .type(2) |
| | | .warnNum(new BigDecimal(0)) |
| | | .unitPrice(new BigDecimal(0)) |
| | | .totalPrice(new BigDecimal(0)) |
| | | .createTime(LocalDateTime.now()) |
| | | .createUser(loginUser.getUserId()) |
| | | .updateTime(LocalDateTime.now()) |
| | | .updateUser(loginUser.getUserId()) |
| | | .createBy(procurementRecordOutAdd.getNickName()) |
| | | .productModelId(details1.getProductModelId()) |
| | | .qualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.save(procurementRecordBuilder.build()); |
| | | |
| | | |
| | | |
| | | ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() |
| | | .salesLedgerProductId(0) |
| | | .inboundBatches( "ç产åæåå
¥åº") |
| | | .inboundNum(details1.getInboundQuantity()) |
| | | .type(2) |
| | | .warnNum(new BigDecimal(0)) |
| | | .unitPrice(new BigDecimal(0)) |
| | | .totalPrice(new BigDecimal(0)) |
| | | .createTime(LocalDateTime.now()) |
| | | .createUser(loginUser.getUserId()) |
| | | .updateTime(LocalDateTime.now()) |
| | | .updateUser(loginUser.getUserId()) |
| | | .createBy(procurementRecordOutAdd.getNickName()) |
| | | .productModelId(details1.getProductModelId()) |
| | | .qualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.save(procurementRecordBuilder.build()); |
| | | } |
| | | }else if (qualityInspect.getInspectType() == 2) { |
| | | //æ¥è¯¢UnitPrice/TotalPrice |
| | | SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId()); |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(2); |
| | | procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | List<Details> details = new ArrayList<>(); |
| | | Details details1 = new Details(); |
| | | details1.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details1.setId(Math.toIntExact(salesLedgerProduct.getId())); |
| | | details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); |
| | | details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | details1.setProductModelId(salesLedgerProduct.getProductModelId()); |
| | | details.add(details1); |
| | | procurementRecordOutAdd.setDetails(details); |
| | | procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.add(procurementRecordOutAdd); |
| | | // åºåæ£éªä»
åæ ¼æ¶å
¥åºï¼ç¼ºå°äº§åä¿¡æ¯æ¶è·³è¿å
¥åºä½æ£å¸¸æäº¤ |
| | | if ("åæ ¼".equals(qualityInspect.getCheckResult())) { |
| | | SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId()); |
| | | if (salesLedgerProduct != null) { |
| | | ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); |
| | | procurementRecordOutAdd.setType(2); |
| | | procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å
¥åº"); |
| | | procurementRecordOutAdd.setNickName(loginUser.getNickName()); |
| | | List<Details> details = new ArrayList<>(); |
| | | Details details1 = new Details(); |
| | | details1.setInboundQuantity(qualityInspect.getQuantity()); |
| | | details1.setId(Math.toIntExact(salesLedgerProduct.getId())); |
| | | details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); |
| | | details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | details1.setProductModelId(salesLedgerProduct.getProductModelId()); |
| | | details.add(details1); |
| | | procurementRecordOutAdd.setDetails(details); |
| | | procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); |
| | | procurementRecordService.add(procurementRecordOutAdd); |
| | | } |
| | | } |
| | | } |
| | | qualityInspect.setInspectState(1);//å·²æäº¤ |
| | | return qualityInspectMapper.updateById(qualityInspect); |
| | |
| | | tablePrefix: sys_ |
| | | # æ¯å¦å
è®¸çææä»¶è¦çå°æ¬å°ï¼èªå®ä¹è·¯å¾ï¼ï¼é»è®¤ä¸å
许 |
| | | allowOverwrite: false |
| | | |
| | | file: |
| | | temp-dir: /center-lims/mis/file/temp/uploads |
| | | upload-dir: /center-lims/mis/file/prod/uploads |
| | |
| | | <result column="update_user" property="updateUser"/> |
| | | <result column="tenant_id" property="tenantId"/> |
| | | </resultMap> |
| | | <select id="selectBindingByProductId" resultType="com.ruoyi.quality.dto.QualityMetricBindingDto"> |
| | | select t1.id, |
| | | t1.product_id, |
| | | t1.test_standard_id, |
| | | t2.standard_no, |
| | | t2.standard_name, |
| | | t2.inspect_type, |
| | | t2.process_id, |
| | | pp.name as process_name, |
| | | t2.state |
| | | from quality_test_standard_binding t1 |
| | | left join quality_test_standard t2 on t1.test_standard_id = t2.id |
| | | left join product_process pp on t2.process_id = pp.id |
| | | where t1.product_id = #{productId} |
| | | order by t1.id desc |
| | | </select> |
| | | |
| | | <select id="listBinding" resultType="com.ruoyi.quality.dto.QualityTestStandardBindingDto"> |
| | | select t2.product_name, |
| | | t1.id qualityTestStandardBindingId |
| | |
| | | <result column="default_value" property="defaultValue" /> |
| | | </resultMap> |
| | | <select id="selectListByProductId" resultType="com.ruoyi.quality.pojo.QualityTestStandardParam"> |
| | | select t1.* from quality_test_standard_param t1 |
| | | left join quality_test_standard t2 on t1.test_standard_id = t2.id |
| | | left join quality_test_standard_binding t3 on t2.id = t3.test_standard_id |
| | | select distinct t1.* from quality_test_standard_param t1 |
| | | inner join quality_test_standard t2 on t1.test_standard_id = t2.id |
| | | inner join quality_test_standard_binding t3 on t2.id = t3.test_standard_id |
| | | left join product_process pp on t2.process_id = pp.id |
| | | where t3.product_id = #{productId} |
| | | <if test="inspectType != null"> |
| | | and t2.inspect_type = #{inspectType} |
| | | </if> |
| | | <if test="process != null and process != ''"> |
| | | and pp.name = #{process} |
| | | </if> |
| | | order by t1.id desc |
| | | </select> |
| | | |
| | | <select id="selectPageByProductId" resultType="com.ruoyi.quality.pojo.QualityTestStandardParam"> |
| | | select distinct t1.* from quality_test_standard_param t1 |
| | | inner join quality_test_standard t2 on t1.test_standard_id = t2.id |
| | | inner join quality_test_standard_binding t3 on t1.test_standard_id = t3.test_standard_id |
| | | where t3.product_id = #{productId} |
| | | <if test="inspectType != null"> |
| | | and t2.inspect_type = #{inspectType} |
| | | </if> |
| | | <if test="processId != null"> |
| | | and t2.process_id = #{processId} |
| | | </if> |
| | | order by t1.id desc |
| | | </select> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.controller; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.procurementrecord.service.ProcurementRecordService; |
| | | import com.ruoyi.quality.dto.QualityInspectDto; |
| | | import com.ruoyi.quality.pojo.QualityInspect; |
| | | import com.ruoyi.quality.pojo.QualityInspectParam; |
| | | import com.ruoyi.quality.service.IQualityInspectFileService; |
| | | import com.ruoyi.quality.service.IQualityInspectParamService; |
| | | import com.ruoyi.quality.service.IQualityInspectService; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.junit.jupiter.api.extension.ExtendWith; |
| | | import org.mockito.InjectMocks; |
| | | import org.mockito.Mock; |
| | | import org.mockito.junit.jupiter.MockitoExtension; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertEquals; |
| | | import static org.junit.jupiter.api.Assertions.assertTrue; |
| | | import static org.mockito.ArgumentMatchers.any; |
| | | import static org.mockito.Mockito.never; |
| | | import static org.mockito.Mockito.verify; |
| | | import static org.mockito.Mockito.when; |
| | | |
| | | @ExtendWith(MockitoExtension.class) |
| | | class QualityInspectControllerTest { |
| | | |
| | | @Mock private IQualityInspectService inspectService; |
| | | @Mock private IQualityInspectParamService paramService; |
| | | @Mock private IQualityInspectFileService fileService; |
| | | @Mock private ProcurementRecordService procurementRecordService; |
| | | @InjectMocks private QualityInspectController controller; |
| | | |
| | | @Test |
| | | void addAcceptsCompleteInspection() { |
| | | QualityInspectDto dto = validInspection(0); |
| | | when(inspectService.add(dto)).thenReturn(1); |
| | | |
| | | AjaxResult result = controller.add(dto); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | assertEquals(1, result.get(AjaxResult.DATA_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void addRejectsInspectionWithoutMetrics() { |
| | | QualityInspectDto dto = validInspection(0); |
| | | dto.setQualityInspectParams(Collections.emptyList()); |
| | | |
| | | AjaxResult result = controller.add(dto); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("å½åäº§åæªé
ç½®æ£éªææ ï¼è¯·å
ç»´æ¤ææ ", result.get(AjaxResult.MSG_TAG)); |
| | | verify(inspectService, never()).add(any()); |
| | | } |
| | | |
| | | @Test |
| | | void addRejectsMetricWithoutTestValue() { |
| | | QualityInspectDto dto = validInspection(0); |
| | | dto.getQualityInspectParams().get(0).setTestValue(" "); |
| | | |
| | | AjaxResult result = controller.add(dto); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("请填åâ硬度âçæ£éªå¼", result.get(AjaxResult.MSG_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void processInspectionRequiresProcess() { |
| | | QualityInspectDto dto = validInspection(1); |
| | | dto.setProcess(null); |
| | | |
| | | AjaxResult result = controller.add(dto); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("è¿ç¨æ£éªå¿
须鿩工åº", result.get(AjaxResult.MSG_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void updateRejectsSubmittedInspection() { |
| | | QualityInspectDto dto = validInspection(2); |
| | | dto.setId(9L); |
| | | QualityInspect stored = new QualityInspect(); |
| | | stored.setInspectState(1); |
| | | when(inspectService.getById(9L)).thenReturn(stored); |
| | | |
| | | AjaxResult result = controller.update(dto); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("å·²æäº¤çæ£éªè®°å½ä¸è½ä¿®æ¹", result.get(AjaxResult.MSG_TAG)); |
| | | verify(inspectService, never()).updateQualityInspect(any()); |
| | | } |
| | | |
| | | @Test |
| | | void updateAcceptsUnsubmittedInspection() { |
| | | QualityInspectDto dto = validInspection(2); |
| | | dto.setId(9L); |
| | | QualityInspect stored = new QualityInspect(); |
| | | stored.setInspectState(0); |
| | | when(inspectService.getById(9L)).thenReturn(stored); |
| | | when(inspectService.updateQualityInspect(dto)).thenReturn(1); |
| | | |
| | | AjaxResult result = controller.update(dto); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | } |
| | | |
| | | @Test |
| | | void listPageDelegatesByInspectionType() { |
| | | Page<QualityInspect> page = new Page<>(1, 10); |
| | | QualityInspect query = new QualityInspect(); |
| | | query.setInspectType(2); |
| | | when(inspectService.qualityInspectListPage(page, query)).thenReturn(page); |
| | | |
| | | AjaxResult result = controller.qualityInspectListPage(page, query); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | assertEquals(page, result.get(AjaxResult.DATA_TAG)); |
| | | } |
| | | |
| | | private QualityInspectDto validInspection(int inspectType) { |
| | | QualityInspectDto dto = new QualityInspectDto(); |
| | | dto.setInspectType(inspectType); |
| | | dto.setProductId(10L); |
| | | dto.setCheckTime(new Date()); |
| | | dto.setQuantity(BigDecimal.ONE); |
| | | dto.setCheckResult("åæ ¼"); |
| | | dto.setProcess(inspectType == 1 ? "è£
é
" : null); |
| | | QualityInspectParam parameter = new QualityInspectParam(); |
| | | parameter.setParameterItem("硬度"); |
| | | parameter.setStandardValue("50-55"); |
| | | parameter.setTestValue("52"); |
| | | dto.setQualityInspectParams(Collections.singletonList(parameter)); |
| | | return dto; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.quality.dto.QualityMetricDto; |
| | | import com.ruoyi.quality.mapper.QualityTestStandardBindingMapper; |
| | | import com.ruoyi.quality.mapper.QualityTestStandardParamMapper; |
| | | import com.ruoyi.quality.pojo.QualityTestStandard; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardBinding; |
| | | import com.ruoyi.quality.pojo.QualityTestStandardParam; |
| | | import com.ruoyi.quality.service.IQualityTestStandardService; |
| | | import com.ruoyi.quality.service.QualityTestStandardBindingService; |
| | | import com.ruoyi.quality.service.QualityTestStandardParamService; |
| | | import org.junit.jupiter.api.BeforeEach; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.junit.jupiter.api.extension.ExtendWith; |
| | | import org.mockito.ArgumentCaptor; |
| | | import org.mockito.Mock; |
| | | import org.mockito.junit.jupiter.MockitoExtension; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertEquals; |
| | | import static org.junit.jupiter.api.Assertions.assertFalse; |
| | | import static org.junit.jupiter.api.Assertions.assertSame; |
| | | import static org.junit.jupiter.api.Assertions.assertTrue; |
| | | import static org.mockito.ArgumentMatchers.any; |
| | | import static org.mockito.Mockito.never; |
| | | import static org.mockito.Mockito.verify; |
| | | import static org.mockito.Mockito.when; |
| | | |
| | | @ExtendWith(MockitoExtension.class) |
| | | class QualityMetricControllerTest { |
| | | |
| | | @Mock |
| | | private QualityTestStandardParamMapper paramMapper; |
| | | @Mock |
| | | private QualityTestStandardParamService paramService; |
| | | @Mock |
| | | private QualityTestStandardBindingService bindingService; |
| | | @Mock |
| | | private IQualityTestStandardService standardService; |
| | | @Mock |
| | | private QualityTestStandardBindingMapper bindingMapper; |
| | | |
| | | private QualityMetricController controller; |
| | | |
| | | @BeforeEach |
| | | void setUp() { |
| | | controller = new QualityMetricController(paramMapper, paramService, |
| | | bindingService, standardService, bindingMapper); |
| | | } |
| | | |
| | | @Test |
| | | void addCreatesStandardAndBindingForFirstMetric() { |
| | | QualityMetricDto metric = metric(10L, null, "硬度", "HRC", "50-55", "51-54"); |
| | | when(bindingService.list(any(Wrapper.class))).thenReturn(Collections.emptyList()); |
| | | when(standardService.save(any(QualityTestStandard.class))).thenAnswer(invocation -> { |
| | | QualityTestStandard standard = invocation.getArgument(0); |
| | | standard.setId(100L); |
| | | return true; |
| | | }); |
| | | when(bindingService.save(any(QualityTestStandardBinding.class))).thenReturn(true); |
| | | when(paramService.save(any(QualityTestStandardParam.class))).thenReturn(true); |
| | | |
| | | AjaxResult result = controller.add(metric); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | ArgumentCaptor<QualityTestStandardBinding> bindingCaptor = |
| | | ArgumentCaptor.forClass(QualityTestStandardBinding.class); |
| | | verify(bindingService).save(bindingCaptor.capture()); |
| | | assertEquals(10L, bindingCaptor.getValue().getProductId()); |
| | | assertEquals(100, bindingCaptor.getValue().getTestStandardId()); |
| | | |
| | | ArgumentCaptor<QualityTestStandardParam> parameterCaptor = |
| | | ArgumentCaptor.forClass(QualityTestStandardParam.class); |
| | | verify(paramService).save(parameterCaptor.capture()); |
| | | assertEquals(100L, parameterCaptor.getValue().getTestStandardId()); |
| | | assertEquals("硬度", parameterCaptor.getValue().getParameterItem()); |
| | | assertEquals("50-55", parameterCaptor.getValue().getStandardValue()); |
| | | } |
| | | |
| | | @Test |
| | | void addReusesExistingProductBinding() { |
| | | QualityTestStandardBinding existing = new QualityTestStandardBinding(); |
| | | existing.setProductId(10L); |
| | | existing.setTestStandardId(88); |
| | | when(bindingService.list(any(Wrapper.class))).thenReturn(Collections.singletonList(existing)); |
| | | QualityTestStandard matched = new QualityTestStandard(); |
| | | matched.setId(88L); |
| | | matched.setInspectType(0); |
| | | when(standardService.getOne(any(Wrapper.class))).thenReturn(matched); |
| | | when(paramService.save(any(QualityTestStandardParam.class))).thenReturn(true); |
| | | |
| | | AjaxResult result = controller.add(metric(10L, null, "é¿åº¦", "mm", "100", "99-101")); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | verify(standardService, never()).save(any(QualityTestStandard.class)); |
| | | verify(bindingService, never()).save(any(QualityTestStandardBinding.class)); |
| | | ArgumentCaptor<QualityTestStandardParam> captor = |
| | | ArgumentCaptor.forClass(QualityTestStandardParam.class); |
| | | verify(paramService).save(captor.capture()); |
| | | assertEquals(88L, captor.getValue().getTestStandardId()); |
| | | } |
| | | |
| | | @Test |
| | | void addRejectsMissingProductWithoutWritingData() { |
| | | AjaxResult result = controller.add(metric(null, null, "é¿åº¦", "mm", "100", null)); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("请å
éæ©äº§å", result.get(AjaxResult.MSG_TAG)); |
| | | verify(standardService, never()).save(any(QualityTestStandard.class)); |
| | | verify(paramService, never()).save(any(QualityTestStandardParam.class)); |
| | | } |
| | | |
| | | @Test |
| | | void updateChangesOnlyEditableMetricFields() { |
| | | QualityTestStandardParam stored = new QualityTestStandardParam(); |
| | | stored.setId(5L); |
| | | stored.setTestStandardId(88L); |
| | | stored.setParameterItem("æ§ææ "); |
| | | when(paramService.getById(5L)).thenReturn(stored); |
| | | when(paramService.updateById(any(QualityTestStandardParam.class))).thenReturn(true); |
| | | |
| | | AjaxResult result = controller.update(metric(null, 5L, "æ°ææ ", "mm", "20", "19-21")); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | ArgumentCaptor<QualityTestStandardParam> captor = |
| | | ArgumentCaptor.forClass(QualityTestStandardParam.class); |
| | | verify(paramService).updateById(captor.capture()); |
| | | assertSame(stored, captor.getValue()); |
| | | assertEquals(88L, stored.getTestStandardId()); |
| | | assertEquals("æ°ææ ", stored.getParameterItem()); |
| | | assertEquals("20", stored.getStandardValue()); |
| | | } |
| | | |
| | | @Test |
| | | void updateReportsMissingMetric() { |
| | | when(paramService.getById(99L)).thenReturn(null); |
| | | |
| | | AjaxResult result = controller.update(metric(null, 99L, "ææ ", "mm", "1", null)); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("æ£æµææ ä¸åå¨", result.get(AjaxResult.MSG_TAG)); |
| | | verify(paramService, never()).updateById(any(QualityTestStandardParam.class)); |
| | | } |
| | | |
| | | @Test |
| | | void deleteRejectsEmptySelectionAndDeletesSelectedMetrics() { |
| | | AjaxResult emptyResult = controller.delete(Collections.emptyList()); |
| | | assertTrue(emptyResult.isError()); |
| | | verify(paramService, never()).removeBatchByIds(any()); |
| | | |
| | | when(paramService.removeBatchByIds(Arrays.asList(1L, 2L))).thenReturn(true); |
| | | AjaxResult deleteResult = controller.delete(Arrays.asList(1L, 2L)); |
| | | assertTrue(deleteResult.isSuccess()); |
| | | } |
| | | |
| | | @Test |
| | | void listByProductReturnsMapperData() { |
| | | QualityTestStandardParam parameter = new QualityTestStandardParam(); |
| | | parameter.setId(1L); |
| | | when(paramMapper.selectListByProductId(10L, 0, null)).thenReturn(Collections.singletonList(parameter)); |
| | | |
| | | AjaxResult result = controller.listByProduct(10L, 0, null); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | assertEquals(Collections.singletonList(parameter), result.get(AjaxResult.DATA_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void listPageReturnsPagedMapperData() { |
| | | Page<QualityTestStandardParam> expected = new Page<>(1, 10); |
| | | expected.setRecords(Collections.singletonList(new QualityTestStandardParam())); |
| | | when(paramMapper.selectPageByProductId(any(Page.class), any(Long.class), any(), any())) |
| | | .thenReturn(expected); |
| | | |
| | | AjaxResult result = controller.listPage(new Page<>(1, 10), 10L, 0, null); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | assertSame(expected, result.get(AjaxResult.DATA_TAG)); |
| | | assertFalse(expected.getRecords().isEmpty()); |
| | | } |
| | | |
| | | private QualityMetricDto metric(Long productId, Long id, String name, |
| | | String unit, String standardValue, String controlValue) { |
| | | QualityMetricDto metric = new QualityMetricDto(); |
| | | metric.setProductId(productId); |
| | | metric.setId(id); |
| | | metric.setParameterItem(name); |
| | | metric.setUnit(unit); |
| | | metric.setStandardValue(standardValue); |
| | | metric.setControlValue(controlValue); |
| | | return metric; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.controller; |
| | | |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.quality.pojo.QualityUnqualified; |
| | | import com.ruoyi.quality.service.IQualityUnqualifiedService; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.junit.jupiter.api.extension.ExtendWith; |
| | | import org.mockito.InjectMocks; |
| | | import org.mockito.Mock; |
| | | import org.mockito.junit.jupiter.MockitoExtension; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertEquals; |
| | | import static org.junit.jupiter.api.Assertions.assertTrue; |
| | | import static org.mockito.ArgumentMatchers.any; |
| | | import static org.mockito.Mockito.never; |
| | | import static org.mockito.Mockito.verify; |
| | | import static org.mockito.Mockito.when; |
| | | |
| | | @ExtendWith(MockitoExtension.class) |
| | | class QualityUnqualifiedControllerTest { |
| | | |
| | | @Mock private IQualityUnqualifiedService service; |
| | | @InjectMocks private QualityUnqualifiedController controller; |
| | | |
| | | @Test |
| | | void addCreatesPendingRecordByDefault() { |
| | | QualityUnqualified record = pendingRecord(); |
| | | record.setInspectState(null); |
| | | when(service.save(record)).thenReturn(true); |
| | | |
| | | AjaxResult result = controller.add(record); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | assertEquals(0, record.getInspectState()); |
| | | } |
| | | |
| | | @Test |
| | | void addRejectsMissingReason() { |
| | | QualityUnqualified record = pendingRecord(); |
| | | record.setDefectivePhenomena(" "); |
| | | |
| | | AjaxResult result = controller.add(record); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("请填åä¸åæ ¼åå æç°è±¡", result.get(AjaxResult.MSG_TAG)); |
| | | verify(service, never()).save(any()); |
| | | } |
| | | |
| | | @Test |
| | | void processedRecordRequiresTreatmentMethod() { |
| | | QualityUnqualified record = processedRecord(); |
| | | record.setDealType(null); |
| | | |
| | | AjaxResult result = controller.add(record); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("è¯·éæ©å¤çæ¹å¼", result.get(AjaxResult.MSG_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void processedRecordRequiresTreatmentResult() { |
| | | QualityUnqualified record = processedRecord(); |
| | | record.setDealResult(null); |
| | | |
| | | AjaxResult result = controller.add(record); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("请填åå¤çç»æ", result.get(AjaxResult.MSG_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void updateReportsMissingRecord() { |
| | | QualityUnqualified record = processedRecord(); |
| | | record.setId(99L); |
| | | when(service.getById(99L)).thenReturn(null); |
| | | |
| | | AjaxResult result = controller.update(record); |
| | | |
| | | assertTrue(result.isError()); |
| | | assertEquals("ä¸åæ ¼è®°å½ä¸åå¨", result.get(AjaxResult.MSG_TAG)); |
| | | } |
| | | |
| | | @Test |
| | | void updateClosesCompleteRecord() { |
| | | QualityUnqualified record = processedRecord(); |
| | | record.setId(8L); |
| | | when(service.getById(8L)).thenReturn(pendingRecord()); |
| | | when(service.updateById(record)).thenReturn(true); |
| | | |
| | | AjaxResult result = controller.update(record); |
| | | |
| | | assertTrue(result.isSuccess()); |
| | | } |
| | | |
| | | private QualityUnqualified pendingRecord() { |
| | | QualityUnqualified record = new QualityUnqualified(); |
| | | record.setInspectType(0); |
| | | record.setInspectState(0); |
| | | record.setProductId(10L); |
| | | record.setQuantity(BigDecimal.ONE); |
| | | record.setDefectivePhenomena("表é¢å伤"); |
| | | return record; |
| | | } |
| | | |
| | | private QualityUnqualified processedRecord() { |
| | | QualityUnqualified record = pendingRecord(); |
| | | record.setInspectState(1); |
| | | record.setDealType("rework"); |
| | | record.setDealResult("è¿å·¥å夿£åæ ¼"); |
| | | record.setDealName("å¼ ä¸"); |
| | | record.setDealTime(new Date()); |
| | | return record; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.quality.service; |
| | | |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.procurementrecord.service.ProcurementRecordService; |
| | | import com.ruoyi.quality.dto.QualityInspectDto; |
| | | import com.ruoyi.quality.mapper.QualityInspectMapper; |
| | | import com.ruoyi.quality.mapper.QualityTestStandardMapper; |
| | | import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; |
| | | import com.ruoyi.quality.pojo.QualityInspect; |
| | | import com.ruoyi.quality.pojo.QualityInspectParam; |
| | | import com.ruoyi.quality.service.impl.QualityInspectServiceImpl; |
| | | import com.ruoyi.sales.mapper.SalesLedgerProductMapper; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.junit.jupiter.api.extension.ExtendWith; |
| | | import org.mockito.InjectMocks; |
| | | import org.mockito.ArgumentCaptor; |
| | | import org.mockito.Mock; |
| | | import org.mockito.junit.jupiter.MockitoExtension; |
| | | |
| | | import java.util.Collections; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertEquals; |
| | | import static org.junit.jupiter.api.Assertions.assertThrows; |
| | | import static org.mockito.ArgumentMatchers.any; |
| | | import static org.mockito.Mockito.never; |
| | | import static org.mockito.Mockito.verify; |
| | | import static org.mockito.Mockito.when; |
| | | |
| | | @ExtendWith(MockitoExtension.class) |
| | | class QualityInspectServiceImplTest { |
| | | |
| | | @Mock private QualityInspectMapper inspectMapper; |
| | | @Mock private IQualityInspectParamService paramService; |
| | | @Mock private QualityTestStandardMapper standardMapper; |
| | | @Mock private QualityUnqualifiedMapper unqualifiedMapper; |
| | | @Mock private SalesLedgerProductMapper productMapper; |
| | | @Mock private ProcurementRecordService procurementRecordService; |
| | | @InjectMocks private QualityInspectServiceImpl service; |
| | | |
| | | @Test |
| | | void addPersistsInspectionAndMetrics() { |
| | | QualityInspectDto dto = new QualityInspectDto(); |
| | | QualityInspectParam parameter = new QualityInspectParam(); |
| | | dto.setQualityInspectParams(Collections.singletonList(parameter)); |
| | | when(inspectMapper.insert(any(QualityInspect.class))).thenAnswer(invocation -> { |
| | | QualityInspect inspect = invocation.getArgument(0); |
| | | inspect.setId(12L); |
| | | return 1; |
| | | }); |
| | | when(paramService.saveBatch(dto.getQualityInspectParams())).thenReturn(true); |
| | | |
| | | int result = service.add(dto); |
| | | |
| | | assertEquals(1, result); |
| | | ArgumentCaptor<QualityInspect> inspectCaptor = ArgumentCaptor.forClass(QualityInspect.class); |
| | | verify(inspectMapper).insert(inspectCaptor.capture()); |
| | | assertEquals(0, inspectCaptor.getValue().getInspectState()); |
| | | assertEquals(12L, parameter.getInspectId()); |
| | | } |
| | | |
| | | @Test |
| | | void submitRejectsRepeatedSubmissionBeforeCreatingSideEffects() { |
| | | QualityInspect submitted = new QualityInspect(); |
| | | submitted.setId(5L); |
| | | submitted.setInspectState(1); |
| | | when(inspectMapper.selectById(5L)).thenReturn(submitted); |
| | | |
| | | QualityInspect request = new QualityInspect(); |
| | | request.setId(5L); |
| | | ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request)); |
| | | |
| | | assertEquals("æ£éªè®°å½å·²æäº¤ï¼è¯·å¿é夿ä½", error.getMessage()); |
| | | verify(unqualifiedMapper, never()).insert(any()); |
| | | verify(procurementRecordService, never()).add(any()); |
| | | } |
| | | |
| | | @Test |
| | | void submitRejectsInspectionWithoutMetrics() { |
| | | QualityInspect stored = pendingInspection(); |
| | | when(inspectMapper.selectById(5L)).thenReturn(stored); |
| | | when(paramService.list(any())).thenReturn(Collections.emptyList()); |
| | | |
| | | QualityInspect request = new QualityInspect(); |
| | | request.setId(5L); |
| | | ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request)); |
| | | |
| | | assertEquals("æ£éªé¡¹ç®ä¸ºç©ºï¼ä¸è½æäº¤", error.getMessage()); |
| | | } |
| | | |
| | | @Test |
| | | void submitRejectsMetricWithoutTestValue() { |
| | | QualityInspect stored = pendingInspection(); |
| | | QualityInspectParam parameter = new QualityInspectParam(); |
| | | parameter.setParameterItem("硬度"); |
| | | when(inspectMapper.selectById(5L)).thenReturn(stored); |
| | | when(paramService.list(any())).thenReturn(Collections.singletonList(parameter)); |
| | | |
| | | QualityInspect request = new QualityInspect(); |
| | | request.setId(5L); |
| | | ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request)); |
| | | |
| | | assertEquals("æ£éªé¡¹ç®â硬度âå°æªå¡«åæ£éªå¼", error.getMessage()); |
| | | } |
| | | |
| | | private QualityInspect pendingInspection() { |
| | | QualityInspect stored = new QualityInspect(); |
| | | stored.setId(5L); |
| | | stored.setInspectState(0); |
| | | stored.setCheckResult("åæ ¼"); |
| | | return stored; |
| | | } |
| | | } |