feat(mes): 新增质检指标分组树和平行测量功能
- 在 mes_qc_indicator 表新增 parent_id、item_type、formula_text、unit_text、sort_order 字段
- 在 mes_qc_indicator_result_detail 表新增 measure_no 字段支持平行测量
- 在质检相关表添加采样地点、证书编号、执行标准、复核审核人字段
- 实现质检指标分组树形结构和排序功能
- 支持平行测量多批次数据录入和展示
- 新增检验报告打印功能,包含签字区和表头信息
- 更新流程文档和错误码配置以支持新功能
- 优化控制器返回完整的指标层级关系数据
已删除100个文件
已添加7个文件
已修改42个文件
| | |
| | | {"stage": "èå¨", "action": "审æ¹éè¿æå·¥åºæ è®°: åå²âèªå¨ç©ææ¶èæ£çº¿è¾¹åº(å
许è´åºå)ï¼è´¨æ£â产åºå¾
æ£è¡ç IPQCï¼å
³é®éæ£âç´æ¥äº§åºå
¥åº", "roles": ["ç³»ç»èªå¨"]}, |
| | | {"stage": "å®å·¥", "action": "ä»
æ«éå·¥åºååå·¥åå·²ç产æ°éï¼è¾¾æ èªå¨å®æï¼MPS ç´¯è®¡å¤æå®æå¹¶åäºä»¶ç»éå®è®¢å", "roles": ["ç³»ç»èªå¨"]}]}, |
| | | {"id": "quality", "name": "è´¨éæµç¨", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c", |
| | | "summary": "å鿣éªé¸å£(IQC/IPQC/OQC/RQCï¼äºæ 0â4) + å¤å®åæ(åæ ¼/ç¹é/éè´§/æ¥åº) + NCR è¯å®¡å¤ç½®å
³éï¼AI æä¾å¤å®å»ºè®®ï¼NCR å½åä»
å°è´¦ä¸è§¦åè¿å·¥åã", |
| | | "summary": "å鿣éªé¸å£(IQC/IPQC/OQC/RQCï¼äºæ 0â4) + å¤å®åæ(åæ ¼/ç¹é/éè´§/æ¥åº) + NCR è¯å®¡å¤ç½®å
³éï¼AI æä¾å¤å®å»ºè®®ï¼NCR å½åä»
å°è´¦ä¸è§¦åè¿å·¥åãæ¯æåå·¥æ¥åèå¼ï¼åç»ææ æ +å
¬å¼ææ¬+å¹³è¡æµéæ¹æ¬¡+éæ ·è¡¨å¤´+ç¾ååºï¼æµè§å¨æå°æ£éªæ¥åã", |
| | | "steps": [ |
| | | {"stage": "æ¥æ", "action": "å°è´§éç¥/å¤åå
¥åºâIQCï¼ç»è®ºå忍è¿å¾
å
¥åºæè§¦åéè´§", "roles": ["IQC è´¨æ£å"]}, |
| | | {"stage": "è¿ç¨", "action": "æ¥å·¥è´¨æ£å·¥åºäº§åºè¡âIPQCï¼åæ ¼æè¡å
¥åºãä¸åæ ¼çæ NCR", "roles": ["IPQC è´¨æ£å"]}, |
| | | {"stage": "åºè´§", "action": "éå®åºåºæäº¤âOQCï¼å®æååºåºåè¿å
¥å¾
æ£è´§", "roles": ["OQC è´¨æ£å"]}, |
| | | {"stage": "éè´§", "action": "éæ/éå®éè´§/å®åéè´§âRQCï¼ç»è®ºåè°åæ®ä¸å®å", "roles": ["RQC è´¨æ£å"]}, |
| | | {"stage": "æ¥å", "action": "æ£éªç»ææåç»æ +æµéæ¹æ¬¡å½å
¥ï¼/indicator-result/report èååå端æå°æ£éªæ¥å(å«éæ ·å°ç¹/è¯ä¹¦ç¼å·/æ§è¡æ å/夿 ¸Â·å®¡æ ¸ç¾ååº)", "roles": ["è´¨æ£å", "夿 ¸äºº", "å®¡æ ¸äºº"]}, |
| | | {"stage": "ä¸åæ ¼", "action": "NCR: å¾
è¯å®¡âè¯å®¡âå¤ç½®(éè´§/æ¥åº/è¿å·¥/è®©æ¥æ¥æ¶/é级)âå
³é", "roles": ["è´¨éå·¥ç¨å¸"]}]}, |
| | | {"id": "warehouse", "name": "ä»å¨æµç¨", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6", |
| | | "summary": "15 ç±»åæ®é©±å¨åºåå°è´¦(å
å
ç»ãåé)åå¨ï¼å
¨é¨ç»äºå¡æµæ°´ççï¼æ¯æè°æ¨å¨éãçç¹è°æ´ãæ¹æ¬¡/SN 追溯ãåºåå ç¨ä¸å级å»ç»ã线边èæåºè´åºåï¼å¯¹å¤ WmsStockApi ä¾ ERP æ¶åã", |
| | |
| | | {"name": "IQCæ¥ææ£éª", "module": "è´¨é", "table": "mes_qc_iqc", "doc": "å°è´§éç¥/å¤åå
¥åºè§¦åï¼è稿0â宿4ï¼ç»è®ºå忥æºåæ®", "upstream": ["å°è´§éç¥", "å¤åå
¥åº"], "downstream": ["éè´å
¥åº", "ä¾åºåéè´§", "NCR"], "keywords": "IQC æ¥ææ£éª"}, |
| | | {"name": "IPQCè¿ç¨æ£éª", "module": "è´¨é", "table": "mes_qc_ipqc", "doc": "æ¥å·¥è´¨æ£å·¥åºäº§åºè¡è§¦åï¼å®æåè°æ¨è¿æ¥å·¥ä¸äº§åºå
¥åº", "upstream": ["æ¥å·¥"], "downstream": ["产åºå
¥åº", "NCR"], "keywords": "IPQC è¿ç¨æ£éª å·¡æ£"}, |
| | | {"name": "OQCåºè´§æ£éª", "module": "è´¨é", "table": "mes_qc_oqc", "doc": "éå®åºåºæäº¤è§¦åï¼å®ææ¨è¿åºåºåå¾
æ£è´§", "upstream": ["éå®åºåºå"], "downstream": ["éå®åºåºå(æ¨è¿)"], "keywords": "OQC åºè´§æ£éª åºåæ£éª"}, |
| | | {"name": "RQCéè´§æ£éª", "module": "è´¨é", "table": "mes_qc_rqc", "doc": "ç产éæ/éå®éè´§/å®åé货触åï¼ç»è®ºåè°å®å", "upstream": ["éæ", "éè´§"], "downstream": ["éè´§å
¥åº", "å®ååè°"], "keywords": "RQC éè´§æ£éª"}, |
| | | {"name": "RQCéè´§æ£éª", "module": "è´¨é", "table": "mes_qc_rqc", "doc": "ç产éæ/éå®éè´§/å®åé货触åï¼ç»è®ºåè°å®åï¼åç±»æ£éªå忝æéæ ·å°ç¹/è¯ä¹¦ç¼å·/æ§è¡æ å表头ä¸å¤æ ¸Â·å®¡æ ¸äººï¼å¹¶å¯æå°æ£éªæ¥å", "upstream": ["éæ", "éè´§"], "downstream": ["éè´§å
¥åº", "å®ååè°", "æ£éªæ¥åæå°"], "keywords": "RQC éè´§æ£éª"}, |
| | | {"name": "æ£éªææ ", "module": "è´¨é", "table": "mes_qc_indicator", "doc": "æ¯æä¸¤çº§åç»æ (itemTypeå½å
¥/åç»+parentId)ãå
¬å¼ææ¬å±ç¤ºãå使æ¬ãå级æåºï¼åç»é¡¹ä¸å½å¼ï¼æå项ç¦å ï¼åå±çº§åç§°å¯éå¤", "upstream": [], "downstream": ["è´¨æ£æ¹æ¡", "æ£éªæ¥åæå°"], "keywords": "æ£éªææ indicator åç» å
¬å¼ åå·¥"}, |
| | | {"name": "æ£éªæ¥åæå°", "module": "è´¨é", "table": "mes_qc_indicator_result_detail", "doc": "åå·¥æ¥åèå¼ï¼å¹³è¡æµéæ¹æ¬¡(measure_no)+åç»ç©éµ+å
¬å¼å+ç¾ååºï¼/mes/qc/indicator-result/report èåï¼å端æµè§å¨æå°", "upstream": ["IQCæ¥ææ£éª", "IPQCè¿ç¨æ£éª", "OQCåºè´§æ£éª", "RQCéè´§æ£éª", "æ£éªææ "], "downstream": [], "keywords": "æå° æ¥å æµéæ¹æ¬¡ ç¾å æ£ä¸é GB/T6027"}, |
| | | {"name": "NCRä¸åæ ¼å", "module": "è´¨é", "table": "mes_qc_ncr", "doc": "å¾
è¯å®¡0âå·²è¯å®¡6âå·²å¤ç½®7âå·²å
³é8ï¼å¤ç½®:éè´§/æ¥åº/è¿å·¥/è®©æ¥æ¥æ¶/é级", "upstream": ["IQC/IPQC/OQC/RQC"], "downstream": ["éè´§/æ¥åº/è¿å·¥(å°è´¦)"], "keywords": "NCR ä¸åæ ¼ å¤ç½® ç¹é æ¥åº"}, |
| | | {"name": "设å¤", "module": "设å¤", "table": "mes_dv_machinery", "doc": "å°è´¦ç¶æ:åæº/ç产ä¸/ä¿å
»ä¸ï¼ç¹æ£Â·ä¿å
»Â·ç»´ä¿®å·¥åï¼AI é£é©é¢æµæ¶è´¹å
¶æ°æ®", "upstream": [], "downstream": ["ç¹æ£", "ç»´ä¿®", "ç产é£é©é¢æµ"], "keywords": "è®¾å¤ ç¹æ£ ä¿å
» ç»´ä¿® machinery"}, |
| | | {"name": "å®åå·¥å", "module": "å®å", "table": "after_sale_ticket", "doc": "è稿0âå¤çä¸10âå¾
å
¥åº30âå¾
鿬¾40âå®ç»50âå
³é60/åæ¶99ï¼å¤å®:ä¸è¬/ç»´ä¿®/éè´§", "upstream": ["客æ·åé¦(人工å½å
¥)"], "downstream": ["维修记å½", "éè´§ç³è¯·"], "keywords": "å®å å·¥å ticket ç»´ä¿®"}, |
| | |
| | | {"name": "IQCæ¥ææ£éª", "module": "è´¨é", "table": "mes_qc_iqc", "doc": "å°è´§éç¥/å¤åå
¥åºè§¦åï¼è稿0â宿4ï¼ç»è®ºå忥æºåæ®", "upstream": ["å°è´§éç¥", "å¤åå
¥åº"], "downstream": ["éè´å
¥åº", "ä¾åºåéè´§", "NCR"], "keywords": "IQC æ¥ææ£éª"}, |
| | | {"name": "IPQCè¿ç¨æ£éª", "module": "è´¨é", "table": "mes_qc_ipqc", "doc": "æ¥å·¥è´¨æ£å·¥åºäº§åºè¡è§¦åï¼å®æåè°æ¨è¿æ¥å·¥ä¸äº§åºå
¥åº", "upstream": ["æ¥å·¥"], "downstream": ["产åºå
¥åº", "NCR"], "keywords": "IPQC è¿ç¨æ£éª å·¡æ£"}, |
| | | {"name": "OQCåºè´§æ£éª", "module": "è´¨é", "table": "mes_qc_oqc", "doc": "éå®åºåºæäº¤è§¦åï¼å®ææ¨è¿åºåºåå¾
æ£è´§", "upstream": ["éå®åºåºå"], "downstream": ["éå®åºåºå(æ¨è¿)"], "keywords": "OQC åºè´§æ£éª åºåæ£éª"}, |
| | | {"name": "RQCéè´§æ£éª", "module": "è´¨é", "table": "mes_qc_rqc", "doc": "ç产éæ/éå®éè´§/å®åé货触åï¼ç»è®ºåè°å®å", "upstream": ["éæ", "éè´§"], "downstream": ["éè´§å
¥åº", "å®ååè°"], "keywords": "RQC éè´§æ£éª"}, |
| | | {"name": "RQCéè´§æ£éª", "module": "è´¨é", "table": "mes_qc_rqc", "doc": "ç产éæ/éå®éè´§/å®åé货触åï¼ç»è®ºåè°å®åï¼åç±»æ£éªå忝æéæ ·å°ç¹/è¯ä¹¦ç¼å·/æ§è¡æ å表头ä¸å¤æ ¸Â·å®¡æ ¸äººï¼å¹¶å¯æå°æ£éªæ¥å", "upstream": ["éæ", "éè´§"], "downstream": ["éè´§å
¥åº", "å®ååè°", "æ£éªæ¥åæå°"], "keywords": "RQC éè´§æ£éª"}, |
| | | {"name": "æ£éªææ ", "module": "è´¨é", "table": "mes_qc_indicator", "doc": "æ¯æä¸¤çº§åç»æ (itemTypeå½å
¥/åç»+parentId)ãå
¬å¼ææ¬å±ç¤ºãå使æ¬ãå级æåºï¼åç»é¡¹ä¸å½å¼ï¼æå项ç¦å ï¼åå±çº§åç§°å¯éå¤", "upstream": [], "downstream": ["è´¨æ£æ¹æ¡", "æ£éªæ¥åæå°"], "keywords": "æ£éªææ indicator åç» å
¬å¼ åå·¥"}, |
| | | {"name": "æ£éªæ¥åæå°", "module": "è´¨é", "table": "mes_qc_indicator_result_detail", "doc": "åå·¥æ¥åèå¼ï¼å¹³è¡æµéæ¹æ¬¡(measure_no)+åç»ç©éµ+å
¬å¼å+ç¾ååºï¼/mes/qc/indicator-result/report èåï¼å端æµè§å¨æå°", "upstream": ["IQCæ¥ææ£éª", "IPQCè¿ç¨æ£éª", "OQCåºè´§æ£éª", "RQCéè´§æ£éª", "æ£éªææ "], "downstream": [], "keywords": "æå° æ¥å æµéæ¹æ¬¡ ç¾å æ£ä¸é GB/T6027"}, |
| | | {"name": "NCRä¸åæ ¼å", "module": "è´¨é", "table": "mes_qc_ncr", "doc": "å¾
è¯å®¡0âå·²è¯å®¡6âå·²å¤ç½®7âå·²å
³é8ï¼å¤ç½®:éè´§/æ¥åº/è¿å·¥/è®©æ¥æ¥æ¶/é级", "upstream": ["IQC/IPQC/OQC/RQC"], "downstream": ["éè´§/æ¥åº/è¿å·¥(å°è´¦)"], "keywords": "NCR ä¸åæ ¼ å¤ç½® ç¹é æ¥åº"}, |
| | | {"name": "设å¤", "module": "设å¤", "table": "mes_dv_machinery", "doc": "å°è´¦ç¶æ:åæº/ç产ä¸/ä¿å
»ä¸ï¼ç¹æ£Â·ä¿å
»Â·ç»´ä¿®å·¥åï¼AI é£é©é¢æµæ¶è´¹å
¶æ°æ®", "upstream": [], "downstream": ["ç¹æ£", "ç»´ä¿®", "ç产é£é©é¢æµ"], "keywords": "è®¾å¤ ç¹æ£ ä¿å
» ç»´ä¿® machinery"}, |
| | | {"name": "å®åå·¥å", "module": "å®å", "table": "after_sale_ticket", "doc": "è稿0âå¤çä¸10âå¾
å
¥åº30âå¾
鿬¾40âå®ç»50âå
³é60/åæ¶99ï¼å¤å®:ä¸è¬/ç»´ä¿®/éè´§", "upstream": ["客æ·åé¦(人工å½å
¥)"], "downstream": ["维修记å½", "éè´§ç³è¯·"], "keywords": "å®å å·¥å ticket ç»´ä¿®"}, |
| | |
| | | {"stage": "èå¨", "action": "审æ¹éè¿æå·¥åºæ è®°: åå²âèªå¨ç©ææ¶èæ£çº¿è¾¹åº(å
许è´åºå)ï¼è´¨æ£â产åºå¾
æ£è¡ç IPQCï¼å
³é®éæ£âç´æ¥äº§åºå
¥åº", "roles": ["ç³»ç»èªå¨"]}, |
| | | {"stage": "å®å·¥", "action": "ä»
æ«éå·¥åºååå·¥åå·²ç产æ°éï¼è¾¾æ èªå¨å®æï¼MPS ç´¯è®¡å¤æå®æå¹¶åäºä»¶ç»éå®è®¢å", "roles": ["ç³»ç»èªå¨"]}]}, |
| | | {"id": "quality", "name": "è´¨éæµç¨", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c", |
| | | "summary": "å鿣éªé¸å£(IQC/IPQC/OQC/RQCï¼äºæ 0â4) + å¤å®åæ(åæ ¼/ç¹é/éè´§/æ¥åº) + NCR è¯å®¡å¤ç½®å
³éï¼AI æä¾å¤å®å»ºè®®ï¼NCR å½åä»
å°è´¦ä¸è§¦åè¿å·¥åã", |
| | | "summary": "å鿣éªé¸å£(IQC/IPQC/OQC/RQCï¼äºæ 0â4) + å¤å®åæ(åæ ¼/ç¹é/éè´§/æ¥åº) + NCR è¯å®¡å¤ç½®å
³éï¼AI æä¾å¤å®å»ºè®®ï¼NCR å½åä»
å°è´¦ä¸è§¦åè¿å·¥åãæ¯æåå·¥æ¥åèå¼ï¼åç»ææ æ +å
¬å¼ææ¬+å¹³è¡æµéæ¹æ¬¡+éæ ·è¡¨å¤´+ç¾ååºï¼æµè§å¨æå°æ£éªæ¥åã", |
| | | "steps": [ |
| | | {"stage": "æ¥æ", "action": "å°è´§éç¥/å¤åå
¥åºâIQCï¼ç»è®ºå忍è¿å¾
å
¥åºæè§¦åéè´§", "roles": ["IQC è´¨æ£å"]}, |
| | | {"stage": "è¿ç¨", "action": "æ¥å·¥è´¨æ£å·¥åºäº§åºè¡âIPQCï¼åæ ¼æè¡å
¥åºãä¸åæ ¼çæ NCR", "roles": ["IPQC è´¨æ£å"]}, |
| | | {"stage": "åºè´§", "action": "éå®åºåºæäº¤âOQCï¼å®æååºåºåè¿å
¥å¾
æ£è´§", "roles": ["OQC è´¨æ£å"]}, |
| | | {"stage": "éè´§", "action": "éæ/éå®éè´§/å®åéè´§âRQCï¼ç»è®ºåè°åæ®ä¸å®å", "roles": ["RQC è´¨æ£å"]}, |
| | | {"stage": "æ¥å", "action": "æ£éªç»ææåç»æ +æµéæ¹æ¬¡å½å
¥ï¼/indicator-result/report èååå端æå°æ£éªæ¥å(å«éæ ·å°ç¹/è¯ä¹¦ç¼å·/æ§è¡æ å/夿 ¸Â·å®¡æ ¸ç¾ååº)", "roles": ["è´¨æ£å", "夿 ¸äºº", "å®¡æ ¸äºº"]}, |
| | | {"stage": "ä¸åæ ¼", "action": "NCR: å¾
è¯å®¡âè¯å®¡âå¤ç½®(éè´§/æ¥åº/è¿å·¥/è®©æ¥æ¥æ¶/é级)âå
³é", "roles": ["è´¨éå·¥ç¨å¸"]}]}, |
| | | {"id": "warehouse", "name": "ä»å¨æµç¨", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6", |
| | | "summary": "15 ç±»åæ®é©±å¨åºåå°è´¦(å
å
ç»ãåé)åå¨ï¼å
¨é¨ç»äºå¡æµæ°´ççï¼æ¯æè°æ¨å¨éãçç¹è°æ´ãæ¹æ¬¡/SN 追溯ãåºåå ç¨ä¸å级å»ç»ã线边èæåºè´åºåï¼å¯¹å¤ WmsStockApi ä¾ ERP æ¶åã", |
| | |
| | | N2 -->|å¤ç½®æ¹å¼:éè´§1æ¥åº2è¿å·¥3è®©æ¥æ¥æ¶4é级使ç¨5| N3[å·²å¤ç½®7] |
| | | N3 -->|å
³é| N4[å·²å
³é8] |
| | | Q8[æ¯ææ°æ®:è´¨æ£æ¹æ¡Â·æ£éªææ ·缺é·åºÂ·ææ ç»æ] --- A1 |
| | | Q9[åå·¥æ¥åå¢å¼º:ææ åç»æ +å
¬å¼ææ¬Â·å¹³è¡æµéæ¹æ¬¡Â·éæ ·å°ç¹/è¯ä¹¦ç¼å·/æ§è¡æ åè¡¨å¤´Â·å¤æ ¸äºº/å®¡æ ¸äºº] --- Q8 |
| | | A1 & A2 & A3 & A4 --> P1[æ£éªæ¥ååæå°Â·å端æµè§å¨æå°Â·å«ç¾ååº] |
| | |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµé¡¹ç¼ç ', |
| | | `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµé¡¹åç§°', |
| | | `parent_id` bigint NOT NULL DEFAULT '0' COMMENT 'ç˶æÅâ¡Ã¦Â â¡Ã§Â¼âå·ï¼Ë0=顶级ï¼â°', |
| | | `item_type` tinyint NOT NULL DEFAULT '1' COMMENT 'æÂ¡çâºÂ®Ã§Â±Â»Ã¥Å¾â¹Ã¯Â¼Å¡1=å½â¢Ã¥â¦Â¥Ã©Â¡Â¹Ã¯Â¼Å2=Ã¥Ëâ ç»â项', |
| | | `formula_text` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Ã¥â¦Â¬Ã¥Â¼Âå±â¢Ã§Â¤ÂºÃ¦ââ¡Ã¦Å¬ï¼Ëæâ°âå°报åâŠçâ¨ï¼Åä¸ÂÃ¥Ââ与计ç®âï¼â°', |
| | | `unit_text` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Ã¥Ââ¢Ã¤Â½Âæââ¡Ã¦Å¬ï¼Ëå¦â kg/móãâ¬Â/%ï¼Åæâ°âå°å±â¢Ã§Â¤ÂºÃ§â¨ï¼â°', |
| | | `sort_order` int NOT NULL DEFAULT '0' COMMENT 'Ã¥ÂÅ级æŽâåºÂå·', |
| | | `type` int DEFAULT NULL COMMENT 'æ£æµé¡¹ç±»å', |
| | | `tool` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµå·¥å
·', |
| | | `result_type` int DEFAULT NULL COMMENT 'ç»æå¼ç±»å', |
| | |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='MES è´¨æ£ææ '; |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_qc_indicator_parent_id` (`parent_id`) |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='MES è´¨æ£ææ '; |
| | | |
| | | -- ============ 表ï¼mes_qc_indicator_resultï¼ä»
DDLï¼æ æ°æ®ï¼ ============ |
| | | DROP TABLE IF EXISTS `mes_qc_indicator_result`; |
| | |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `result_id` bigint DEFAULT NULL COMMENT 'å
³èæ£éªç»æç¼å·', |
| | | `indicator_id` bigint DEFAULT NULL COMMENT 'æ£æµææ ç¼å·', |
| | | `measure_no` int NOT NULL DEFAULT '1' COMMENT 'æµâ¹Ã©â¡Âæâ°Â¹Ã¦Â¬Â¡Ã¥Â·ï¼Ë从 1 å¼â¬Ã¥Â§â¹Ã¯Â¼Åé»Ë认 1ï¼â°', |
| | | `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµå¼', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_qc_result_detail_measure` (`result_id`,`indicator_id`,`measure_no`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='MES æ£éªç»ææç»è®°å½'; |
| | | |
| | | -- ============ 表ï¼mes_qc_ipqcï¼ä»
DDLï¼æ æ°æ®ï¼ ============ |
| | |
| | | `inspect_date` datetime DEFAULT NULL COMMENT 'æ£æµæ¥æ', |
| | | `inspector_user_id` bigint DEFAULT NULL COMMENT 'æ£æµäººåç¨æ·ç¼å·', |
| | | `status` int DEFAULT NULL COMMENT 'ç¶æ', |
| | | `sampling_location` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éâ¡â¡Ã¦Â ·åŰçâ¹', |
| | | `certificate_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯Â书ç¼âå·/Ã¥ÂËæ ¼è¯Âå·', |
| | | `execute_standard` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æâ°Â§Ã¨Â¡Åæ â¡Ã¥â¡â ', |
| | | `audit_user_id` bigint DEFAULT NULL COMMENT 'å¤Â核人çâ¨æË·ç¼âå·', |
| | | `approve_user_id` bigint DEFAULT NULL COMMENT '审核人çâ¨æË·ç¼âå·', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | `inspect_date` datetime DEFAULT NULL COMMENT 'æ£æµæ¥æ', |
| | | `inspector_user_id` bigint DEFAULT NULL COMMENT 'æ£æµäººåç¨æ·ç¼å·', |
| | | `status` int DEFAULT NULL COMMENT 'ç¶æ', |
| | | `sampling_location` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éâ¡â¡Ã¦Â ·åŰçâ¹', |
| | | `certificate_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯Â书ç¼âå·/Ã¥ÂËæ ¼è¯Âå·', |
| | | `execute_standard` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æâ°Â§Ã¨Â¡Åæ â¡Ã¥â¡â ', |
| | | `audit_user_id` bigint DEFAULT NULL COMMENT 'å¤Â核人çâ¨æË·ç¼âå·', |
| | | `approve_user_id` bigint DEFAULT NULL COMMENT '审核人çâ¨æË·ç¼âå·', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | `inspect_date` datetime DEFAULT NULL COMMENT 'æ£æµæ¥æ', |
| | | `inspector_user_id` bigint DEFAULT NULL COMMENT 'æ£æµäººåç¨æ·ç¼å·', |
| | | `status` int DEFAULT NULL COMMENT 'ç¶æ', |
| | | `sampling_location` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éâ¡â¡Ã¦Â ·åŰçâ¹', |
| | | `certificate_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯Â书ç¼âå·/Ã¥ÂËæ ¼è¯Âå·', |
| | | `execute_standard` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æâ°Â§Ã¨Â¡Åæ â¡Ã¥â¡â ', |
| | | `audit_user_id` bigint DEFAULT NULL COMMENT 'å¤Â核人çâ¨æË·ç¼âå·', |
| | | `approve_user_id` bigint DEFAULT NULL COMMENT '审核人çâ¨æË·ç¼âå·', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | `inspect_date` datetime DEFAULT NULL COMMENT 'æ£æµæ¥æ', |
| | | `inspector_user_id` bigint DEFAULT NULL COMMENT 'æ£æµäººåç¨æ·ç¼å·', |
| | | `status` int DEFAULT NULL COMMENT 'ç¶æ', |
| | | `sampling_location` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éâ¡â¡Ã¦Â ·åŰçâ¹', |
| | | `certificate_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯Â书ç¼âå·/Ã¥ÂËæ ¼è¯Âå·', |
| | | `execute_standard` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æâ°Â§Ã¨Â¡Åæ â¡Ã¥â¡â ', |
| | | `audit_user_id` bigint DEFAULT NULL COMMENT 'å¤Â核人çâ¨æË·ç¼âå·', |
| | | `approve_user_id` bigint DEFAULT NULL COMMENT '审核人çâ¨æË·ç¼âå·', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ¹æ¡ç¼å·', |
| | | `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ¹æ¡åç§°', |
| | | `types` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµç§ç±»', |
| | | `default_execute_standard` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'é»Ë认æâ°Â§Ã¨Â¡Åæ â¡Ã¥â¡â ï¼Ëå¦â GB/T6027ï¼â°', |
| | | `status` int DEFAULT NULL COMMENT 'ç¶æ', |
| | | `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `template_id` bigint DEFAULT NULL COMMENT 'è´¨æ£æ¹æ¡ç¼å·', |
| | | `indicator_id` bigint DEFAULT NULL COMMENT 'è´¨æ£ææ ç¼å·', |
| | | `sort_order` int NOT NULL DEFAULT '0' COMMENT 'å±â¢Ã§Â¤ÂºÃ¦Å½âåºÂå·', |
| | | `judge_flag` tinyint NOT NULL DEFAULT '1' COMMENT 'æË¯å¦åÂâ与åÂËæ ¼åˤ定:1=æË¯ï¼Å0=å¦', |
| | | `check_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ£æµæ¹æ³', |
| | | `standard_value` decimal(24,6) DEFAULT NULL COMMENT 'æ åå¼', |
| | | `unit_measure_id` bigint DEFAULT NULL COMMENT '计éåä½ç¼å·', |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- MES è´¨æ£å级ï¼åå·¥æ£éªæ¥åè½åï¼ææ åç»æ + å
¬å¼ææ¬ + å¹³è¡æµé + æ¥åè¡¨å¤´åæ®µï¼ |
| | | -- éç¨ï¼MySQL 8.xï¼ä¸å« tenant_idï¼é夿§è¡ä¼æ¥"åæ®µå·²åå¨"ï¼éå
æ ¸å¯¹ information_schema |
| | | |
| | | -- 1. ææ åå
¸ï¼å±çº§åç» + æ¡ç®ç±»å + å
¬å¼/åä½ææ¬ + æåº |
| | | ALTER TABLE mes_qc_indicator |
| | | ADD COLUMN parent_id BIGINT NOT NULL DEFAULT 0 COMMENT 'ç¶ææ ç¼å·ï¼0=顶级ï¼' AFTER name, |
| | | ADD COLUMN item_type TINYINT NOT NULL DEFAULT 1 COMMENT 'æ¡ç®ç±»åï¼1=å½å
¥é¡¹ï¼2=åç»é¡¹' AFTER parent_id, |
| | | ADD COLUMN formula_text VARCHAR(500) NULL COMMENT 'å
¬å¼å±ç¤ºææ¬ï¼æå°æ¥åç¨ï¼ä¸åä¸è®¡ç®ï¼' AFTER item_type, |
| | | ADD COLUMN unit_text VARCHAR(50) NULL COMMENT 'å使æ¬ï¼å¦ kg/m³ã/%ï¼æå°å±ç¤ºç¨ï¼' AFTER formula_text, |
| | | ADD COLUMN sort_order INT NOT NULL DEFAULT 0 COMMENT 'å级æåºå·' AFTER unit_text; |
| | | CREATE INDEX idx_qc_indicator_parent_id ON mes_qc_indicator (parent_id); |
| | | |
| | | -- 2. æ¹æ¡ææ ï¼æåº + æ¯å¦åä¸å¤å®ï¼åç»/ä¸é´åæ°è¡=0ï¼ |
| | | ALTER TABLE mes_qc_template_indicator |
| | | ADD COLUMN sort_order INT NOT NULL DEFAULT 0 COMMENT 'å±ç¤ºæåºå·' AFTER indicator_id, |
| | | ADD COLUMN judge_flag TINYINT NOT NULL DEFAULT 1 COMMENT 'æ¯å¦åä¸åæ ¼å¤å®ï¼1=æ¯ï¼0=å¦' AFTER sort_order; |
| | | |
| | | -- 3. æ£éªç»ææç»ï¼å¹³è¡æµéæ¹æ¬¡å· |
| | | ALTER TABLE mes_qc_indicator_result_detail |
| | | ADD COLUMN measure_no INT NOT NULL DEFAULT 1 COMMENT 'æµéæ¹æ¬¡å·ï¼ä» 1 å¼å§ï¼é»è®¤ 1ï¼' AFTER indicator_id; |
| | | CREATE INDEX idx_qc_result_detail_measure ON mes_qc_indicator_result_detail (result_id, indicator_id, measure_no); |
| | | |
| | | -- 4. æ£éªæ¹æ¡ï¼é»è®¤æ§è¡æ åï¼å»ºåæ¶å¸¦å
¥ä¸»è¡¨ï¼ |
| | | ALTER TABLE mes_qc_template |
| | | ADD COLUMN default_execute_standard VARCHAR(50) NULL COMMENT 'é»è®¤æ§è¡æ åï¼å¦ GB/T6027ï¼' AFTER types; |
| | | |
| | | -- 5. åç±»æ£éªåä¸»è¡¨ï¼æ¥å表头 + 夿 ¸/å®¡æ ¸ç¾ååæ®µ |
| | | ALTER TABLE mes_qc_iqc |
| | | ADD COLUMN sampling_location VARCHAR(100) NULL COMMENT 'éæ ·å°ç¹' AFTER status, |
| | | ADD COLUMN certificate_no VARCHAR(50) NULL COMMENT 'è¯ä¹¦ç¼å·/åæ ¼è¯å·' AFTER sampling_location, |
| | | ADD COLUMN execute_standard VARCHAR(50) NULL COMMENT 'æ§è¡æ å' AFTER certificate_no, |
| | | ADD COLUMN audit_user_id BIGINT NULL COMMENT '夿 ¸äººç¨æ·ç¼å·' AFTER execute_standard, |
| | | ADD COLUMN approve_user_id BIGINT NULL COMMENT 'å®¡æ ¸äººç¨æ·ç¼å·' AFTER audit_user_id; |
| | | |
| | | ALTER TABLE mes_qc_ipqc |
| | | ADD COLUMN sampling_location VARCHAR(100) NULL COMMENT 'éæ ·å°ç¹' AFTER status, |
| | | ADD COLUMN certificate_no VARCHAR(50) NULL COMMENT 'è¯ä¹¦ç¼å·/åæ ¼è¯å·' AFTER sampling_location, |
| | | ADD COLUMN execute_standard VARCHAR(50) NULL COMMENT 'æ§è¡æ å' AFTER certificate_no, |
| | | ADD COLUMN audit_user_id BIGINT NULL COMMENT '夿 ¸äººç¨æ·ç¼å·' AFTER execute_standard, |
| | | ADD COLUMN approve_user_id BIGINT NULL COMMENT 'å®¡æ ¸äººç¨æ·ç¼å·' AFTER audit_user_id; |
| | | |
| | | ALTER TABLE mes_qc_oqc |
| | | ADD COLUMN sampling_location VARCHAR(100) NULL COMMENT 'éæ ·å°ç¹' AFTER status, |
| | | ADD COLUMN certificate_no VARCHAR(50) NULL COMMENT 'è¯ä¹¦ç¼å·/åæ ¼è¯å·' AFTER sampling_location, |
| | | ADD COLUMN execute_standard VARCHAR(50) NULL COMMENT 'æ§è¡æ å' AFTER certificate_no, |
| | | ADD COLUMN audit_user_id BIGINT NULL COMMENT '夿 ¸äººç¨æ·ç¼å·' AFTER execute_standard, |
| | | ADD COLUMN approve_user_id BIGINT NULL COMMENT 'å®¡æ ¸äººç¨æ·ç¼å·' AFTER audit_user_id; |
| | | |
| | | ALTER TABLE mes_qc_rqc |
| | | ADD COLUMN sampling_location VARCHAR(100) NULL COMMENT 'éæ ·å°ç¹' AFTER status, |
| | | ADD COLUMN certificate_no VARCHAR(50) NULL COMMENT 'è¯ä¹¦ç¼å·/åæ ¼è¯å·' AFTER sampling_location, |
| | | ADD COLUMN execute_standard VARCHAR(50) NULL COMMENT 'æ§è¡æ å' AFTER certificate_no, |
| | | ADD COLUMN audit_user_id BIGINT NULL COMMENT '夿 ¸äººç¨æ·ç¼å·' AFTER execute_standard, |
| | | ADD COLUMN approve_user_id BIGINT NULL COMMENT 'å®¡æ ¸äººç¨æ·ç¼å·' AFTER audit_user_id; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ======================================================================== |
| | | -- MES è´¨æ£ææ ç§åæ°æ®ï¼æ£ä¸éæ£éªè®°å½ï¼GB/T 6027ï¼æ ·ä¾æ |
| | | -- ç¨éï¼æ¼ç¤ºåç»æ£éªé¡¹ + å
¬å¼ææ¬ + å¹³è¡æµéï¼ä¾å端å½å
¥/æå°ç´æ¥è¯ç¨ |
| | | -- åå¼çº¦å®ï¼item_type 1=å½å
¥é¡¹ 2=åç»é¡¹ï¼result_type 1=æµ®ç¹ 2=æ´æ° 3=ææ¬ 4=åå
¸ 5=æä»¶ |
| | | -- ä¸å« tenant_idï¼é¡¹ç®ä¸ä½¿ç¨å¤ç§æ·ï¼ |
| | | -- 注æï¼æ§è¡å确认 mes_qc_indicator å·²å« parent_id/item_type/formula_text/unit_text/sort_order å |
| | | -- ======================================================================== |
| | | |
| | | -- å¹çï¼é夿§è¡åæ¸
çæ§ç§åï¼æ code åç¼ï¼å«åç»ä¸åé¡¹ï¼ |
| | | DELETE FROM mes_qc_indicator WHERE code LIKE 'SEED-BT-%'; |
| | | |
| | | -- 顶级ï¼å¤è§ï¼å®æ§ææ¬ç»è®ºï¼ |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) |
| | | VALUES ('SEED-BT-APPEAR', 'å¤è§', 0, 1, NULL, NULL, 10, 4, 3, NULL, 'æ¾æ¸
éææ¶²ä½ï¼æ æºæ¢°æè´¨', '1', '1'); |
| | | |
| | | -- 顶级ï¼è²åº¦ |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) |
| | | VALUES ('SEED-BT-COLOR', 'è²åº¦', 0, 1, NULL, 'Hazen', 20, 4, 1, NULL, NULL, '1', '1'); |
| | | |
| | | -- åç»ï¼æ°´åæµå®ï¼å«å
¬å¼ææ¬ï¼ä¸æåæ°è¡ + ç»æè¡ï¼ |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) |
| | | VALUES ('SEED-BT-WATER', 'æ°´å', 0, 2, 'w = (m1 - m0) / m à 100%', NULL, 30, 4, NULL, NULL, 'å¡å°è´¹ä¼/å¹²ç¥å¤±é', '1', '1'); |
| | | SET @g_water = LAST_INSERT_ID(); |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) VALUES |
| | | ('SEED-BT-WATER-M', 'è¯æ ·è´¨é m', @g_water, 1, NULL, 'g', 1, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-WATER-M1', 'è¯æ ·+ç§°éç¶ m1', @g_water, 1, NULL, 'g', 2, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-WATER-M0', 'ç§°éç¶ m0', @g_water, 1, NULL, 'g', 3, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-WATER-W', 'æ°´åç»æ w', @g_water, 1, NULL, '%', 4, 4, 1, NULL, NULL, '1', '1'); |
| | | |
| | | -- åç»ï¼é
¸å«éï¼å·¦ä¾§å
¬å¼ + å¤åæ°è¡ + ç»æè¡ï¼ |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) |
| | | VALUES ('SEED-BT-ACID', 'é
¸å«é', 0, 2, 'w3 = c à V à 0.06005 / m à 100%', NULL, 40, 4, NULL, NULL, 'é
¸ç¢±æ»´å®', '1', '1'); |
| | | SET @g_acid = LAST_INSERT_ID(); |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) VALUES |
| | | ('SEED-BT-ACID-C', 'æ æ¶²æµåº¦ c', @g_acid, 1, NULL, 'mol/L', 1, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-ACID-V', 'æ¶èæ»´å®æ¶²ä½ç§¯ V', @g_acid, 1, NULL, 'mL', 2, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-ACID-M', 'è¯æ ·è´¨é m', @g_acid, 1, NULL, 'g', 3, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-ACID-W3', 'é
¸å«éç»æ w3', @g_acid, 1, NULL, '%', 4, 4, 1, NULL, NULL, '1', '1'); |
| | | |
| | | -- åç»ï¼æ£ä¸éå«éï¼çº¯åº¦å·®åæ³ï¼ |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) |
| | | VALUES ('SEED-BT-PURITY', 'æ£ä¸éå«é', 0, 2, '纯度 = 100% - æ°´å - é
¸å«é - å
¶å®æè´¨', NULL, 50, 4, NULL, NULL, 'æ°ç¸è²è°±/å·®å', '1', '1'); |
| | | SET @g_purity = LAST_INSERT_ID(); |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) VALUES |
| | | ('SEED-BT-PURITY-V', 'æ£ä¸éå«é /%', @g_purity, 1, NULL, '%', 1, 4, 1, NULL, NULL, '1', '1'); |
| | | |
| | | -- 顶级ï¼å¯åº¦ãæå
ç |
| | | INSERT INTO mes_qc_indicator (code, name, parent_id, item_type, formula_text, unit_text, sort_order, type, result_type, result_specification, remark, creator, updater) VALUES |
| | | ('SEED-BT-DENSITY', 'å¯åº¦', 0, 1, NULL, 'kg/m³', 60, 4, 1, NULL, NULL, '1', '1'), |
| | | ('SEED-BT-REFRACT', 'æå
ç', 0, 1, NULL, 'n²â°D', 70, 4, 1, NULL, NULL, '1', '1'); |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.qc.indicator; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-indicator:query')") |
| | | public CommonResult<MesQcIndicatorRespVO> getIndicator(@RequestParam("id") Long id) { |
| | | MesQcIndicatorDO indicator = indicatorService.getIndicator(id); |
| | | return success(BeanUtils.toBean(indicator, MesQcIndicatorRespVO.class)); |
| | | return success(buildRespVOList(Collections.singletonList(indicator)).get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-indicator:query')") |
| | | public CommonResult<PageResult<MesQcIndicatorRespVO>> getIndicatorPage(@Valid MesQcIndicatorPageReqVO pageReqVO) { |
| | | PageResult<MesQcIndicatorDO> pageResult = indicatorService.getIndicatorPage(pageReqVO); |
| | | return success(BeanUtils.toBean(pageResult, MesQcIndicatorRespVO.class)); |
| | | return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/list") |
| | | @Operation(summary = "è·å¾è´¨æ£ææ å
¨éå表ï¼å«åç»å±çº§ï¼ä¾æ 表/ä¸æä½¿ç¨ï¼") |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-indicator:query')") |
| | | public CommonResult<List<MesQcIndicatorRespVO>> getIndicatorList() { |
| | | return success(buildRespVOList(indicatorService.getIndicatorList())); |
| | | } |
| | | |
| | | @GetMapping("/export-excel") |
| | |
| | | BeanUtils.toBean(list, MesQcIndicatorRespVO.class)); |
| | | } |
| | | |
| | | // ==================== æ¼æ¥ VO ==================== |
| | | |
| | | private List<MesQcIndicatorRespVO> buildRespVOList(List<MesQcIndicatorDO> list) { |
| | | List<MesQcIndicatorRespVO> voList = BeanUtils.toBean(list, MesQcIndicatorRespVO.class); |
| | | if (CollUtil.isEmpty(list)) { |
| | | return voList; |
| | | } |
| | | // å¡«å
ç¶ææ åç§° |
| | | Set<Long> parentIds = list.stream().map(MesQcIndicatorDO::getParentId) |
| | | .filter(pid -> pid != null && pid > 0).collect(Collectors.toSet()); |
| | | if (CollUtil.isNotEmpty(parentIds)) { |
| | | Map<Long, String> parentNameMap = indicatorService.getIndicatorList(parentIds).stream() |
| | | .collect(Collectors.toMap(MesQcIndicatorDO::getId, MesQcIndicatorDO::getName)); |
| | | voList.forEach(vo -> { |
| | | if (vo.getParentId() != null && vo.getParentId() > 0) { |
| | | vo.setParentName(parentNameMap.get(vo.getParentId())); |
| | | } |
| | | }); |
| | | } |
| | | return voList; |
| | | } |
| | | |
| | | } |
| | |
| | | @ExcelProperty("æ£æµé¡¹åç§°") |
| | | private String name; |
| | | |
| | | @Schema(description = "ç¶ææ ç¼å·ï¼0=顶级ï¼", example = "0") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "ç¶ææ åç§°", example = "æ°´å") |
| | | private String parentName; |
| | | |
| | | @Schema(description = "æ¡ç®ç±»åï¼1=å½å
¥é¡¹ï¼2=åç»é¡¹", example = "1") |
| | | private Integer itemType; |
| | | |
| | | @Schema(description = "å
¬å¼å±ç¤ºææ¬ï¼æå°æ¥åç¨ï¼", example = "w3=c1v1*0.06005/pv*100%") |
| | | private String formulaText; |
| | | |
| | | @Schema(description = "å使æ¬ï¼æå°å±ç¤ºç¨ï¼", example = "kg/m³") |
| | | private String unitText; |
| | | |
| | | @Schema(description = "å级æåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | @Schema(description = "æ£æµé¡¹ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @ExcelProperty(value = "æ£æµé¡¹ç±»å", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.MES_INDICATOR_TYPE) |
| | |
| | | @NotEmpty(message = "æ£æµé¡¹åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "ç¶ææ ç¼å·ï¼0=顶级ï¼ä¸ä¼ è§ä¸º 0ï¼", example = "0") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "æ¡ç®ç±»åï¼1=å½å
¥é¡¹ï¼2=åç»é¡¹ï¼ä¸ä¼ é»è®¤ 1ï¼", example = "1") |
| | | private Integer itemType; |
| | | |
| | | @Schema(description = "å
¬å¼å±ç¤ºææ¬ï¼æå°æ¥åç¨ï¼ä¸åä¸è®¡ç®ï¼", example = "w3=c1v1*0.06005/pv*100%") |
| | | private String formulaText; |
| | | |
| | | @Schema(description = "å使æ¬ï¼æå°å±ç¤ºç¨ï¼", example = "kg/m³") |
| | | private String unitText; |
| | | |
| | | @Schema(description = "å级æåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | @Schema(description = "æ£æµé¡¹ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "æ£æµé¡¹ç±»åä¸è½ä¸ºç©º") |
| | | private Integer type; |
| | | |
| | | @Schema(description = "æ£æµå·¥å
·", example = "å¡å°º") |
| | | private String tool; |
| | | |
| | | @Schema(description = "ç»æå¼ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç»æå¼ç±»åä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç»æå¼ç±»åï¼å½å
¥é¡¹å¿
å¡«ï¼åç»é¡¹ä¸å¡«ï¼æå¡å±æ ¡éªï¼", example = "1") |
| | | private Integer resultType; |
| | | |
| | | @Schema(description = "ç»æå¼å±æ§", example = "IMG") |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcReportService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcLineService; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | |
| | | |
| | | @Resource |
| | | private MesQcIndicatorResultService resultService; |
| | | @Resource |
| | | private MesQcReportService reportService; |
| | | @Resource |
| | | private MesQcIqcLineService iqcLineService; |
| | | @Resource |
| | |
| | | return success(voPageResult); |
| | | } |
| | | |
| | | @GetMapping("/report") |
| | | @Operation(summary = "è·å¾æ£éªæ¥ååæ°æ®ï¼æå°ç¨ï¼è¡¨å¤´ + æ£éªé¡¹æ + å¹³è¡æµé + ç¾ååºï¼") |
| | | @Parameters({ |
| | | @Parameter(name = "qcId", description = "è´¨æ£åID", required = true, example = "1"), |
| | | @Parameter(name = "qcType", description = "è´¨æ£ç±»å", required = true, example = "1"), |
| | | @Parameter(name = "resultId", description = "æ£éªç»æï¼æ ·åï¼ç¼å·ï¼å¯ä¸ä¼ ï¼å¤æ ·åæ¶ç¨äºéæ©", example = "1") |
| | | }) |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-iqc:query')") |
| | | public CommonResult<MesQcQcReportRespVO> getQcReportData( |
| | | @RequestParam("qcId") Long qcId, |
| | | @RequestParam("qcType") Integer qcType, |
| | | @RequestParam(value = "resultId", required = false) Long resultId) { |
| | | return success(reportService.getQcReportData(qcId, qcType, resultId)); |
| | | } |
| | | |
| | | // ==================== æ¼æ¥ VO ==================== |
| | | |
| | | /** |
| | | * æå»ºæç» Item å表 |
| | | * æå»ºæç» Item æ ï¼æ¯æåç»å±çº§ + å¹³è¡æµé夿¹æ¬¡ï¼ |
| | | * |
| | | * <p>å端表åä»
éï¼indicatorIdãindicatorNameãvalueTypeãvalueSpecification + å·²æç»æï¼idãvalueãremarkï¼</p> |
| | | * <p>è¿åæ å½¢å表ï¼é¡¶çº§ä¸ºåç»é¡¹æç¬ç«å½å
¥é¡¹ï¼åç»é¡¹ children æåé¡¹ï¼ |
| | | * æ¯ä¸ªå½å
¥é¡¹çå¹³è¡æµé弿¾å¨ measuresï¼æ measureNo ååºï¼ï¼ |
| | | * å
¼å®¹å段 id/value/remark åç¬¬ä¸æ¹å¼ï¼ä¾æ§æ°æ®ç´æ¥å±ç¤º</p> |
| | | * |
| | | * @param details å·²æç»ææç»ï¼ç©ºå表表示è·åç©ºå¼æ¨¡æ¿ï¼ |
| | | * @param qcId è´¨æ£å ID |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 1.2 æ¹éæ¥è¯¢æ£æµææ |
| | | // 1.2 æ¹éæ¥è¯¢æ£æµææ ï¼å项çç¶åç»æªæå¨è¡ä¸æ¶èªå¨è¡¥å
¨ï¼ä¿è¯æ 宿´ |
| | | Map<Long, MesQcIndicatorDO> indicatorMap = indicatorService.getIndicatorMap(new HashSet<>(indicatorIds)); |
| | | // 1.3 æå»ºå·²ææç» Mapï¼æ indicatorId ç´¢å¼ï¼ |
| | | Map<Long, MesQcIndicatorResultDetailDO> detailMap = CollUtil.isEmpty(details) |
| | | ? Collections.emptyMap() |
| | | : convertMap(details, MesQcIndicatorResultDetailDO::getIndicatorId); |
| | | Set<Long> missingParentIds = indicatorMap.values().stream() |
| | | .filter(ind -> ind.getParentId() != null && ind.getParentId() > 0 |
| | | && !indicatorMap.containsKey(ind.getParentId())) |
| | | .map(MesQcIndicatorDO::getParentId).collect(Collectors.toSet()); |
| | | if (CollUtil.isNotEmpty(missingParentIds)) { |
| | | indicatorMap.putAll(indicatorService.getIndicatorMap(missingParentIds)); |
| | | } |
| | | |
| | | // 2. éåææ IDï¼ç»è£
VO |
| | | List<MesQcIndicatorResultRespVO.Item> voList = new ArrayList<>(indicatorIds.size()); |
| | | for (Long indicatorId : indicatorIds) { |
| | | // 1.3 å·²ææç»åç»ï¼indicatorId -> 夿¹æ¬¡åè¡¨ï¼ |
| | | Map<Long, List<MesQcIndicatorResultDetailDO>> detailMap = CollUtil.isEmpty(details) |
| | | ? Collections.emptyMap() |
| | | : details.stream().collect(Collectors.groupingBy(MesQcIndicatorResultDetailDO::getIndicatorId)); |
| | | |
| | | // 2. æå»ºèç¹ |
| | | Map<Long, MesQcIndicatorResultRespVO.Item> nodeMap = new LinkedHashMap<>(); |
| | | for (Map.Entry<Long, MesQcIndicatorDO> entry : indicatorMap.entrySet()) { |
| | | Long indicatorId = entry.getKey(); |
| | | MesQcIndicatorDO indicator = entry.getValue(); |
| | | MesQcIndicatorResultRespVO.Item vo = new MesQcIndicatorResultRespVO.Item() |
| | | .setIndicatorId(indicatorId); |
| | | // æ¥èª indicator |
| | | findAndThen(indicatorMap, indicatorId, indicator -> vo |
| | | .setIndicatorId(indicatorId) |
| | | .setIndicatorName(indicator.getName()) |
| | | .setValueType(indicator.getResultType()) |
| | | .setValueSpecification(indicator.getResultSpecification())); |
| | | // æ¥èªå·²æç»ææç»ï¼å¦æï¼ |
| | | findAndThen(detailMap, indicatorId, detail -> vo |
| | | .setId(detail.getId()).setResultId(detail.getResultId()) |
| | | .setValue(detail.getValue()).setRemark(detail.getRemark())); |
| | | voList.add(vo); |
| | | .setValueSpecification(indicator.getResultSpecification()) |
| | | .setParentId(Objects.requireNonNullElse(indicator.getParentId(), 0L)) |
| | | .setItemType(Objects.requireNonNullElse(indicator.getItemType(), |
| | | MesQcIndicatorItemTypeEnum.RECORD.getType())) |
| | | .setFormulaText(indicator.getFormulaText()) |
| | | .setUnitText(indicator.getUnitText()) |
| | | .setSortOrder(Objects.requireNonNullElse(indicator.getSortOrder(), 0)); |
| | | List<MesQcIndicatorResultDetailDO> itemDetails = detailMap.getOrDefault(indicatorId, Collections.emptyList()); |
| | | List<MesQcIndicatorResultRespVO.Measure> measures = new ArrayList<>(itemDetails.size()); |
| | | itemDetails.stream() |
| | | .sorted(Comparator.comparing(d -> Objects.requireNonNullElse(d.getMeasureNo(), 1))) |
| | | .forEach(detail -> measures.add(new MesQcIndicatorResultRespVO.Measure() |
| | | .setDetailId(detail.getId()).setResultId(detail.getResultId()) |
| | | .setMeasureNo(Objects.requireNonNullElse(detail.getMeasureNo(), 1)) |
| | | .setValue(detail.getValue()).setRemark(detail.getRemark()))); |
| | | vo.setMeasures(measures); |
| | | // å
¼å®¹æ§å段ï¼åç¬¬ä¸æ¹æµéå¼ |
| | | if (CollUtil.isNotEmpty(measures)) { |
| | | MesQcIndicatorResultRespVO.Measure first = measures.get(0); |
| | | vo.setId(first.getDetailId()).setResultId(first.getResultId()) |
| | | .setValue(first.getValue()).setRemark(first.getRemark()); |
| | | } |
| | | nodeMap.put(indicatorId, vo); |
| | | } |
| | | return voList; |
| | | |
| | | // 3. ææ ï¼ç¶ä¸å¨éåå
çå项æå为顶级ï¼å级ææåºå· |
| | | Comparator<MesQcIndicatorResultRespVO.Item> byOrder = |
| | | Comparator.comparing(MesQcIndicatorResultRespVO.Item::getSortOrder) |
| | | .thenComparing(MesQcIndicatorResultRespVO.Item::getIndicatorId); |
| | | List<MesQcIndicatorResultRespVO.Item> roots = new ArrayList<>(); |
| | | for (MesQcIndicatorResultRespVO.Item node : nodeMap.values()) { |
| | | MesQcIndicatorResultRespVO.Item parent = node.getParentId() > 0 ? nodeMap.get(node.getParentId()) : null; |
| | | if (parent == null) { |
| | | roots.add(node); |
| | | } else { |
| | | if (parent.getChildren() == null) { |
| | | parent.setChildren(new ArrayList<>()); |
| | | } |
| | | parent.getChildren().add(node); |
| | | } |
| | | } |
| | | roots.sort(byOrder); |
| | | roots.forEach(root -> { |
| | | if (root.getChildren() != null) { |
| | | root.getChildren().sort(byOrder); |
| | | } |
| | | }); |
| | | return roots; |
| | | } |
| | | |
| | | } |
| | |
| | | @Schema(description = "æ£éªç»ææç»å表") |
| | | private List<Item> items; |
| | | |
| | | @Schema(description = "æ£éªç»ææç»é¡¹") |
| | | @Schema(description = "æ£éªç»ææç»é¡¹ï¼æ å½¢ï¼åç»é¡¹ä¸æå项ï¼å¹³è¡æµéæ¾å
¥ measuresï¼") |
| | | @Data |
| | | public static class Item { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | @Schema(description = "ç¼å·ï¼ç¬¬ä¸æ¹æç»ç IDï¼å
¼å®¹æ§å段ï¼", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "å
³èæ£éªç»æID", example = "1") |
| | |
| | | @Schema(description = "æ£æµææ ID", example = "1") |
| | | private Long indicatorId; |
| | | |
| | | @Schema(description = "æ£æµå¼ï¼ç»ä¸å为å符串ï¼", example = "3.14") |
| | | @Schema(description = "æ£æµå¼ï¼ç¬¬ä¸æ¹æµéå¼ï¼å
¼å®¹æ§å段ï¼", example = "3.14") |
| | | private String value; |
| | | |
| | | @Schema(description = "夿³¨", example = "æ ") |
| | | @Schema(description = "夿³¨ï¼ç¬¬ä¸æ¹æç»ç夿³¨ï¼å
¼å®¹æ§å段ï¼", example = "æ ") |
| | | private String remark; |
| | | |
| | | // ========== å
³èæ¥è¯¢åæ®µï¼æ¥èª indicatorï¼ ========== |
| | |
| | | @Schema(description = "å¼å±æ§", example = "IMG") |
| | | private String valueSpecification; |
| | | |
| | | @Schema(description = "ç¶ææ ç¼å·ï¼0=顶级ï¼", example = "0") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "æ¡ç®ç±»åï¼1=å½å
¥é¡¹ï¼2=åç»é¡¹", example = "1") |
| | | private Integer itemType; |
| | | |
| | | @Schema(description = "å
¬å¼å±ç¤ºææ¬ï¼æå°æ¥åç¨ï¼", example = "w3=c1v1*0.06005/pv*100%") |
| | | private String formulaText; |
| | | |
| | | @Schema(description = "å使æ¬ï¼æå°å±ç¤ºç¨ï¼", example = "kg/m³") |
| | | private String unitText; |
| | | |
| | | @Schema(description = "å级æåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | // ========== å¹³è¡æµé ========== |
| | | |
| | | @Schema(description = "æµéæ¹æ¬¡æç»åè¡¨ï¼æ measureNo ååºï¼") |
| | | private List<Measure> measures; |
| | | |
| | | // ========== æ å½¢ç»æ ========== |
| | | |
| | | @Schema(description = "å项å表ï¼åç»é¡¹ä¸æï¼") |
| | | private List<Item> children; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "æ£éªç»ææµéæ¹æ¬¡æç»ï¼å䏿æ ç䏿¬¡å¹³è¡æµéï¼") |
| | | @Data |
| | | public static class Measure { |
| | | |
| | | @Schema(description = "æç»ç¼å·", example = "1024") |
| | | private Long detailId; |
| | | |
| | | @Schema(description = "å
³èæ£éªç»æID", example = "1") |
| | | private Long resultId; |
| | | |
| | | @Schema(description = "æµéæ¹æ¬¡å·", example = "1") |
| | | private Integer measureNo; |
| | | |
| | | @Schema(description = "æ£æµå¼", example = "3.14") |
| | | private String value; |
| | | |
| | | @Schema(description = "夿³¨", example = "æ ") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | @Schema(description = "æ£æµææ ID", example = "1") |
| | | private Long indicatorId; |
| | | |
| | | @Schema(description = "æµéæ¹æ¬¡å·ï¼ä» 1 å¼å§ï¼å¹³è¡æµé夿¹æ¬¡ï¼ä¸ä¼ é»è®¤ 1ï¼", example = "1") |
| | | private Integer measureNo; |
| | | |
| | | @Schema(description = "æ£æµå¼ï¼ç»ä¸å为å符串ï¼", example = "3.14") |
| | | private String value; |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - MES æ£éªæ¥ååï¼æå°æ°æ®ï¼ Response VO") |
| | | @Data |
| | | public class MesQcQcReportRespVO { |
| | | |
| | | // ========== æ¥å表头 ========== |
| | | |
| | | @Schema(description = "è´¨æ£ç±»åï¼1=IQCï¼2=IPQCï¼3=OQCï¼4=RQC", example = "1") |
| | | private Integer qcType; |
| | | |
| | | @Schema(description = "æ£éªåç¼å·", example = "IQC20260830001") |
| | | private String docCode; |
| | | |
| | | @Schema(description = "æ£éªååç§°ï¼æ¥åæ é¢ï¼", example = "æ£ä¸éæ£éªè®°å½") |
| | | private String docName; |
| | | |
| | | @Schema(description = "ç©æç¼ç ", example = "M001") |
| | | private String itemCode; |
| | | |
| | | @Schema(description = "ç©æåç§°", example = "æ£ä¸é") |
| | | private String itemName; |
| | | |
| | | @Schema(description = "ç©æè§æ ¼åå·", example = "å·¥ä¸çº§") |
| | | private String itemSpecification; |
| | | |
| | | @Schema(description = "æ¹æ¬¡å·ï¼æ¥æä¾åºåæ¹æ¬¡/å
¶ä»åæ®æ¹æ¬¡å·ï¼", example = "V0028B1") |
| | | private String batchNo; |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "éæ ·/æ£éªæ¶é´", example = "2026-08-30T01:00:00") |
| | | private LocalDateTime samplingTime; |
| | | |
| | | @Schema(description = "æ¹éï¼æ¥æ=æ¥æ¶æ°éï¼è¿ç¨/éè´§=æ£æµæ°éï¼åºè´§=åºè´§æ°éï¼", example = "30") |
| | | private BigDecimal batchQuantity; |
| | | |
| | | @Schema(description = "æ£æµç»æï¼åå
¸ mes_qc_check_resultï¼", example = "1") |
| | | private Integer checkResult; |
| | | |
| | | // ========== ç¾ååº ========== |
| | | |
| | | @Schema(description = "åæè
ï¼æ£æµäººï¼ç¨æ·ç¼å·", example = "1") |
| | | private Long inspectorUserId; |
| | | |
| | | @Schema(description = "åæè
å§å", example = "æ°è³") |
| | | private String inspectorName; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "2") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "夿 ¸äººå§å", example = "海丽") |
| | | private String auditName; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "3") |
| | | private Long approveUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "çäº") |
| | | private String approveName; |
| | | |
| | | @Schema(description = "夿³¨", example = "æ ") |
| | | private String remark; |
| | | |
| | | // ========== æ£éªé¡¹ç©éµ ========== |
| | | |
| | | @Schema(description = "æµéæ¹æ¬¡å·åè¡¨ï¼æ¥åå头ï¼å¦ [1,2]ï¼æ å¹³è¡æµéæ¶ä¸º [1]ï¼") |
| | | private List<Integer> measureNos; |
| | | |
| | | @Schema(description = "æ£éªé¡¹æ ï¼é¡¶çº§=åç»é¡¹æç¬ç«å½å
¥é¡¹ï¼åç»é¡¹ children æå项ï¼") |
| | | private List<ReportItem> items; |
| | | |
| | | @Schema(description = "æ¥åæ£éªé¡¹") |
| | | @Data |
| | | public static class ReportItem { |
| | | |
| | | @Schema(description = "æ£æµææ ID", example = "1") |
| | | private Long indicatorId; |
| | | |
| | | @Schema(description = "æ£æµé¡¹ç¼ç ", example = "ACID") |
| | | private String indicatorCode; |
| | | |
| | | @Schema(description = "æ£æµé¡¹åç§°", example = "é
¸å«é") |
| | | private String indicatorName; |
| | | |
| | | @Schema(description = "ç¶ææ ç¼å·ï¼0=顶级ï¼", example = "0") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "æ¡ç®ç±»åï¼1=å½å
¥é¡¹ï¼2=åç»é¡¹", example = "1") |
| | | private Integer itemType; |
| | | |
| | | @Schema(description = "å
¬å¼å±ç¤ºææ¬ï¼æå°å¨åç»è¡å·¦ä¾§ï¼å¯ä¸ºç©ºï¼", example = "w3=c1v1*0.06005/pv*100%") |
| | | private String formulaText; |
| | | |
| | | @Schema(description = "å使æ¬", example = "mol/L") |
| | | private String unitText; |
| | | |
| | | @Schema(description = "å级æåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | @Schema(description = "æ£æµæ¹æ³", example = "é
¸ç¢±æ»´å®") |
| | | private String checkMethod; |
| | | |
| | | @Schema(description = "æ åå¼", example = "0.0010") |
| | | private BigDecimal standardValue; |
| | | |
| | | @Schema(description = "éå¼ä¸é", example = "0") |
| | | private BigDecimal thresholdMin; |
| | | |
| | | @Schema(description = "éå¼ä¸é", example = "0.0050") |
| | | private BigDecimal thresholdMax; |
| | | |
| | | @Schema(description = "æµéå¼åè¡¨ï¼æ measureNo ååºï¼åç»é¡¹ä¸ºç©ºï¼") |
| | | private List<ReportMeasure> measures; |
| | | |
| | | @Schema(description = "å项å表ï¼åç»é¡¹ä¸æï¼") |
| | | private List<ReportItem> children; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "æ¥åæµéå¼ï¼ææ£éªé¡¹ææ¹æ¬¡ï¼") |
| | | @Data |
| | | public static class ReportMeasure { |
| | | |
| | | @Schema(description = "æµéæ¹æ¬¡å·", example = "1") |
| | | private Integer measureNo; |
| | | |
| | | @Schema(description = "æ£æµå¼", example = "0.001") |
| | | private String value; |
| | | |
| | | @Schema(description = "夿³¨", example = "æ ") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | // æ¹éæ¥è¯¢è®¡éåä½ï¼ |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | // æ¹éæ¥è¯¢æ£æµäººå |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(list, MesQcIpqcDO::getInspectorUserId)); |
| | | // æ¹éæ¥è¯¢æ£æµ/夿 ¸/å®¡æ ¸äººå |
| | | Set<Long> qcUserIds = new HashSet<>(); |
| | | qcUserIds.addAll(convertSet(list, MesQcIpqcDO::getInspectorUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcIpqcDO::getAuditUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcIpqcDO::getApproveUserId)); |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(qcUserIds); |
| | | // æ¹éæ¥è¯¢æ£éªé¡¹ææ |
| | | Map<Long, String> indicatorSummaryMap = buildIndicatorSummaryMap(list); |
| | | // æ¼è£
VO |
| | |
| | | }); |
| | | findAndThen(userMap, vo.getInspectorUserId(), |
| | | user -> vo.setInspectorNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getAuditUserId(), |
| | | user -> vo.setAuditNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getApproveUserId(), |
| | | user -> vo.setApproveNickname(user.getNickname())); |
| | | vo.setIndicatorResultSummary(indicatorSummaryMap.getOrDefault(vo.getId(), "")); |
| | | }); |
| | | } |
| | |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "夿 ¸äººæµç§°", example = "æå") |
| | | private String auditNickname; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "çäº") |
| | | private String approveNickname; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty("å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @AssertTrue(message = "æ£æµæ°éå¿
é¡»çäºåæ ¼åæ°éä¸ä¸åæ ¼åæ°éä¹å") |
| | | @JsonIgnore |
| | | public boolean isQuantityValid() { |
| | |
| | | // æ¹éæ¥è¯¢è®¡éåä½ï¼éè¿ç©æç unitMeasureIdï¼ |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | // æ¹éæ¥è¯¢æ£æµäººå |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(list, MesQcIqcDO::getInspectorUserId)); |
| | | // æ¹éæ¥è¯¢æ£æµ/夿 ¸/å®¡æ ¸äººå |
| | | Set<Long> qcUserIds = new HashSet<>(); |
| | | qcUserIds.addAll(convertSet(list, MesQcIqcDO::getInspectorUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcIqcDO::getAuditUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcIqcDO::getApproveUserId)); |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(qcUserIds); |
| | | // æ¹éæ¥è¯¢æ£éªé¡¹ææ |
| | | Set<Long> qcIds = convertSet(list, MesQcIqcDO::getId); |
| | | Map<Long, List<MesQcIndicatorResultDO>> indicatorResultMap = new HashMap<>(); |
| | |
| | | }); |
| | | findAndThen(userMap, vo.getInspectorUserId(), |
| | | user -> vo.setInspectorNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getAuditUserId(), |
| | | user -> vo.setAuditNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getApproveUserId(), |
| | | user -> vo.setApproveNickname(user.getNickname())); |
| | | // 设置æ£éªé¡¹ææ æ±æ» |
| | | vo.setIndicatorResultSummary(indicatorSummaryMap.getOrDefault(vo.getId(), "")); |
| | | }); |
| | |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "夿 ¸äººæµç§°", example = "æå") |
| | | private String auditNickname; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "çäº") |
| | | private String approveNickname; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty("å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @AssertTrue(message = "åæ ¼åæ°éä¸ä¸åæ ¼åæ°éä¹åå¿
é¡»çäºæ¬æ¬¡æ¥æ¶æ°é") |
| | | @JsonIgnore |
| | | public boolean isQuantityValid() { |
| | |
| | | // æ¹éæ¥è¯¢è®¡éåä½ |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | // æ¹éæ¥è¯¢æ£æµäººå |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(list, MesQcOqcDO::getInspectorUserId)); |
| | | // æ¹éæ¥è¯¢æ£æµ/夿 ¸/å®¡æ ¸äººå |
| | | Set<Long> qcUserIds = new HashSet<>(); |
| | | qcUserIds.addAll(convertSet(list, MesQcOqcDO::getInspectorUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcOqcDO::getAuditUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcOqcDO::getApproveUserId)); |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(qcUserIds); |
| | | // æ¹éæ¥è¯¢æ£éªé¡¹ææ |
| | | Map<Long, String> indicatorSummaryMap = buildIndicatorSummaryMap(list); |
| | | // æ¼è£
VO |
| | |
| | | }); |
| | | findAndThen(userMap, vo.getInspectorUserId(), |
| | | user -> vo.setInspectorNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getAuditUserId(), |
| | | user -> vo.setAuditNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getApproveUserId(), |
| | | user -> vo.setApproveNickname(user.getNickname())); |
| | | vo.setIndicatorResultSummary(indicatorSummaryMap.getOrDefault(vo.getId(), "")); |
| | | }); |
| | | } |
| | |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "夿 ¸äººæµç§°", example = "æå") |
| | | private String auditNickname; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "çäº") |
| | | private String approveNickname; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty("å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @AssertTrue(message = "æ£æµæ°éå¿
é¡»çäºåæ ¼åæ°éä¸ä¸åæ ¼åæ°éä¹å") |
| | | @JsonIgnore |
| | | public boolean isQuantityValid() { |
| | |
| | | // æ¹éæ¥è¯¢è®¡éåä½ |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | // æ¹éæ¥è¯¢æ£æµäººå |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(list, MesQcRqcDO::getInspectorUserId)); |
| | | // æ¹éæ¥è¯¢æ£æµ/夿 ¸/å®¡æ ¸äººå |
| | | Set<Long> qcUserIds = new HashSet<>(); |
| | | qcUserIds.addAll(convertSet(list, MesQcRqcDO::getInspectorUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcRqcDO::getAuditUserId)); |
| | | qcUserIds.addAll(convertSet(list, MesQcRqcDO::getApproveUserId)); |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(qcUserIds); |
| | | // æ¹éæ¥è¯¢æ£éªé¡¹ææ |
| | | Map<Long, String> indicatorSummaryMap = buildIndicatorSummaryMap(list); |
| | | // æ¼è£
VO |
| | |
| | | }); |
| | | findAndThen(userMap, vo.getInspectorUserId(), |
| | | user -> vo.setInspectorNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getAuditUserId(), |
| | | user -> vo.setAuditNickname(user.getNickname())); |
| | | findAndThen(userMap, vo.getApproveUserId(), |
| | | user -> vo.setApproveNickname(user.getNickname())); |
| | | vo.setIndicatorResultSummary(indicatorSummaryMap.getOrDefault(vo.getId(), "")); |
| | | }); |
| | | } |
| | |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "夿 ¸äººæµç§°", example = "æå") |
| | | private String auditNickname; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "çäº") |
| | | private String approveNickname; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty("å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | @Schema(description = "éæ ·å°ç¹", example = "ç½åº") |
| | | private String samplingLocation; |
| | | |
| | | @Schema(description = "è¯ä¹¦ç¼å·/åæ ¼è¯å·", example = "V0028") |
| | | private String certificateNo; |
| | | |
| | | @Schema(description = "æ§è¡æ å", example = "GB/T6027") |
| | | private String executeStandard; |
| | | |
| | | @Schema(description = "夿 ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long auditUserId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long approveUserId; |
| | | |
| | | @AssertTrue(message = "æ£æµæ°éå¿
é¡»çäºåæ ¼åæ°éä¸ä¸åæ ¼åæ°éä¹å") |
| | | @JsonIgnore |
| | | public boolean isQuantityValid() { |
| | |
| | | @ExcelProperty("ç¶æ") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "é»è®¤æ§è¡æ åï¼æ°å»ºæ£éªåéæ©æ¬æ¹æ¡æ¶èªå¨å¸¦å
¥ï¼", example = "GB/T 6027") |
| | | @ExcelProperty("é»è®¤æ§è¡æ å") |
| | | private String defaultExecuteStandard; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | |
| | | @NotNull(message = "ç¶æä¸è½ä¸ºç©º") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "é»è®¤æ§è¡æ åï¼æ°å»ºæ£éªåéæ©æ¬æ¹æ¡æ¶èªå¨å¸¦å
¥ï¼", example = "GB/T 6027") |
| | | @Size(max = 50, message = "é»è®¤æ§è¡æ åé¿åº¦ä¸è½è¶
è¿ 50") |
| | | private String defaultExecuteStandard; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | |
| | | @Schema(description = "è´¨æ£ææ ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long indicatorId; |
| | | |
| | | @Schema(description = "å±ç¤ºæåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | @Schema(description = "æ¯å¦åä¸åæ ¼å¤å®", example = "true") |
| | | private Boolean judgeFlag; |
| | | |
| | | @Schema(description = "æ£æµæ¹æ³", example = "ç®è§æ£æ¥å¤è§") |
| | | @ExcelProperty("æ£æµæ¹æ³") |
| | | private String checkMethod; |
| | |
| | | @NotNull(message = "è´¨æ£ææ ä¸è½ä¸ºç©º") |
| | | private Long indicatorId; |
| | | |
| | | @Schema(description = "å±ç¤ºæåºå·", example = "10") |
| | | private Integer sortOrder; |
| | | |
| | | @Schema(description = "æ¯å¦åä¸åæ ¼å¤å®ï¼åç»/ä¸é´åæ°è¡ä¸º falseï¼", example = "true") |
| | | private Boolean judgeFlag; |
| | | |
| | | @Schema(description = "æ£æµæ¹æ³", example = "ç®è§æ£æ¥å¤è§") |
| | | private String checkMethod; |
| | | |
| | |
| | | */ |
| | | private String name; |
| | | /** |
| | | * ç¶ææ ç¼å·ï¼0=é¡¶çº§ï¼ |
| | | */ |
| | | private Long parentId; |
| | | /** |
| | | * æ¡ç®ç±»å |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum} |
| | | * 1=å½å
¥é¡¹ï¼åä¸å½å
¥ä¸å¤å®ï¼ï¼2=åç»é¡¹ï¼ä»
使¥ååç»æ é¢ï¼ |
| | | */ |
| | | private Integer itemType; |
| | | /** |
| | | * å
¬å¼å±ç¤ºææ¬ï¼æå°æ¥åç¨ï¼ä¸åä¸è®¡ç®ï¼ |
| | | */ |
| | | private String formulaText; |
| | | /** |
| | | * å使æ¬ï¼å¦ kg/m³ã/%ï¼æå°å±ç¤ºç¨ï¼ |
| | | */ |
| | | private String unitText; |
| | | /** |
| | | * å级æåºå· |
| | | */ |
| | | private Integer sortOrder; |
| | | /** |
| | | * æ£æµé¡¹ç±»å |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_INDICATOR_TYPE} |
| | |
| | | */ |
| | | private Long indicatorId; |
| | | /** |
| | | * æµéæ¹æ¬¡å·ï¼ä» 1 å¼å§ï¼é»è®¤ 1ï¼æ¯æå¹³è¡æµé夿¹æ¬¡ï¼ |
| | | */ |
| | | private Integer measureNo; |
| | | /** |
| | | * æ£æµå¼ï¼ç»ä¸å为åç¬¦ä¸²ï¼ |
| | | */ |
| | | private String value; |
| | |
| | | * æä¸¾ {@link MesQcStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | /** |
| | | * éæ ·å°ç¹ |
| | | */ |
| | | private String samplingLocation; |
| | | /** |
| | | * è¯ä¹¦ç¼å·/åæ ¼è¯å· |
| | | */ |
| | | private String certificateNo; |
| | | /** |
| | | * æ§è¡æ åï¼å¦ GB/T6027ï¼ |
| | | */ |
| | | private String executeStandard; |
| | | /** |
| | | * 夿 ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long auditUserId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long approveUserId; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | * æä¸¾ {@link MesQcStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | /** |
| | | * éæ ·å°ç¹ |
| | | */ |
| | | private String samplingLocation; |
| | | /** |
| | | * è¯ä¹¦ç¼å·/åæ ¼è¯å· |
| | | */ |
| | | private String certificateNo; |
| | | /** |
| | | * æ§è¡æ åï¼å¦ GB/T6027ï¼ |
| | | */ |
| | | private String executeStandard; |
| | | /** |
| | | * 夿 ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long auditUserId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long approveUserId; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | /** |
| | | * éæ ·å°ç¹ |
| | | */ |
| | | private String samplingLocation; |
| | | /** |
| | | * è¯ä¹¦ç¼å·/åæ ¼è¯å· |
| | | */ |
| | | private String certificateNo; |
| | | /** |
| | | * æ§è¡æ åï¼å¦ GB/T6027ï¼ |
| | | */ |
| | | private String executeStandard; |
| | | /** |
| | | * 夿 ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long auditUserId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long approveUserId; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | * æä¸¾ {@link MesQcStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | |
| | | // ========== æ¥å表头ä¸ç¾å ========== |
| | | |
| | | /** |
| | | * éæ ·å°ç¹ |
| | | */ |
| | | private String samplingLocation; |
| | | /** |
| | | * è¯ä¹¦ç¼å·/åæ ¼è¯å· |
| | | */ |
| | | private String certificateNo; |
| | | /** |
| | | * æ§è¡æ åï¼å¦ GB/T6027ï¼ |
| | | */ |
| | | private String executeStandard; |
| | | /** |
| | | * 夿 ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long auditUserId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å
³è AdminUserDO ç id |
| | | */ |
| | | private Long approveUserId; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | @TableField(typeHandler = IntegerListTypeHandler.class) |
| | | private List<Integer> types; |
| | | /** |
| | | * é»è®¤æ§è¡æ åï¼å¦ GB/T6027ï¼å»ºåæ¶å¸¦å
¥æ£éªåä¸»è¡¨ï¼ |
| | | */ |
| | | private String defaultExecuteStandard; |
| | | /** |
| | | * ç¶æ |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} |
| | |
| | | */ |
| | | private Long indicatorId; |
| | | /** |
| | | * å±ç¤ºæåºå· |
| | | */ |
| | | private Integer sortOrder; |
| | | /** |
| | | * æ¯å¦åä¸åæ ¼å¤å®ï¼true=æ¯ï¼false=å¦ï¼åç»/ä¸é´åæ°è¡ä¸ºå¦ï¼ |
| | | */ |
| | | private Boolean judgeFlag; |
| | | /** |
| | | * æ£æµæ¹æ³ |
| | | */ |
| | | private String checkMethod; |
| | |
| | | ErrorCode QC_INDICATOR_CODE_DUPLICATE = new ErrorCode(1_040_601_001, "è´¨æ£ææ ç¼ç å·²åå¨"); |
| | | ErrorCode QC_INDICATOR_NAME_DUPLICATE = new ErrorCode(1_040_601_002, "è´¨æ£ææ åç§°å·²åå¨"); |
| | | ErrorCode QC_INDICATOR_RESULT_SPECIFICATION_REQUIRED = new ErrorCode(1_040_601_003, "ç»æå¼å±æ§ä¸è½ä¸ºç©º"); |
| | | ErrorCode QC_INDICATOR_EXISTS_CHILDREN = new ErrorCode(1_040_601_004, "æ£æµé¡¹ã{}ãä¸åå¨å项ï¼è¯·å
å é¤å项ååå 餿¬é¡¹"); |
| | | ErrorCode QC_INDICATOR_PARENT_NOT_GROUP = new ErrorCode(1_040_601_005, "æå±åç»ã{}ã䏿¯åç»é¡¹ï¼è¯·éæ©åç»ç±»åçæ£æµé¡¹ä½ä¸ºç¶çº§"); |
| | | ErrorCode QC_INDICATOR_PARENT_LEVEL_EXCEEDED = new ErrorCode(1_040_601_006, "æ£æµé¡¹å±çº§æå¤ä¸¤çº§ï¼æå±åç»ã{}ãæ¬èº«å·²æ¯å项ï¼ä¸è½åä½ä¸ºç¶çº§"); |
| | | ErrorCode QC_INDICATOR_RESULT_TYPE_REQUIRED = new ErrorCode(1_040_601_007, "å½å
¥é¡¹çç»æå¼ç±»åä¸è½ä¸ºç©ºï¼å¦ä»
使¥ååç»æ é¢ï¼è¯·å°æ¡ç®ç±»å设为åç»é¡¹"); |
| | | |
| | | // ========== MES è´¨é管ç-缺é·ç±»åï¼1-040-602-000ï¼ ========== |
| | | ErrorCode QC_DEFECT_NOT_EXISTS = new ErrorCode(1_040_602_000, "缺é·ç±»åä¸åå¨"); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.enums.qc; |
| | | |
| | | import cn.iocoder.yudao.framework.common.core.ArrayValuable; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * MES è´¨æ£ææ æ¡ç®ç±»åæä¸¾ |
| | | * |
| | | * <p>RECORD å½å
¥é¡¹ï¼åä¸ç»æå½å
¥ä¸å¤å®ï¼GROUP åç»é¡¹ï¼ä»
使¥ååç»æ é¢ï¼ä¸å½å
¥ä¸å¤å®</p> |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum MesQcIndicatorItemTypeEnum implements ArrayValuable<Integer> { |
| | | |
| | | RECORD(1, "å½å
¥é¡¹"), |
| | | GROUP(2, "åç»é¡¹"); |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesQcIndicatorItemTypeEnum::getType).toArray(Integer[]::new); |
| | | |
| | | /** |
| | | * ç±»åå¼ |
| | | */ |
| | | private final Integer type; |
| | | /** |
| | | * ç±»åå |
| | | */ |
| | | private final String name; |
| | | |
| | | @Override |
| | | public Integer[] array() { |
| | | return ARRAYS; |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicator.MesQcIndicatorMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcResultValueTypeEnum; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | @Override |
| | | public Long createIndicator(MesQcIndicatorSaveReqVO createReqVO) { |
| | | // è§èåå±çº§å段 |
| | | normalizeHierarchyFields(createReqVO); |
| | | // æ ¡éªç¸å
³åæ° |
| | | validateIndicatorSaveData(null, createReqVO); |
| | | |
| | |
| | | public void updateIndicator(MesQcIndicatorSaveReqVO updateReqVO) { |
| | | // æ ¡éªåå¨ |
| | | validateIndicatorExists(updateReqVO.getId()); |
| | | // è§èåå±çº§å段 |
| | | normalizeHierarchyFields(updateReqVO); |
| | | // æ ¡éªç¸å
³åæ° |
| | | validateIndicatorSaveData(updateReqVO.getId(), updateReqVO); |
| | | |
| | |
| | | @Override |
| | | public void deleteIndicator(Long id) { |
| | | // æ ¡éªåå¨ |
| | | validateIndicatorExists(id); |
| | | MesQcIndicatorDO indicator = validateIndicatorExists(id); |
| | | // æ ¡éªæ å项 |
| | | Long childCount = indicatorMapper.selectCount(new LambdaQueryWrapperX<MesQcIndicatorDO>() |
| | | .eq(MesQcIndicatorDO::getParentId, id)); |
| | | if (childCount != null && childCount > 0) { |
| | | throw exception(QC_INDICATOR_EXISTS_CHILDREN, indicator.getName()); |
| | | } |
| | | // å é¤ |
| | | indicatorMapper.deleteById(id); |
| | | } |
| | | |
| | | private void normalizeHierarchyFields(MesQcIndicatorSaveReqVO saveReqVO) { |
| | | if (saveReqVO.getParentId() == null) { |
| | | saveReqVO.setParentId(0L); |
| | | } |
| | | if (saveReqVO.getItemType() == null) { |
| | | saveReqVO.setItemType(MesQcIndicatorItemTypeEnum.RECORD.getType()); |
| | | } |
| | | if (saveReqVO.getSortOrder() == null) { |
| | | saveReqVO.setSortOrder(0); |
| | | } |
| | | } |
| | | |
| | | private void validateIndicatorSaveData(Long id, MesQcIndicatorSaveReqVO saveReqVO) { |
| | | // æ ¡éªç¼ç å¯ä¸ |
| | | validateIndicatorCodeUnique(id, saveReqVO.getCode()); |
| | | // æ ¡éªåç§°å¯ä¸ |
| | | validateIndicatorNameUnique(id, saveReqVO.getName()); |
| | | // æ ¡éªåå±çº§åç§°å¯ä¸ï¼ä¸ååç»ä¸å
许åååæ°è¡ï¼å¦"è¯æ ·ä½ç§¯V/mL"ï¼ |
| | | validateIndicatorNameUnique(id, saveReqVO.getName(), saveReqVO.getParentId()); |
| | | // æ ¡éªå±çº§åæ³æ§ï¼ç¶é¡¹åå¨ãç¶é¡¹ä¸ºåç»é¡¹ãæå¤ä¸¤çº§ï¼ |
| | | validateIndicatorHierarchy(id, saveReqVO); |
| | | // å½å
¥é¡¹å¿
é¡»æå®ç»æå¼ç±»å |
| | | if (ObjUtil.notEqual(MesQcIndicatorItemTypeEnum.GROUP.getType(), saveReqVO.getItemType()) |
| | | && saveReqVO.getResultType() == null) { |
| | | throw exception(QC_INDICATOR_RESULT_TYPE_REQUIRED); |
| | | } |
| | | // æ ¡éªç»æå¼å±æ§ |
| | | validateResultSpecification(saveReqVO.getResultType(), saveReqVO.getResultSpecification()); |
| | | } |
| | | |
| | | private void validateIndicatorExists(Long id) { |
| | | if (indicatorMapper.selectById(id) == null) { |
| | | private void validateIndicatorHierarchy(Long id, MesQcIndicatorSaveReqVO saveReqVO) { |
| | | Long parentId = saveReqVO.getParentId(); |
| | | if (parentId == null || parentId == 0L) { |
| | | return; |
| | | } |
| | | if (ObjUtil.equal(parentId, id)) { |
| | | throw exception(QC_INDICATOR_PARENT_NOT_GROUP, saveReqVO.getName()); |
| | | } |
| | | MesQcIndicatorDO parent = indicatorMapper.selectById(parentId); |
| | | if (parent == null) { |
| | | throw exception(QC_INDICATOR_NOT_EXISTS); |
| | | } |
| | | if (ObjUtil.notEqual(MesQcIndicatorItemTypeEnum.GROUP.getType(), parent.getItemType())) { |
| | | throw exception(QC_INDICATOR_PARENT_NOT_GROUP, parent.getName()); |
| | | } |
| | | // ä»
å
许两级ï¼ç¶åç»æ¬èº«å¿
é¡»æ¯é¡¶çº§ |
| | | if (ObjUtil.defaultIfNull(parent.getParentId(), 0L) != 0L) { |
| | | throw exception(QC_INDICATOR_PARENT_LEVEL_EXCEEDED, parent.getName()); |
| | | } |
| | | } |
| | | |
| | | private MesQcIndicatorDO validateIndicatorExists(Long id) { |
| | | MesQcIndicatorDO indicator = indicatorMapper.selectById(id); |
| | | if (indicator == null) { |
| | | throw exception(QC_INDICATOR_NOT_EXISTS); |
| | | } |
| | | return indicator; |
| | | } |
| | | |
| | | private void validateIndicatorCodeUnique(Long id, String code) { |
| | |
| | | } |
| | | } |
| | | |
| | | private void validateIndicatorNameUnique(Long id, String name) { |
| | | MesQcIndicatorDO indicator = indicatorMapper.selectByName(name); |
| | | if (indicator == null) { |
| | | return; |
| | | } |
| | | if (ObjUtil.notEqual(indicator.getId(), id)) { |
| | | private void validateIndicatorNameUnique(Long id, String name, Long parentId) { |
| | | Long count = indicatorMapper.selectCount(new LambdaQueryWrapperX<MesQcIndicatorDO>() |
| | | .eq(MesQcIndicatorDO::getName, name) |
| | | .eq(MesQcIndicatorDO::getParentId, ObjUtil.defaultIfNull(parentId, 0L)) |
| | | .ne(id != null, MesQcIndicatorDO::getId, id)); |
| | | if (count != null && count > 0) { |
| | | throw exception(QC_INDICATOR_NAME_DUPLICATE); |
| | | } |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicatorresult.MesQcIndicatorResultMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcResultValueTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; |
| | |
| | | // 2.2 æ¹éæå
¥æç» |
| | | List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(createReqVO.getItems(), |
| | | MesQcIndicatorResultDetailDO.class); |
| | | details.forEach(detail -> detail.setResultId(result.getId())); |
| | | details.forEach(detail -> detail.setResultId(result.getId()) |
| | | .setMeasureNo(Objects.requireNonNullElse(detail.getMeasureNo(), 1))); |
| | | resultDetailService.createDetailList(details); |
| | | return result.getId(); |
| | | } |
| | |
| | | // 2.2 æ¹éæ´æ°æç» |
| | | List<MesQcIndicatorResultDetailDO> details = BeanUtils.toBean(updateReqVO.getItems(), |
| | | MesQcIndicatorResultDetailDO.class); |
| | | details.forEach(detail -> detail.setMeasureNo(Objects.requireNonNullElse(detail.getMeasureNo(), 1))); |
| | | resultDetailService.createOrUpdateDetailList(details); |
| | | } |
| | | |
| | |
| | | if (indicator == null || indicator.getResultType() == null) { |
| | | continue; |
| | | } |
| | | // åç»é¡¹ï¼GROUPï¼ä»
æ¿è½½å±çº§/å
¬å¼ææ¬ï¼ä¸å½å
¥å¼ï¼è·³è¿æ ¼å¼æ ¡éª |
| | | if (Objects.equals(indicator.getItemType(), MesQcIndicatorItemTypeEnum.GROUP.getType())) { |
| | | continue; |
| | | } |
| | | Integer resultType = indicator.getResultType(); |
| | | if (Objects.equals(resultType, MesQcResultValueTypeEnum.FLOAT.getType())) { |
| | | try { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.qc.indicatorresult; |
| | | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcQcReportRespVO; |
| | | |
| | | /** |
| | | * MES æ£éªæ¥åå Serviceï¼æå°æ°æ®èåï¼å类质æ£åéç¨ï¼ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesQcReportService { |
| | | |
| | | /** |
| | | * è·å¾æ£éªæ¥ååæ°æ®ï¼è¡¨å¤´ + æ£éªé¡¹æ + å¹³è¡æµéå¼ + ç¾ååºï¼ |
| | | * |
| | | * @param qcId è´¨æ£å ID |
| | | * @param qcType è´¨æ£ç±»åï¼{@link cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum}ï¼ |
| | | * @param resultId æ£éªç»æï¼æ ·åï¼IDï¼å¯ä¸ºç©ºï¼ä¸ºç©ºæ¶å该æ£éªå䏿æ©çæ ·å |
| | | * @return æ¥åæ°æ® |
| | | */ |
| | | MesQcQcReportRespVO getQcReportData(Long qcId, Integer qcType, Long resultId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.qc.indicatorresult; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.indicatorresult.vo.MesQcQcReportRespVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcLineDO; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcIndicatorItemTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.HashSet; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | |
| | | /** |
| | | * MES æ£éªæ¥åå Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesQcReportServiceImpl implements MesQcReportService { |
| | | |
| | | @Resource |
| | | private MesQcIndicatorResultService resultService; |
| | | @Resource |
| | | private MesQcIndicatorService indicatorService; |
| | | |
| | | @Resource |
| | | private MesQcIqcService iqcService; |
| | | @Resource |
| | | private MesQcIqcLineService iqcLineService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcIpqcService ipqcService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcIpqcLineService ipqcLineService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcOqcService oqcService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcOqcLineService oqcLineService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcRqcService rqcService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcRqcLineService rqcLineService; |
| | | |
| | | @Resource |
| | | private MesMdItemService itemService; |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Override |
| | | public MesQcQcReportRespVO getQcReportData(Long qcId, Integer qcType, Long resultId) { |
| | | MesQcQcReportRespVO report = new MesQcQcReportRespVO(); |
| | | report.setQcType(qcType); |
| | | |
| | | // 1. 主表信æ¯ï¼æç±»ååå
Œ
±åæ®µï¼ |
| | | Long itemId = null; |
| | | List<Long> lineIndicatorIds = new ArrayList<>(); |
| | | Map<Long, LineInfo> lineInfoMap = new LinkedHashMap<>(); |
| | | if (Objects.equals(qcType, MesQcTypeEnum.IQC.getType())) { |
| | | MesQcIqcDO doc = iqcService.validateIqcExists(qcId); |
| | | itemId = doc.getItemId(); |
| | | report.setDocCode(doc.getCode()).setDocName(doc.getName()) |
| | | .setBatchNo(doc.getVendorBatch()).setBatchQuantity(doc.getReceivedQuantity()) |
| | | .setSamplingTime(doc.getInspectDate() != null ? doc.getInspectDate() : doc.getReceiveDate()) |
| | | .setSamplingLocation(doc.getSamplingLocation()).setCertificateNo(doc.getCertificateNo()) |
| | | .setExecuteStandard(doc.getExecuteStandard()) |
| | | .setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId()) |
| | | .setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult()) |
| | | .setRemark(doc.getRemark()); |
| | | List<MesQcIqcLineDO> lines = iqcLineService.getIqcLineListByIqcId(qcId); |
| | | for (MesQcIqcLineDO line : lines) { |
| | | lineIndicatorIds.add(line.getIndicatorId()); |
| | | lineInfoMap.putIfAbsent(line.getIndicatorId(), new LineInfo(line.getCheckMethod(), |
| | | line.getStandardValue(), line.getMinThreshold(), line.getMaxThreshold())); |
| | | } |
| | | } else if (Objects.equals(qcType, MesQcTypeEnum.IPQC.getType())) { |
| | | MesQcIpqcDO doc = ipqcService.validateIpqcExists(qcId); |
| | | itemId = doc.getItemId(); |
| | | report.setDocCode(doc.getCode()).setDocName(doc.getName()) |
| | | .setBatchNo(doc.getSourceDocCode()).setBatchQuantity(doc.getCheckQuantity()) |
| | | .setSamplingTime(doc.getInspectDate()) |
| | | .setSamplingLocation(doc.getSamplingLocation()).setCertificateNo(doc.getCertificateNo()) |
| | | .setExecuteStandard(doc.getExecuteStandard()) |
| | | .setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId()) |
| | | .setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult()) |
| | | .setRemark(doc.getRemark()); |
| | | List<MesQcIpqcLineDO> lines = ipqcLineService.getIpqcLineListByIpqcId(qcId); |
| | | for (MesQcIpqcLineDO line : lines) { |
| | | lineIndicatorIds.add(line.getIndicatorId()); |
| | | lineInfoMap.putIfAbsent(line.getIndicatorId(), new LineInfo(line.getCheckMethod(), |
| | | line.getStandardValue(), line.getMinThreshold(), line.getMaxThreshold())); |
| | | } |
| | | } else if (Objects.equals(qcType, MesQcTypeEnum.OQC.getType())) { |
| | | MesQcOqcDO doc = oqcService.validateOqcExists(qcId); |
| | | itemId = doc.getItemId(); |
| | | report.setDocCode(doc.getCode()).setDocName(doc.getName()) |
| | | .setBatchNo(doc.getBatchCode()).setBatchQuantity(doc.getOutQuantity()) |
| | | .setSamplingTime(doc.getInspectDate() != null ? doc.getInspectDate() : doc.getOutDate()) |
| | | .setSamplingLocation(doc.getSamplingLocation()).setCertificateNo(doc.getCertificateNo()) |
| | | .setExecuteStandard(doc.getExecuteStandard()) |
| | | .setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId()) |
| | | .setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult()) |
| | | .setRemark(doc.getRemark()); |
| | | List<MesQcOqcLineDO> lines = oqcLineService.getOqcLineListByOqcId(qcId); |
| | | for (MesQcOqcLineDO line : lines) { |
| | | lineIndicatorIds.add(line.getIndicatorId()); |
| | | lineInfoMap.putIfAbsent(line.getIndicatorId(), new LineInfo(line.getCheckMethod(), |
| | | line.getStandardValue(), line.getMinThreshold(), line.getMaxThreshold())); |
| | | } |
| | | } else if (Objects.equals(qcType, MesQcTypeEnum.RQC.getType())) { |
| | | MesQcRqcDO doc = rqcService.validateRqcExists(qcId); |
| | | itemId = doc.getItemId(); |
| | | report.setDocCode(doc.getCode()).setDocName(doc.getName()) |
| | | .setBatchNo(doc.getBatchCode()).setBatchQuantity(doc.getCheckQuantity()) |
| | | .setSamplingTime(doc.getInspectDate()) |
| | | .setSamplingLocation(doc.getSamplingLocation()).setCertificateNo(doc.getCertificateNo()) |
| | | .setExecuteStandard(doc.getExecuteStandard()) |
| | | .setInspectorUserId(doc.getInspectorUserId()).setAuditUserId(doc.getAuditUserId()) |
| | | .setApproveUserId(doc.getApproveUserId()).setCheckResult(doc.getCheckResult()) |
| | | .setRemark(doc.getRemark()); |
| | | List<MesQcRqcLineDO> lines = rqcLineService.getRqcLineListByRqcId(qcId); |
| | | for (MesQcRqcLineDO line : lines) { |
| | | lineIndicatorIds.add(line.getIndicatorId()); |
| | | lineInfoMap.putIfAbsent(line.getIndicatorId(), new LineInfo(line.getCheckMethod(), |
| | | line.getStandardValue(), line.getMinThreshold(), line.getMaxThreshold())); |
| | | } |
| | | } else { |
| | | throw new IllegalArgumentException("æä¸æ¯æ qcType=" + qcType); |
| | | } |
| | | |
| | | // 2. æ ·åå表ä¸éä¸çæ£éªç»æ |
| | | List<MesQcIndicatorResultDO> results = resultService.getIndicatorResultListByQcIdAndType(qcId, qcType); |
| | | Long effectiveResultId = resultId; |
| | | if (effectiveResultId == null && CollUtil.isNotEmpty(results)) { |
| | | effectiveResultId = results.stream() |
| | | .min(Comparator.comparing(MesQcIndicatorResultDO::getId)) |
| | | .map(MesQcIndicatorResultDO::getId).orElse(null); |
| | | } |
| | | |
| | | // 3. ææ ï¼å«ç¶åç»èªå¨è¡¥å
¨ï¼ |
| | | Set<Long> indicatorIds = new HashSet<>(lineIndicatorIds); |
| | | Map<Long, MesQcIndicatorDO> indicatorMap = indicatorService.getIndicatorMap(indicatorIds); |
| | | Set<Long> missingParentIds = indicatorMap.values().stream() |
| | | .filter(ind -> ind.getParentId() != null && ind.getParentId() > 0 && !indicatorMap.containsKey(ind.getParentId())) |
| | | .map(MesQcIndicatorDO::getParentId).collect(Collectors.toSet()); |
| | | if (CollUtil.isNotEmpty(missingParentIds)) { |
| | | indicatorMap.putAll(indicatorService.getIndicatorMap(missingParentIds)); |
| | | } |
| | | |
| | | // 4. æ£éªç»ææç»ï¼æ indicatorId åç»ãmeasureNo ååºï¼ |
| | | Map<Long, List<MesQcIndicatorResultDetailDO>> detailMap = Collections.emptyMap(); |
| | | if (effectiveResultId != null) { |
| | | List<MesQcIndicatorResultDetailDO> details = |
| | | resultService.getIndicatorResultDetailListByResultId(effectiveResultId); |
| | | detailMap = details.stream().collect(Collectors.groupingBy(MesQcIndicatorResultDetailDO::getIndicatorId)); |
| | | } |
| | | |
| | | // 5. ç»è£
æ£éªé¡¹æ |
| | | List<MesQcQcReportRespVO.ReportItem> roots = buildReportItems(indicatorMap, lineInfoMap, detailMap, report); |
| | | report.setItems(roots); |
| | | |
| | | // 6. 表头å
³èæ°æ®ï¼ç©æã人å |
| | | if (itemId != null) { |
| | | MesMdItemDO item = itemService.getItemMap(Collections.singleton(itemId)).get(itemId); |
| | | if (item != null) { |
| | | report.setItemCode(item.getCode()).setItemName(item.getName()) |
| | | .setItemSpecification(item.getSpecification()); |
| | | } |
| | | } |
| | | Set<Long> userIds = new HashSet<>(); |
| | | userIds.add(report.getInspectorUserId()); |
| | | userIds.add(report.getAuditUserId()); |
| | | userIds.add(report.getApproveUserId()); |
| | | userIds.removeIf(Objects::isNull); |
| | | if (CollUtil.isNotEmpty(userIds)) { |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); |
| | | if (report.getInspectorUserId() != null && userMap.get(report.getInspectorUserId()) != null) { |
| | | report.setInspectorName(userMap.get(report.getInspectorUserId()).getNickname()); |
| | | } |
| | | if (report.getAuditUserId() != null && userMap.get(report.getAuditUserId()) != null) { |
| | | report.setAuditName(userMap.get(report.getAuditUserId()).getNickname()); |
| | | } |
| | | if (report.getApproveUserId() != null && userMap.get(report.getApproveUserId()) != null) { |
| | | report.setApproveName(userMap.get(report.getApproveUserId()).getNickname()); |
| | | } |
| | | } |
| | | return report; |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
æ¥åæ£éªé¡¹æ ï¼é¡ºå¸¦æ¶éå
¨å± measureNos å头 |
| | | */ |
| | | private List<MesQcQcReportRespVO.ReportItem> buildReportItems( |
| | | Map<Long, MesQcIndicatorDO> indicatorMap, |
| | | Map<Long, LineInfo> lineInfoMap, |
| | | Map<Long, List<MesQcIndicatorResultDetailDO>> detailMap, |
| | | MesQcQcReportRespVO report) { |
| | | Map<Long, MesQcQcReportRespVO.ReportItem> nodeMap = new LinkedHashMap<>(); |
| | | Set<Integer> measureNoSet = new HashSet<>(); |
| | | for (Long indicatorId : indicatorMap.keySet()) { |
| | | MesQcIndicatorDO indicator = indicatorMap.get(indicatorId); |
| | | MesQcQcReportRespVO.ReportItem node = new MesQcQcReportRespVO.ReportItem(); |
| | | node.setIndicatorId(indicator.getId()); |
| | | node.setIndicatorCode(indicator.getCode()); |
| | | node.setIndicatorName(indicator.getName()); |
| | | node.setParentId(Objects.requireNonNullElse(indicator.getParentId(), 0L)); |
| | | node.setItemType(Objects.requireNonNullElse(indicator.getItemType(), |
| | | MesQcIndicatorItemTypeEnum.RECORD.getType())); |
| | | node.setFormulaText(indicator.getFormulaText()); |
| | | node.setUnitText(indicator.getUnitText()); |
| | | node.setSortOrder(Objects.requireNonNullElse(indicator.getSortOrder(), 0)); |
| | | LineInfo lineInfo = lineInfoMap.get(indicator.getId()); |
| | | if (lineInfo != null) { |
| | | node.setCheckMethod(lineInfo.checkMethod); |
| | | node.setStandardValue(lineInfo.standardValue); |
| | | node.setThresholdMin(lineInfo.thresholdMin); |
| | | node.setThresholdMax(lineInfo.thresholdMax); |
| | | } |
| | | List<MesQcIndicatorResultDetailDO> details = detailMap.getOrDefault(indicator.getId(), Collections.emptyList()); |
| | | List<MesQcQcReportRespVO.ReportMeasure> measures = new ArrayList<>(details.size()); |
| | | details.stream() |
| | | .sorted(Comparator.comparing(d -> Objects.requireNonNullElse(d.getMeasureNo(), 1))) |
| | | .forEach(d -> { |
| | | MesQcQcReportRespVO.ReportMeasure measure = new MesQcQcReportRespVO.ReportMeasure(); |
| | | measure.setMeasureNo(Objects.requireNonNullElse(d.getMeasureNo(), 1)); |
| | | measure.setValue(d.getValue()); |
| | | measure.setRemark(d.getRemark()); |
| | | measures.add(measure); |
| | | measureNoSet.add(measure.getMeasureNo()); |
| | | }); |
| | | node.setMeasures(measures); |
| | | nodeMap.put(indicatorId, node); |
| | | } |
| | | // ææ ï¼ç¶ä¸å¨éåå
çå项æå为顶级 |
| | | List<MesQcQcReportRespVO.ReportItem> roots = new ArrayList<>(); |
| | | Comparator<MesQcQcReportRespVO.ReportItem> byOrder = |
| | | Comparator.comparing(MesQcQcReportRespVO.ReportItem::getSortOrder) |
| | | .thenComparing(MesQcQcReportRespVO.ReportItem::getIndicatorId); |
| | | for (MesQcQcReportRespVO.ReportItem node : nodeMap.values()) { |
| | | MesQcQcReportRespVO.ReportItem parent = node.getParentId() > 0 ? nodeMap.get(node.getParentId()) : null; |
| | | if (parent == null) { |
| | | roots.add(node); |
| | | } else { |
| | | if (parent.getChildren() == null) { |
| | | parent.setChildren(new ArrayList<>()); |
| | | } |
| | | parent.getChildren().add(node); |
| | | } |
| | | } |
| | | roots.sort(byOrder); |
| | | roots.forEach(root -> { |
| | | if (root.getChildren() != null) { |
| | | root.getChildren().sort(byOrder); |
| | | } |
| | | }); |
| | | // å头ï¼è³å°ä¸å |
| | | if (measureNoSet.isEmpty()) { |
| | | report.setMeasureNos(Collections.singletonList(1)); |
| | | } else { |
| | | report.setMeasureNos(new ArrayList<>(measureNoSet).stream().sorted().collect(Collectors.toList())); |
| | | } |
| | | return roots; |
| | | } |
| | | |
| | | /** |
| | | * æ£éªåè¡çå¤å®ä¿¡æ¯ï¼åç±» line çå
Œ
±å段快ç
§ï¼ |
| | | */ |
| | | private record LineInfo(String checkMethod, BigDecimal standardValue, BigDecimal thresholdMin, BigDecimal thresholdMax) { |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceLineDO; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ncr.MesQcNcrService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceLineService; |
| | |
| | | |
| | | @Resource |
| | | private MesQcTemplateItemService templateItemService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcTemplateService templateService; |
| | | @Resource |
| | | private MesQcIpqcLineService ipqcLineService; |
| | | @Resource |
| | |
| | | .setTemplateId(templateId) |
| | | .setSourceDocCode(sourceDocCode) |
| | | .setStatus(MesQcStatusEnum.DRAFT.getStatus()); |
| | | // æ§è¡æ åï¼ç¨æ·æªå¡«æ¶å鿍¡æ¿é»è®¤å¼ |
| | | if (StrUtil.isBlank(ipqc.getExecuteStandard())) { |
| | | MesQcTemplateDO template = templateService.getTemplate(templateId); |
| | | if (template != null) { |
| | | ipqc.setExecuteStandard(template.getDefaultExecuteStandard()); |
| | | } |
| | | } |
| | | ipqcMapper.insert(ipqc); |
| | | |
| | | // 3. 仿¨¡æ¿ææ èªå¨çææ£éªè¡ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.iqc.vo.MesQcIqcSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.iqc.MesQcIqcMapper; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt.MesWmOutsourceReceiptService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrSaveReqVO; |
| | |
| | | |
| | | @Resource |
| | | private MesQcTemplateItemService templateItemService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcTemplateService templateService; |
| | | @Resource |
| | | private MesQcIqcLineService iqcLineService; |
| | | @Resource |
| | |
| | | .setCheckQuantity(createReqVO.getQualifiedQuantity().add(createReqVO.getUnqualifiedQuantity())) |
| | | .setSourceDocCode(sourceDocCode) |
| | | .setStatus(MesQcStatusEnum.DRAFT.getStatus()); |
| | | // æ§è¡æ åï¼ç¨æ·æªå¡«æ¶å鿍¡æ¿é»è®¤å¼ |
| | | if (StrUtil.isBlank(iqc.getExecuteStandard())) { |
| | | MesQcTemplateDO template = templateService.getTemplate(templateId); |
| | | if (template != null) { |
| | | iqc.setExecuteStandard(template.getDefaultExecuteStandard()); |
| | | } |
| | | } |
| | | iqcMapper.insert(iqc); |
| | | |
| | | // 3. 仿¨¡æ¿ææ èªå¨çææ£éªè¡ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.oqc.vo.MesQcOqcPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.oqc.vo.MesQcOqcSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.oqc.MesQcOqcMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ncr.MesQcNcrService; |
| | |
| | | |
| | | @Resource |
| | | private MesQcTemplateItemService templateItemService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcTemplateService templateService; |
| | | @Resource |
| | | private MesQcOqcLineService oqcLineService; |
| | | @Resource |
| | |
| | | .setTemplateId(templateId) |
| | | .setSourceDocCode(sourceDocCode) |
| | | .setStatus(MesQcStatusEnum.DRAFT.getStatus()); |
| | | // æ§è¡æ åï¼ç¨æ·æªå¡«æ¶å鿍¡æ¿é»è®¤å¼ |
| | | if (StrUtil.isBlank(oqc.getExecuteStandard())) { |
| | | MesQcTemplateDO template = templateService.getTemplate(templateId); |
| | | if (template != null) { |
| | | oqc.setExecuteStandard(template.getDefaultExecuteStandard()); |
| | | } |
| | | } |
| | | oqcMapper.insert(oqc); |
| | | |
| | | // 3. 仿¨¡æ¿ææ èªå¨çææ£éªè¡ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.qc.rqc.MesQcRqcMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrSaveReqVO; |
| | |
| | | |
| | | @Resource |
| | | private MesQcTemplateItemService templateItemService; |
| | | @Resource |
| | | @Lazy |
| | | private MesQcTemplateService templateService; |
| | | @Resource |
| | | private MesQcRqcLineService rqcLineService; |
| | | @Resource |
| | |
| | | .setTemplateId(templateId) |
| | | .setSourceDocCode(sourceDocCode) |
| | | .setStatus(MesQcStatusEnum.DRAFT.getStatus()); |
| | | // æ§è¡æ åï¼ç¨æ·æªå¡«æ¶å鿍¡æ¿é»è®¤å¼ |
| | | if (StrUtil.isBlank(rqc.getExecuteStandard())) { |
| | | MesQcTemplateDO template = templateService.getTemplate(templateId); |
| | | if (template != null) { |
| | | rqc.setExecuteStandard(template.getDefaultExecuteStandard()); |
| | | } |
| | | } |
| | | rqcMapper.insert(rqc); |
| | | |
| | | // 3. 仿¨¡æ¿ææ èªå¨çææ£éªè¡ |