Merge remote-tracking branch 'origin/dev_business' into dev_business
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # é误æç¤ºææ¡ç²¾ç¡®æ§è§å |
| | | |
| | | ## è§å |
| | | |
| | | - é¢åç¨æ·çæ ¡éª/å¼å¸¸æç¤ºï¼å端å¼å¸¸ messageãExcel 导å
¥æ ¡éªæç¤ºãå端 toastãæ¥å£æ¥éææ¡ï¼ï¼**ç¦æ¢åææå¤ä¸ªæ¡ä»¶å å¨ä¸ä¸ªç¬¼ç»å¥é**ï¼ä¾å¦ï¼`åºåè®°å½ä¸æäº¤çç©æãæ¹æ¬¡æåºä½ä¿¡æ¯ä¸ä¸è´`ã`æ°æ®ä¸åæ³`ã`åæ°é误`ã`è®°å½ä¸ä¸è´`ã |
| | | - ç¨æ·çå°æç¤ºååºè½**ä¸ç¼ç¥éæ¯åªä¸ªæ¡ä»¶ä¸æ»¡è¶³ãå·®å¨åªãæä¹æ¹**ï¼è䏿¯åªç¥é"åºéäº"ã |
| | | |
| | | ## 夿¡ä»¶æ ¡éªæç¤ºè¦æ± |
| | | |
| | | æç¤ºå¿
须忶å
å«ä¸è¦ç´ ï¼ |
| | | |
| | | 1. **å
·ä½ç»´åº¦**ï¼æåºæ¯åªä¸ä¸ªå段/è§å䏿»¡è¶³ï¼å¦ï¼ç©æãæ¹æ¬¡ãæ¹æ¬¡å·ãä»åºãåºåºãåºä½ãæ°éï¼ã |
| | | 2. **åæ¹å®é
å¼**ï¼ç»åº"åºå/忮侧"ä¸"æäº¤å¼"两侧çå¯è¯»å¼å¯¹æ¯ï¼å¹¶å°½éè§£ææä¸å¡åç§°ï¼å¦ `æåä»/2åº/A-01`ï¼ï¼**ä¸è¦ç´æ¥æ´é²çº¯æ°å ID**ï¼åç§°è§£æå¤±è´¥æ¶æåé `ID=xxx` å¹¶æç¡®æ 注ã |
| | | 3. **坿§è¡å¨ä½**ï¼åè¯ç¨æ·æ¥ä¸æ¥æä¹åï¼éæ°éæ©åªä¸é¡¹ãå¦ä½å·æ°éè¯ãå é¤åéæ°æ·»å ãéååªä¸æ¥ãèç³»è°ï¼ã |
| | | |
| | | ### åæ³ç¤ºä¾ |
| | | |
| | | ```java |
| | | // â 笼ç»ã夿¡ä»¶å å ãæ æ³å®ä½ |
| | | throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH); |
| | | |
| | | // â åªç»æ¡ä»¶ä¸ç»å¼ãä¸ç»å¨ä½ãæ´é²ç硬 ID |
| | | throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(), |
| | | "ä¸ä¸è´ï¼åºä½(åºå 8 â æäº¤ null)"); |
| | | |
| | | // â
维度 + 两侧å¯è¯»å¼ + å¨ä½ |
| | | throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(), |
| | | "æéåºåè®°å½ä¸åæ®ä¸ä¸è´ï¼æéåºååºä½[A-01]ï¼åæ®åºä½ä¸º[æªéæ©]ã" |
| | | + "è¯·éæ°éæ©è¯¥ç©ææ£ç¡®çåºåï¼è¥ä»åº/åºåº/åºä½/æ¹æ¬¡è¢«ç¦ç¨æ æ³ä¿®æ¹ï¼è¯·å 餿¬æ¡æç»åéæ°æ·»å ã"); |
| | | ``` |
| | | |
| | | ## å®ç°è¦ç¹ |
| | | |
| | | - é维度ç¬ç«æ¯è¾ï¼`itemId â batchId â batchCode â warehouseId â locationId â areaId`ï¼ï¼**æä¸å¡ä¼å
级åªè¿å/æåºç¬¬ä¸å¤ä¸æ»¡è¶³**ï¼é¿å
䏿¬¡æå¤æ¡è®©ç¨æ·æä¸ä½éç¹ã |
| | | - åä¸é误ç ä½ä¸å¡ä¸ä¸æä¸åï¼å¦"æ§è¡æ£åæ¶åºå已被移åº/åå¹¶/æå" vs "æ°å¢æç»æ¶å¸¦éåæ®µ" vs "éè´§æ¥æºåºåç©æä¸ç¬¦"ï¼ï¼**åèªç»åºè´´ååºæ¯çä¸å±ææ¡**ï¼ä¸è¦é½å¤ç¨åä¸å¥ç¬¼ç»è¯ã |
| | | - åç§°è§£ææ¾å¨**å¼å¸¸åæ¯**åæ§è¡ï¼ç½è§è·¯å¾ï¼ï¼é¿å
æ¯æ¬¡æ£å¸¸ä¿åé½å¤æ¥è¡¨ï¼è§£æå¤±è´¥å¿
é¡»åé为å¯è¯»ç `ID=xxx` èéæäºæ¬¡å¼å¸¸ã |
| | | - 妿æä¸ªå段æ¬åºç±ç³»ç»èªå¨å¸¦åºï¼å¦éåºåååå¡«çä»åº/åºåº/åºä½/æ¹æ¬¡ï¼ï¼ä¸æ¦ä¸ä¸è´åºæ¬çäºå端åå¡«ç¼ºå¤±ææ°æ®è¢«æ¹ï¼æç¤ºéè¦åæ"è¯·éæ°éæ©ä»¥èªå¨å¸¦åº"ã |
| | | |
| | | ## èªæ¥æ¸
å |
| | | |
| | | æ°å¢æä¿®æ¹ä»»ä½å¯è½ç±å¤ä¸ªåå 触åçæç¤ºåï¼éé¡¹ç¡®è®¤ï¼ |
| | | |
| | | - [ ] æç¤ºæ¯å¦ææäº"å
·ä½æ¯åªä¸ªæ¡ä»¶"ï¼ |
| | | - [ ] æ¯å¦åæ¶ç»åºäº"ææå¼ vs å®é
å¼"ï¼å°½éç¨ä¸å¡åç§°èé IDï¼ï¼ |
| | | - [ ] æ¯å¦ç»åºäº"ç¨æ·ä¸ä¸æ¥è½åçå¨ä½"ï¼ |
| | | - [ ] æ¯å¦é¿å
äºæå¤ä¸ªæ¡ä»¶å è¿ä¸å¥"XXä¸ä¸è´"ï¼ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ°æ®åºåå§åä¸é
置导åºç»´æ¤è§å |
| | | |
| | | ## è§å |
| | | |
| | | - å
¨åºåå§ååªç¨**ä¸ä»½åå¹¶èæ¬**ï¼`docs/sql/config_export_all_<æ¥æ>.sql`ï¼å»ºç»æ + è¡¥é
ç½® + è¡¥èº«ä»½ä¸æ¬¡æ§å®æï¼ã |
| | | - **ä»»ä½ä¸å¡/é
ç½®è¡¨ç»æãé
ç½®æ°æ®ãç³»ç»èº«ä»½/æéæ°æ®æåæ´**ï¼é½åªéæ°çæè¿ä¸ä»½æä»¶ï¼ä¿è¯å
¶å§ç»æ¯ææ°å¯ä¸é®æ§è¡ççæ¬ã |
| | | - åªç»´æ¤åå¹¶æä»¶ï¼`config_export_<æ¥æ>.sql`ã`test_identity_seed_<æ¥æ>.sql` åªæ¯çæå®çä¸é´ä½ï¼ä¸ååç¬æäº¤ç»´æ¤ã |
| | | - è¿åè§ä¸ºéæ¼ï¼æ°åºåå§ååºæ¥ç¼ºè¡¨ / 缺èå / ç»ä¸ä¸ï¼å±äºæªææ¬è§å忥ã |
| | | |
| | | ## æ°æ®åºç¯å¢ |
| | | |
| | | | åº | è§è² | 说æ | |
| | | |------|------|------| |
| | | | `ruoyi-vue-pro` | **æºåº / è¿è¡åº / æå¨** | dev/test/jhhg/yzfx çé
ç½®æåå®ï¼è¿è¡å端ï¼48080ï¼è¯»åï¼ç³»ç»èº«ä»½ / æé / èåçæå¨æ°æ®æºãçæåå¹¶èæ¬æ¶çæ°æ®æ¥æºã | |
| | | | `test`ï¼æå
¶å®ç©ºåºï¼ | **åå§åç®æ ** | æ¬å° application-local çæåç空ç½åºï¼æ§è¡åå¹¶èæ¬å¨æ¤å»ºç»æ + è¡¥é
ç½® + 补身份ã | |
| | | | å
¶ä» | æ·è´ | 䏿ºåºåç»æååæ·è´ï¼ä¸å䏿¬å·¥ä½æµã | |
| | | |
| | | > çæ/æ§è¡åå¹¶èæ¬éå¨**åæ¶åå¨ `ruoyi-vue-pro` ä¸ç®æ åºçåä¸ MySQL å®ä¾**䏿§è¡ï¼é¶æ®µäºç¨è·¨åº `INSERT..SELECT`ï¼ãåºåå« `-` æ¶ SQL éè¦å åå¼å·ï¼å¦ `` `ruoyi-vue-pro` ``ï¼ã |
| | | |
| | | ## å¯ä¸ç»´æ¤æä»¶ |
| | | |
| | | **`docs/sql/config_export_all_20260904.sql`**ï¼11249 è¡ï¼åå¹¶çï¼ï¼å
é¨ä¸¤ä¸ªé¶æ®µï¼ |
| | | |
| | | | é¶æ®µ | å
容 | æ°æ®æ¥æº | |
| | | |------|------|----------| |
| | | | é¶æ®µä¸ï¼å config_exportï¼ | å
¨åº 413 å¼ è¡¨ `CREATE TABLE` + 6 ç±»é
ç½®æ°æ®ï¼â ååå®¡æ¹æµç¨ï¼act_*/bpm æ¿æ´»æµç¨å
æ°æ®+å®ä¹ï¼â¡ååä¸å¡é
ç½®ï¼bpm éä»¶/åç±»/表å/ç¨æ·ç»/çå¬/表达å¼ï¼â¢BI 大å±/go-view â£MES ç¼ç è§å â¤ç³»ç»é
ç½®ä¸»æ°æ®ï¼system_dict_type/dataãtenantãcompany_configï¼â¥AI/åºç¡è®¾æ½é
ç½®ã**廿æé¤èº«ä»½(users)/èå/æ¥å¿/æµæ°´**ã | ruoyi-vue-pro åé¢é导åºï¼èªå
å«ï¼ | |
| | | | é¶æ®µäºï¼å test_identity_seedï¼ | 补身份 + èåæå°å¯ç»å½æ°æ®ï¼â `system_menu` å
¨é¨ææèå â¡`system_dept`/`post`ï¼ä»
deleted=0ï¼â¢`system_role` è¶
管 super_admin â£`system_users` admin â¤`system_user_role` â¥`system_oauth2_client`ï¼client_id='default'ï¼ãå¹çï¼å
`DELETE` å `INSERT`ã | ruoyi-vue-pro è·¨åº `INSERT..SELECT` | |
| | | |
| | | æ¥å¸¸åå§åï¼åªéå¨ç®æ ç©ºåºæ§è¡ `config_export_all_20260904.sql` è¿ä¸ä»½ã |
| | | |
| | | ## ååæ´å½å±é¶æ®µï¼å
夿"该æ¾åªæ®µ"ï¼ |
| | | |
| | | | æ°æ®ç±»å« | æ¾è¿åå¹¶æä»¶çåªä¸ªé¶æ®µ | |
| | | |----------|-----------| |
| | | | æ°ä¸å¡è¡¨ç»æï¼å
¨åºä»»æ CREATE TABLEï¼ | é¶æ®µä¸ï¼ç»æï¼ | |
| | | | æ°å¢/æ¹å¨çé
ç½®ç±»æ°æ®ï¼åå
¸ãBPM 表å/æµç¨ãç¼ç è§åãBIãAIãå
¬å¸é
ç½®çï¼ | é¶æ®µä¸ï¼æ°æ®ï¼ | |
| | | | èå / é¨é¨ / å²ä½ / è§è² / ç¨æ· / ç¨æ·è§è² / OAuth2 客æ·ç«¯ | **é¶æ®µäº**ï¼ä¸è¿é¶æ®µä¸ï¼ | |
| | | | ä¸å¡ä¸»æ°æ® / åæ® / æµæ°´ï¼ç©æãå·¥åãæ£éªåçè¿è¡æ°æ®ï¼ | é½ä¸è¿ï¼ä»
å»ºç©ºç»æï¼ï¼ä¸å¡æ°æ®ç±åèªè¿ç§»èæ¬è´è´£ | |
| | | |
| | | ## ç»´æ¤æ¸
åï¼æåæ´æ¶æåºæ§è¡ï¼ |
| | | |
| | | 1. 夿忴å±äº"è¡¨ç»æ / é
ç½®æ°æ®"è¿æ¯"身份 / æé"ï¼ç¡®å®å®åºè½å¨é¶æ®µä¸è¿æ¯é¶æ®µäºã |
| | | 2. **éæ°çæåå¹¶æä»¶** `config_export_all_<æ¥æ>.sql`ï¼ç¨å½å¤©æ¥æå½åæ°çæ¬ï¼æ§çä¿ç夿¥ï¼ï¼ |
| | | - é¶æ®µä¸ï¼ä» `ruoyi-vue-pro` 导åºå
¨åºç»æ + 6 ç±»é
ç½®æ°æ®ã |
| | | - é¶æ®µäºï¼æ´æ°èº«ä»½/èå/OAuth2 补导段ï¼å¦å æ°èåãæ°é»è®¤è§è²ï¼ã |
| | | - å°ä¸¤æ®µå
容æãé¶æ®µä¸ â åéæ³¨éé¶æ®µäº â é¶æ®µäºãæ¼æ¥æä¸ä»½å®æ´æä»¶ã |
| | | 3. å
¨åºç»æåååï¼æ ¸å¯¹ Mapper/DO æ¯å¦ä¸è¡¨ç»æä¸è´ï¼`mvn compile -q` ä¸åè¡¨ç»æå½±åï¼ä½éäººå·¥æ ¸å¯¹ï¼ã |
| | | |
| | | ## å
³é®çº¦æä¸åï¼é¿å
è¸©ï¼ |
| | | |
| | | - â é¶æ®µä¸å«**å
¨åº `DROP TABLE IF EXISTS`**ï¼ä¼æ¸
空éå
¶å»ºè¡¨çææè¡¨æ°æ®ï¼**åªè½å¨å
¨æ°/å¯è¦çç©ºåºæ§è¡**ï¼ç¦æ¢å¨è¿è¡åºç´æ¥è·ã |
| | | - â è¶
管 `super_admin` ç»å½åç±ä»£ç **ç´æ¥è¿åå
¨é¨èå**ï¼æ
**ä¸éè¦ `system_role_menu` è¡**ï¼ä½ `system_menu` 表å¿
é¡»ææ°æ®ãè¥æªæ¥è¦æ¯ææ®éè§è²ç»å½ï¼åé补该è§è² â `system_role_menu` â `system_user_role` å
¨é¾è·¯ã |
| | | - â ç»å½/å·æ°ä»¤ç**å¿
é¡»**æ `system_oauth2_client` ä¸ `client_id='default'` çè®°å½ï¼å¦å `validOAuthClientFromCache` æ¥éç»ä¸ä¸ã |
| | | - åå
¸ `system_dict_type`/`system_dict_data` ç±é¶æ®µä¸å¯¼å
¥ï¼é¶æ®µäºä¸éå¤å¤çã |
| | | - æºåº `system_dept`/`system_post` å«è¾å¤è½¯å é¤è¡ï¼é¶æ®µäºä»
æ·è´ `deleted=0` çææè¡ã |
| | | - é¶æ®µä¸èªå
å«ï¼åé¢é INSERTï¼ï¼ä¸ä¾èµæºåºå¨çº¿ï¼é¶æ®µäºä¾èµæºåºå¨çº¿åè·¨åºæ·è´ã |
| | |
| | | .agents/ |
| | | # æ°æ®åºåæ´èæ¬ï¼æå¨æ§è¡ï¼ä¸å
¥åºï¼ |
| | | sql/sale_order_bpm_approval.sql |
| | | .export_tmp/ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¨æ£å¯¼åºåè½å¢å¼º - å端èè°æ¹æ¡ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - æ¥ææ£éªåï¼IQCï¼å表页 |
| | | - è¿ç¨æ£éªåï¼IPQCï¼å表页 |
| | | - åºè´§æ£éªåï¼OQCï¼å表页 |
| | | - éè´§æ£éªåï¼RQCï¼å表页 |
| | | |
| | | 以ä¸å个页é¢çã导åºãåè½åéè°æ´ã |
| | | |
| | | ## åæ´æ¦è§ |
| | | |
| | | 1. **å¯¼åº Excel æ°å¢ãæ£éªé¡¹ææ ãå**ï¼å±ç¤ºè¯¥æ£éªåæææ£éªé¡¹çç»ææ±æ»ã |
| | | 2. **å¯¼åºæ¯æææ£æµæ¶é´èå´çé**ï¼ç¨æ·éæ©æ¶é´èå´åï¼åªå¯¼åºæ£æµæ¥æè½å¨èå´å
çæ£éªåã |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | 1. ç¨æ·å¨å表页设置ç鿡件ï¼å«æ°å¢çãæ£æµæ¶é´èå´ãï¼â ç¹å»ã导åºãã |
| | | 2. å¯¼åºæ¥å£ä»¥å½åç鿡件ï¼ä¸å页æ¥è¯¢ç¸åççéåæ°ï¼æåå
¨é¨æ°æ®ï¼çæ Excel ä¸è½½ã |
| | | 3. ä¸éæ©æ¶é´èå´æ¶ï¼å¯¼åºè¡ä¸ºä¸æ¹å¨åä¸è´ï¼å¯¼åºå
¨é¨ç¬¦åå
¶å®çéæ¡ä»¶çæ°æ®ï¼ã |
| | | |
| | | ## API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/qc/iqc/export-excel | å¯¼åºæ¥ææ£éªå | |
| | | | GET | /mes/qc/ipqc/export-excel | 导åºè¿ç¨æ£éªå | |
| | | | GET | /mes/qc/oqc/export-excel | 导åºåºè´§æ£éªå | |
| | | | GET | /mes/qc/rqc/export-excel | 导åºéè´§æ£éªå | |
| | | |
| | | **æ°å¢è¯·æ±åæ°ï¼å个æ¥å£ä¸è´ï¼ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | inspectDate[0] | String | å¦ | æ£æµå¼å§æ¶é´ï¼æ ¼å¼ yyyy-MM-dd HH:mm:ss | |
| | | | inspectDate[1] | String | å¦ | æ£æµç»ææ¶é´ï¼æ ¼å¼ yyyy-MM-dd HH:mm:ss | |
| | | |
| | | 说æï¼æ¤åæ°ä¸ºç鿡件ï¼ä¸å页æ¥è¯¢ `GET /mes/qc/xxx/page` çä¼ åæ¹å¼å®å
¨ä¸è´ï¼å端å页ä¸å¯¼åºå¯å¤ç¨åä¸å¥æ¥è¯¢åæ°å¯¹è±¡ã |
| | | |
| | | **å¯¼åº Excel æ°å¢åï¼** |
| | | |
| | | | åå | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | æ£éªé¡¹ææ | String | æ ¼å¼ï¼ææ åç§°:æ£æµå¼ æ ææ åç§°:æ£æµå¼(夿³¨)ï¼å¤ä¸ªææ ç¨éå·åéï¼ä¾å¦ `å¤è§:è¯å¥½(OK), 尺寸:100.00mm(OK)`ï¼æ æ£éªç»ææ¶ä¸ºç©º | |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | æ£éªé¡¹ææ | Excelãæ£éªé¡¹ææ ãå | ç±ç³»ç»èªå¨æ¼æ¥ï¼å端æ éå¤çæ ¼å¼ | |
| | | | æ£æµæ¶é´èå´ | å表页çéåº | æ°å¢æ¶é´èå´éæ©æ§ä»¶ï¼å»ºè®®ä¸ç°æãæ£æµæ¥æãåå¯¹åº | |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | æªéæ©æ¶é´èå´ | 导åºå
¨é¨æ°æ®ï¼ä¸æ¹å¨åä¸è´ï¼ | |
| | | | ä»
éæ©å¼å§æ¶é´ | å¯¼åºæ£æµæ¥æå¤§äºçäºå¼å§æ¶é´çè®°å½ | |
| | | | ä»
éæ©ç»ææ¶é´ | å¯¼åºæ£æµæ¥æå°äºçäºç»ææ¶é´çè®°å½ | |
| | | | 鿩宿´èå´ | å¯¼åºæ£æµæ¥æå¨éåºé´ [å¼å§, ç»æ] å
çè®°å½ | |
| | | | æ æ£éªç»æ | ãæ£éªé¡¹ææ ãå导åºä¸ºç©º | |
| | | | è¿æ»¤å段 | æ¶é´èå´é坹忣éªåçãæ£æµæ¥æãåæ®µè¿æ»¤ | |
| | | | å¯¼åºæé | ä»åå页é¢åæ `export` æéæ§å¶ï¼OQC 导åºä¿çå®¢æ·æ°æ®æéè¿æ»¤ | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - å页å导åºå
±ç¨åä¸å¥çéåæ°ï¼åç«¯å¯¼åºæ¶åºæå½åç鿡件ï¼å«æ¶é´èå´ï¼ä¸å¹¶ä½ä¸ºè¯·æ±åæ°ä¼ éã |
| | | - æ¶é´æ§ä»¶æ ¼å¼å¿
须为 `yyyy-MM-dd HH:mm:ss`ï¼å¦ååç«¯æ æ³è§£æã |
| | | - å个页é¢åèªè°ç¨å¯¹åºçå¯¼åºæ¥å£ï¼åæ°åå®å
¨ç¸åï¼å¯å¤ç¨åä¸å¯¼åºå½æ°ã |
| | | - è¥åç»éè¦æãå建æ¶é´ãçå
¶å®æ¶é´ç»´åº¦çéï¼å¯å¦è¡æ©å±ï¼æ¬æ¬¡ä»
æ¯ææ£æµæ¶é´ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¨æ£æ£éªåæå¨éæ©è´¨æ£æ¹æ¡ - å端èè°æ¹æ¡ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - æ¥ææ£éªï¼IQCï¼æ°å»ºè¡¨å |
| | | - è¿ç¨æ£éªï¼IPQCï¼æ°å»ºè¡¨å |
| | | - åºè´§æ£éªï¼OQCï¼æ°å»ºè¡¨å |
| | | - éè´§æ£éªï¼RQCï¼æ°å»ºè¡¨å |
| | | |
| | | ## èæ¯ |
| | | |
| | | ä¸ä¸ªäº§åå¯å¨ `mes_qc_template_item` å
³èå¤ä¸ªè´¨æ£æ¹æ¡ï¼`mes_qc_template`ï¼ãæ¤åå端å½ä¸å¤ä¸ªæ¹æ¡æ¶éé»å第ä¸ä¸ªï¼ç¨æ·æ æ³æ§å¶ãç°æ¯æå¨æ£éªå**æ°å»ºè¡¨å**ä¸éè¿ãè´¨æ£æ¹æ¡ã䏿æå¨éæ©ï¼æªé
ç½®æä»
ä¸ä¸ªæ¹æ¡æ¶ä¿æåæèªå¨è¡ä¸ºä¸åã |
| | | |
| | | ## API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mes/qc/template/item/list-by-item-and-type | æ ¹æ®ç©ææå·¥å/ä»»å¡åæ£æµç§ç±»è·åå¯ç¨è´¨æ£æ¹æ¡å表 | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | qcType | Integer | æ¯ | æ£æµç§ç±»ï¼1=IQCã2=IPQCã3=OQCã4=RQC | |
| | | | itemId | Long | å¦ | 产åç©æ IDï¼mes_md_item.idï¼ï¼IQC/OQC/RQC ä½¿ç¨ | |
| | | | workOrderId | Long | å¦ | ç产订å IDï¼IPQC ä½¿ç¨ | |
| | | | taskId | Long | å¦ | çäº§ä»»å¡ IDï¼IPQC ä½¿ç¨ | |
| | | |
| | | > 说æï¼`itemId`ã`workOrderId`ã`taskId` ä¸è
è³å°ä¼ ä¸ä¸ªãä¼å
顺åºï¼taskId â workOrderId â itemIdãIPQC 表åä¸éç©æï¼ä¼ workOrderIdï¼+å¯é taskIdï¼ç±å端解æäº§åï¼å
¶ä½ä¸ä¸ªæ¨¡åä¼ itemIdã |
| | | |
| | | **ååºåæ®µï¼æ°ç»ï¼ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | æ¹æ¡-产åå
³èç¼å·ï¼templateItem.idï¼ | |
| | | | templateId | Long | è´¨æ£æ¹æ¡ ID | |
| | | | templateCode | String | è´¨æ£æ¹æ¡ç¼å· | |
| | | | templateName | String | è´¨æ£æ¹æ¡åç§° | |
| | | | quantityCheck | Integer | æä½æ£æµæ° | |
| | | | quantityUnqualified | Integer | æå¤§ä¸åæ ¼æ° | |
| | | | criticalRate | BigDecimal | æå¤§è´å½ç¼ºé·çï¼%ï¼ | |
| | | | majorRate | BigDecimal | æå¤§ä¸¥é缺é·çï¼%ï¼ | |
| | | | minorRate | BigDecimal | æå¤§è½»å¾®ç¼ºé·çï¼%ï¼ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": [ |
| | | { |
| | | "id": 5, |
| | | "templateId": 10, |
| | | "templateCode": "IQC-AQL-â
¡", |
| | | "templateName": "IQC æ£å¸¸æ£éªäºçº§æ°´å¹³", |
| | | "quantityCheck": 8, |
| | | "quantityUnqualified": 1, |
| | | "criticalRate": 0, |
| | | "majorRate": 2.5, |
| | | "minorRate": 10 |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | ## åç«¯è¡¨ç° |
| | | |
| | | | 模å | 触ååæ®µ | qcType | 说æ | |
| | | |------|----------|--------|------| |
| | | | IQC | itemId | 1 | éä¸ç©æåæ qcType=1 æå | |
| | | | OQC | itemId | 3 | éä¸ç©æåæ qcType=3 æå | |
| | | | RQC | itemId | 4 | éä¸ç©æåæ qcType=4 æåï¼å端已修å¤ä¸ºææ£æµç§ç±»å¹é
模æ¿ï¼ä¸å误å¹é
å° IQC/IPQC æ¹æ¡ï¼ | |
| | | | IPQC | workOrderIdãtaskId | 2 | éä¸ç产订ååæ qcType=2 æåï¼taskId å¯éä¼ å
¥ | |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | ãè´¨æ£æ¹æ¡ãåæ®µï¼templateIdï¼ï¼ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | æ°å»ºãæªéç©æ/ç产订å | 䏿ç¦ç¨ï¼æç¤º"请å
éæ©äº§åç©æ/ç产订å" | |
| | | | æ°å»ºãå·²éç©æ/ç产订å | 䏿å¯ç¨ï¼é»è®¤éä¸è¿åå表第ä¸ä¸ªæ¹æ¡ï¼å¯åæ¢ | |
| | | | ç¼è¾/详æ
| 䏿ç¦ç¨ï¼ä»
忾已ä¿åçæ¹æ¡ | |
| | | | äº§åæªé
ç½®å¯ç¨æ¹æ¡ | ä¸æä¸ºç©ºï¼ä¿åæ¶åç«¯ä»æ ¡éªæ¥ãæªé
ç½®è´¨æ£æ¹æ¡ãï¼ | |
| | | | 产åé
ç½®å¤ä¸ª enable æ¹æ¡ | 䏿å±ç¤ºå
¨é¨å¯éæ¹æ¡ï¼ç¨æ·å¯åæ¢ | |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | å端æ¾å¼ä¼ äº templateId | åç«¯å¨æ ¡éªæ¹æ¡å¿
é¡»å±äº"产å+æ£æµç§ç±»"å¯å¹é
å表ï¼å¦åæç»ï¼é²æ¢éå°å
¶ä»äº§å/å
¶ä»æ£æµç§ç±»çæ¹æ¡ï¼ | |
| | | | å端æªä¼ templateId | èªå¨åå¹é
å表第ä¸ä¸ªæ¹æ¡ï¼ä¸æ§è¡ä¸ºä¸è´ | |
| | | | ç¼è¾æ£éªå | ä¸å
è®¸ä¿®æ¹æ¹æ¡ï¼å端 update æ¶å¿½ç¥ templateIdï¼ | |
| | | | èªå¨è§¦åè·¯å¾ï¼å°è´§éç¥âIQCãéå®åºåºâOQCï¼ | ä¸èµ°ä¸æï¼ä»ç±å端èªå¨åæ¹æ¡ï¼è¡ä¸ºä¸å | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - å表ã详æ
忾忮µ templateId å¨ç°æ RespVO ä¸å·²åå¨ï¼æ éé¢å¤å¯¹æ¥ã |
| | | - ä¿å请æ±åæ°æ°å¢ `templateId`ï¼è´¨æ£æ¹æ¡ IDï¼ï¼å个模å SaveReqVO å已补å
ï¼RQC 忬就另æ¤å段ã |
| | | - 䏿é»è®¤éä¸ç¬¬ä¸ä¸ªä¾èµç»ä»¶ `autoSelect: 'first'`ï¼ä»
å½å½åå¼ä¸ºç©ºæ¶çæï¼ç¨æ·æå¨éæ©åä¸ä¼è¢«å¨è¦çã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- æä»¶ï¼bpm_audit_flow_01_repair_and_category.sql |
| | | -- ç¨éï¼BPM å®¡æ ¸æµç¨ãä¿®å¤ + å类补é½ã段ï¼ç¬¬ 1 个æ§è¡ï¼ |
| | | -- ç®æ åºï¼ruoyi-vue-proï¼å端 48080 å®é
读åçè¿è¡åºï¼ |
| | | -- è¦æ±ï¼MySQL 8.0+ï¼å»ºè®®å
å¤ä»½ï¼mysqldump ruoyi-vue-pro act_re_procdef act_re_model |
| | | -- act_re_deployment act_ge_bytearray bpm_category bpm_process_definition_info > bpm_bak.sql |
| | | -- ç¹æ§ï¼æ¬æä»¶å
ææè¯å¥åå¹çï¼å¯é夿§è¡ï¼ï¼å¤æ"å·²åå¨/æ°æ®ä¸å®æ´"ååªåå¿
è¦ä¿®å¤ï¼ |
| | | -- ä¸å é¤ä»»ä½æ¢ææ°æ®ï¼åªåç¶æä¿®æ£ã |
| | | -- 说æï¼ |
| | | -- 1) ä¿®å¤æ®µåªåå®å
¨ä¿®å¤ï¼ä¸èªå¨å é¤"æµè¯/å徿µç¨"ï¼æ¶åå岿°æ®å¤æï¼é人工ï¼ã |
| | | -- å¯¹ææ¾å徿µç¨ç»ä¸"æèµ·"ï¼é¿å
åºç°å¨å端åèµ·å表ï¼ä¸ä¸å½±åè¿è¡ä¸çæµç¨å®ä¾ã |
| | | -- 2) å类补é½ï¼åªä¸ºä»£ç ä¸å·²å¼ç¨ãä½åºé缺失çåç±» code è¡¥æï¼å·²åå¨åè·³è¿ï¼ã |
| | | -- ============================================================================= |
| | | |
| | | SET NAMES utf8mb4; |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- â æ°æ®å®æ´æ§ä¿®å¤ |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | -- 1.1 ACT_RE_PROCDEF.ENGINE_VERSION_ 空串ä¼å¯¼è´ Flowable æäº¤å®¡æ¹æ¥é |
| | | -- ï¼Invalid 'engine' for process definition ...ï¼ï¼éä¿®æ£ä¸º NULLã |
| | | UPDATE ACT_RE_PROCDEF |
| | | SET ENGINE_VERSION_ = NULL |
| | | WHERE ENGINE_VERSION_ = ''; |
| | | |
| | | -- 1.2 ACT_RE_MODEL.META_INFO_ 为空ä¼å¯¼è´æµç¨æ¨¡åå表/页é¢ååºååå¼å¸¸ã |
| | | -- è¡¥é½ä¸ä¸ªæå°çåæ³ JSONï¼type=10 BPMN 模å¼ï¼å« sortï¼ï¼ä¿è¯é¡µé¢å¯æå¼ã |
| | | -- åªè¡¥ç©ºå¼è¡ï¼ä¸å½±åå·²æå®æ´é
ç½®ã |
| | | UPDATE ACT_RE_MODEL |
| | | SET META_INFO_ = CONCAT('{"type":10,"sort":', UNIX_TIMESTAMP(NOW(3)) * 1000, ',"formType":10,"visible":true}') |
| | | WHERE META_INFO_ IS NULL OR META_INFO_ = ''; |
| | | |
| | | -- 1.3 bpm_process_definition_info.model_type é 10 ç BPMN æµç¨ï¼å建æµç¨å®ä¾ä¼ NPEã |
| | | -- ä»
å½è¯¥æµç¨ç¡®ä¸º BPMNï¼å¨ ACT_RE_PROCDEF åå¨ï¼ä¸é SIMPLEï¼simple_model ä¸ºç©ºï¼æ¶ä¿®æ£ä¸º 10ã |
| | | UPDATE bpm_process_definition_info i |
| | | JOIN ACT_RE_PROCDEF p ON p.ID_ = i.process_definition_id |
| | | SET i.model_type = 10 |
| | | WHERE i.simple_model IS NULL |
| | | AND i.model_type <> 10; |
| | | |
| | | -- 1.4 ä¸å¡è§èæµç¨çå¤çæ¬æ²»çï¼å key ä¿çææ°çæ¬æ¿æ´»ï¼SUSPENSION_STATE_=1ï¼ï¼ |
| | | -- åå²çæ¬ä¸å¾æèµ·ï¼=2ï¼ãåªä½ç¨äº"å¨ç¨"ç½åå keyï¼å
¶ä½ä¸å¨ã |
| | | UPDATE ACT_RE_PROCDEF p |
| | | JOIN (SELECT KEY_, MAX(VERSION_) AS max_ver |
| | | FROM ACT_RE_PROCDEF |
| | | WHERE KEY_ IN ('erp-finance-payment-audit','crm-invoice-audit', |
| | | 'crm-receivable-audit','mes-pd-project-audit', |
| | | 'purchase_request_approve') |
| | | GROUP BY KEY_) t ON t.KEY_ = p.KEY_ |
| | | SET p.SUSPENSION_STATE_ = IF(p.VERSION_ = t.max_ver, 1, 2); |
| | | |
| | | -- 1.5 ææ¾ä¸º"æµè¯/å·²åºå¼"çæµç¨ç»ä¸æèµ·ï¼=2ï¼ï¼é¿å
åºç°å¨åèµ·/å¾
åéæ©å表ã |
| | | -- ä»
æ¹ç¶æä¸å é¤ï¼å¯éæ¶äººå·¥å¨ç颿 SQL æ¸
çï¼å¯¹è¿è¡ä¸å®ä¾æ å½±åã |
| | | UPDATE ACT_RE_PROCDEF |
| | | SET SUSPENSION_STATE_ = 2 |
| | | WHERE KEY_ IN ('Ada','QWEDD','SSQ','_..123abc','b000_abc.','yz001','yz002', |
| | | 'caigoushenpi','pus','purchase_approve','contract_approve'); |
| | | |
| | | -- 1.6 ï¼å¯éï¼æ¥çä»å¤äºæ¿æ´»ç¶æçæµç¨ï¼äººå·¥ç¡®è®¤æ¯å¦æ®çå徿µç¨ï¼ |
| | | -- SELECT KEY_, NAME_, VERSION_, SUSPENSION_STATE_ FROM ACT_RE_PROCDEF |
| | | -- WHERE SUSPENSION_STATE_ = 1 ORDER BY KEY_; |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- â¡ æµç¨åç±»ï¼bpm_categoryï¼è¡¥é½ |
| | | -- 对åºåä¸å¡åæ®åèµ·å®¡æ¹æ¶æ code æåå¯åèµ·æµç¨å表ï¼ä»£ç ä¸å·²å¼ç¨ä½åºä¸ç¼ºå¤±åè¡¥ã |
| | | -- æ¯æ¡åå"å·²åå¨åè·³è¿"夿ï¼code + æªå é¤ï¼ã |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | -- 2.1 ERP éè´è®¢åå®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'éè´è®¢å审æ¹', 'purchase_order_approve', 'ERP éè´è®¢å审æ¹', 0, 10, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'purchase_order_approve' AND deleted = 0); |
| | | |
| | | -- 2.2 ERP éå®è®¢åå®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'éå®è®¢å审æ¹', 'sale_order_approve', 'ERP éå®è®¢å审æ¹', 0, 20, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'sale_order_approve' AND deleted = 0); |
| | | |
| | | -- 2.3 HRM 请åå®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT '请å审æ¹', 'hrm_leave_approve', 'HRM 请åç³è¯·å®¡æ¹', 0, 30, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_leave_approve' AND deleted = 0); |
| | | |
| | | -- 2.4 HRM å çå®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'å ç审æ¹', 'overtime_approve', 'HRM å çç³è¯·å®¡æ¹', 0, 40, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'overtime_approve' AND deleted = 0); |
| | | |
| | | -- 2.5 HRM 离èå®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT '离è审æ¹', 'hrm_resignation_approve', 'HRM 离èç³è¯·å®¡æ¹', 0, 50, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_resignation_approve' AND deleted = 0); |
| | | |
| | | -- 2.6 HRM è°å¨å®¡æ¹ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'è°å¨å®¡æ¹', 'hrm_transfer_approve', 'HRM è°å¨ç³è¯·å®¡æ¹', 0, 60, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_transfer_approve' AND deleted = 0); |
| | | |
| | | -- 2.7 MES æ¥å·¥/ç产工å审æ¹ï¼ä»£ç ä¾§ MES æ¥å·¥ä¸å·¥åå
±ç¨åç±» mes_pro_feedback_auditï¼ |
| | | INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'æ¥å·¥å®¡æ¹', 'mes_pro_feedback_audit', 'MES ç产æ¥å·¥/å·¥å审æ¹', 0, 70, '1', NOW(), '1', NOW(), 0 |
| | | WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'mes_pro_feedback_audit' AND deleted = 0); |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- ⢠修å¤ç»æèªæ¥ï¼åºå
¨é¨è¿å 0ï¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | -- SELECT '空串ENGINE_VERSION_æ®ç' AS chk, COUNT(*) FROM ACT_RE_PROCDEF WHERE ENGINE_VERSION_ = '' |
| | | -- UNION ALL SELECT '空META_INFO_æ®ç' , COUNT(*) FROM ACT_RE_MODEL WHERE META_INFO_ IS NULL OR META_INFO_ = '' |
| | | -- UNION ALL SELECT 'åç±»å¾
è¡¥' , 0; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- æä»¶ï¼bpm_audit_flow_02_deploy_proc.sql |
| | | -- ç¨éï¼BPM å®¡æ ¸æµç¨ãæµç¨å®ä¹é¨ç½²ã段ï¼ç¬¬ 2 个æ§è¡ï¼éå
æ§è¡ 01 ä¿®å¤/åç±»æä»¶ï¼ |
| | | -- ç®æ åºï¼ruoyi-vue-pro |
| | | -- è¦æ±ï¼ |
| | | -- * MySQL 8.0+ï¼è´¦å·éå
·å¤ CREATE PROCEDURE æé |
| | | -- * 以 mysql CLI æ§è¡ï¼å« DELIMITERï¼ï¼ |
| | | -- mysql -u<è´¦å·> -p ruoyi-vue-pro < bpm_audit_flow_02_deploy_proc.sql |
| | | -- * 模æ¿ï¼é»è®¤ä» ruoyi-vue-pro å
å·²æè§èæµç¨ãerp-finance-payment-auditãå¤å¶ï¼ |
| | | -- å
¶ BPMN 为âå起人èç¹ + æäº¤å³éè¿â(candidateStrategy=36) çæç®ç»æï¼ |
| | | -- é忿坹æ¥åæ®å
è·éï¼åç»å¦éå¤çº§å®¡æ¹å¯å¨ãæµç¨æ¨¡åãçé¢è°æ´ã |
| | | -- å¥å£®æ§è®¾è®¡ï¼ |
| | | -- * å¹çï¼ç®æ key è¥å·²åå¨ï¼æ è®ºæ¿æ´»/æèµ·ï¼â æ´æ®µè·³è¿ï¼ä¸éå¤é¨ç½²ãä¸äº§çæ°çæ¬ã |
| | | -- * äºå¡ï¼åæµç¨ 5 å¼ è¡¨åå
¥å
å¨ä¸ä¸ªäºå¡å
ï¼ä»»ä¸æ¥å¤±è´¥èªå¨åæ»ï¼ä¸çåæåã |
| | | -- * èªæ£ï¼procdef ID = key:1:<32ä½uuid>ï¼è¶
64 åç¬¦ç´æ¥æ¥é䏿ã |
| | | -- * 空å¼è§é¿ï¼ENGINE_VERSION_ ä¸åå
¥ç©ºä¸²(ä¿æ NULL)ï¼é¿å
Flowable æäº¤å®¡æ¹æ¥éï¼ |
| | | -- META_INFO_ åå
¥æå°åæ³ JSON(å« sort/type=10)ï¼é¿å
模å页/å表 NPEã |
| | | -- * é夿§è¡æä»¶å®å
¨ï¼DROP PROCEDURE IF EXISTS ä¿è¯å¯éå¤è¿è¡ã |
| | | -- ============================================================================= |
| | | |
| | | SET NAMES utf8mb4; |
| | | |
| | | -- é¨ç½²åèªæ£ï¼æ¨¡æ¿å卿§ï¼åºè¿å 1 è¡ï¼ |
| | | SELECT KEY_, NAME_, SUSPENSION_STATE_ FROM ACT_RE_PROCDEF WHERE KEY_ = 'erp-finance-payment-audit'; |
| | | |
| | | DROP PROCEDURE IF EXISTS bpm_deploy_flow_from_template; |
| | | |
| | | DELIMITER $$ |
| | | |
| | | -- ä»ä¸ä¸ªâæ¨¡æ¿æµç¨âå¤å¶é¨ç½²ä¸ä¸ªæ°å®¡æ ¸æµç¨ï¼BPMN ç»æä¸è´ï¼ä»
æ¿æ¢ key/åç§°ï¼ |
| | | CREATE PROCEDURE bpm_deploy_flow_from_template( |
| | | IN p_key VARCHAR(64), -- æ°æµç¨ keyï¼éä¸ä»£ç ä¾§çå¬å¨å¹é
ï¼ |
| | | IN p_name VARCHAR(128), -- æ°æµç¨æ¾ç¤ºå |
| | | IN p_category VARCHAR(64), -- å½å±æµç¨åç±» code |
| | | IN p_template VARCHAR(64) -- å¤å¶æ¥æºæ¨¡æ¿æµç¨ key |
| | | ) |
| | | label_deploy: BEGIN |
| | | DECLARE v_exist INT DEFAULT 0; |
| | | DECLARE v_tpl_key VARCHAR(64) DEFAULT 'erp-finance-payment-audit'; |
| | | DECLARE v_tpl_dep VARCHAR(64) DEFAULT NULL; |
| | | DECLARE v_tpl_name VARCHAR(255) DEFAULT NULL; |
| | | DECLARE v_dep VARCHAR(64); |
| | | DECLARE v_model_id VARCHAR(64); |
| | | DECLARE v_byte_id VARCHAR(64); |
| | | DECLARE v_procdef_id VARCHAR(64); |
| | | DECLARE v_meta TEXT; |
| | | DECLARE v_sort BIGINT; |
| | | DECLARE v_now DATETIME; |
| | | |
| | | -- ä»»ä½å¼å¸¸ â 忻并鿰æåº |
| | | DECLARE EXIT HANDLER FOR SQLEXCEPTION |
| | | BEGIN |
| | | ROLLBACK; |
| | | RESIGNAL; |
| | | END; |
| | | |
| | | -- å¹çï¼key å·²åå¨ç´æ¥è·³è¿ |
| | | SELECT COUNT(*) INTO v_exist FROM ACT_RE_PROCDEF WHERE KEY_ = p_key; |
| | | IF v_exist > 0 THEN |
| | | SELECT CONCAT('[SKIP] æµç¨å·²åå¨ï¼è·³è¿ï¼', p_key) AS deploy_result; |
| | | LEAVE label_deploy; |
| | | END IF; |
| | | |
| | | -- 模æ¿å®ä½ |
| | | IF p_template IS NOT NULL AND p_template <> '' THEN |
| | | SET v_tpl_key = p_template; |
| | | END IF; |
| | | SELECT DEPLOYMENT_ID_ INTO v_tpl_dep FROM ACT_RE_PROCDEF |
| | | WHERE KEY_ = v_tpl_key ORDER BY VERSION_ DESC LIMIT 1; |
| | | SELECT NAME_ INTO v_tpl_name FROM ACT_RE_PROCDEF |
| | | WHERE KEY_ = v_tpl_key ORDER BY VERSION_ DESC LIMIT 1; |
| | | IF v_tpl_dep IS NULL THEN |
| | | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = CONCAT('æ¨¡æ¿æµç¨ä¸åå¨ï¼æ æ³å¤å¶ï¼', v_tpl_key); |
| | | END IF; |
| | | |
| | | SET v_now = NOW(3); |
| | | SET v_sort = UNIX_TIMESTAMP(v_now) * 1000; |
| | | SET v_dep = REPLACE(UUID(), '-', ''); |
| | | SET v_model_id = REPLACE(UUID(), '-', ''); |
| | | SET v_byte_id = REPLACE(UUID(), '-', ''); |
| | | SET v_procdef_id = CONCAT(p_key, ':1:', v_dep); |
| | | -- procdef ID å VARCHAR(64) é¿åº¦å®å« |
| | | IF CHAR_LENGTH(v_procdef_id) > 64 THEN |
| | | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = CONCAT('æµç¨ key è¿é¿ï¼procdef ID å°è¶
64 å符ï¼', p_key); |
| | | END IF; |
| | | |
| | | START TRANSACTION; |
| | | |
| | | -- 1) é¨ç½²è®°å½ï¼ACT_RE_DEPLOYMENT æ REV_ åï¼ |
| | | INSERT INTO ACT_RE_DEPLOYMENT |
| | | (ID_, NAME_, CATEGORY_, KEY_, TENANT_ID_, DEPLOY_TIME_, ENGINE_VERSION_) |
| | | VALUES |
| | | (v_dep, p_name, p_category, p_key, '', v_now, NULL); |
| | | |
| | | -- 2) BPMN åèï¼å¤å¶æ¨¡æ¿åèå¹¶æ¿æ¢ key 䏿¾ç¤ºåï¼ |
| | | INSERT INTO ACT_GE_BYTEARRAY |
| | | (ID_, NAME_, DEPLOYMENT_ID_, BYTES_, GENERATED_) |
| | | SELECT |
| | | v_byte_id, |
| | | CONCAT(p_key, '.bpmn'), |
| | | v_dep, |
| | | CONVERT( |
| | | REPLACE( |
| | | REPLACE(CONVERT(BYTES_ USING utf8mb4), v_tpl_key, p_key), |
| | | v_tpl_name, p_name) |
| | | USING utf8mb4), |
| | | 0 |
| | | FROM ACT_GE_BYTEARRAY |
| | | WHERE DEPLOYMENT_ID_ = v_tpl_dep |
| | | AND NAME_ = CONCAT(v_tpl_key, '.bpmn'); |
| | | |
| | | -- 3) æµç¨å®ä¹ï¼æ¿æ´»æ SUSPENSION_STATE_=1ï¼ENGINE_VERSION_ ç NULLï¼ |
| | | INSERT INTO ACT_RE_PROCDEF |
| | | (ID_, REV_, CATEGORY_, NAME_, KEY_, VERSION_, DEPLOYMENT_ID_, RESOURCE_NAME_, |
| | | DGRM_RESOURCE_NAME_, DESCRIPTION_, HAS_START_FORM_KEY_, HAS_GRAPHICAL_NOTATION_, |
| | | SUSPENSION_STATE_, TENANT_ID_, ENGINE_VERSION_, DERIVED_VERSION_) |
| | | VALUES |
| | | (v_procdef_id, 1, p_category, p_name, p_key, 1, v_dep, CONCAT(p_key, '.bpmn'), |
| | | NULL, NULL, 0, 1, |
| | | 1, '', NULL, 0); |
| | | |
| | | -- 4) æµç¨æ¨¡åï¼å«æå°åæ³ META_INFO_ï¼é¿å
模åå表 NPEï¼ |
| | | SET v_meta = CONCAT( |
| | | '{"type":10,"formType":10,"sort":', v_sort, |
| | | ',"visible":true,"allowCancelRunningProcess":true,"allowWithdrawTask":false', |
| | | ',"autoApprovalType":0,"description":"","formCustomCreatePath":"","formCustomViewPath":"",', |
| | | '"formId":null,"managerUserIds":[],"startUserIds":[],"startDeptIds":[],"icon":null,', |
| | | '"processBeforeTriggerSetting":null,"processAfterTriggerSetting":null,', |
| | | '"taskBeforeTriggerSetting":null,"taskAfterTriggerSetting":null,', |
| | | '"printTemplateSetting":null,"summarySetting":null,"titleSetting":null,"processIdRule":null}'); |
| | | INSERT INTO ACT_RE_MODEL |
| | | (ID_, NAME_, KEY_, CATEGORY_, CREATE_TIME_, LAST_UPDATE_TIME_, VERSION_, META_INFO_, DEPLOYMENT_ID_, TENANT_ID_) |
| | | VALUES |
| | | (v_model_id, p_name, p_key, p_category, v_now, v_now, 1, v_meta, v_dep, ''); |
| | | |
| | | -- 5) æµç¨å®ä¹æ©å±ä¿¡æ¯ï¼model_type=10ï¼ |
| | | INSERT INTO bpm_process_definition_info |
| | | (process_definition_id, model_id, model_type, category, form_type, visible, sort, |
| | | allow_cancel_running_process, allow_withdraw_task, |
| | | creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (v_procdef_id, v_model_id, 10, p_category, 10, 1, v_sort, |
| | | 1, 1, |
| | | '1', v_now, '1', v_now, 0); |
| | | |
| | | COMMIT; |
| | | |
| | | SELECT CONCAT('[OK] å·²é¨ç½²æ°å®¡æ ¸æµç¨ï¼', p_key, ' (procdef=', v_procdef_id, ')') AS deploy_result; |
| | | END$$ |
| | | |
| | | DELIMITER ; |
| | | |
| | | -- ============================================================================= |
| | | -- ⣠æåæ®é个é¨ç½²ç¼ºå¤±æµç¨ï¼é夿§è¡ä¼èªå¨è·³è¿å·²åå¨é¡¹ï¼ |
| | | -- åæ°ï¼(key, åç§°, åç±»code, 模æ¿key) |
| | | -- ============================================================================= |
| | | |
| | | -- ERP éå®è®¢å审æ¹ï¼ä»£ç çå¬ keyï¼sale_order_approveï¼ |
| | | CALL bpm_deploy_flow_from_template('sale_order_approve', 'éå®è®¢å审æ¹', 'sale_order_approve', 'erp-finance-payment-audit'); |
| | | -- ERP éè´è®¢å审æ¹ï¼ä»£ç çå¬ keyï¼purchase_order_approveï¼ |
| | | CALL bpm_deploy_flow_from_template('purchase_order_approve', 'éè´è®¢å审æ¹', 'purchase_order_approve', 'erp-finance-payment-audit'); |
| | | |
| | | -- CRM åå审æ¹ï¼ä»£ç çå¬ keyï¼crm-contract-auditï¼ææ¢æ contract_approve åç±»ï¼ |
| | | CALL bpm_deploy_flow_from_template('crm-contract-audit', 'åå审æ¹', 'contract_approve', 'erp-finance-payment-audit'); |
| | | |
| | | -- HRM 请å审æ¹ï¼ä»£ç çå¬ keyï¼hrm_leaveï¼ |
| | | CALL bpm_deploy_flow_from_template('hrm_leave', '请å审æ¹', 'hrm_leave_approve', 'erp-finance-payment-audit'); |
| | | -- HRM å ç审æ¹ï¼ä»£ç çå¬ keyï¼hrm_overtimeï¼ |
| | | CALL bpm_deploy_flow_from_template('hrm_overtime', 'å ç审æ¹', 'overtime_approve', 'erp-finance-payment-audit'); |
| | | -- HRM 离è审æ¹ï¼ä»£ç çå¬ keyï¼hrm_resignationï¼ |
| | | CALL bpm_deploy_flow_from_template('hrm_resignation', '离è审æ¹', 'hrm_resignation_approve', 'erp-finance-payment-audit'); |
| | | -- HRM è°å¨å®¡æ¹ï¼ä»£ç çå¬ keyï¼hrm_transferï¼ |
| | | CALL bpm_deploy_flow_from_template('hrm_transfer', 'è°å¨å®¡æ¹', 'hrm_transfer_approve', 'erp-finance-payment-audit'); |
| | | -- HRM èå¤å¼å¸¸å®¡æ¹ï¼å
¨éçå¬ä¸æ keyï¼ææ¢æ hrm_attendance_approve åç±»ï¼ |
| | | CALL bpm_deploy_flow_from_template('hrm_attendance_approve', 'èå¤å¼å¸¸å®¡æ¹', 'hrm_attendance_approve', 'erp-finance-payment-audit'); |
| | | |
| | | -- SRM ä¾åºååå
¥å®¡æ¹ï¼ä»£ç çå¬ keyï¼supplier_apply_approveï¼ |
| | | CALL bpm_deploy_flow_from_template('supplier_apply_approve', 'ä¾åºååå
¥å®¡æ¹', 'supplier_apply_approve', 'erp-finance-payment-audit'); |
| | | |
| | | -- MES ä»åºå
¥åº / åºåº / è°æ¨å®¡æ¹ï¼ä»£ç çå¬ key åºå®ï¼ææ¢æ wms_approve åç±»ï¼ |
| | | CALL bpm_deploy_flow_from_template('wms_inbound_approve', 'ä»åºå
¥åºå®¡æ¹', 'wms_approve', 'erp-finance-payment-audit'); |
| | | CALL bpm_deploy_flow_from_template('wms_outbound_approve', 'ä»åºåºåºå®¡æ¹', 'wms_approve', 'erp-finance-payment-audit'); |
| | | CALL bpm_deploy_flow_from_template('wms_transfer_approve', 'ä»åºè°æ¨å®¡æ¹', 'wms_approve', 'erp-finance-payment-audit'); |
| | | -- MES éè´æ¶è´§ï¼å
¥åºåï¼å®¡æ¹ï¼å
¨éçå¬ï¼ææ¢æ item_receipt_approve åç±»ï¼ |
| | | CALL bpm_deploy_flow_from_template('item_receipt_approve', 'éè´å
¥åºå®¡æ¹', 'item_receipt_approve', 'erp-finance-payment-audit'); |
| | | -- MES æ¥å·¥/ç产工å审æ¹ï¼ä»£ç çå¬ keyï¼mes-pro-feedback-auditï¼ |
| | | CALL bpm_deploy_flow_from_template('mes-pro-feedback-audit', 'æ¥å·¥å®¡æ¹', 'mes_pro_feedback_audit', 'erp-finance-payment-audit'); |
| | | |
| | | -- ============================================================================= |
| | | -- ⤠é¨ç½²ç»ææ ¡éªï¼åºçå° 14 æ¡æ°æµç¨ä¸ SUSPENSION_STATE_=1ãmodel_type=10ï¼ |
| | | -- ============================================================================= |
| | | SELECT p.KEY_, p.NAME_, p.VERSION_, p.SUSPENSION_STATE_ AS active_flag, |
| | | LENGTH(p.ID_) AS procdef_id_len, |
| | | i.model_type, i.category |
| | | FROM ACT_RE_PROCDEF p |
| | | LEFT JOIN bpm_process_definition_info i ON i.process_definition_id = p.ID_ |
| | | WHERE p.KEY_ IN ('sale_order_approve','purchase_order_approve','crm-contract-audit', |
| | | 'hrm_leave','hrm_overtime','hrm_resignation','hrm_transfer', |
| | | 'hrm_attendance_approve','supplier_apply_approve', |
| | | 'wms_inbound_approve','wms_outbound_approve','wms_transfer_approve', |
| | | 'item_receipt_approve','mes-pro-feedback-audit') |
| | | ORDER BY p.KEY_; |
| | |
| | | ErrorCode WM_TRANSACTION_LIST_EMPTY = new ErrorCode(1_040_703_011, "åºåäºå¡å表ä¸è½ä¸ºç©º"); |
| | | ErrorCode WM_TRANSACTION_BATCH_NOT_EXISTS = new ErrorCode(1_040_703_012, "æ¹æ¬¡è®°å½ä¸åå¨"); |
| | | ErrorCode WM_MATERIAL_STOCK_REQUIRED = new ErrorCode(1_040_703_013, "åºåè®°å½ä¸è½ä¸ºç©º"); |
| | | ErrorCode WM_MATERIAL_STOCK_SELECTION_MISMATCH = new ErrorCode(1_040_703_014, "åºåè®°å½ä¸æäº¤çç©æãæ¹æ¬¡æåºä½ä¿¡æ¯ä¸ä¸è´"); |
| | | ErrorCode WM_MATERIAL_STOCK_SELECTION_MISMATCH = new ErrorCode(1_040_703_014, "æéåºåè®°å½ä¸åæ®ä¿¡æ¯ä¸ä¸è´ï¼è¯·æ ¸å¯¹åéæ°æä½"); |
| | | ErrorCode WM_MATERIAL_STOCK_QUANTITY_INVALID = new ErrorCode(1_040_703_015, "è°æ´æ°éä¸è½ä¸ºç©ºæé¶"); |
| | | ErrorCode WM_MATERIAL_STOCK_FROZEN = new ErrorCode(1_040_703_016, "åºåè®°å½å·²å»ç»ï¼æ æ³ç§»åº"); |
| | | ErrorCode WM_MATERIAL_STOCK_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_703_017, "导å
¥çåºåæ°æ®ä¸è½ä¸ºç©º"); |
| | |
| | | throw exception(WM_MATERIAL_STOCK_REQUIRED); |
| | | } |
| | | MesWmMaterialStockDO stock = validateMaterialStockExists(materialStockId); |
| | | // 2. æ ¡éªåºåè®°å½çç©æãæ¹æ¬¡ãä»åºãåºåºãåºä½çä¿¡æ¯ä¸åç«¯éæ©çä¸è´ï¼é¿å
串åæè¶ææäº¤ |
| | | if (ObjUtil.notEqual(stock.getItemId(), itemId) |
| | | || ObjUtil.notEqual(stock.getBatchId(), batchId) |
| | | || (batchCode != null && ObjUtil.notEqual(stock.getBatchCode(), batchCode)) |
| | | || ObjUtil.notEqual(stock.getWarehouseId(), warehouseId) |
| | | || ObjUtil.notEqual(stock.getLocationId(), locationId) |
| | | || ObjUtil.notEqual(stock.getAreaId(), areaId)) { |
| | | throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH); |
| | | // 2. æ ¡éªåºåè®°å½çç©æãæ¹æ¬¡ãä»åºãåºåºãåºä½çä¿¡æ¯ä¸åæ®ä¸è´ï¼é¿å
串åæè¶ææäº¤ã |
| | | // é个维度æ¯å¯¹ï¼å½ä¸æ¶æç¤ºå
·ä½å·®å¼ï¼åºåä¾§ vs 忮侧ï¼å¹¶ç»åºå¤çåæ³ï¼é¿å
ç¬¼ç»æ¥"ä¿¡æ¯ä¸ä¸è´" |
| | | String mismatch = buildSelectedStockMismatch( |
| | | stock, itemId, batchId, batchCode, warehouseId, locationId, areaId); |
| | | if (mismatch != null) { |
| | | throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(), |
| | | "æéåºåè®°å½ä¸åæ®ä¸ä¸è´ï¼" + mismatch + "ãè¯·éæ°éæ©è¯¥ç©ææ£ç¡®çåºåï¼è¥ä»åº/åºåº/åºä½/æ¹æ¬¡è¢«ç¦ç¨æ æ³ä¿®æ¹ï¼è¯·å 餿¬æ¡æç»åéæ°æ·»å ã"); |
| | | } |
| | | // 3. æ ¡éªåºåæ°éå
è¶³ï¼å¦æåç«¯ä¼ äº quantityï¼åå¿
é¡»ä¿è¯åºåæ°é >= quantityï¼ |
| | | if (quantity != null && stock.getQuantity() != null && stock.getQuantity().compareTo(quantity) < 0) { |
| | |
| | | return stock; |
| | | } |
| | | |
| | | /** |
| | | * é维度æ¯å¯¹å¾
éåºåä¸åæ®ä¼ å
¥çä¿¡æ¯ï¼è¿å第ä¸ä¸ªä¸ä¸è´ç»´åº¦çå¯è¯»æè¿°ï¼å
¨é¨ä¸è´è¿å null |
| | | */ |
| | | private String buildSelectedStockMismatch(MesWmMaterialStockDO stock, Long itemId, Long batchId, String batchCode, |
| | | Long warehouseId, Long locationId, Long areaId) { |
| | | if (ObjUtil.notEqual(stock.getItemId(), itemId)) { |
| | | return "æéåºåå½å±ç©æ[" + itemIdText(itemId) + "]ï¼åæ®ç©æä¸º[" + itemIdText(stock.getItemId()) + "]"; |
| | | } |
| | | if (ObjUtil.notEqual(stock.getBatchId(), batchId)) { |
| | | return "æéåºåæ¹æ¬¡[" + batchText(stock.getBatchId(), stock.getBatchCode()) |
| | | + "]ï¼åæ®æ¹æ¬¡ä¸º[" + batchText(batchId, batchCode) + "]"; |
| | | } |
| | | if (batchCode != null && ObjUtil.notEqual(stock.getBatchCode(), batchCode)) { |
| | | return "æéåºåæ¹æ¬¡å·[" + stock.getBatchCode() + "]ï¼åæ®æ¹æ¬¡å·ä¸º[" + batchCode + "]"; |
| | | } |
| | | if (ObjUtil.notEqual(stock.getWarehouseId(), warehouseId)) { |
| | | return "æéåºåä»åº[" + warehouseText(stock.getWarehouseId()) |
| | | + "]ï¼åæ®ä»åºä¸º[" + warehouseText(warehouseId) + "]"; |
| | | } |
| | | if (ObjUtil.notEqual(stock.getLocationId(), locationId)) { |
| | | return "æéåºååºåº[" + locationText(stock.getLocationId()) |
| | | + "]ï¼åæ®åºåºä¸º[" + locationText(locationId) + "]"; |
| | | } |
| | | if (ObjUtil.notEqual(stock.getAreaId(), areaId)) { |
| | | return "æéåºååºä½[" + areaText(stock.getAreaId()) |
| | | + "]ï¼åæ®åºä½ä¸º[" + areaText(areaId) + "]"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private String itemIdText(Long itemId) { |
| | | return itemId == null ? "æªéæ©" : ("ç©æID=" + itemId); |
| | | } |
| | | |
| | | private String batchText(Long batchId, String batchCode) { |
| | | if (StrUtil.isNotBlank(batchCode)) { |
| | | return batchCode; |
| | | } |
| | | return batchId == null ? "æªéæ©" : ("æ¹æ¬¡ID=" + batchId); |
| | | } |
| | | |
| | | private String warehouseText(Long warehouseId) { |
| | | if (warehouseId == null) { |
| | | return "æªéæ©"; |
| | | } |
| | | MesWmWarehouseDO warehouse = warehouseService.getWarehouse(warehouseId); |
| | | return warehouse != null && StrUtil.isNotBlank(warehouse.getName()) |
| | | ? warehouse.getName() : ("ä»åºID=" + warehouseId); |
| | | } |
| | | |
| | | private String locationText(Long locationId) { |
| | | if (locationId == null) { |
| | | return "æªéæ©"; |
| | | } |
| | | MesWmWarehouseLocationDO location = locationService.getWarehouseLocation(locationId); |
| | | return location != null && StrUtil.isNotBlank(location.getName()) |
| | | ? location.getName() : ("åºåºID=" + locationId); |
| | | } |
| | | |
| | | private String areaText(Long areaId) { |
| | | if (areaId == null) { |
| | | return "æªéæ©"; |
| | | } |
| | | MesWmWarehouseAreaDO area = areaService.getWarehouseArea(areaId); |
| | | return area != null && StrUtil.isNotBlank(area.getName()) |
| | | ? area.getName() : ("åºä½ID=" + areaId); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long adjustMaterialStockIn(MesWmMaterialStockAdjustReqVO reqVO) { |
| | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | |
| | | if (stock == null) { |
| | | throw exception(WM_MATERIAL_STOCK_NOT_EXISTS); |
| | | } |
| | | // æ ¡éªç©æåæ¹æ¬¡ä¸è´ |
| | | // æ ¡éªç©æä¸è´ï¼æ¤å¤åªæ¯å¯¹ç©æï¼å ä¸ºæ¥æºåºå(线边/èæä»)ä¸ä¸æ¶ç®æ ä»åºæ¬å°±ä¸å屿£å¸¸ |
| | | if (ObjUtil.notEqual(stock.getItemId(), reqVO.getItemId())) { |
| | | throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH); |
| | | throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(), |
| | | "æéæ¥æºåºåå½å±ç©æä¸å½åéè´§ç©æä¸ä¸è´ï¼è¯·éæ°éæ©æ¥æºåºå"); |
| | | } |
| | | // æ ¡éªåºåæ°éå
è¶³ |
| | | if (reqVO.getQuantity() != null && stock.getQuantity() != null |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | |
| | | if (materialStock == null) { |
| | | throw exception(WM_MATERIAL_STOCK_NOT_EXISTS); |
| | | } |
| | | // æ ¡éªç©æãæ¹æ¬¡ãä»åºç维度ä¸è´ï¼é²æ¢ä¼ å
¥é误ç materialStockIdï¼ |
| | | // æ ¡éªç©æãæ¹æ¬¡ãä»åºç维度ä¸è´ï¼é²æ¢ä¼ å
¥é误ç materialStockIdï¼ã |
| | | // è¥æ¤å¤ä¸ä¸è´ï¼é常æ¯è¯¥åºå已被移åº/åå¹¶/æåï¼ééåéæ°æ£è´§ï¼æ
ç»åºéå¯¹æ§æç¤º |
| | | if (ObjUtil.notEqual(materialStock.getItemId(), reqDTO.getItemId()) |
| | | || ObjUtil.notEqual(materialStock.getWarehouseId(), reqDTO.getWarehouseId()) |
| | | || ObjUtil.notEqual(materialStock.getLocationId(), reqDTO.getLocationId()) |
| | | || ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId())) { |
| | | throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH); |
| | | throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(), |
| | | "该åºåè®°å½å·²åå¨ï¼å¯è½è¢«ç§»åº/åå¹¶/æåï¼ï¼ä¸åºåºæç»ä¸ä¸è´ï¼æ æ³æ£åï¼è¯·éåéæ°æ£è´§"); |
| | | } |
| | | } else if (isInbound) { |
| | | // å
¥åºäºå¡ï¼æ ¹æ® forceCreateNewStock æ å¿å³å®æ¯å建æ°è®°å½è¿æ¯æ¥æ¾/å建 |
| | |
| | | primary: master |
| | | datasource: |
| | | master: |
| | | # url: jdbc:mysql://172.17.0.1:9002/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | url: jdbc:mysql://42.63.70.231:9002/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | url: jdbc:mysql://172.17.0.1:9002/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | # url: jdbc:mysql://42.63.70.231:9002/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | username: root |
| | | password: yzfx@123456.. |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | server: |
| | | port: 48080 |
| | | |
| | | --- #################### æ°æ®åºç¸å
³é
ç½® #################### |
| | | spring: |
| | | autoconfigure: |
| | | # noinspection SpringBootApplicationYaml |
| | | exclude: |
| | | - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # é»è®¤ local ç¯å¢ï¼ä¸å¼å¯ Quartz çèªå¨é
ç½® |
| | | - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Qdrantï¼æå¨å建 |
| | | - org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Redisï¼æå¨å建 |
| | | - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Milvusï¼æå¨å建 |
| | | - org.dromara.trans.config.TransServiceConfig # TODO èè¿ï¼easy-trans å
¼å®¹ Spring Boot 4 åç§»é¤ï¼TransServiceConfig å¼ç¨äºå·²ç§»é¤ç RestTemplateBuilderï¼ |
| | | # ç¦ç¨æªé
ç½® API Key çæ¨¡åèªå¨é
ç½®ï¼åªä¿çéä¹åé® Embedding çæå¨é
ç½®ï¼ |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiChatAutoConfiguration |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiEmbeddingAutoConfiguration |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiImageAutoConfiguration |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiAudioSpeechAutoConfiguration |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiAudioTranscriptionAutoConfiguration |
| | | - org.springframework.ai.model.openai.autoconfigure.OpenAiModerationAutoConfiguration |
| | | - org.springframework.ai.model.deepseek.autoconfigure.DeepSeekChatAutoConfiguration |
| | | - org.springframework.ai.model.anthropic.autoconfigure.AnthropicChatAutoConfiguration |
| | | - org.springframework.ai.model.google.genai.autoconfigure.chat.GoogleGenAiChatAutoConfiguration |
| | | - org.springframework.ai.model.google.genai.autoconfigure.embedding.GoogleGenAiEmbeddingConnectionAutoConfiguration |
| | | - org.springframework.ai.model.google.genai.autoconfigure.embedding.GoogleGenAiTextEmbeddingAutoConfiguration |
| | | - org.springframework.ai.model.ollama.autoconfigure.OllamaApiAutoConfiguration |
| | | - org.springframework.ai.model.ollama.autoconfigure.OllamaChatAutoConfiguration |
| | | - org.springframework.ai.model.ollama.autoconfigure.OllamaEmbeddingAutoConfiguration |
| | | - org.springframework.ai.model.stabilityai.autoconfigure.StabilityAiImageAutoConfiguration |
| | | # æ°æ®æºé
置项 |
| | | datasource: |
| | | druid: # Druid ãçæ§ãç¸å
³çå
¨å±é
ç½® |
| | | web-stat-filter: |
| | | enabled: true |
| | | stat-view-servlet: |
| | | enabled: true |
| | | allow: # 设置ç½ååï¼ä¸å¡«åå
许ææè®¿é® |
| | | url-pattern: /druid/* |
| | | login-username: # æ§å¶å°ç®¡çç¨æ·ååå¯ç |
| | | login-password: |
| | | filter: |
| | | stat: |
| | | enabled: true |
| | | log-slow-sql: true # æ
¢ SQL è®°å½ |
| | | slow-sql-millis: 100 |
| | | merge-sql: true |
| | | wall: |
| | | config: |
| | | multi-statement-allow: true |
| | | dynamic: # 夿°æ®æºé
ç½® |
| | | druid: # Druid ãè¿æ¥æ± ãç¸å
³çå
¨å±é
ç½® |
| | | initial-size: 1 # åå§è¿æ¥æ° |
| | | min-idle: 1 # æå°è¿æ¥æ± æ°é |
| | | max-active: 20 # æå¤§è¿æ¥æ± æ°é |
| | | max-wait: 60000 # é
ç½®è·åè¿æ¥çå¾
è¶
æ¶çæ¶é´ï¼åä½ï¼æ¯«ç§ï¼1 åéï¼ |
| | | time-between-eviction-runs-millis: 60000 # é
ç½®é´éå¤ä¹
æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å
³éç空é²è¿æ¥ï¼åä½ï¼æ¯«ç§ï¼1 åéï¼ |
| | | min-evictable-idle-time-millis: 600000 # é
ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼åä½ï¼æ¯«ç§ï¼10 åéï¼ |
| | | max-evictable-idle-time-millis: 1800000 # é
ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼åä½ï¼æ¯«ç§ï¼30 åéï¼ |
| | | validation-query: SELECT 1 FROM DUAL # é
ç½®æ£æµè¿æ¥æ¯å¦ææ |
| | | test-while-idle: true |
| | | test-on-borrow: false |
| | | test-on-return: false |
| | | pool-prepared-statements: true # æ¯å¦å¼å¯ PreparedStatement ç¼å |
| | | max-pool-prepared-statement-per-connection-size: 20 # æ¯ä¸ªè¿æ¥ç¼åç PreparedStatement æ°é |
| | | primary: master |
| | | datasource: |
| | | master: |
| | | url: jdbc:mysql://172.17.0.1:9002/mom-zsjc?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | # url: jdbc:mysql://42.63.70.231:9002/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ |
| | | username: root |
| | | password: zsjc@123456.. |
| | | |
| | | # Redis é
ç½®ãRedisson é»è®¤çé
置足å¤ä½¿ç¨ï¼ä¸è¬ä¸éè¦è¿è¡è°ä¼ |
| | | data: |
| | | redis: |
| | | host: 172.17.0.1 # å°å |
| | | port: 6379 # ç«¯å£ |
| | | database: 1 # æ°æ®åºç´¢å¼ |
| | | # password: dev # å¯ç ï¼å»ºè®®ç产ç¯å¢å¼å¯ |
| | | |
| | | --- #################### 宿¶ä»»å¡ç¸å
³é
ç½® #################### |
| | | |
| | | # Quartz é
置项ï¼å¯¹åº QuartzProperties é
置类 |
| | | spring: |
| | | quartz: |
| | | auto-startup: true # æ¬å°å¼åç¯å¢ï¼å°½éä¸è¦å¼å¯ Job |
| | | scheduler-name: schedulerName # Scheduler ååãé»è®¤ä¸º schedulerName |
| | | job-store-type: jdbc # Job åå¨å¨ç±»åãé»è®¤ä¸º memory 表示å
åï¼å¯é jdbc ä½¿ç¨æ°æ®åºã |
| | | wait-for-jobs-to-complete-on-shutdown: true # åºç¨å
³éæ¶ï¼æ¯å¦çå¾
宿¶ä»»å¡æ§è¡å®æãé»è®¤ä¸º false ï¼å»ºè®®è®¾ç½®ä¸º true |
| | | properties: # æ·»å Quartz Scheduler éå 屿§ï¼æ´å¤å¯ä»¥ç http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html ææ¡£ |
| | | org: |
| | | quartz: |
| | | # Scheduler ç¸å
³é
ç½® |
| | | scheduler: |
| | | instanceName: schedulerName |
| | | instanceId: AUTO # èªå¨çæ instance ID |
| | | # JobStore ç¸å
³é
ç½® |
| | | jobStore: |
| | | # JobStore å®ç°ç±»ãå¯è§å客ï¼https://blog.csdn.net/weixin_42458219/article/details/122247162 |
| | | class: org.springframework.scheduling.quartz.LocalDataSourceJobStore |
| | | isClustered: true # æ¯éç¾¤æ¨¡å¼ |
| | | clusterCheckinInterval: 15000 # éç¾¤æ£æ¥é¢çï¼åä½ï¼æ¯«ç§ãé»è®¤ä¸º 15000ï¼å³ 15 ç§ |
| | | misfireThreshold: 60000 # misfire éå¼ï¼åä½ï¼æ¯«ç§ã |
| | | # çº¿ç¨æ± ç¸å
³é
ç½® |
| | | threadPool: |
| | | threadCount: 25 # çº¿ç¨æ± 大å°ãé»è®¤ä¸º 10 ã |
| | | threadPriority: 5 # 线ç¨ä¼å
级 |
| | | class: org.quartz.simpl.SimpleThreadPool # çº¿ç¨æ± ç±»å |
| | | jdbc: # ä½¿ç¨ JDBC ç JobStore çæ¶åï¼JDBC çé
ç½® |
| | | initialize-schema: NEVER # æ¯å¦èªå¨ä½¿ç¨ SQL åå§å Quartz è¡¨ç»æãè¿é设置æ never ï¼æä»¬æå¨åå»ºè¡¨ç»æã |
| | | |
| | | --- #################### æå¡ä¿éç¸å
³é
ç½® #################### |
| | | |
| | | # Lock4j é
置项 |
| | | lock4j: |
| | | acquire-timeout: 3000 # è·ååå¸å¼éè¶
æ¶æ¶é´ï¼é»è®¤ä¸º 3000 æ¯«ç§ |
| | | expire: 30000 # åå¸å¼éçè¶
æ¶æ¶é´ï¼é»è®¤ä¸º 30000 æ¯«ç§ |
| | | |
| | | --- #################### çæ§ç¸å
³é
ç½® #################### |
| | | |
| | | # Actuator çæ§ç«¯ç¹çé
置项 |
| | | management: |
| | | endpoints: |
| | | web: |
| | | base-path: /actuator # Actuator æä¾ç API æ¥å£çæ ¹ç®å½ãé»è®¤ä¸º /actuator |
| | | exposure: |
| | | include: '*' # éè¦å¼æ¾ç端ç¹ãé»è®¤å¼åªæå¼ health å info 两个端ç¹ãéè¿è®¾ç½® * ï¼å¯ä»¥å¼æ¾ææç«¯ç¹ã |
| | | |
| | | # Spring Boot Admin é
置项 |
| | | spring: |
| | | boot: |
| | | admin: |
| | | # Spring Boot Admin Client 客æ·ç«¯çç¸å
³é
ç½® |
| | | client: |
| | | url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server å°å |
| | | instance: |
| | | service-host-type: IP # 注åå®ä¾æ¶ï¼ä¼å
ä½¿ç¨ IP [IP, HOST_NAME, CANONICAL_HOST_NAME] |
| | | username: admin |
| | | password: admin |
| | | # Spring Boot Admin Server æå¡ç«¯çç¸å
³é
ç½® |
| | | context-path: /admin # é
ç½® Spring |
| | | # å
许åµå
¥ iframe çååï¼æ¯æéé
符ï¼ï¼å®é
é¨ç½²æ¶ï¼å¯ä»¥æ¹ä¸º "'self' [ä½ çå
¬ç½åå]" |
| | | frame-ancestors: "'self' localhost localhost:48080 127.0.0.1 127.0.0.1:48080" |
| | | |
| | | # æ¥å¿æä»¶é
ç½® |
| | | logging: |
| | | file: |
| | | name: logs/${spring.application.name}.log # æ¥å¿æä»¶åï¼ç¸å¯¹äºé¡¹ç®æ ¹ç®å½ |
| | | level: |
| | | # é
ç½®èªå·±åç MyBatis Mapper æå°æ¥å¿ |
| | | cn.iocoder.yudao.module.bpm.dal.mysql: debug |
| | | cn.iocoder.yudao.module.infra.dal.mysql: debug |
| | | cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # é
ç½® ApiErrorLogMapper çæ¥å¿çº§å«ä¸º infoï¼é¿å
å GlobalExceptionHandler éå¤æå° |
| | | cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper: INFO # é
ç½® JobLogMapper çæ¥å¿çº§å«ä¸º info |
| | | cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper: INFO # é
ç½® FileConfigMapper çæ¥å¿çº§å«ä¸º info |
| | | cn.iocoder.yudao.module.system.dal.mysql: debug |
| | | cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper: INFO # é
ç½® SmsChannelMapper çæ¥å¿çº§å«ä¸º info |
| | | cn.iocoder.yudao.module.member.dal.mysql: debug |
| | | cn.iocoder.yudao.module.crm.dal.mysql: debug |
| | | cn.iocoder.yudao.module.erp.dal.mysql: debug |
| | | cn.iocoder.yudao.module.mes.dal.mysql: debug |
| | | cn.iocoder.yudao.module.ai.dal.mysql: debug |
| | | cn.iocoder.yudao.module.im.dal.mysql: debug |
| | | org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO èè¿ï¼å
ç¦ç¨ï¼Spring Boot 3.X åå¨é¨åé误ç WARN æç¤º |
| | | |
| | | debug: false |
| | | |
| | | yudao: |
| | | ai: |
| | | vector-store: |
| | | type: milvus # åéåºç±»åï¼milvus |
| | | milvus: |
| | | initialize-schema: true |
| | | database-name: test |
| | | collection-name: knowledge_segment_zsjc |
| | | host: 36.213.90.123 |
| | | port: 19530 |
| | | |
| | | --- #################### è¶
级管çåç¸å
³é
ç½® #################### |
| | | |
| | | # è¶
级管çåé
置项ï¼è®¾ç½®å½åé¡¹ç®ææèªå®ä¹çé
ç½® |
| | | yudao: |
| | | captcha: |
| | | enable: false # æ¬å°ç¯å¢ï¼ææ¶å
³éå¾çéªè¯ç ï¼æ¹ä¾¿ç»å½çæ¥å£çæµè¯ï¼ |
| | | security: |
| | | mock-enable: true |
| | | access-log: # è®¿é®æ¥å¿çé
置项 |
| | | enable: false |
| | | demo: false # å
³éæ¼ç¤ºæ¨¡å¼ |
| | | storage: # æä»¶ä¸ä¼ é
ç½® |
| | | path: /data/javaWork/mom/file # æä»¶å卿 ¹ç®å½ |
| | | url-prefix: /admin-api/system/storage-blob # URLè·¯å¾åç¼ |
| | | domain: http://116.172.73.239:9001 # åååç¼ï¼æå®é
ååé
ç½®ï¼ï¼å端é
置好åä¸å¤ªå¯¹ç°å¨æ¯ç´è¿åç«¯ï¼ææè¦åç«¯ç«¯å£ |
| | | expired: 120 # tokenè¿ææ¶é´ï¼åéï¼ |
| | | use-limit: 10 # tokenä½¿ç¨æ¬¡æ°ä¸é |
| | | jwt-secret: abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG # JWTå¯é¥ |
| | | compress: true # æ¯å¦å缩å¾ç |
| | | need-compress-size: 10MB # 触åå缩çæä»¶å¤§å°éå¼ |
| | | compress-quality: 0.5 # å缩质é(0.0-1.0) |
| | | database-backup: # æ°æ®åºå¤ä»½é
ç½® |
| | | host: 172.17.0.1 # å¤ä»½ç®æ MySQL 主æºï¼ç空èªå¨ä»æ°æ®æº JDBC URL è§£æ |
| | | port: 9002 # å¤ä»½ç®æ MySQL 端å£ï¼ç空èªå¨ä»æ°æ®æº JDBC URL è§£æ |
| | | database: ruoyi-vue-pro # å¤ä»½ç®æ æ°æ®åºï¼ç空èªå¨ä»æ°æ®æº JDBC URL è§£æ |
| | | username: root # å¤ä»½è´¦å·ï¼çç©ºä½¿ç¨æ°æ®æºè´¦å· |
| | | password: 'zsjc@123456..' # å¤ä»½å¯ç ï¼çç©ºä½¿ç¨æ°æ®æºå¯ç |
| | | command: # mysqldump å½ä»¤ï¼ç空èªå¨æ£æµé¨ç½²ç¯å¢ï¼æ¬æº mysqldump æ Docker MySQL 容å¨ï¼ï¼å¯æå¨æå®ï¼å¦ï¼docker exec mysql8 mysqldump |