Merge remote-tracking branch 'origin/dev_新疆_塔河种业' into dev_新疆_塔河种业
| | |
| | | .claude/worktrees/ |
| | | .claude/scheduled_tasks.json |
| | | |
| | | .export_tmp/ |
| | | .export_tmp/ |
| | | /.db-cleanup-backups/ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # éè´éå®å®åå¤§å± CRM ç»è®¡ |
| | | |
| | | æ°å¢ 14 个å¾è¡¨é
ç½®ï¼ä¿çåæå¾è¡¨ãéè´éå®å®å大å±ä¼å
æ¾ç¤º CRM å
容ï¼å
¶ä»å¤§å±å±ç¤ºé¡ºåºä¸åã |
| | | |
| | | ## 6 ä¸ªæ ¸å¿ææ |
| | | |
| | | - æ¬ææ°å¢å®¢æ·ï¼å®¢æ·åå»ºæ¥æè½å¨æ¬èªç¶æï¼æé¤å·²å é¤ã |
| | | - è·è¿ä¸åæºéé¢ï¼æªç»æçåæºï¼ç»æç¶æä¸ºç©ºæ 0ï¼çé颿»åã |
| | | - æ¬æææååéé¢ï¼ä¸åæ¥æå¨æ¬æä¸å®¡æ ¸éè¿ï¼20ï¼çååéé¢ã |
| | | - æ¬æå·²å®¡æ ¸åæ¬¾ï¼åæ¬¾æ¥æå¨æ¬æä¸å®¡æ ¸éè¿ï¼20ï¼ç忬¾éé¢ã |
| | | - ææååå¾
忬¾ï¼ææ¯ä»½å®¡æ ¸éè¿çååå
èåå·²å®¡æ ¸åæ¬¾ï¼å计ç®éè´ä½é¢åæ±åï¼é¿å
å¤ç¬å款导è´ååéå¤è®¡æ°ï¼è¿ä¸æ¯é¾æéé¢ã |
| | | - æ¬ææ¥ä»·åæ°ï¼æ¥ä»·æ¥æå¨æ¬æçæ¥ä»·åæ°éï¼å
å«è稿ï¼ä¸è¡¨ç¤ºæäº¤ã |
| | | |
| | | ## 6 个åæå¾è¡¨ |
| | | |
| | | æ°å¢å®¢æ·æåº¦è¶å¿ãååä¸å款åæçº¿ãåæºé¶æ®µåå¸ãå®¢æ·æäº¤ç¶æãéç¹å®¢æ·ææååéé¢ TOP10ãæ¥ä»·æ°éæåº¦è¶å¿ã |
| | | |
| | | æåº¦è¶å¿è¦ç彿åå 11 个æï¼å¹¶è¡¥é½ç©ºæä»½ä¸º 0ãåæºé¶æ®µç»è®¡å
¨é¨éå é¤åæºï¼ç»æçåæºå嫿 为赢åãè¾åãæ æãå®¢æ·æäº¤ç¶æä½¿ç¨ CRM å®¢æ·æäº¤æ è®°ï¼ä¸éæ°æ¨å¯¼ã客æ·ååéé¢æè¡æ¦æå®¢æ·ç¼å·åç»ï¼é¿å
åå客æ·åå¹¶ã |
| | | |
| | | ## 2 个æç»è¡¨ |
| | | |
| | | - æè¿ææååä¸åæ¬¾ï¼æè¿ 10 ä»½å®¡æ ¸éè¿çååï¼ååºååéé¢ãå·²å®¡æ ¸åæ¬¾ãå¾
忬¾ãç¾åæ¥æã |
| | | - 龿æªè·è¿å®¢æ·ï¼å·²åé
è´è´£äººï¼è®¡åèç³»æ¥ææ©äºä»å¤©ä¸æè¿èç³»æ¶é´æªè¾¾å°è®¡åèç³»æ¶é´ç客æ·ï¼æææ©è®¡åèç³»æ¥æå±ç¤ºå 10 æ¡ï¼ä¸å
å«å
¬æµ·å®¢æ·ï¼ä¹ä¸çåäºåå龿ã |
| | | |
| | | ## é
ç½®ä¸éªè¯ |
| | | |
| | | æ§è¡ `sql/mysql/bi_purchase_sales_crm_patch.sql`ï¼æå¤§å±ç¼ç å®ä½ï¼ä¸ä¾èµåºå®å¤§å±ç¼å·ãæ°å¢å¾è¡¨æåç§°å¹çæå
¥ï¼ä¸è¦çåæèªå®ä¹æ¥è¯¢ãéç¹å®¢æ·æ¨ªåæè¡é
ç½®å¯éå¤åæ¥ã |
| | | |
| | | å¾è¡¨ SQL 已卿¬å°åæå®è¿ç¨ mom-hm æ§è¡éªè¯ï¼è¡¥é½æä»½ã忬¾æé¤æªéè¿ä¸å·²å é¤è®°å½ãå¤ç¬å款èåãè¶
é¢å款ä½é¢å½é¶åå·²éªè¯ãåç«¯æ¯æå¤åºåæ±ç¶/æçº¿å¾ã横åå®¢æ·æè¡ãæ ä¸å¡æ°æ®æç¤ºï¼éè´éå®å¤§å±æ¯åééæ°åæ°ãæ¡é¢ä¸ææºå¸å±å·²ä½¿ç¨å®é
ä¸å¡ç»è®¡å¿«ç
§éªè¯ã |
| | | |
| | | æ éå¢å èåææ´æ°å端代ç ï¼é¨ç½²æ°çå端å宿´çæãå½å BI ç»è®¡æ²¿ç¨å大å±çå
¨å±ç»è¥æ°æ®èå´ï¼ä»
æææ¥ç大å±çç¨æ·å¯ä»¥è®¿é®ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ä¸å¡æ¥ææ¾ç¤ºçº¦å® |
| | | |
| | | æ®éä¸å¡æ¥æä½¿ç¨ `YYYY-MM-DD`ãæ¬æ¬¡è¦çéè´ãéå®ãè´¢å¡ãä»å¨ç©æµãåºç¡èµæã设å¤å°è´¦ãè®¡éæ£æµãè´¨é管çã人äºä¸èªé
¬ç页é¢ä¸çå表ã详æ
ãæ®éæ¥æè¾å
¥åæå°å±ç¤ºã |
| | | |
| | | ## ä¿ç精确æ¶é´ |
| | | |
| | | - æä½ãç»å½ã访é®åé误æ¥å¿ï¼åºåäºå¡ä¸åºååå²ã |
| | | - 审æ¹åå®¡æ ¸è½¨è¿¹ï¼å¤çä¸å¤ç½®æ¶é´ã |
| | | - è夿å¡ã请åãå çãæçã |
| | | - çäº§ä»»å¡æç¨ãæ¥å·¥ãä¸ä¸å·¥ãå·¥åºè¿åºãå¼å¸¸äºä»¶ä¸æ¹æ¬¡è¿½æº¯äºä»¶ã |
| | | - ç»´ä¿®æ¥ä¿®ãç»´ä¿®å®æä¸éªæ¶è¿ç¨ã |
| | | - 䏿¬¡èç³»æéãææ æªæ¢ä¸å¼æ æ¶é´ã |
| | | - æå°çææ¶é´ãç³»ç»å·æ°æ¶é´ã |
| | | |
| | | å
¶ä¸ç产æ¥å·¥çæ¹æ¬¡æææåå
¥åºæ¥æä»æå¤©éæ©ï¼ä¸æ¥å·¥åçæ¶é´åºåã |
| | | |
| | | ## æ¥å£ä¸æ°æ® |
| | | |
| | | - æ¾ç¤ºæ ¼å¼ä¸ `valueFormat` åå¼é
ç½®ï¼åå°éè¦å®æ´æ¶é´æ¶ä¿ç `YYYY-MM-DD HH:mm:ss` çç»å®æ ¼å¼ã |
| | | - ä¸ä¿®æ¹å岿¶é´æ°æ®ãæ°æ®åºå段æåå°è®¡ç®å£å¾ã |
| | | - æ¶é´åºé´æ¥è¯¢ä¿çåå§æ¶é´è¾¹çä¸å
¨å¤©é¢è®¾ï¼é¿å
ç»ææ¥æå½å¤©çæ°æ®éæ¼ï¼éè¦ç²¾ç¡®æ¶é´çåºé´ä»å¯éæ©æ¶åç§ã |
| | | - ä¸ä¿®æ¹å
¨å± `formatDateTime`ï¼é¿å
影忥å¿ãå®¡æ¹ææ¶é¿è®¡ç®ã |
| | | |
| | | ## éªè¯ |
| | | |
| | | å端ç产æå»ºéè¿ãå
¨éç±»åæ£æ¥åå¨åæé误ï¼ä¸ä¿®æ¹åçè¯æå¯¹æ¯ï¼æ¬æ¬¡æ¥æè°æ´æªæ°å¢ç±»åé误ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç»å½ä¸å
¨å±è¯å ä¸»é¢ |
| | | |
| | | è®°å½æ¥æï¼2026-10-15ãè®¾è®¡ä¾æ®ä¸ºç¨æ·æä¾çè¯å åºé¢åèå¾ï¼é宿±çº¢ãæéã宣纸ç½ãå
¨å±è§åè§[å端 DESIGN.md](../../mom-pro2-before/DESIGN.md)ãæ¬è®°å½æè¿°å½åå®ç°ï¼ä¸ä»£è¡¨ä¼ä¸åçæäº§åèµè´¨è¯´æã |
| | | |
| | | ## å®ç°å
¥å£ |
| | | |
| | | | æä»¶ï¼ç¸å¯¹å端ç®å½ï¼ | èè´£ | |
| | | | --- | --- | |
| | | | `src/layouts/auth-scene.vue` | åºé¢èæ¯ãå è®ãè£
饰æ¡ä¸ååºå¼åºæ¯ | |
| | | | `src/layouts/auth.vue` | å
¬å¸é
ç½®ãLogoãè¯è¨ï¼ä¸»é¢å·¥å
·ãçå®è®¤è¯è·¯ç± | |
| | | | `src/views/_core/authentication/login.vue` | ç°æç»å½è¡¨åãè¾å
¥æ ·å¼ã认è¯ä¸éªè¯ç è°ç¨ | |
| | | | `src/preferences.ts` | é»è®¤èªå®ä¹ä¸»è² `#a51d24` | |
| | | | `src/styles/herbal-theme.css` | ææä¸»é¢è¯ä¹è²ãæè²æ±ç 主è²ãåæ·±è²å¯¼èªå
¼å®¹ | |
| | | | `src/main.ts` | 䏻颿 è¯ã䏿¬¡æ§ç¼åè¿ç§»å主è²çå¬ | |
| | | | `src/bootstrap.ts` | å¼å
¥å
¨å±ä¸»é¢æ ·å¼ | |
| | | |
| | | ## è§è§ä¸ååºå¼ |
| | | |
| | | å
¨å±æµ
è²è¡¨é¢ä½¿ç¨æç½ï¼èæ¯ `hsl(40 50% 99%)`ãæ·±å±èæ¯ `hsl(37 33% 95%)`ï¼ï¼ææ¬éç¨æå¢¨è²ãæè²èæ¯ä¸º `hsl(26 16% 12%)`ï¼å¡ç为 `hsl(26 15% 14%)`ï¼é»è®¤æ±çº¢ä¸»é¢ä¸ï¼æè²å
¨å±ä¸»è¦å¼ºè°è²ä½¿ç¨è¾äº®æ±ç ï¼`hsl(357 64% 73%)`ï¼ä¸æ·±è²æé®æåãç»å½ä¸»æé®ç±å±é¨æ ·å¼ç»´ææ±çº¢ç½åã |
| | | |
| | | æ£æç»§æ¿ `--font-family`ï¼ç¼ºçåéç³»ç»æ 衬线ï¼å
¬å¸åç§°ä¸å è®ä½¿ç¨ `STKaiti`ã`KaiTi`ã`FangSong`ã衬线åéãæ²¡ææ°å¢å¤é¨åä½ä¸è½½ï¼å®é
åå½¢ä¾èµç³»ç»åä½ã |
| | | |
| | | æ¡é¢å°å è®å表åå置两侧ï¼è¡¨åæå¤§å®½åº¦ 584pxï¼ä¸è¶
è¿ 900px 忢ååãéèå è®ï¼è¡¨åæå¤§å®½åº¦ 520pxï¼ä¸è¶
è¿ 540px å
许åçåºæ¢è¡å¹¶æ¶ç´§çç½ãçæ¡é¢è§å£éä½è¡¨åé«åº¦ä¸å
è¾¹è·ãæ·±è²èæ¯å¾çéä½äº®åº¦å饱å度ï¼è£
饰å¾ç为空æ¿ä»£ææ¬å¹¶æ 记为è¾
婿æ¯å¿½ç¥ã |
| | | |
| | | ## ç¼åä¸å
¬å¸èº«ä»½ |
| | | |
| | | å好åå§åå设置 `data-brand-theme="herbal"`ãæç°æåºç¨ namespace ä¿å `${namespace}-herbal-theme-v1` æ è®°ï¼æ 记缺失æ¶ä»
è¿ç§»ä¸»é¢ç±»åä¸ä¸»è²ï¼é¿å
æ§ç¼åèè²é®çæ°ä¸»é¢ãæåä¿åæ è®°åä¸å强å¶ä¸»è²ï¼ç¨æ·ä¹åéæ©çé¢è²åæææ¨¡å¼ç»§ç»çæãnamespace å
å«åºç¨çæ¬ä¸è¿è¡ç¯å¢ï¼å namespace ç¬ç«è¿ç§»ã |
| | | |
| | | çå¬å½å主è²ï¼ä»
å¨å
¶çäº `#a51d24` æ¶è®¾ç½® `data-herbal-palette="true"`ï¼ä»¥å
æè²æ±ç è¦çç¨æ·èªéé¢è²ãè¥ localStorage ä¸å¯ç¨ï¼å½åå®ç°ä¼å¨å¯å¨æ¶éæ°åºç¨é»è®¤æ±çº¢ï¼æ æ³ä¿è¯è·¨å¯å¨ä¿ç该主è²å好ã |
| | | |
| | | å
¬å¸åä¸ Logo ä»ä½¿ç¨ç°æ preferencesï¼ç¼è¯é
ç½®ï¼è®¤è¯å¸å±æ²¿ç¨å
¬å¸é
ç½® store è·åç»å½æ é¢ä¸æè¿°ï¼æè²ä¼å
使ç¨å·²é
ç½®çæè² Logoãæªé
ç½®å
¬å¸æ å¿æ¶éèæ¡æ¶ç¤ºä¾ Logoãèæ¯ãæéçº¹æ ·åæ é¢ææ æåå ä½ SVG çº¹æ ·ç¬ç«äºå
¬å¸ Logoï¼ä¸åå
¥å
¬å¸èº«ä»½é
ç½®ã |
| | | |
| | | æè²å·¥å
·æ¡ä½¿ç¨æ·±åºä»¥é
å徿 对æ¯ï¼å¯ç åæ¢ä¸ºææåä»ä¿çæ¾éæé®çå³ä¾§ç©ºé´ï¼44pxï¼ï¼é¿å
è¾å
¥å
容䏿é®éå ã |
| | | |
| | | ## èæ¯èµäº§ |
| | | |
| | | èµæºï¼`mom-pro2-before/public/images/auth/herbal-courtyard.png`ï¼é¡µé¢è·¯å¾ `/images/auth/herbal-courtyard.png`ã使ç¨å
ç½® ImageGen 模å¼çæï¼åèç¨æ·å¾ä¿çè¯å åºé¢ãè¯ææçä¸ç±³ç½çç½ï¼å»é¤æåãLogoãå·¥å
·æ ã表åå¡çåææ UIï¼ä¸çæææ¬ãå
¬å¸åãå è®ä¸ç»å½å
容åç±é¡µé¢æ¸²æï¼ç»´æ¤æ¶ä¸è¦æå®ä»¬ççå°å¾çä¸ã |
| | | |
| | | ## éªè¯è¯æ®ä¸èå´ |
| | | |
| | | éªè¯è®°å½ï¼[result.json](../../scripts/login-theme-20261015/result.json)ãæªå¾ä½¿ç¨çå®åºç¨ãè·¯ç±ä¸ä¸»é¢ï¼ç»å½ç»ä»¶ï¼å端åå
¬å¸é
ç½® API 为 mockï¼è¾å
¥ä¸ºæ¼ç¤ºè´¦æ·ï¼æ²¡æå®æçå®èº«ä»½è®¤è¯ã |
| | | |
| | | - [æ¡é¢æµ
è²](../../scripts/login-theme-20261015/desktop-login.png) |
| | | - [æ¡é¢æè²](../../scripts/login-theme-20261015/desktop-dark.png) |
| | | - [ç§»å¨ç«¯](../../scripts/login-theme-20261015/mobile-login.png) |
| | | |
| | | è®°å½è¦ç卿å
¬å¸é
ç½®ãèæ¯å è½½ãèªå¨å¡«å
屿§ãé®çå¯ç æ¾éãè®°ä½è´¦å·ãææä¸»é¢åæ¢ãç§»å¨ç«¯æ æ¨ªåæº¢åºåå¿
å¡«æ ¡éªé»æ¢å端请æ±ãæªå¾ä¸è¿äºæ£æ¥ä¸è½è¯æçå®å端认è¯ãéªè¯ç æå¡ãæéè·¯ç±æå
¨é¨ä¸å¡é¡µé¢åéè¿éªè¯ï¼ä¿çç°æè°ç¨é¾ä¹ä¸çäºä¸è¿°æå¡å·²èè°æåã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å¤ä»¶ç®¡çå±é¨è®¾è®¡è®°å½ |
| | | |
| | | è®°å½æ¥æï¼2026-10-14ãèå´ä¸ºè®¾å¤ç®¡ççåè½æ©å±ï¼ä½¿ç¨ VueãAnt Design Vue ä¸ Vbenï¼æ¨¡å¼ä¸º Operateãæ²¿ç¨æ¢æè¡¨æ ¼ãçéã表ååå¼¹çªæ¨¡å¼ï¼æ¤æä»¶ä»
è®°å½å±é¨å®ç°äºå®ï¼ä¸å®ä¹å
¨å±è§è§ä½ç³»ææ°å¢è®¾è®¡ tokenã |
| | | |
| | | ## å¸å±ä¸ç»ä»¶ |
| | | |
| | | - **å¤ä»¶å°è´¦**ï¼Page å
å
å±ç¤ºæ é¢ä¸å³ä¾§âæ°å¢å¤ä»¶âï¼éåä¸ºå¯æ¢è¡çè¡å
çéååé¡µè¡¨æ ¼ãçéå
å«ç¼ç ãåç§°ãç¶æåâä»
çä½äºå®å
¨åºåâãè¡¨æ ¼ä¿çè§æ ¼ãåä½ãå¯ç¨åºåãå®å
¨åºåãä½ç½®åç¶æï¼å³ä¾§åºå®æä½åæä¾ç¼è¾ãå
¥åºãé¢ç¨ãè®°å½ä¸å é¤ã |
| | | - **å¤ä»¶è¡¨å**ï¼Vben å¼¹çªï¼çºµåæ ç¾ã宽å±åå表åãçªå±ååï¼å®½å±å£°æå®½åº¦ä¸º 640pxã夿³¨è·¨åï¼åå§åºåä»
æ°å¢æ¶æ¾ç¤ºï¼åºååç»ç»ä¸å¡æä½åæ´ã |
| | | - **å
¥åºï¼é¢ç¨ï¼éå**ï¼å¤ç¨ä¸ä¸ªçºµå表åå¼¹çªï¼å®½å±å£°æå®½åº¦ä¸º 600pxãé¡¶é¨ä¿¡æ¯æç¤ºè¯´æåºåå½±åãé¢ç¨å
å«å¤ä»¶ãå
³èç»´ä¿®åãé¢ç¨äººãæ°éåæä½è¯´æï¼ä¸ä¸æå·²ä¼ å
¥çå¤ä»¶æç»´ä¿®åéå®éæ©ãéåå±ç¤ºåé¢ç¨è®°å½ä¸å¯éåæ°éã |
| | | - **é¢ç¨è®°å½**ï¼ç¬ç«é¡µé¢åå°è´¦è®°å½å¼¹çªå¤ç¨ Recordsï¼é»è®¤çéç»´ä¿®é¢ç¨ãç»´ä¿®åå
嵿¶éèç»´ä¿®åå·çéï¼å¹¶æè¯¥ç»´ä¿®åæ¥è¯¢ãè®°å½å
嫿¶é´ãç±»åãå¤ä»¶ãæ°éï¼åä½ãå·²éåãå¯éåãç»´ä¿®åã设å¤ãé¢ç¨äººä¸è¯´æã |
| | | |
| | | ## ç¶æãæéä¸ç»´ä¿®æµç¨ |
| | | |
| | | åºåä½äºå®å
¨åºåæ¶æ¾ç¤ºâ ä¸è¶³ âè¦ç¤ºæ ç¾ï¼å¯ç¨ç¶æä½¿ç¨æåæ ç¾ï¼åç¨ä½¿ç¨ä¸æ§æ ç¾ãåç¨å¤ä»¶ä¸å¯å
¥åºæé¢ç¨ï¼æ å¯ç¨åºåæ¶ç¦ç¨é¢ç¨ãå é¤ä½¿ç¨ç¡®è®¤æç¤ºï¼å¹¶è¯´æä»
æ åºåãæ æµæ°´çå¤ä»¶å¯å é¤ã |
| | | |
| | | å表æ¥è¯¢æå è½½ç¶æï¼å¤±è´¥æ¶æ¸
ç©ºç»æå¹¶å±ç¤ºé误æç¤ºï¼å¯éè¿âæ¥è¯¢âéè¯ã表å使ç¨å¿
å¡«æ ¡éªä¸æ°éæ ¡éªï¼é¢ç¨ä¸å¯è¶
è¿å¯ç¨åºåï¼éåä¸å¯è¶
è¿å¯éåæ°éï¼æäº¤æé´éå®å¼¹çªå¹¶é»æ¢å
³éãåºç¡æ°æ®å 载失败å±ç¤ºé误æç¤ºï¼ææ¡å¼å¯¼éæ°æå¼å¼¹çªã |
| | | |
| | | æä½å
¥å£ä½¿ç¨ `mes:dv-spare:create/update/receive/issue/record/delete/return` æéæä»¤ãç»´ä¿®åå
çè®°å½åºéè®°å½æéï¼é¢ç¨å
¥å£è¿éé¢ç¨æéãæéäºå®æ¥èªä»£ç ï¼æªå¾æªéªè¯å¤è§è²æéç»åã |
| | | |
| | | æ°ç»´ä¿®åä¿åæååä¿çå½åå¼¹çªï¼åå¾ ID 并转为ç¼è¾ç¶æï¼éåæ¾ç¤ºå
³èé¢ç¨è®°å½ï¼è稿æç»´ä¿®ä¸å
许é¢ç¨ãé¢ç¨å¼¹çªåºå®å½åç»´ä¿®åå
³èï¼æååå·æ°è®°å½ãç»´ä¿®åæç´¢åæ ·åªæä¾è稿æç»´ä¿®ä¸è®°å½ã |
| | | |
| | | ## æ¢æè§è§ä¸çªå± |
| | | |
| | | æªå¾æ¾ç¤ºç½è²å·¥ä½åºåãæµ
è²è¡¨å¤´ãè¡åé线ãèè²ä¸»æé®ä¸é¾æ¥æä½ï¼å é¤ä¸ºå±é©è²ãä¿¡æ¯ãè¦ç¤ºãæååéè¯¯ç¶ææ²¿ç¨ Ant Design ç»ä»¶è¯ä¹ï¼æªæåå
¨å±åä½ãé¢è²ãåè§æé´è· tokenã |
| | | |
| | | çé䏿ä½å
许æ¢è¡ï¼å°è´¦åè®°å½è¡¨æ ¼åå«å£°ææ¨ªåæ»å¨å®½åº¦ 1330pxã1790pxï¼æä½ååºå®å³ä¾§ãçªå±ä¿æè¡¨æ ¼ç»æï¼éè¿æ¨ªåæ»å¨è¯»å宿´å段ï¼å¹¶æªæ¹ä¸ºå¡çå表ãè®°å½å¼¹çªä¸ºçªå±å
¨å®½ãè¾å¤§å±å¹çº¦ 4/5 宽ï¼è¡¨åå¼¹çªå¨çªå±éç¨å
¨å®½ã |
| | | |
| | | ## è¯æ®ä¸éªè¯éå¶ |
| | | |
| | | å®ç°ä¾æ®ï¼`mom-pro2-before/src/views/mes/dv/spare/index.vue`ãå
¶ `modules/form.vue`ã`action.vue`ã`records.vue`ï¼ä»¥å `spare-record/index.vue`ï¼ç»´ä¿®æµç¨è¡¥å
便®ä¸º `repair/modules/form.vue`ã |
| | | |
| | | æªå¾ä½äº `scripts/spare-management-20261014/`ï¼`desktop-ledger.png`ã`mobile-records.png`ã`desktop-issue.png`ãå®ä»¬ä½¿ç¨å®é
ç»ä»¶ã模æ APIãå¼¹çª adapter åæå° utility CSSï¼æ¯æå±é¨å¸å±è§å¯ï¼ä¸ä»£è¡¨ç产åºç¨å£³å±ã宿´ Vben å¼¹çªæ ·å¼æçå®å端èè°ãé¢ç¨æªå¾å±ç¤ºå·²å¡«åã䏿å
³éç表åç¶æãç宿éãé®çï¼ç¦ç¹æä½ãæ ¡éªç¶æåæ¢ãéæ©æµ®å±å®ä½ãæäº¤ç»æä¸å¹¶ååºåè¡ä¸ºéå¦è¡éªè¯ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ£æµäººæå¡«ä¸ç»´ä¿®å设å¤åç§°çé |
| | | |
| | | 2026-10-12ï¼è®¡éæ£æµè®°å½çæ£æµäººæ¹ä¸ºææ¬è¾å
¥ï¼æ¯æç³»ç»å¤äººåå§åï¼æå¤100å符ï¼ä¿åæ¶å»é¤é¦å°¾ç©ºæ ¼ï¼å
许æ¸
空ãå表ã详æ
ãExcelåæ¾ç¤ºæå¡«å§åãåå²è®°å½çåç³»ç»ç¨æ·ç¼å·ç»§ç»ä¿çï¼è¯»åæ¶å
¼å®¹åç¨æ·å§åï¼ç¼è¾ä¿åå以æå¡«å§å为åï¼ä¸åå
³èç³»ç»ç¨æ·ã |
| | | |
| | | ç»´ä¿®åæ¤åå端åéäºmachineryNameï¼ä½å端å页VOåMapperæ²¡ææ¥æ¶åä½¿ç¨æ¤æ¡ä»¶ãç°å·²è¡¥é½ï¼ä½¿ç¨åæ°ç»å®çLIKEå¹é
设å¤å°è´¦å½ååç§°ï¼å表å页ä¸å¯¼åºå
±äº«ç鿡件ã空ç½å
³é®è¯ä¸åä¸çéï¼æªå¹é
å°è®¾å¤æ¶è¿åç©ºç»æï¼å¹¶æé¤å·²å é¤è®¾å¤ãç§æ·æ¦æªå¨åæ¶ä½ç¨äºç»´ä¿®åå设å¤åæ¥è¯¢ã |
| | | |
| | | æ°å¢å段è¿ç§»ï¼sql/mysql/mes_dv_metering_check_manual_user_patch.sqlï¼å¯é夿§è¡ï¼åªå¢å check_user_nameï¼ä¿çåè®°å½å人åç¼å·ãæ°å»ºåºåå§åèæ¬ä¹å·²å
嫿¤å段ã2026-10-12已忥æ¬å°localhost:3306/mom-hmåæå®è¿ç¨36.213.150.237:10000/mom-hmï¼å¹¶ç¨æ°è¿æ¥ç¡®è®¤å段已æä¹
åã |
| | | |
| | | éªè¯ï¼5项ä¸é¡¹æµè¯éè¿ï¼å
æ¬çå®H2æ°æ®åºä¸çé¨ååç§°æ¥è¯¢ãå页å导åºãæ å¹é
åå
å«SQLå符çå
³é®è¯ãç§æ·é离ãæå¡«å§åä¿å/æ¸
ç©ºãæ§äººååç§°å
¼å®¹åæ ¡åæ¥æè®¡ç®ãå端ç产æå»ºéè¿ï¼æ¬æ¬¡æ¶åçè®¡éæ£æµåç»´ä¿®é¡µé¢æªåç°ç±»åé误ï¼å
¨é¡¹ç®ç±»åæ£æ¥ä»æåææ å
³éè¯¯ãæªæä½ç宿£æµæç»´ä¿®ä¸å¡è®°å½ã |
| | | |
| | | çææ¹å¼ï¼å叿°çå端并éå¯ï¼åå¸mom-pro2-beforeåç«¯ãæ°æ®åºåæ®µå·²åæ¥ï¼ä¸éè¦æ°å¢èåææéã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è½è管ç |
| | | |
| | | ## èå´ |
| | | |
| | | æ°å¢ä¸çº§èåãè½è管çãï¼ä¸è®¾ãè½èè®°å½ããæ°æ®åæããè½èé¢è¦ããæå¤©æå¨å½å
¥ï¼ç¬ç«ä¸å¡è¡¨ï¼æ 设å¤ãç产工åãé¨é¨ã产åçå¤é®æä¸å¡è°ç¨ãå端å¤ç¨ç°æ MES è¿è¡å®¹å¨åç³»ç»æé/ç§æ·åºç¡è®¾æ½ãé¢è¦ä»
使ç¨ç³»ç»ç®¡çåç¨æ·åç«å
ä¿¡åºç¡æå¡ã |
| | | |
| | | ## å½å
¥ |
| | | |
| | | æ¥æãè½æºï¼æ°´/çµ/è¸æ±½ï¼ã使ç¨åºåã产åç±»å«ãç¨éãç¨éãåä»·ãå½å
¥äººã夿³¨ãæ°´åä½ m³ï¼çµ kWhï¼è¸æ±½ tãåºåä¸ç¨éæ¯æèªç±å¡«åï¼å»ºè®®é¡¹éç¨äºççªãæ»è¡¥ååæµççäº§åºæ¯ï¼å¯æå®é
ååºè°æ´ã产åç±»å«å
å«ççªãæ»è¡¥ååæµãå
¬ç¨è½èãå
¶ä»ãä»
å½ç¨éæ¶åä»·å¡« 0ã |
| | | |
| | | åä¸å¤©å¯å½å
¥å¤ä¸ªåºåãç¨éæç次çè®°å½ï¼è¯·ç»ä¸è®¡éå£å¾ï¼é¿å
åæ¶å½å
¥æ»è¡¨ä¸åè¡¨é æéå¤ç»è®¡ãç¨éç´æ¥å¡«æ¬æ¬¡ç»è®¡ç¨éï¼ä¸å¡«å累计表读æ°ãè´¹ç¨ç±å端æç¨éÃå价计ç®ï¼åèäºå
¥å°åã |
| | | |
| | | ## åæ |
| | | |
| | | ææ¥æåºé´ãè½æºãåºåå
³é®è¯ã产åç±»å«çéï¼æ¯æææ¥/ææ±æ»ï¼æ¯æ¬¡ä¸è¶
è¿ä¸¤å¹´ï¼ãå嫿¾ç¤ºä¸ç§è½æºç¨éï¼è´¹ç¨å¯ä»¥å计ãå¾è¡¨å
å«ç¨éè¶å¿ãè½æºè´¹ç¨å æ¯ãåºåè´¹ç¨ååãè½æºè´¹ç¨è¶å¿ãåºåè´¹ç¨å æ¯ãåç§è½æºåºåç¨éååï¼å
±6å¼ ãåºåè´¹ç¨å æ¯ä¸çå
¶ä»åºååå¹¶æ¾ç¤ºï¼ä¿è¯å æ¯è¦çå
¨é¨åºåãæªå½å
¥æ¥æç空ï¼ä¸è§ä¸ºé¶æ¶èãå é¤æä¿®æ¹è®°å½åï¼éæ°åæå³å¯æ´æ°ç»è®¡ã |
| | | |
| | | å¾è¡¨å³ä¸è§æ¯æä¸è½½PNGå¾çãåææ¥è¡¨å¯¼åºXLSXï¼å
å«ç»è®¡å£å¾ãè½æºæ±æ»ãæ¥æè¶å¿ãåºåæ±æ»4个工ä½è¡¨ï¼ä½¿ç¨æè¿ä¸æ¬¡æååææ¶çç鿡件ãå°è´¦æå½åç鿡件坼åºå
¨é¨è®°å½ï¼ä¸éå½å页ï¼å次æå¤50000æ¡ï¼è¶
åºæ¶éç¼©å°æ¥æèå´ã |
| | | |
| | | ## è½èé¢è¦ |
| | | |
| | | è§åå
æ¬åç§°ãè½æºãç»è®¡ææ ï¼æ¯æ¥ç¨éãæ¯æ¥è´¹ç¨ãæ¯æç¨éãæ¯æè´¹ç¨ï¼ãéå¼ã使ç¨åºåã产åç±»å«ãæ¥æ¶äººåå¯ç¨ç¶æãåºåç空表示å
¨é¨åºåï¼å¦å精确å¹é
ï¼äº§åç±»å«ç空表示å
¨é¨äº§åãç¸å卿ãèå´ç夿¡å°è´¦æ±æ»æ¯è¾ï¼å®é
å¼ä¸¥æ ¼å¤§äºé弿¶è§¦åï¼çäºéå¼ä¸éç¥ãæåº¦æèªç¶æï¼å½æ1æ¥è³ä¸æ1æ¥ä¹åï¼æ±æ»ææå·²å½å
¥æ°æ®ï¼ç´¯è®¡è¶
éå³éç¥ï¼ä¸å¿
çå°æåºã |
| | | |
| | | å°è´¦æ°å¢ãä¿®æ¹ãå é¤æäº¤æååèªå¨æ£æ¥å影忥æåæå±èªç¶æï¼ä¿®æ¹æ¥ææ¶æ£æ¥åæ¥æåæ°æ¥æï¼è·¨ææ¶æ£æ¥ä¸¤ä¸ªèªç¶æãé¢è¦æ£æ¥ä½¿ç¨ç¬ç«äºå¡ï¼éç¥å¼å¸¸ä¸åæ»å·²æäº¤çå°è´¦ãæåç«å
ä¿¡åæåæ¥å¿ä¸åæäº¤ï¼åä¸ç§æ·ãè§åãç»è®¡å¨æãæ¥æ¶äººåªæåéç¥ä¸æ¬¡ï¼è§åè¡éåæ°æ®åºå¯ä¸ç´¢å¼åæ¶ä¿æ¤å¹¶åæ£æ¥ï¼ãæåº¦æ¥å¿ä»¥æé¦æ¥åå¨ï¼ç颿¾ç¤ºå¹´æï¼çéæå¤©æ¶ä¼åæ¶å±ç¤ºè¯¥å¤©åæå±æä»½çéç¥ãéç¥è®°å½ä¿åè§å/éå¼/å®é
å¼å¿«ç
§ï¼å³ä½¿è§åå é¤ä¹ä¿çåå²ã |
| | | |
| | | é
ç½®æ°è§åæä¿®æ¹éå¼åï¼ä½¿ç¨ãæ£æ¥é¢è¦ / éè¯å¤±è´¥éç¥ãæ£æ¥ä»å¤©æå岿¥æãåé失败ä¼çä¸è®°å½ï¼åæ¬¡æ£æ¥è¯¥æ¥ææ¶ä»
éè¯ä»è¶
éçå¤±è´¥æ¥æ¶äººãå·²æåéç¥çå岿¥æä¸ä¼å ç¼è¾è§åæä¿®æ¹å°è´¦èéå¤åéï¼å°è´¦åè½å䏿¤åå·²åéæ¶æ¯ãæ¥æ¶äººå¿
é¡»æ¯å½åç§æ·å¯ç¨çç³»ç»ç¨æ·ãéç¥åºç°å¨å³ä¸è§ç«å
éç¥åãæçç«å
ä¿¡ãï¼éè¿ç³»ç»åææ¥è¯¢å·æ°ã |
| | | |
| | | ç«å
信模æ¿ç¼ç 为 `energy_daily_warning`ï¼æ¯æ¥ï¼å `energy_monthly_warning`ï¼æ¯æï¼ï¼è¯·ä¿ææ¨¡æ¿å¯ç¨ãèæ¬ä¸å建è§åã䏿宿¥æ¶äººãä¸åéä»»ä½éç¥ã馿¬¡ä½¿ç¨è¯·æ ¹æ®ç°åºå®é
ç¨è½è®¾ç½®éå¼ã |
| | | |
| | | ## é¨ç½² |
| | | |
| | | 1. å¨ç®æ MySQL æ°æ®åºä¾æ¬¡æ§è¡ `sql/mysql/energy_management_init.sql`ã`sql/mysql/energy_alert_analysis_upgrade.sql`ã`sql/mysql/energy_menu_patch.sql`ã`sql/mysql/energy_monthly_alert_upgrade.sql`ãå建å°è´¦ãé¢è¦è§ååéç¥åå²è¡¨ãæ¯æ¥/æåº¦éç¥æ¨¡æ¿ãèååè¶
级管çåæéãèåè¡¥é½èæ¬åæ¶æ ¡åç¶åå±çº§ãç»ä»¶è·¯å¾ãå¯ç¨/å¯è§ç¶æãæåº¦è¿ç§»ä¿çå岿¥éç¥å¹¶è°æ´å¨æå»éç´¢å¼ï¼åºå¨å叿°çåç«¯åæ§è¡ãåä¸ªèæ¬åå¯é夿§è¡ï¼ä¸åå
¥ç¤ºä¾ä¸å¡æ°æ®ã |
| | | 2. æå»ºå¹¶éå¯å端ï¼å®ç°ä½äº yudao-module-mesï¼ï¼åå¸ mom-pro2-before å端ã |
| | | 3. éæ°ç»å½å·æ°èåï¼æ®éè§è²å¨è§è²ç®¡çåé
è½èè®°å½æ¥è¯¢ãæ°å¢ãä¿®æ¹ãå é¤ä»¥åæ°æ®åææéãéç³»ç»ç§æ·è¿éå¨å¯¹åºç§æ·å¥é¤ä¸åé
æ°å¢èåã |
| | | |
| | | ## æ¥å£ |
| | | |
| | | `/admin-api/energy/record` ä¸ç `create`ã`update`ã`delete`ã`get`ã`page`ã`analysis`ãåææé为 `energy:analysis:query`ï¼è®°å½æé为 `energy:record:query/create/update/delete`ãä¸å¡è¡¨ `mes_energy_record` æ¯æé»è¾å é¤ãç§æ·é离åå建/ä¿®æ¹å®¡è®¡ã |
| | | |
| | | å¯¼åºæ¥å£ `/admin-api/energy/record/export-excel`ã`analysis-export`ï¼æéåå«ä¸º `energy:record:export`ã`energy:analysis:export`ãé¢è¦æ¥å£ `/admin-api/energy/alert` ä¸ç `page`ã`logs`ã`recipients`ã`create`ã`update`ã`delete`ã`check?date=YYYY-MM-DD`ï¼æé为 `energy:alert:query/create/update/delete/check`ãé¢è¦è§ååéç¥åå²åæç§æ·é离ã |
| | | |
| | | ## éªè¯ï¼2026-10-12ï¼ |
| | | |
| | | - å端ç¼è¯éè¿ï¼`EnergyRecordServiceTest` 7项åå
æµè¯éè¿ã |
| | | - å端ç产æå»ºéè¿ï¼æ°å¢è½èæä»¶æªåç°ç±»åé误ãå
¨é¡¹ç® `vue-tsc` 仿å
¶ä»ç°ææä»¶é误ï¼ä¾å¦éè´ç³è¯·éå¤å段ãé¨å IM 导å
¥è·¯å¾ï¼ï¼æªä¿®æ¹è¿äºæ å
³æä»¶ã |
| | | - 使ç¨ç¬ç«å
忍¡ææ°æ®éªè¯äºå½å
¥ãè´¹ç¨è®¡ç®ãç¼è¾ãå é¤ãè½æºåæ¢ãåºåçéãæææ±æ»ä¸æ æ°æ®æç¤ºï¼å¹¶æ£æ¥æ¡é¢å390pxçªå±å¸å±ãæ¨¡ææ°æ®å临æ¶éªè¯æå¡æªçº³å
¥äº¤ä»ã |
| | | - 2026-10-12 å·²å¨å½åå端é
ç½®ç `mom-hm` æ°æ®åºå建å°è´¦è¡¨å6个èå/æé®èç¹ï¼å¹¶ä¸ºç°æè¶
级管çåï¼role_id=1ï¼åé
æéãèåç¼å·ä¸º1075425è³1075430ï¼æ°æ®åºåæ¥ç¡®è®¤åå·²å¯ç¨ãéæ°ç»å½å·æ°å端èåãå
¶ä»é¨ç½²æ°æ®åºä»éæ§è¡åå§åèæ¬ï¼å°æªå®æå®é
ä¸å¡æ¥å£èè°ã |
| | | - 2026-10-12 å·²æç¨æ·è¦æ±å°åä¸åå§åSQLåæ¥å° `36.213.150.237:10000` ç `mom-hm` æ°æ®åºï¼å建17åæ®µå°è´¦è¡¨ã6个èå/æé®èç¹å6æ¡è¶
级管çåææãå·²éè¿æ°è¿æ¥åæ¥æäº¤ç»æï¼æªå¯¼å
¥ä¸å¡æ°æ®ï¼è¿æ¥å¯ç æªä¿åå°é¡¹ç®æä»¶ã |
| | | - 2026-10-12 é¢è¦å级SQL已忥å°åä¸è¿ç¨ `mom-hm`ï¼æ°è¿æ¥åæ¥ç¡®è®¤æ°å¢2å¼ è¡¨ã1个已å¯ç¨éç¥æ¨¡æ¿ã7个èå/æé®èç¹å7æ¡è¶
级管çåææï¼é¢è¦è§å0æ¡ï¼æªåçå®ç¨æ·åéæµè¯éç¥ã代ç å°éåå¸ååç«¯å¹¶éæ°ç»å½ã |
| | | - é¢è¦è¾¹çãå»éã失败éè¯ãåä¸ªæ¥æ¶äººå¤±è´¥ãåç¨è§åãSQLåæ°ç»å®åå®é
Excelå·¥ä½ç°¿å
容已éè¿èªå¨åéªè¯ï¼æ¬å°æ¨¡æé¡µé¢éªè¯äºè§åæ°å¢ãé弿¾ç¤ºãæ¥æ¶äººéæ©ãæ£æ¥éç¥è®°å½åé夿£æ¥ï¼ä»¥å6å¼ å¾è¡¨ççªå±æ¸²æãæªè¿æ¥è¿ç¨ä¸å¡APIè¿è¡éç¥èè°ã |
| | | - æ¬æ¬¡æç»å端è½èä¸é¡¹æµè¯17项éè¿ï¼å端ç产æå»ºéè¿ãå
¨é¡¹ç®ç±»åæ£æ¥ä»åå¨å·²ææ å
³é误ï¼è½èç®å½æªåç°ç±»åé误ã |
| | | - 2026-10-12 已补é½å½åæ¬å° `localhost:3306/mom-hm` çé¢è¦å级ä¸èåï¼å¹¶å `36.213.150.237:10000/mom-hm` 忥宿´èåä¿®å¤ãåå«ä½¿ç¨æ°è¿æ¥åæ¥ï¼å为1个ç®å½ã3个页é¢ã9个æé®ï¼å
±13个å¯ç¨ä¸å¯è§èç¹ï¼ï¼è¶
级管çååæ13项èåææã管çåéæ°ç»å½å³å¯æå宿´èåï¼æ®éè§è²ä»æéåé
æéã |
| | | - 2026-10-12 æ°å¢æ¯æç¨é/è´¹ç¨ææ ï¼ä¸é¡¹æµè¯å
±19项éè¿ï¼å端ç产æå»ºéè¿ï¼è½èç®å½æ ç±»åé误ãæåº¦è¿ç§»å·²åæ¥æ¬å°åæå®è¿ç¨mom-hmï¼æ°è¿æ¥åæ¥ç¡®è®¤å¨æå段é»è®¤DAYãæ°å¨æå»éç´¢å¼åå¯ç¨çæåº¦éç¥æ¨¡æ¿ãæªåéç宿µè¯éç¥ãåå¸åå端åå¯éç¨æ°å¢æåº¦ææ ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 设å¤å¤ä»¶ç®¡ç |
| | | |
| | | ## åè½ä¸æµç¨ |
| | | |
| | | 设å¤ç®¡ç䏿°å¢âå¤ä»¶å°è´¦âåâé¢ç¨è®°å½âãå¤ä»¶å°è´¦ç»´æ¤ç¼ç ãåç§°ãè§æ ¼åå·ã计éåä½ãåæ¾ä½ç½®ãå®å
¨åºååå¯åç¶æï¼ä½äºå®å
¨åºåæ¶æç¤ºä¸è¶³ï¼å¹¶æ¯æçéã |
| | | |
| | | 馿¬¡ç»è®°å¯å¡«ååå§åºåï¼ç³»ç»ä¿çåå§åºåæµæ°´ãåç»è¡¥è´§ä½¿ç¨âå
¥åºâï¼å¡«åæ¥æºæåæ®ç¼å·ãæ¤åè½ä½¿ç¨ç¬ç«ç设å¤å¤ä»¶åºåï¼ä¸ä¸ç°æç©æä»åºåºåé夿£åã |
| | | |
| | | æ°å¢ç»´ä¿®ååå
ä¿åï¼åå¼¹çªç»§ç»æå¼ï¼å¯å¨âå¤ä»¶é¢ç¨è®°å½âä¸ç¹å»âé¢ç¨å¤ä»¶âãè稿åç»´ä¿®ä¸åå
许é¢ç¨ï¼å¾
éªæ¶åå·²ç¡®è®¤ç¶æä¸è½ç»§ç»é¢ç¨ãç»´ä¿®åãå¤ä»¶ãé¢ç¨äººãæ°éåæä½è¯´æå¿
å¡«ãä¹å¯ä»å¤ä»¶å°è´¦é¢ç¨å¹¶éæ©ç»´ä¿®åã |
| | | |
| | | é¢ç¨ç«å³æ£ååºåï¼è®°å½å¤ä»¶ãç»´ä¿®åã设å¤åé¢ç¨äººçå¿«ç
§ãæªä½¿ç¨çå¤ä»¶å¯ä»åé¢ç¨è®°å½éåï¼æ¯æå次éåï¼ç´¯è®¡éåä¸è½è¶
è¿åé¢ç¨æ°éãç»´ä¿®ç»ææå¤ä»¶åç¨åä»å¯éåã |
| | | |
| | | ## åºåå追溯ä¿é |
| | | |
| | | - æ°éå¿
须大äºé¶ï¼æå¤ä¸ä½å°æ°ãåºåä¸è¶³æ¶é»æ¢é¢ç¨ã |
| | | - åºå忴䏿µæ°´åå
¥å¨åä¸äºå¡ä¸å®æï¼å¤±è´¥åæ»ã |
| | | - å¤ä»¶è¡é鲿¢å¹¶åè¶
é¢ï¼åé¢ç¨è®°å½è¡é鲿¢å¹¶åè¶
éã |
| | | - 请æ±é®å¯ä¸ï¼å请æ±éè¯ä¸ä¼éå¤åæ´åºåãç¸å请æ±é®å¯¹åºä¸ååæ°ä¼è¢«æç»ã |
| | | - ä¿®æ¹å¤ä»¶èµæä¸è½ç´æ¥ä¿®æ¹åºåãå·²ææµæ°´çå¤ä»¶ä¸è½ä¿®æ¹è®¡éåä½ã |
| | | - æåºåææµæ°´çå¤ä»¶ä¸è½å é¤ï¼å¯åç¨ãæå¤ä»¶æµæ°´çç»´ä¿®åä¸è½å é¤ãæ´æ¢è®¾å¤æä¿®æ¹ç¼ç ã |
| | | - æµæ°´æä¾æ¥è¯¢ï¼ä¸æä¾ä¿®æ¹åå 餿¥å£ã |
| | | |
| | | ## æ°æ®åºãèå䏿é |
| | | |
| | | åå§åèæ¬ï¼`sql/mysql/mes_dv_spare_init.sql`ãæ°å¢ `mes_dv_spare_part`ã`mes_dv_spare_movement` ä¸¤å¼ è¡¨ãèåç»ä»¶ä¸º `mes/dv/spare/index`ã`mes/dv/spare-record/index`ï¼æå¨ç°æç»´ä¿®åå级ç设å¤ç®¡çä¸ã |
| | | |
| | | ç§åæ°æ®èæ¬ï¼`sql/mysql/mes_dv_spare_seed.sql`ï¼å¹çï¼å¯éè·ï¼ãç»è®° 12 æ¡å¸¸è§è®¾å¤å¤ä»¶å°è´¦ï¼å¹¶ä¸ºæ¯æ¡è¡¥ä¸æ¡ `type=1` åå§åºåæµæ°´ï¼ä¿è¯ `stock_quantity` 䏿µæ°´ååæ°éä¸è´ï¼ä¸å«é¢ç¨/éåæµæ°´ã |
| | | |
| | | ååºç°ç¶ï¼ |
| | | |
| | | | åº | 表 | èå/æéèç¹ | å¤ä»¶å°è´¦ | æµæ°´ | |
| | | |----|----|---------------|----------|------| |
| | | | æ¬å°å®¹å¨ `mom-thzy` | 已建 | 8 个ï¼1065225-1065232ï¼ | 0 æ¡ | 0 æ¡ | |
| | | | è¿ç«¯ `mom-hm` | 已建 | 8 个ï¼1075494-1075501ï¼ | 12 æ¡ | 12 æ¡ | |
| | | |
| | | æ®éè§è²ææå°æªæ§è¡ï¼èæ¬ä¸æ¹éæäºç°æè§è²æéãè¿ç«¯ `mom-hm` 䏿®éè§è²å æ¤çä¸å°å¤ä»¶å°è´¦ï¼éå¨è§è²ç®¡çéå¾éï¼è¶
管ä¸åå½±åã |
| | | |
| | | æéï¼`mes:dv-spare:query`ã`record`ã`create`ã`update`ã`delete`ã`receive`ã`issue`ã`return`ãå¨ç»´ä¿®åå
æ¥çè®°å½é recordï¼é¢ç¨é issueï¼ä¸å¤ä»¶éæ©ä¾èµ queryï¼äººååç»´ä¿®åéæ©æ²¿ç¨ç³»ç»ç°ææ¥è¯¢æéãæ®éè§è²éè¿è§è²ç®¡çæç¡®å¾é对åºåè½ã |
| | | |
| | | ä¸çº¿éåæ¶æ´æ°åå端ï¼å·æ°èå/è§è²ç¼åæéæ°ç»å½ãä»
è¿è¡æ§çæ¬åºç¨ä¸ä¼å
·å¤æ°å¢æ¥å£å页é¢ã |
| | | |
| | | ## éªè¯èå´ |
| | | |
| | | 2026-10-14ï¼å端ç¼è¯éè¿ï¼10 项ä¸é¡¹æµè¯éè¿ï¼ä½¿ç¨ H2 åçå® Spring äºå¡éªè¯åºååæ´ãåæ»ãå¹¶åé¢ç¨/éåãéå¤è¯·æ±ãåç¨éå¶ãåä½ä¿æ¤ä¸åå²ä¿æ¤ãå端 9 项éªè¯éè¿ï¼ä½¿ç¨å®é
Vue/Ant Design ç»ä»¶ä¸æ¨¡æ APIãæ¨¡æéé
å¨éªè¯å¿
å¡«ãåºåä¸éãéåä¸éãæ§è¡éå®ãéè¯è¯·æ±é®åæ¡é¢/çªå±å±ç¤ºã |
| | | |
| | | æ°å¢å¤ä»¶é¡µé¢ä¸ç»´ä¿®åæ¥å
¥æªåºç°ç±»åæ£æ¥é误ï¼é¡¹ç®å
¨éç±»åæ£æ¥ä»åå¨å
¶ä»æ¢æéè¯¯ãæªå¾ä½¿ç¨æ¨¡ææ°æ®åå°éå®¿ä¸»æ ·å¼ï¼ä¸ä»£è¡¨ç产 Vben 模æç¦ç¹ãåºç¨å¤å£³æçå®ç¯å¢ç«¯å°ç«¯éªè¯ãæ²¡ææ§è¡å®é
å¤ä»¶é¢ç¨ã |
| | | |
| | | éªè¯èæ¬ï¼`mom-pro2-before/scripts/spare-management-qa.mjs`ï¼ç»æä¸æªå¾ï¼`scripts/spare-management-20261014/`ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # éåºç»å½ç«å³çæ |
| | | |
| | | åéåºæµç¨å
çå¾
æå¡å¨æ³¨é请æ±ï¼æå¤çå¾
é»è®¤ 30 ç§ï¼ææ¸
çæ¬å°ç¶æå跳转ãæå¡å¨æ
¢æä¸è¿åæ¶ï¼ç¨æ·ä¼è§å¾ç¹å»éåºæ²¡æååºã |
| | | |
| | | ç°å¨ä½¿ç¨éåºåç令çãç§æ·åå½åè·¯ç±å¿«ç
§åèµ·åå°æ³¨éï¼æ¬å°ä¸çå¾
该请æ±ï¼ç«å³éç½®ä¸å¡ç¶æï¼æç¡®é置访é®ä»¤çãå·æ°ä»¤çãç¨æ·ä¸æéç¶æï¼å¹¶è·³è½¬ç»å½é¡µãåä¸è½®éåºåå¹¶å¹¶åè°ç¨ã |
| | | |
| | | ç»å½ä¸ç¨æ·ä¿¡æ¯è¯·æ±æ£æ¥ä¼è¯çæ¬ï¼éåºåçæå°ç»æä¸åæ¢å¤ä»¤çãæéæè§¦åç»å½æå跳转ã令çå·æ°æ£æ¥åå·æ°ä»¤çæ¯å¦ä»å±äºå½åä¼è¯ï¼æ§è¯·æ±ç 401 ä¸ä¼æ¸
é¤å·²åæ¢çæ°ä¼è¯ãå·æ°å¤±è´¥æ¶ï¼çå¾
éå伿¶å°å¤±è´¥ï¼è䏿¯ç¨ç©ºä»¤çéæ¾æ§è¯·æ±ã |
| | | |
| | | æå¡å¨æ³¨éå æç½å¤±è´¥æ¶æ æ³ä¿è¯ç«å³æ¤éæå¡å¨ä»¤çï¼ä½æ¬æºå·²éåºï¼æ²¡ææ§è¡çå®ç¨æ·çç»å½ææ³¨éãæ²¡æä½¿ç¨æ´é¡µå·æ°è§é¿è·¯ç±é®é¢ã |
| | | |
| | | 2026-10-15 éªè¯ï¼ |
| | | |
| | | - `mom-pro2-before/scripts/check-logout.cjs`ï¼å®é
ç¶ææ¨¡åä¸åæ§æ¥å£ï¼è¦çæåã失败ãæç»æèµ·ãä¸å¡éç½®å¼å¸¸ãæå°ç»å½ãæå°ç¨æ·ä¿¡æ¯ãæå°å·æ°ãæ§ä¼è¯ 401ãç§æ·å¿«ç
§åå·æ°å¤±è´¥éåã |
| | | - `mom-pro2-before/scripts/check-logout-browser.cjs`ï¼çå®åºç¨ç头åèåãéåºç¡®è®¤å¼¹çªãç¶ææ¨¡ååè·¯ç±ï¼å端ä¸ä¼è¯å模æã确认å约 338 æ¯«ç§æ¾ç¤ºç»å½é¡µï¼æ¤æ¶æå¡å¨æ³¨éä»ä¿ææªè¿åï¼ä»¤çåç¨æ·ä¿¡æ¯ä¸ºç©ºï¼æ³¨éè¯·æ±æºå¸¦å令çï¼æµè§å¨æ æªæè·é误ã |
| | | - ç»æï¼`scripts/logout-fix-20261015/browser-result.json`ã |
| | | - æ¬æ¬¡ä¿®æ¹æä»¶æ²¡æåç«¯ç±»åæ¥éï¼å
¨éç±»åæ£æ¥ä»æé¡¹ç®å
¶ä»æ¢æé误ã |
| | | |
| | | æ´æ°å端å³å¯çæï¼æ éæ°æ®åºè¿ç§»æå端æ¥å£è°æ´ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # èµæå®¡æ ¸å表æ¾ç¤ºå¯¹åºæä»¶ï¼å端èè°æ¹æ¡ï¼ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | | é¡µé¢ | è·¯ç± | 说æ | |
| | | |------|------|------| |
| | | | 项ç®è¯¦æ
- èµæå®¡æ ¸ Tab | `/mes/pd/project/detail/{id}?tab=audit` | éæ°å¢ãæä»¶ãå | |
| | | |
| | | ## éæ± |
| | | |
| | | å®¡æ ¸äººå¨ãèµæå®¡æ ¸ãå表ä¸éè¦ç´æ¥çå°å¹¶æå¼è¢«å®¡æ ¸èµæå¯¹åºçæä»¶ï¼ç¨äºå®¡æ ¸åæ¥é
ãå½ååè¡¨åªæå®¡æ ¸åå·ãèµæåç§°ãçæ¬ãå®¡æ ¸ç¶æçï¼æ²¡ææä»¶å
¥å£ã |
| | | |
| | | ## æ°æ®æ¥æºä¸å
³èå
³ç³» |
| | | |
| | | å®¡æ ¸è®°å½ï¼`mes_pd_document_audit`ï¼æ¬èº«ä¸åæä»¶ï¼æä»¶æå¨ãè®¾è®¡èµæãä¸ï¼å
³èé¾è·¯å¦ä¸ï¼ |
| | | |
| | | ``` |
| | | mes_pd_document_audit.document_id |
| | | âââ> mes_pd_document.id ï¼è®¾è®¡èµæï¼ |
| | | âââ> system_storage_attachmentï¼recordType = mes_pd_document, recordId = è®¾è®¡èµæ IDï¼ |
| | | âââ> æä»¶å°å / æä»¶å |
| | | ``` |
| | | |
| | | æä»¶ä»ç¶èµ° system 模åç Storage Attachment æºå¶ï¼æªå¨ä¸å¡è¡¨æ°å¢ä»»ä½æä»¶å°ååã |
| | | |
| | | ## API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | `/mes/pd/document-audit/page` | èµæå®¡æ ¸å页ï¼ååºæ°å¢åæ®µï¼ | |
| | | | GET | `/mes/pd/document-audit/get` | èµæå®¡æ ¸è¯¦æ
ï¼ååºæ°å¢åæ®µï¼ | |
| | | |
| | | **请æ±åæ°ï¼** æ åæ´ã |
| | | |
| | | **ååºå段æ°å¢ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | fileName | String | èµææä»¶åï¼åè¯¥èµæç¬¬ä¸ä¸ªéä»¶çåç§°ï¼æ éä»¶æ¶ä¸º null | |
| | | | fileUrl | String | èµææä»¶å°åï¼åè¯¥èµæç¬¬ä¸ä¸ªéä»¶çå¯è®¿é® URLï¼æ éä»¶æ¶ä¸º null | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "list": [ |
| | | { |
| | | "id": 3023, |
| | | "auditNo": "AUD2024001", |
| | | "documentId": 1017, |
| | | "documentName": "产å设计å¾", |
| | | "documentVersion": "V1.0", |
| | | "fileName": "design_v1.pdf", |
| | | "fileUrl": "https://xxx/design_v1.pdf", |
| | | "auditStatus": 0, |
| | | "remark": null, |
| | | "createTime": "2026-10-15 02:26:28" |
| | | } |
| | | ], |
| | | "total": 1 |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## å端修æ¹ç¹ |
| | | |
| | | éè¦æ¹å¨çæä»¶ï¼ |
| | | |
| | | | æä»¶ | æ¹å¨ | |
| | | |------|------| |
| | | | `src/api/mes/pd/document-audit/index.ts` | `MesPdDocumentAuditApi.DocumentAudit` æ¥å£è¡¥ `fileName`ã`fileUrl` 两个å¯éåæ®µ | |
| | | | `src/views/mes/pd/project/modules/document-audit-list.vue` | grid åå¢å ãæä»¶ãåï¼`slots.default = 'file'`ï¼ï¼å¹¶å¨æ¨¡æ¿ä¸å¢å 对åºå
·åææ§½ | |
| | | |
| | | ãæä»¶ãåçæ¸²æè§åä¸ãè®¾è®¡èµæãå表ï¼`document-list.vue` ç `#file` ææ§½ï¼ä¿æå®å
¨ä¸è´ï¼å¯ç´æ¥å¤ç¨åä¸åæ³ã |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | fileUrl | å表ãæä»¶ãå | æå¼æ¶æ¸²æä¸ºå¯ç¹å»é¾æ¥ï¼æ°çªå£æå¼ | |
| | | | fileName | å表ãæä»¶ãå | ä½ä¸ºé¾æ¥ææ¡ï¼ä¸ºç©ºæ¶åéä¸ºãæ¥çæä»¶ã | |
| | | |
| | | 建议å宽 `minWidth: 140`ï¼ä½ç½®æ¾å¨ãèµæçæ¬ãä¹åã |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | èµææå¤ä¸ªéä»¶ | åªå第ä¸ä¸ªéä»¶çå°åä¸åç§°ï¼ä¸è®¾è®¡èµæå表å£å¾ä¸è´ï¼ | |
| | | | èµææ éä»¶ | `fileUrl` / `fileName` å为 nullï¼åå
æ¾ç¤º `-`ï¼ä¸æ¸²æé¾æ¥ | |
| | | | å®¡æ ¸è®°å½å·²å é¤èµæ | `documentId` æ¥ä¸å°éä»¶ï¼åæ ·æ¾ç¤º `-` | |
| | | | æªé
ç½®åå¨ / é件读å失败 | åç«¯ä¸æå¼å¸¸ï¼å段ç空ï¼å表ç
§å¸¸è¿å | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - æ¬æ¬¡ä¸º**纯æ°å¢å段**ï¼èå端ä¸å级ä¹ä¸ä¼æ¥éã |
| | | - `fileUrl` ç±åç«¯æ¼æ¥ï¼å端**ä¸è¦**ååç¬è°ç¨ `/system/storage-attachment/list`ï¼é¿å
æ¯è¡ä¸æ¬¡é¢å¤è¯·æ±ã |
| | | - å¯¼åº Excel `/mes/pd/document-audit/export-excel` 忥æ°å¢äºãæä»¶ãåï¼å
容为æä»¶åï¼ï¼æ éå端æ¹å¨ã |
| | | |
| | | ## ç¸å
³ä½ç¬ç«çé®é¢ï¼å®¡æ ¸ç»æå段被éè |
| | | |
| | | **é®é¢**ï¼**èªå¨å®¡æ¹æ¨¡å¼**ä¸ï¼`document-audit-form.vue` ä¸ãå®¡æ ¸ç»æãåæ®µï¼å `fieldName = 'auditStatus'`ï¼è¢« `src/adapter/form.ts` çèªå¨å®¡æ¹åæ®µè¿æ»¤é»è¾ï¼`isAuditField` å½ä¸ `auditStatus` æ£åï¼æ´æ¡ä»è¡¨å schema ä¸ç§»é¤ï¼å¯¼è´ï¼ |
| | | 1. å®¡æ ¸äººçä¸å°ã乿 æ³éæ©ãå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ãï¼ |
| | | 2. æäº¤æ¶ `auditStatus` 缺çï¼å端æç®±äº§ç NPEã |
| | | |
| | | **已修å¤**ï¼å端 + å端两侧ï¼ï¼ |
| | | |
| | | | ä¾§ | æ¹å¨ | |
| | | |----|------| |
| | | | å端 `document-audit-form.vue` | åæ®µå `auditStatus` â `auditResult`ï¼é¿å¼ `isAuditField` æ£åï¼ï¼æäº¤æ¶æ å°å `auditStatus`ï¼è¡¨åæå¼æ¶æ¾å¼æ¸
空 `auditResult` | |
| | | | å端 `MesPdDocumentAuditServiceImpl#updateDocumentAudit` | `auditStatus` ä¸ºç©ºæ¶æ `PD_DOCUMENT_AUDIT_STATUS_REQUIRED`ï¼ãå®¡æ ¸ç»æä¸è½ä¸ºç©ºï¼è¯·éæ©ãå®¡æ ¸éè¿ãæãå®¡æ ¸ä¸éè¿ãåéæ°æäº¤ãï¼ï¼é 1/2 æ `PD_DOCUMENT_AUDIT_STATUS_INVALID`ï¼å®¡æ ¸äººãå®¡æ ¸æ¶é´ç»ä¸ç±åç«¯è®°å½ | |
| | | |
| | | **注æ**ï¼å
¶ä»è¡¨åè¥åºç°åå `auditStatus` / `auditTime` / `approvalStatus` çåæ®µï¼åæ ·ä¼è¢«èªå¨å®¡æ¹æ¨¡å¼è¿æ»¤ï¼éé䏿 ¸æ¥ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产ä¸é®æäº§ |
| | | |
| | | ## ä½¿ç¨æµç¨ |
| | | |
| | | å¨ç产æäº§ä¸å¾éä¸ä¸ªæå¤ä¸ªå·²ç¡®è®¤ãèªè¡ç产ä¸å°æªææ»¡çå·¥åï¼ç¹å»âä¸é®æäº§âãå个工åä¹å¯ä»è¡å
æé®æå·¥åä¸å¿è¿å
¥ã |
| | | |
| | | éæ©ææ©å¼å·¥æ¶é´åçæç»ä¸é¢è§ãæ ¸å¯¹å·¥åæ ¡éªç»æãå·¥ä½ç«ã设å¤ãæ°éåèµ·æ¢æ¶é´ï¼å¦æé¢è®¡è¶
è¿äº¤æï¼å¿
é¡»å¾éæ¥åå»¶æåæè½ç¡®è®¤ãä»»ä¸å·¥åæ ¡éªå¤±è´¥ï¼æ´æ¹ä¸è½æäº¤ã |
| | | |
| | | ## 计ç®ä¸æ ¡éªè§å |
| | | |
| | | - æå京æ¶é´æ¯æ¥ 09:00â18:00 æçï¼è·³è¿ææå
ãæææ¥åç³»ç»è忥é
ç½®ä¸ç伿¯æ¥ã卿«å³ä½¿é
ç½®è°ä¼ä¸çä¹ä¸å®æç产ï¼ç¬¦åæ¬æ¬¡åä¼è¦æ±ãè·¨æ¥ä»»å¡åªç´¯è®¡å·¥ä½æ¶æ®µï¼è®¡åèµ·æ¢æ¶é´ä¹é´å¯è½å
å«ä¼æ¯æ¶é´ã |
| | | - ä¼å
æäº¤æãå·¥åç¼å·å¯¹åºçç¨³å® ID 顺åºå®æï¼åæ¹åå·¥åå
äºç¶å·¥åãå°æªå®æä¸æªçº³å
¥æ¬æ¹çåå·¥åä¼é»æ¢ç¶å·¥åæäº§ã |
| | | - 使ç¨å·¥åå·¥åºé
ç½®ï¼ç¼ºçæ¶ä½¿ç¨äº§åå·¥èºè·¯çº¿ï¼éµå®å·¥åºå
åãå夿¶é´åçå¾
æ¶é´ã |
| | | - æ ¹æ®å¯ç¨è®¾å¤ç产è½åæç计ç®å·¥æ¶ï¼å¹¶éæ©é¢è®¡å®æææ©çå·¥ä½ç«ï¼ç»´æ¤ä¸ç设å¤ä¸è®¡å
¥å¯ç¨äº§è½ãåä¸å·¥ä½ç«åä¸åå·¥ä½ç«å
±äº«è®¾å¤åæ£æ¥å ç¨ã |
| | | - 缺å°è·¯çº¿ãå·¥åºãå¯ç¨è®¾å¤ãæ£æ°äº§è½ãææäº§åºç©ææææåæ°æ¨¡æ¿ï¼ä»¥åå卿ªç¥å ç¨æå·²é¾ææªç»æä»»å¡æ¶ï¼æç¡®æç¤ºãå¤äº§åºç©æå·¥åºééè¿æå·¥æäº§å¤çã |
| | | - åå·¥åºæå·¥åæ»æ°éåå»å·²æææä»»å¡æ°éè¡¥æï¼å·²å®æä»»å¡è®¡å
¥ç´¯è®¡æ°éï¼å·²åæ¶ä»»å¡ä¸è®¡å
¥ï¼è¶
éæåå²ä»»å¡æ°éæ ææ¶é»æ¢æäº¤ã |
| | | - æ¯æ¹æå¤ 30 个工åã200 个æ°å¢ä»»å¡ï¼æ¥æ¾æ¶é´çªå£æå¤ä¸å¹´ã |
| | | |
| | | ## æäº¤ä¿é |
| | | |
| | | é¢è§æææä¸º 15 åéã确认æ¶å¨äºå¡ä¸éå®æäº§èµæºä¸æéå·¥åï¼éæ°è®¡ç®å¹¶æ ¸å¯¹é¢è§æè¦ï¼å·¥åãæ¥åãé
ç½®æèµæºåå导è´ç»æååæ¶ï¼è¦æ±éæ°é¢è§ã计åå¼å·¥æ¶é´å·²è¿å»ä¹å¿
é¡»éç®ã |
| | | |
| | | æ´æ¹ä»»å¡å建åå·¥åæäº§æ°éæ´æ°å¨åä¸äºå¡å
宿ï¼ä»»ä¸æ¥å¤±è´¥å
¨é¨åæ»ãé夿并åæäº¤ç»éç®åæ°éæ ¡éªé»æ¢éå¤ææ»¡ï¼æ²¡ææä¹
åç请æ±åæ§ï¼ç½ç»ä¸æååºå·æ°å·¥åç¡®è®¤ç»æåæä½ã任塿°å¢ãä¿®æ¹ãå é¤ä¼åæ¥éç®å·¥å累计æäº§æ°éï¼ä¾¿äºåç»è¡¥æã |
| | | |
| | | ## æ¥å£ä¸ä¸çº¿ |
| | | |
| | | - `POST /mes/pro/task/auto-schedule/preview`ï¼çæé¢è§ã |
| | | - `POST /mes/pro/task/auto-schedule`ï¼ç¡®è®¤æ§è¡ï¼éè¦é¢è§æ¶é´ãæè¦åå»¶æç¡®è®¤æ è¯ã |
| | | - 两个æ¥å£åè¦æ± `mes:pro-task:create`ï¼å¹¶æ ¸å¯¹å®¢æ·æ°æ®æéã |
| | | - æ¬åè½æªæ°å¢æ°æ®åºå段ãéåæ¶é¨ç½²å端åå端ï¼å¹¶é
ç½®ç°æå·¥èºè·¯çº¿ãå·¥ä½ç«è®¾å¤ã产è½åè忥æ¥åã |
| | | |
| | | ## éªè¯è®°å½ |
| | | |
| | | 2026-10-14ï¼å端ä¸é¡¹æµè¯ 30 项éè¿ï¼å
å«å·¥ä½æ¥åã设å¤å²çªãè¡¥æãååå·¥åºãæéãé¢è§å¤±æãéå¤åå¹¶åæäº¤ãäºå¡å¤±è´¥åæ»ãå®é
Vue ç»ä»¶ä¸ Ant Design æ§ä»¶äº¤äºéªè¯ 7 项éè¿ï¼è¦ç忬¡é¢è§ã忴失æãæ§è¡éå®ãé
ç½®é误ãå»¶æç¡®è®¤åæäº¤å¤±è´¥æ¢å¤ï¼æ¡é¢åçªå±çé¢ç»è¿æªå¾å®¡é
ã |
| | | |
| | | ç»ä»¶éªè¯ä½¿ç¨æ¨¡æ API 忍¡æéé
å¨ï¼æªæä½çå®ç产任å¡ï¼å°æªéªè¯ç产 Vben 容å¨ä¸çç¦ç¹è¡ä¸ºåçå®ç¯å¢ç«¯å°ç«¯æµç¨ã项ç®å
¨éåç«¯ç±»åæ£æ¥ä»å卿¢æéè¯¯ï¼æ¬æ¬¡æ°å¢æäº§ç»ä»¶åæäº§å
¥å£æªæ¥åç±»åé误ã |
| | | |
| | | ç»ä»¶éªè¯ç»æåæªå¾ä½äº `scripts/one-click-schedule-20261014/`ï¼å¤ç°èæ¬ä¸º `mom-pro2-before/scripts/one-click-schedule-qa.mjs`ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¨æ£ææ ç»æï¼æ£æµç»æï¼ç©æ SN åæ®µç§»é¤ - å端èè°æ¹æ¡ |
| | | |
| | | ## èæ¯ |
| | | |
| | | æ£éªææ ç»æï¼æ£æµç»æï¼ä¸çãç©èµSNãåæ®µä¸åéè¦ï¼åå端ä¸å¹¶ç§»é¤ãæ°æ®åºå `mes_qc_indicator_result.sn` ä¿çï¼ä¸å读åï¼ï¼é¿å
å岿°æ®ä¸¢å¤±ï¼åç»å¦éå¯åå¯ç¨ã |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - è´¨æ£ç®¡ç â æ£éªç»æï¼æ£æµç»æï¼å表页 |
| | | - è´¨æ£ç®¡ç â æ£éªç»ææ°å¢/ç¼è¾/详æ
å¼¹çª |
| | | |
| | | ## API |
| | | |
| | | æ¥å£æªæ°å¢/å é¤ï¼ä»
请æ±ä¸ååºç»æç§»é¤ `sn` åæ®µã |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /mes/qc/indicator-result/create | æ°å¢æ£éªç»æ | |
| | | | PUT | /mes/qc/indicator-result/update | ä¿®æ¹æ£éªç»æ | |
| | | | DELETE | /mes/qc/indicator-result/delete | å 餿£éªç»æ | |
| | | | GET | /mes/qc/indicator-result/get-detail | æ¥è¯¢æ£éªç»ææç» | |
| | | | GET | /mes/qc/indicator-result/page | æ£éªç»æå页æ¥è¯¢ | |
| | | |
| | | ## åæ®µåæ´ |
| | | |
| | | | åæ®µ | ä½ç½® | åæ´å | åæ´å | |
| | | |------|------|--------|--------| |
| | | | sn | 请æ±ä½ï¼create/updateï¼ | ç©èµSNï¼å符串 | 已移é¤ï¼å端ä¸åæäº¤ | |
| | | | sn | ååºä½ï¼get-detail/pageï¼ | ç©èµSNï¼å符串 | 已移é¤ï¼å端ä¸åè¿å | |
| | | |
| | | **ååºç¤ºä¾ï¼get-detailï¼ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "id": 1, |
| | | "code": "SPL-001", |
| | | "qcId": 1, |
| | | "qcType": 1, |
| | | "remark": "æ ", |
| | | "items": [ |
| | | { "indicatorId": 1, "value": "3.14", "remark": "æ " } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## å端修æ¹ç¹ |
| | | |
| | | | æä»¶ | ä½ç½® | 说æ | |
| | | |------|------|------| |
| | | | src/views/mes/qc/indicatorresult/components/data.ts | 表å schema | ç§»é¤ãç©èµ SNã表å项 | |
| | | | src/views/mes/qc/indicatorresult/components/data.ts | è¡¨æ ¼åå®ä¹ | ç§»é¤ãç©èµSNãå | |
| | | | src/views/mes/qc/indicatorresult/components/form.vue | 详æ
åå¡« | ç§»é¤ `sn` åå¡«èµå¼ | |
| | | | src/api/mes/qc/indicatorresult/index.ts | æ¥å£ç±»å | ç§»é¤ `sn` åæ®µå£°æ | |
| | | |
| | | > ä¸è¿°å端æ¹å¨å·²åæ¥å®æã |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - æ°æ®åºå `mes_qc_indicator_result.sn` **ä¿ç**ï¼å端 DO/VO å·²ä¸åæ å°è¯¥åï¼å岿°æ®ä¸åå½±åã |
| | | - åç«¯å¦æå
¶å®é¡µé¢å¼ç¨è¯¥å段ï¼å¦å¯¼åºãæå°æ¨¡æ¿ï¼ï¼éä¸å¹¶æ¸
çã |
| | | - å端 AI è¾
å©å¤å®ï¼`MesQcAiServiceImpl`ï¼å·²åæ¥ç§»é¤ SN å
¥åï¼AI å¤å®é»è¾ä¸åå½±åã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 追溯ç½åå®ä½ææå
¥å£ |
| | | |
| | | æ§è¿½æº¯é¡µçâ追溯ç½åâæå仿¾ç¤ºæ ç¾å°å·æç¨ç `mes.trace-base-url`ï¼ç¹å»åè¿å
¥åç®å½ç `trace-location.html?code=...`ãææé¡µä»¥å追溯页çåç页é¢ä¸ºèæ¯ãç¨æ·ä¸»å¨ç¹å»âå¼å¯å®ä½å¹¶ç»§ç»âï¼åªææµè§å¨è¿åå½åä½ç½®ã䏿å¡ç«¯æåä¿åè®°å½åæå¨æ°ç½å䏿¾ç¤ºäº§å追溯å
容ãå®ä½è§å¾æ²¿ç¨åæèæ¯åçå¼ï¼æå·²æç宿°æ®æâç产信æ¯ãä»å¨ä¿¡æ¯ãç©æµä¿¡æ¯âç»ç»ï¼æ²¡ææ¥æºæ°æ®çåæ®µä¸èé ãç´æ¥æå¼ä¸å¸¦è¿½æº¯ç çæ°ç½åä¹å¯ä»¥ææåè¿å
¥æå¨æ¥è¯¢ãæç»ææãå®ä½å¤±è´¥æä¿å失败ä¼åç卿æé¡µå¹¶ç»åºéè¯æç¤ºãå·æ°æ°ç½åééæ°è·åä½ç½®ã |
| | | |
| | | åå°âæ¶è´¹è
æ«ç ç»è®¡âæ°å¢âå®ä½ææè®¿é®âåºåï¼æ²¿ç¨ `mes:trace-consumer-scan:query` æéï¼å¯ææ¶é´åè¿½æº¯ç æ¥è¯¢ï¼æ¾ç¤ºè®¿é®æ¬¡æ°ãåæ ãç²¾åº¦ãæ¶é´ï¼å¹¶å¯æå¼å°å¾ï¼çé¨ä½ç½®å°ç»çº¬åº¦åå«ä¿ç两ä½å°æ°åèåï¼æå¤ 20 å¤ï¼ãè®°å½ä¸åææ IP æ¨æçå¸çæ«ç äºä»¶åå¼åå¨ï¼é¿å
å½±ååç»è®¡å£å¾ã |
| | | |
| | | ## ä¸çº¿æ¥éª¤ |
| | | |
| | | 1. æ§è¡ `sql/mysql/mes_trace_location_visit.sql`ã |
| | | 2. é¨ç½²å端å管ç端ï¼ç¡®ä¿æ°éææä»¶ `trace-location.html` ä¸ `trace.html` å¨ç¸åå
¬å¼è·¯å¾ä¸ï¼`/prod/` 代çåºæ `/public/mes/trace/location-visit` 转åå°å端ã |
| | | 3. ç»å
¬ä¼è®¿é®å
¥å£é
ç½®ææååå HTTPS è¯ä¹¦ï¼å¹¶æ `mes.trace-base-url` æ¹æå¯¹åºç HTTPS 追溯页å°åãæ§å°å `http://1.95.78.124:9008/prod/trace.html` è¥ä»ä¸º HTTPï¼æ®éæµè§å¨æ æ³è°ç¨ Geolocation APIï¼ææé¡µä¼æç¡®æç¤ºå¿
é¡»ä½¿ç¨ HTTPSãå·²ç»å°å¶çæ§äºç»´ç ä»ä¼æå¼ HTTPï¼é卿å¡å¨ä¸å° HTTP 请æ±è·³è½¬å°æ° HTTPS ååï¼å¹¶ä¿ç `code` åæ°ã |
| | | |
| | | æµè§å¨å®ä½å¿
é¡»è·å¾ç¨æ·ææï¼æå¡ç«¯æ¥æ¶çåæ æ¥èªå®¢æ·ç«¯ï¼ä¸è½ç¨å®ä½ä¸ºé²ä¼ªæå°åºè¯æãç°æå
¬å¼ `/public/mes/trace/query` æ¥å£ä»å¯ç´æ¥æ¥è¯¢ï¼å®ä½éå¶åªä½ç¨äºæ°å¢çâ追溯ç½åâç¹å»è·¯å¾ãè¥ä¸å¡è¦æ±ææäº§å追溯æ¥è¯¢é½å¼ºå¶å®ä½ï¼éè¦å¦è¡æ¹é äºç»´ç å
¥å£åå
¬å¼æ¥è¯¢æ¥å£çé´ææµç¨ã |
| | | |
| | | æ¬å°å¯å¨ä½¿ç¨ `application-local.yaml` æ¶ï¼`mes.trace-location-required=false`ï¼ææé¡µè¯»åå
¬å¼é
ç½®åç´æ¥æ¾ç¤ºå®ä½è§å¾ï¼ä¾¿äºéè¿ HTTP è°è¯ãé»è®¤å¼ä¸º `true`ï¼ç产 profile ä¸é
ç½®æ¤é¡¹æ¶ä»è¦æ±å®ä½ï¼é
ç½®æ¥å£å¤±è´¥æ¶å端ä¹ä¸ä¼èªå¨è·³è¿ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产æäº§æ°éæå·¥åºæ¶ç忍 â 鿱䏿¹æ¡ |
| | | |
| | | ## ä¸ãèæ¯ä¸é®é¢ |
| | | |
| | | ä¸é®æäº§ï¼`MesProBatchScheduleService`ï¼å½å对**æ¯ä¸éå·¥åº**齿工忰éæäº§ï¼ |
| | | |
| | | ```java |
| | | // MesProBatchScheduleService.build() 第 238ã291 è¡ |
| | | var remaining = order.getQuantity().subtract(assigned); // å·²æéä»ã订åéã鿣 |
| | | ... |
| | | best.setQuantity(remaining); // æ¯éå·¥åºé½æè®¢åé |
| | | ``` |
| | | |
| | | 宿µï¼è¿ç«¯ `mom-hm`ï¼å·¥å WO_20260927001ï¼6 éå·¥åºï¼è®¢åé 100ï¼ï¼æ¯éå·¥åºç任塿°é齿¯ 100ã |
| | | |
| | | è¿ä¸ç¬¦åå®é
ï¼æ«éå·¥åºäº§åºæåï¼æ°éæçäºè®¢åéï¼åé¢åéå·¥åºè¦å
ææ¬çº§æèï¼äº§åºéå¿
须大äºè®¢åéï¼è¶é åè¶å¤§ã |
| | | |
| | | ## äºãè§åå®ä¹ |
| | | |
| | | ### 2.1 æ¶ç |
| | | |
| | | - æ¶ç `yield_rate` 表示**æ¬éå·¥åºçäº§åº / æ¬éå·¥åºçæå
¥**ï¼åå¼ (0, 1]ã |
| | | - ç»´æ¤ä½ç½®ï¼**å·¥èºè·¯çº¿å·¥åºçº§**ï¼`mes_pro_route_process`ï¼ï¼å¨ãå·¥èºè·¯çº¿ â å·¥åºé
ç½®ãéç»´æ¤ï¼å·¥åçæå·¥åºæ¶å¤å¶å° `mes_pro_work_order_process`ã |
| | | - ä¸é®æäº§è¯»å顺åºä¸ç°æå·¥åºæ¥æºä¸è´ï¼å·¥åå·¥åº â åéå·¥èºè·¯çº¿å·¥åºã |
| | | - åæ®µä¸ºç©ºæ¶æ `1.0` å¤çï¼ä¸æ¾å¤§ï¼ï¼ä¿è¯å岿°æ®ä¸æªç»´æ¤æ¶ççå·¥åºè¡ä¸ºä¸åã |
| | | |
| | | ### 2.2 忍å
¬å¼ |
| | | |
| | | 设工åå·¥åºæ `sort` ååºä¸º `pâ ⦠pâ`ï¼åèªæ¶ç为 `râ ⦠râ`ï¼è®¢åé为 `Q`ã |
| | | |
| | | 任塿°éå£å¾ = **该工åºç产åºé**ï¼ |
| | | |
| | | ``` |
| | | target(pâ) = Q // æ«é = 订åé |
| | | target(páµ¢) = CEIL( Q / (ráµ¢ââ à ráµ¢ââ à ⦠à râ) ) // åé¢åéé级æ¾å¤§ååä¸åæ´ |
| | | ``` |
| | | |
| | | å«ä¹ï¼`páµ¢` å¿
须产åºè¶³å¤éï¼ä½¿å¾ç»è¿å颿¯éå·¥åºåèªçæèåï¼æ«éä»è½æ¿å° `Q`ãæ°éä¸å¾ä¸º**æ´æ°ä»¶**ï¼åä¸åæ´ä»¥ä¿è¯åé产åºè¶³å¤è¦çåæ¹ç´¯è®¡æèã |
| | | |
| | | ### 2.3 ç¤ºä¾ |
| | | |
| | | 订åé `Q = 100`ï¼6 éå·¥åºï¼ç»ä¸æ¶ç 98%ï¼ |
| | | |
| | | | å·¥åºï¼sort ååºï¼ | è®¡ç® | æäº§æ°é | |
| | | |---|---|---| |
| | | | pâï¼æ«éï¼ | 100 | 100 | |
| | | | pâ
| ceil(100 / 0.98) | 103 | |
| | | | pâ | ceil(100 / 0.98²) | 105 | |
| | | | pâ | ceil(100 / 0.98³) | 107 | |
| | | | pâ | ceil(100 / 0.98â´) | 109 | |
| | | | pâ | ceil(100 / 0.98âµ) | 111 | |
| | | |
| | | é¦é约为订åéç **1.11 å**ï¼n=6ã98%ï¼ã |
| | | |
| | | ## ä¸ãæ¹å¨æ¸
å |
| | | |
| | | ### 3.1 æ°æ®åºï¼è¿ç«¯ mom-hmï¼ |
| | | |
| | | ```sql |
| | | ALTER TABLE mes_pro_route_process |
| | | ADD COLUMN yield_rate DECIMAL(10,6) NULL COMMENT 'å·¥åºæ¶çï¼äº§åº/æå
¥ï¼0~1ï¼' AFTER param_template_id; |
| | | |
| | | ALTER TABLE mes_pro_work_order_process |
| | | ADD COLUMN yield_rate DECIMAL(10,6) NULL COMMENT 'å·¥åºæ¶çï¼äº§åº/æå
¥ï¼0~1ï¼' AFTER param_template_id; |
| | | |
| | | -- ç°æè¡ç»ä¸åå§å 98% |
| | | UPDATE mes_pro_route_process SET yield_rate = 0.980000 WHERE yield_rate IS NULL; |
| | | UPDATE mes_pro_work_order_process SET yield_rate = 0.980000 WHERE yield_rate IS NULL; |
| | | ``` |
| | | |
| | | ### 3.2 å端 |
| | | |
| | | | æä»¶ | æ¹å¨ | |
| | | |---|---| |
| | | | `MesProRouteProcessDO` | å `yieldRate` | |
| | | | `MesProRouteProcessSaveReqVO` / `RespVO` | å `yieldRate` | |
| | | | `MesProWorkOrderProcessDO` | å `yieldRate` | |
| | | | `MesProWorkOrderProcessSaveReqVO` / `RespVO` | å `yieldRate` | |
| | | | `MesProWorkOrderProcessServiceImpl#getProcessListByProductId` | å¤å¶æ¶å¸¦ä¸ `yieldRate` | |
| | | | `MesProBatchScheduleService#build` | æ°å¢ `calcTargetQuantities()`ï¼`remaining = target - å·²æé`ï¼`processes()` åéè·¯çº¿å·¥åºæ¶ä¹å¸¦ `yieldRate` | |
| | | |
| | | `calcTargetQuantities` é»è¾ï¼å·¥åºå·²æ sort ååºï¼ï¼ |
| | | |
| | | ```java |
| | | int n = processes.size(); |
| | | BigDecimal cum = BigDecimal.ONE; // åé累计æ¶ç积 |
| | | BigDecimal[] targets = new BigDecimal[n]; |
| | | for (int i = n - 1; i >= 0; i--) { |
| | | targets[i] = quantity.divide(cum, 0, RoundingMode.CEILING); // æ´æ°ä»¶ï¼åä¸åæ´ |
| | | BigDecimal r = processes.get(i).getYieldRate() == null |
| | | ? BigDecimal.ONE : processes.get(i).getYieldRate(); |
| | | cum = cum.multiply(r); |
| | | } |
| | | ``` |
| | | |
| | | ### 3.3 å端ï¼éç¡®è®¤ï¼ |
| | | |
| | | - å·¥èºè·¯çº¿å·¥åºé
置表åï¼`views/mes/pro/route/data.ts`ï¼å ãæ¶çãè¾å
¥æ¡ï¼ç¾åæ°å±ç¤ºï¼`0 < æ¶ç ⤠1`ã |
| | | |
| | | ### 3.4 æ°æ®ä¿®æ£ï¼æ¬æ¬¡ä¸æ¬¡æ§ï¼ |
| | | |
| | | - èå´ï¼è¿ç«¯ `mom-hm` ç°æ 60 个工å / 604 æ¡ä»»å¡ï¼æ¯ä¸ªå·¥åºæ°å¥½ 1 æ¡ä»»å¡ï¼æ åå·¥åºå¤ä»»å¡ï¼ã |
| | | - è§åï¼ææå¨å·¥åçå·¥åºé¡ºåºä¸æ¶çéç® `quantity`ã |
| | | - 604 æ¡ä»»å¡å½åç¶æå为ã已宿ã(status=4)ï¼`produced_quantity = quantity`ã |
| | | |
| | | ## åãå¾
确认çè¾¹çå¤ç |
| | | |
| | | éç®å·²å®æä»»å¡æ¶ï¼ä»¥ä¸å段æ¯å¦åæ¥è°æ´ï¼ç´æ¥å³å®å岿°æ®ä¸è´æ§ï¼ |
| | | |
| | | | åæ®µ | 建议 | 说æ | |
| | | |---|---|---| |
| | | | `quantity` | **å¿
æ¹** | æ¬æ¬¡ç®æ | |
| | | | `produced_quantity` | åæ¯æ¹ | ä¿æ produced = quantityï¼å¦å任塿¾ç¤ºå·²å®æå´äº§åºâ æäº§ | |
| | | | `qualify_quantity` | åæ¯æ¹ | åæ ¼æ°åæ¥ | |
| | | | `duration` / `start_time` / `end_time` | 䏿¹ | æ¶é¿ææ°é/产è½ç®ï¼æ°éåæ¶é¿æ¬åºåï¼ä½åå²ä»»å¡æ¶é´æ¯**å®é
åç**è®°å½ï¼æ¹å¨ä¼ç ´åçç¹å¾ä¸ç产å®è¿¹ | |
| | | |
| | | ## äºãå½±åä¸é£é© |
| | | |
| | | - æ¶ç忍åªå½±åãä¸é®æäº§ãçæçæ°éï¼æå·¥æäº§ç±ç¨æ·èªè¡å¡«åï¼ä¸åå½±åã |
| | | - æ°éå大åï¼æäº§æ¶é¿åé¿ï¼å¯è½å¯¼è´äº¤æå»¶åï¼`result.getWarnings()` ä¸çå»¶ææç¤ºä¼è§¦åï¼ï¼å±é¢æè¡ä¸ºã |
| | | - å端工åºè¡¨æ ¼è¥æ°å¢æ¶çåï¼éåæ¥è°æ´å宽ä¸è¡¨åæ ¡éªã |
| | | |
| | | ## å
ãæ§è¡è®°å½ï¼2026-10-15ï¼ |
| | | |
| | | - **åæ®µ**ï¼è¿ç«¯ `mom-hm` ç `mes_pro_route_process`ï¼687 è¡ï¼ã`mes_pro_work_order_process`ï¼928 è¡ï¼å·²å `yield_rate`ï¼å¹¶ç»ä¸åå§å为 `0.98`ã |
| | | - **æ°æ®**ï¼604 æ¡ä»»å¡ï¼60 个工åï¼ç `quantity` / `produced_quantity` / `qualify_quantity` å·²æ 98% 忍éç®å¹¶**åä¸åæ´ä¸ºæ´æ°**ï¼æ«éå·¥åºä¿æè®¢åéï¼é¦éæå¤§ï¼å¦ WO_20260927001ï¼100 â 111 / 109 / 107 / 105 / 103 / 100ï¼ãæ ¡éªï¼604 æ¡å
¨é¨ä¸ºæ´æ°ãæ«éæ°éä¸è®¢åéå®å
¨ä¸è´ã |
| | | - **æ¶é¿**ï¼604 æ¡ä»»å¡ `duration` 忬å
¨é¨ä¸º NULLï¼ä¸è®¾å¤æªç»å®å·¥ä½ç«ï¼`mes_dv_machinery.workstation_id` å
¨ç©ºï¼ï¼æ
æ¶é¿æªåä¸éç®ã |
| | | - **å¤ä»½ä¸èæ¬**ï¼`scripts/yield-rate-schedule-20261015/`ï¼`task-before.tsv`ã`task-after.tsv`ã`work-order-process.tsv`ã`applied.sql`ï¼ã |
| | | - **åå§åèæ¬**ï¼`docs/sql/config_export_all_20261015.sql`ï¼ä¸¤å¼ 表ç DDL å·²å« `yield_rate`ï¼ã |
| | | - **å¾
ç¨æ·æä½**ï¼éå¯åç«¯ä½¿ç®æ³æ¹å¨çæï¼å端é `pnpm typecheck` æå¯å¨ dev server 夿 ¸ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æµè½¬å¡å·¥åºè®°å½ãæå
¥ / 产åºãææ¶çéç® â 鿱䏿¹æ¡ |
| | | |
| | | ## ä¸ãèæ¯ä¸é®é¢ |
| | | |
| | | `/mes/pro/card`ï¼ç产æµè½¬å¡ï¼é¡µé¢çå·¥åºè®°å½è¡¨éï¼"æå
¥æ°é / äº§åºæ°é"ä¸åä¸å·¥åççäº§ä»»å¡æ°é对ä¸ä¸ã |
| | | |
| | | 宿µï¼è¿ç«¯ `mom-hm`ï¼å·¥å WO_20260927001 / 6 éå·¥åº / 订åé 100ï¼ï¼ |
| | | |
| | | | | 第1é | 第2é | 第3é | 第4é | 第5é | 第6é | |
| | | |---|---|---|---|---|---|---| |
| | | | çäº§ä»»å¡ `quantity`ï¼å·²ææ¶çåæ¨ï¼ | 111 | 109 | 107 | 105 | 103 | 100 | |
| | | | æµè½¬å¡å·¥åº æå
¥ / äº§åº | 100/100 | 100/100 | 100/100 | 100/100 | 100/100 | 100/100 | |
| | | |
| | | åå ï¼604 æ¡æµè½¬å¡å·¥åºè®°å½æ¯å½æ¥ç¨ `scripts/pro-card-backfill-20261015/` **ææ¥å·¥è®°å½**è¡¥å½çï¼è§å为"äº§åº = æ¥å·¥æ°éãæå
¥ = ä¸é产åºï¼é¦é = å·¥åè®¡åæ°éï¼"ãè¡¥å½åçå¨**æ¶ç忍ä¹å**ï¼å½æ¶æ¥å·¥æ°é齿¯ 100ï¼éåç产任å¡è¢«éç®ä¸º 111/109/â¦/100ï¼æµè½¬å¡ä¾¿ä¸å·¥åºæµè½¬ãä¸ç产任å¡ååã |
| | | |
| | | ## äºãå£å¾å®ä¹ï¼å·²ç¡®è®¤ï¼ |
| | | |
| | | 设工åå·¥åºæ `sort` ååºä¸º `pââ¦pâ`ï¼åéæ¶ç `rââ¦râ`ï¼å·¥åè®¡åæ°é `Q`ï¼ |
| | | |
| | | ``` |
| | | 产åº(páµ¢) = CEIL( Q / (ráµ¢ââ à ráµ¢ââ à ⦠à râ) ) // ä¸çäº§ä»»å¡æ°éå®å
¨ä¸è´ |
| | | æå
¥(pâ) = CEIL( 产åº(pâ) / râ ) // é¦éè¦å
ææ¬çº§æè |
| | | æå
¥(páµ¢) = 产åº(páµ¢ââ) // i ⥠2ï¼æ¬éæå
¥ = ä¸éäº§åº |
| | | ä¸åæ ¼å(páµ¢) = 0 // åºå®ä¸º 0ï¼2026-10-15 æç¨æ·è¦æ±ï¼æå
¥/产åºä¸åå½±åï¼ |
| | | ``` |
| | | |
| | | - æ°éä¸å¾ä¸ºæ´æ°ä»¶ï¼åä¸åæ´ã |
| | | - æ¶ç为空æ ⤠0 æ¶æ `1.0` å¤çï¼ä¸æ¾å¤§ï¼ï¼ä¸ä¸é®æäº§å£å¾ä¸è´ã |
| | | - 产åºéå
¬å¼ä¸ `MesProBatchScheduleService#calcTargetQuantities` ç¸åï¼ä¿è¯æµè½¬å¡äº§åº = çäº§ä»»å¡æ°éã |
| | | |
| | | ## ä¸ã示ä¾ï¼Q=100ï¼6 éå·¥åºï¼ç»ä¸æ¶ç 98%ï¼ |
| | | |
| | | | å·¥åºï¼sort ååºï¼ | æå
¥ | äº§åº | ä¸åæ ¼å | |
| | | |---|---|---|---| |
| | | | pâï¼é¦éï¼ | 114 | 111 | 0 | |
| | | | pâ | 111 | 109 | 0 | |
| | | | pâ | 109 | 107 | 0 | |
| | | | pâ | 107 | 105 | 0 | |
| | | | pâ
| 105 | 103 | 0 | |
| | | | pâï¼æ«éï¼ | 103 | 100 | 0 | |
| | | |
| | | æå
¥/äº§åºææ¶çéçº§åæ¨ï¼æµè½¬å¡æ«éäº§åº = çäº§ä»»å¡æ°éï¼ä¸åæ ¼åæ°éç»ä¸ä¸º 0ã |
| | | |
| | | ## åãæ¹å¨æ¸
å |
| | | |
| | | ### 4.1 åç«¯ï¼æ°å¡èªå¨çæå·¥åºè®°å½ |
| | | |
| | | | æä»¶ | æ¹å¨ | |
| | | |---|---| |
| | | | `MesProCardProcessService` / `Impl` | æ°å¢ `createCardProcessBatch(List<MesProCardProcessDO>)` æ¹éæå
¥ | |
| | | | `MesProCardServiceImpl#createCard` | 建å¡åæå·¥åå·¥åº + æ¶ççæå·¥åºè®°å½ï¼å `@Transactional` | |
| | | | `MesProCardServiceImpl#updateCard` | ç产订ååæ´æ¶ï¼å é¤åå·¥åºè®°å½å¹¶ææ°å·¥åé建 | |
| | | |
| | | çæè§åï¼ |
| | | |
| | | - å·¥åºæ¥æºï¼`mes_pro_work_order_process`ï¼æ `sort` ååºï¼ï¼å·¥åæªç»´æ¤å·¥åºåè·³è¿ï¼çå¾
æå·¥ç»´æ¤ã |
| | | - `è¿å
¥/åºå·¥åºæ¶é´`ã`å·¥ä½`ã`æä½äºº` ç空ï¼çäº§å°æªåçï¼åç»å¡«åï¼ï¼`ipqc_id`ã`remark` ç空ã |
| | | |
| | | ### 4.2 è¡¥å½èæ¬ |
| | | |
| | | - `scripts/pro-card-backfill-20261015/generate.mjs`ï¼æ¹ä¸ºæ `mes_pro_work_order_process.yield_rate` 忍æå
¥/产åº/ä¸åæ ¼ï¼ä¸åç´æ¥åæ¥å·¥æ°éï¼å¿«ç
§ `wop.tsv` è¡¥å
æ¶çåã |
| | | |
| | | ### 4.3 å岿°æ®éç®ï¼ä¸æ¬¡æ§ï¼ |
| | | |
| | | - èå´ï¼è¿ç«¯ `mom-hm` ç°æ 60 å¼ æµè½¬å¡ / 604 æ¡å·¥åºè®°å½ï¼604 æ¡å
¨é¨è½å¹é
å°åå·¥åçå·¥åºé
ç½®ï¼æ¶çå
¨ä¸º 0.98ï¼ã |
| | | - åªæ¹ `input_quantity` / `output_quantity` / `unqualified_quantity`ï¼`input_time` / `output_time` / `workstation_id` / `user_id` 为å®é
åçè®°å½ï¼ä¿æä¸åã |
| | | |
| | | ## äºãè¾¹çä¸é£é© |
| | | |
| | | - æµè½¬å¡å·¥åºè®°å½ä»
卿µè½¬å¡æ¨¡åå
使ç¨ï¼`MesProCardProcessDO` æ å
¶ä»æ¨¡åå¼ç¨ï¼ï¼éç®ä¸å½±åæ¥å·¥ãæ£æãåºåã |
| | | - æ°éå大åå¡çä¸ç产任å¡ä¸è´ï¼ä¸ååºç°"å¡ä¸äº§åº < ä»»å¡æäº§"çè§æé®é¢ã |
| | | - æ°å»ºæµè½¬å¡å³äº§çå·¥åºè®°å½ï¼è稿æä»å¯éæ¡ç¼è¾/å é¤ï¼åæè¡ä¸ºä¸åï¼ã |
| | | |
| | | ## å
ãæ§è¡è®°å½ |
| | | |
| | | ### 6.1 å端æ¹å¨ï¼å·²å®æï¼ç¼è¯éè¿ï¼ |
| | | |
| | | `mvn compile -pl yudao-module-mes -am -q` éè¿ãæ¶åæä»¶ï¼ |
| | | |
| | | - `MesProCardProcessService` / `Impl`ï¼æ°å¢ `createCardProcessBatch(List<MesProCardProcessDO>)` æ¹éæå
¥ã |
| | | - `MesProCardServiceImpl`ï¼`createCard` / `updateCard` å `@Transactional`ï¼å»ºå¡åè°ç¨ `generateCardProcesses` æå·¥åå·¥åº + æ¶ççæå·¥åºè®°å½ï¼æ¢å·¥åæ¶å
å æ§è®°å½åé建ã |
| | | - çæå£å¾ä¸ `MesProBatchScheduleService#calcTargetQuantities` ä¸è´ï¼ä¿è¯æµè½¬å¡äº§åº = çäº§ä»»å¡æ°éã |
| | | |
| | | > çæé**éå¯å端**æå¡ã |
| | | |
| | | ### 6.2 å岿°æ®éç®ï¼å·²å®æå¹¶æ ¡éªï¼ |
| | | |
| | | - èæ¬ï¼`scripts/pro-card-yield-recalc-20261015/recalc.sql`ï¼ä¸´æ¶è¡¨è§é¿ errno 1093ï¼ã |
| | | - å¤ä»½ï¼`task-before.tsv`ï¼éç®å 604 è¡ï¼ï¼`task-after.tsv`ï¼éç®å 604 è¡ï¼ã |
| | | - æ ¡éªç»æï¼è¿ç«¯ `mom-hm`ï¼ï¼ |
| | | - æ«éäº§åº = 工忰éï¼0 æ¡ä¸ç¬¦ |
| | | - ä¸åæ ¼ = æå
¥ â 产åºï¼0 æ¡ä¸ç¬¦ |
| | | - æå
¥ < 产åºï¼0 æ¡ï¼æ è´ä¸åæ ¼ï¼ |
| | | - æå
¥ = ä¸é产åºï¼é¦éé¤å¤ï¼ï¼0 æ¡æé¾ |
| | | - å¡çäº§åº = çäº§ä»»å¡ `quantity`ï¼604 æ¡å
¨é¨ä¸è´ |
| | | - ç¤ºä¾ WO_20260927001ï¼Q=100ï¼6 éï¼æ¶ç 0.98ï¼ï¼æå
¥ 114/111/109/107/105/103ï¼äº§åº 111/109/107/105/103/100ï¼ä¸åæ ¼ 3/2/2/2/2/3ã |
| | | |
| | | ### 6.3 è¡¥å½èæ¬æ¹é ï¼å·²å®æï¼ |
| | | |
| | | `scripts/pro-card-backfill-20261015/generate.mjs`ï¼ |
| | | |
| | | - `wop.tsv` å¿«ç
§å¢å 第 4 å `yield_rate`ï¼`SELECT work_order_id, process_id, sort, yield_rate FROM mes_pro_work_order_process WHERE deleted=0`ï¼ã |
| | | - æå
¥ / äº§åºæ¹ä¸ºææ¶ç忍ï¼ä¸å端ãéç® SQL åå£å¾ï¼ï¼ä¸åç´æ¥åæ¥å·¥æ°éã |
| | | - éè·çæå¨è¾åºä¸è¿ç«¯åºç°ç¶éè¡æ¯å¯¹ï¼604/604 å®å
¨ä¸è´ã |
| | | |
| | | ### 6.4 ä¸åæ ¼åæ°éæ¹ä¸º 0ï¼2026-10-15 追å ï¼ |
| | | |
| | | æç¨æ·è¦æ±ï¼æµè½¬å¡å·¥åºè®°å½ç**ä¸åæ ¼åæ°éç»ä¸åºå®ä¸º 0**ï¼æå
¥ã产åºä»ææ¶çå£å¾éç®ï¼ä¸åï¼ï¼ |
| | | |
| | | - å端 `MesProCardServiceImpl#generateCardProcesses`ï¼`unqualifiedQuantity(BigDecimal.ZERO)`ï¼ç¼è¯éè¿ã |
| | | - éç® SQL 追å ï¼`UPDATE mes_pro_card_process SET unqualified_quantity = 0 WHERE deleted = 0;`ï¼604 è¡ï¼å·²æ ¡éª `SUM(unqualified_quantity <> 0) = 0`ï¼ã |
| | | - è¡¥å½èæ¬ `generate.mjs`ï¼`unq` åºå®è¾åº 0ï¼éè· 604 è¡å
¨é¨ä¸º 0ã |
| | | - ç¤ºä¾ WO_20260927001ï¼æå
¥ 114/111/109/107/105/103ï¼äº§åº 111/109/107/105/103/100ï¼ä¸åæ ¼ 0/0/0/0/0/0ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # CRM å¾
åäºé¡¹æ£æ¥ä¸ä¿®å¤ |
| | | |
| | | æ£æ¥äºå¾
åå
¥å£ã8 ç±»å¾
åç»ä»¶ãå¤ç¨è¡¨æ ¼åãå
³è APIï¼ä»¥åç¸å
³å端åè¡¨åæ°éæ¡ä»¶ãæ²¡ææ´æ¹è¿ç¨ä¸å¡æ°æ®ã |
| | | |
| | | ä¿®å¤èå´ï¼ |
| | | |
| | | - ååå¾
å客æ·ãåæºãç¾çº¦äººè·³è½¬åå«ä½¿ç¨ customerIdãbusinessIdãsignContactIdï¼æ å
³è ID æ¶é»æ¢è·³è½¬ãç¾çº¦äººææ§½åç»ä¸ä¸º signContactNameãè¡¥é½ååç¶æãå
³èè®¢åææ§½ï¼æ²¡ææµç¨å®ä¾ä¸å±ç¤ºâæ¥ç审æ¹âãä¿ç䏿¬¡è¡¥é½çååç¼å·ææ§½ã |
| | | - å¾
è¿å
¥å
¬æµ·è°ç¨ç°æ put-pool-remind-page æ¥å£ï¼ä¸åæ¥è¯¢æ®éå
¬æµ·å表ã3 类客æ·å¾
åè¡¥é½ç¾è®¢ååæ°é/éé¢åã |
| | | - 忬¾è®¡åææ°è·³è½¬åæ¬¾è®¡å详æ
ï¼çº æ£âååç¶æâçéæ ç¾ã计åå忬¾å¾
ååºå®åå§è´è´£äººåºæ¯ä¸º 1ï¼ä¸æ°éæ¥å£ä¸è´ã |
| | | - å·²æå
³è忬¾ç计åéèåå»ºåæ¬¾æé®ï¼å¹¶å¨å¤ç彿°åæ¬¡æ¦æªï¼åå»ºåæ¬¾ãå®¡æ ¸æé®å å
¥ä¸ä¸»å表ç¸åçæéæ§å¶ãå建æåãå®¡æ ¸æååå·æ°å表åç¶é¡µé¢è§æ ã |
| | | - 忬¾å¾
åè¡¥é½å¼ç¥¨åï¼ååç¼å·è¯»åå®é
è¿åç contract.noï¼å¹¶ä¿ç contractNo å
¼å®¹ï¼ç¼ºå¤±å
³èæ¾ç¤ºå ä½ç¬¦ã |
| | | - åç±»æ°éç¬ç«å¹¶åå è½½ï¼å个失败ä¸é»æå
¶ä»æ°éï¼é¦æ¬¡æè½½/æ¿æ´»äº§ççéå è°ç¨åå¹¶ã |
| | | - åç«¯åæ¬¾æéæ°éæ¡ä»¶ä¸åè¡¨âæªåæ¬¾ä¸å·²è¾¾æéæ¥æâ对é½ï¼å
嫿鿥æçäºä»å¤©çè®°å½ï¼ä¸åè¦æ±åæ¬¾é¾æãå¾
å®¡æ ¸åæ¬¾æ°éå¼ç¨ CrmReceivableDO.auditStatusï¼ç§»é¤é误çååå®ä½å¼ç¨ã |
| | | |
| | | éªè¯ï¼ |
| | | |
| | | - `mvn -o -pl yudao-module-crm -am -DskipTests compile -q` ç¼è¯éè¿ã |
| | | - `node scripts/backlog-review-20261015/verify.cjs` éè¿ã使ç¨å®é
Vue ç»ä»¶èæ¬è¿è¡é对æ§éªè¯ï¼ä¾èµ APIãè·¯ç±åè¡¨æ ¼ä½¿ç¨æ¿èº«ï¼ï¼è¦ç 8 ç±»å¾
å Vue ç¼è¯ãææå¤ç¨åææ§½ãå
³èå®ä½ ID è·¯ç±ãå页æ¥è¯¢åæ°ãå
¬æµ·æéæ¥å£ãéå¤åæ¬¾æ¦æªãæä½åå·æ°ãè®¡æ°æ¥å£é¨å失败ä¸è¯·æ±åå¹¶ãç»æè§ verification.jsonã |
| | | - åå端æ¹å¨ç Git diff ç©ºç½æ£æ¥éè¿ãå端å
¨é typecheck å卿¤åå·²åç°çå
¶ä»æ¨¡åéè¯¯ï¼æ¬æ¬¡æªéè·ã |
| | | |
| | | å°æªé¨ç½²ï¼æªæ§è¡æµè§å¨ç«¯å°ç«¯æçå®å端æ¥å£èè°ï¼åå¸åå端åçæã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # MES ç©æ BOM 导å
¥ç»æ |
| | | |
| | | 导å
¥æ¥æï¼2026-10-12ãä¸å¡è¡¨ï¼`mom-hm.mes_md_product_bom`ã |
| | | |
| | | | é¡¹ç® | è¿ç¨ mom-hm | æ¬å° mom-hm | |
| | | | --- | ---: | ---: | |
| | | | å·²æ ¸éªç»æå
³ç³» | 657 | 642 | |
| | | | ç¶ç©ææ°ï¼å
æ¬ä¸ä¸çº§åæåï¼ | 81 | 80 | |
| | | | æ°å¢å
³ç³» | 654 | 639 | |
| | | | æ´æ°å·²æç¨é | 2 | 2 | |
| | | | ä¿çå·²æç¸åå
³ç³» | 1 | 1 | |
| | | | åå¹¶é夿ºè¡ | 33 | 33 | |
| | | | æªå½å
¥æºè¡ | 0 | 15 | |
| | | |
| | | æ¥æºä¸ºç¨æ·æä¾ç `ä¼ æ¸ äº§åBOMxml(1).xlsx`ï¼37 个工ä½è¡¨ã342 æ¡ç»æè¡ï¼å `çµå产åBOM(1).xls`ï¼3 个工ä½è¡¨ã348 æ¡ç»æè¡ï¼ï¼å计 690 è¡ãåå§æä»¶æªæ¹å¨ã |
| | | |
| | | çµåäº§åææºè¡¨ç¶ç©æç¼ç å¹é
ãä¼ æ¸ æåä¸ç°æ TC0001ï½TC0037 对åºï¼éé¡¹æ ¸å¯¹åç§°ï¼é»ææ¸æ120å
使ç¨ä¼ æ¸ TC0020ï¼çµååå产åä½¿ç¨æºè¡¨ U2100201ï¼é¿å
æ··ç¨ãåç©æåæç¼ç 精确å¹é
ã |
| | | |
| | | 红æ£åç¢ãé±¼è¶åç¢ã150å
åç¢ã100å
åç¢çäºçº§ç»æåå«å
³èå
¶ä¸ä¸çº§è¡¨æ ¼ä¸å¯¹åºç 71500052ã71500051ã71500050ã74001507ã74001508ï¼é¿å
æåç¢é
æ¹ç´æ¥ä½ä¸ºæ´çç¨éã |
| | | |
| | | ç¸åç¶åç©æåç¨éçéå¤è®°å½åå¹¶ï¼ä¸ç´¯å ï¼ååå§è¡åå¯éè¿ source-lines.jsonã计åæä»¶åéå¤è¡æ¸
å追溯ãBOM 夿³¨ä¿çåæä»¶ãå·¥ä½è¡¨ãè¡å·ãåå§æ°éååä½ã |
| | | |
| | | 9 æ¡æºè¡ç¼ºå°åä½ï¼å
¶ä¸ 4 æ¡ç±åç¼ç å
¶ä»æºè¡ç¡®è®¤ï¼å¦å¤ 5 æ¡ç»ç¨æ·ç¡®è®¤éç¨ç³»ç»åºæ¬åä½ãå»å¹²æ¸æ200å
çéç®è¢ãåæç¨éç»ç¨æ·ç¡®è®¤åå«ä» 1 æ´æ°ä¸º 25 个ãä» 1 æ´æ°ä¸º 0.21 kgã |
| | | |
| | | æ°æ®åºæ°éåæ®µä¿ç 6 ä½å°æ°ã5 æ¡ç¨éç»å使¢ç®åéè¦ 7 ä½å°æ°ï¼å·²æ 6 ä½åèäºå
¥ï¼åå¼ä¿çå¨å¤æ³¨åæ¸
åä¸ï¼ |
| | | |
| | | | ç¶ç©æ | åç©æ | æ¢ç®ååå¼ kg | åå¨å¼ kg | |
| | | | --- | --- | ---: | ---: | |
| | | | Q2100202 | 61902677 | 0.0000572 | 0.000057 | |
| | | | Q2100202 | 63000389 | 0.0003815 | 0.000382 | |
| | | | Q2100202 | 61902682 | 0.0000763 | 0.000076 | |
| | | | Q2100202 | 61900948 | 0.0001908 | 0.000191 | |
| | | | TC0015 | 61900948 | 0.0021428 | 0.002143 | |
| | | |
| | | è¿ç¨æææåè¡åå·²è¦çãæ¬å° TC0020 为已å é¤è®°å½ï¼ä¿çå
¶å é¤ç¶æï¼ç¸åº 15 æ¡ç»ææªå½å
¥ï¼è¯¦æ
è§ local-å¾
æ ¸å¯¹.csvã |
| | | |
| | | éªè¯å
æ¬æºè¡è¦çãç¶åç¼ç ååç§°ãåä½ãæ°é精度ãåæåå±çº§ãBOM ç¯è·¯ãéå¤å
³ç³»ãäºå¡å
å
容åéå¤åå
¥æ£æ¥ãæäº¤åéæ°ä»ä¸¤ä¸ªæ°æ®åºè¯»åï¼éæ¡æ¯è¾ç¶å项䏿°éï¼éè¿ã |
| | | |
| | | 导å
¥å snapshot.xml æä»¶ä¿çç¸å
³ç©æä¸åå§ BOMï¼post-snapshot.xml 为æäº¤åå读ãå®é
æäº¤æ°éè§ local-result.txtãremote-result.txtã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # åæºæµç¨åå
³èè°æ´ |
| | | |
| | | 已忥è¿ç¨ mom-hmã |
| | | |
| | | - çµåãçµååå¡å399é¶å·åºï¼10æ¡ï¼çµéæµç¨ã |
| | | - å
¶ä½åæºï¼687æ¡ï¼æ åç´éæµç¨ã |
| | | - åç§°æå®¢æ·å«å京åä»å çåæºï¼463æ¡ï¼é»è¾å é¤ã |
| | | - è§£é¤4å¼ æ¥ä»·ã10å¼ ååçåæºç»å®ï¼ä¿çä¸å¡åæ®åå
¶éå®ãç产ãè´¨æ£ãåºåå
³èã |
| | | - ååæç»ãè系人å
³èãè·è¿å
³èååæºæéåæ¶æ¸
çã |
| | | - åæç»æç¶æãç¼å·ã客æ·ãåä»·ãéé¢ãæ°éä¸åºåä¿æä¸åã |
| | | - æäº¤åäºå¡æ ¸éªä¸æäº¤åç¬ç«è¿æ¥å¤æ ¸éè¿ï¼æ¥ä»·ä¸ååçåæºåæ®µå¨ç°æä¿åæ¥å£ä¸ä¸ºå¯éã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 客æ·ç¼ç åæ®µç§»é¤ |
| | | |
| | | å·²ä»å端å表ã详æ
ã客æ·éæ©å¨ãæ¥å£ç±»åï¼ä»¥åå端ååºåå¯¼åºæ¨¡åä¸ç§»é¤å®¢æ·ç¼ç ã客æ·åç§°ãå®¢æ· IDãå
³èå
³ç³»åç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ä¿çãå
±ä¿®æ¹ 34 ä¸ªæºæä»¶ï¼å
·ä½ä¿®æ¹ååå
容记å½äº changes.jsonï¼æªä¿®æ¹æ°æ®åºä¸å¡è®°å½ã |
| | | |
| | | éªè¯ç»æï¼ |
| | | |
| | | - MES 模ååä¾èµç¦»çº¿ç¼è¯éè¿ï¼`mvn -o -pl yudao-module-mes -am -DskipTests compile -q`ã |
| | | - ä¿®æ¹æä»¶ç TypeScriptãVue è¯æ³æ£æ¥éè¿ï¼å®¢æ·éæ©å¨æåç§°æ¥è¯¢ãåéåå¤éç»æä¿çï¼Java 模åå
¶ä»åæ®µä¿æä¸åãç»æè§ verification.jsonã |
| | | - æºç 䏿ªåç°å®¢æ·ç¼ç ç¸å
³å段æ®çï¼Git diff ç©ºç½æ£æ¥éè¿ã |
| | | - å端å
¨é typecheck æªéè¿ï¼åå¨ IM 导å
¥è·¯å¾ãéè´ç³è¯·éå¤åæ®µçæ¢æé®é¢ã |
| | | |
| | | å½åä»
宿æºä»£ç ä¿®æ¹ä¸éªè¯ï¼å°æªé¨ç½²ãéè¦åå¸åå端åæä¼å¨è¿è¡ç³»ç»ä¸çæã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产åå
³èä¸å¡å®¢æ·å
³ç³»ä¿®å¤ |
| | | |
| | | 2026-10-15 11:09:13 å·²æäº¤è³ 36.213.150.237:10000 / mom-hmï¼11:09:32 ç¬ç«è¿æ¥æ ¸éªéè¿ã |
| | | |
| | | è¡¥é½ 5 å¼ ç产工åã57 æ¡ç产任å¡ã51 个çäº§æ¹æ¬¡ï¼å
± 113 å¤ client_idãå·¥åç±é宿¥æºç¼å·å主计ååé确认ï¼ä»»å¡ç»§æ¿å·¥åï¼çäº§æ¹æ¬¡ç»§æ¿å·¥ååä»»å¡ãéå®å®¢æ·ä½¿ç¨æ¢æçµåãå京åä»å å¥åº·ï¼å¤§è¿ï¼æµ·æ´é£åæéå
¬å¸ï¼åºåç产沿ç¨å·²æå·¥åçâæ»å
¬å¸âå½å±ãæªæ°å»ºå®¢æ·ï¼ä¸éè¿äº§ååç§°çæµå®¢æ·ã |
| | | |
| | | ä¿®æ¹åå¤ä»½è§ locked-before-20261015-110913.jsonï¼ä¾æ®åæç»è§ plan.jsonã客æ·å
³èä¿®å¤æ¸
å.csvï¼äºå¡æäº¤åç¬ç«æ ¸éªç»æåå«è§ result.jsonãverification.jsonãå
¨å段æ¯è¾ç¡®è®¤åªæç®æ client_id æ¹å¨ï¼åæå建/æ´æ°æ¶é´ãæä½äººãç¶æãéé¢ãæ°éçä¿æä¸åã主计åãå·¥åãä»»å¡å®¢æ·ç¼ºå¤±å为 0ï¼éå®â主计åâå·¥åâä»»å¡âçäº§æ¹æ¬¡ä¸è´ã |
| | | |
| | | å
¶ä½è¥éãåè´§éç¥ãéå®åºåºå®¢æ·ææä¸æ ä¸ä¸æ¸¸å²çªãçäº§é¢æãç产å
¥åºåè¿ç¨æ£éªæ¬èº«æ²¡æ client_id åæ®µï¼æ²¿å·¥åè·å¾å®¢æ·ï¼ä¿®å¤åè½å¤æ£å¸¸è§£æã |
| | | |
| | | 51 å¼ ç¬ç«åºè´§æ£éªå没æéå®åæç产订åå
³èï¼ä¸è½å¯ä¸è®¤å®å®¢æ·ï¼å·²åç¨æ·è¯¢é®å¯¹åºå
³ç³»ï¼æ¸
åè§âå¾
确认客æ·çåºè´§æ£éªå.csvâã829 个没æé宿ç产订åå½å±çåºåæ¹æ¬¡ä¿æå®¢æ·ä¸ºç©ºï¼æªè½¬å®¢æ·ç线索ä¸å客æ·å¼ºç»ã |
| | | |
| | | 代ç ä¸ä¸»è®¡åçæå·¥å已带å
¥ clientIdï¼ä»»å¡å建已继æ¿å·¥å clientIdï¼æ¬æ¬¡ç¼ºé¡¹æ¥èªåå²ä¸å¡æ°æ®ï¼æªä¿®æ¹ç¸å
³æºç ãå®æçæ¯æ°æ®åºåæ§å¶å¨å®¢æ·è¯»åè·¯å¾æ ¸å¯¹ï¼æªå£°ç§°æ§è¡é¡µé¢ç«¯å°ç«¯æµè¯ã |
| | | |
| | | ## ç¬ç«åºè´§æ£éªååç»ç»å® |
| | | |
| | | ç¨æ·æç¡®åå¤âåèå
¶ä»æ°æ®å¸®æç»å®ä¸ä¸âåï¼äº 2026-10-15 11:14:33 对ä¸è¿° 51 å¼ æ£éªåå®æå®¢æ·æ¨å®ç»å®ã顺åºä¸ºåç©æåå²éå®ãåå产åï¼å¯è·¨è§æ ¼ï¼ãåç³»å产ååå²éå®ãæ£éªå BJTRT ä¼ä¸æ è¯ä¸æ¢æå®¢æ·åç§°åèå¹é
ï¼ä¸æ¯åå§å®¢æ·è¯æãå
± 1 æ¡åç©æã11 æ¡ååã31 æ¡åç³»åã8 æ¡ä¼ä¸æ è¯æ¨å®ãæªæ··å¡«éå®å IDãæ£éªæ¥æºæç»è®ºã |
| | | |
| | | åé
为çµå 25 å¼ ãå京åä»å å¥åº·è¯ä¸è¡ä»½æéå
¬å¸ 13 å¼ ãå京åä»å å¥åº·ï¼å¤§è¿ï¼æµ·æ´é£åæéå
¬å¸ 7 å¼ ãå京åä»å å¥åº·è¯ä¸çµåå塿éå
¬å¸ 6 å¼ ãå
¨é¨å®¢æ·ä¸ºæ¢ææææ¡£æ¡ãç»æè§ oqc-binding-result.jsonï¼å¹é
便®ååéè§ oqc-binding-plan.jsonï¼âåºè´§æ£éªå®¢æ·å¹é
æ¸
å.csvâ便äºå¤æ ¸ãæ§âå¾
ç¡®è®¤âæ¸
åä¸ºå½æ¶å¿«ç
§ï¼å½å已宿ç»å®ã |
| | | |
| | | äºå¡å
åç¬ç«è¿æ¥é½åäºå
¨åæ®µæ ¡éªï¼åªææå® 51 å¼ client_id ååï¼å
¶ä½ 79 å¼ æ£éªååææä¸å¡æ¶é´ãç»æãæ°éãç¶æãæ¥æºåæ®µä¿æä¸åï¼å½åå
¨é¨ 130 å¼ åºè´§æ£éªåå®¢æ·ææä¸æ ç©ºç¼ºï¼æ ¸éªè§ oqc-binding-verification.jsonã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import java.io.BufferedWriter; |
| | | import java.io.IOException; |
| | | import java.io.OutputStreamWriter; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.sql.Connection; |
| | | import java.sql.DriverManager; |
| | | import java.sql.ResultSet; |
| | | import java.sql.ResultSetMetaData; |
| | | import java.sql.Statement; |
| | | import java.sql.Types; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.zip.GZIPOutputStream; |
| | | |
| | | /** One-time cleanup of the requested modules in mom-thzynew. No credentials are stored here. */ |
| | | public class Cleanup { |
| | | private static final String DB = "mom-thzynew"; |
| | | private static final String URL = "jdbc:mysql://1.95.78.124:9000/" + DB |
| | | + "?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&connectTimeout=5000"; |
| | | private static final List<String> PRESERVED = List.of( |
| | | "mes_wm_warehouse", "mes_wm_warehouse_area", "mes_wm_warehouse_location", "mes_pro_line"); |
| | | |
| | | private static boolean selected(String table) { |
| | | if (PRESERVED.contains(table)) return false; |
| | | return table.startsWith("crm_") |
| | | || table.startsWith("erp_sale_") |
| | | || table.startsWith("mes_wm_") |
| | | || table.startsWith("mes_qc_") |
| | | || table.startsWith("mes_pro_bag_code") |
| | | || table.startsWith("mes_pro_batch") |
| | | || table.equals("mes_pro_pallet") |
| | | || table.equals("mes_pro_scan_event") |
| | | || table.equals("mes_trace_consumer_scan_event") |
| | | || table.equals("mes_trace_cross_region_warning") |
| | | || table.equals("mes_trace_event") |
| | | || table.equals("mes_trace_integrity_record"); |
| | | } |
| | | |
| | | private static String password() throws IOException { |
| | | String yaml = Files.readString(Path.of("yudao-server/src/main/resources/application-thzy.yaml")); |
| | | return Arrays.stream(yaml.split("\\R")).map(String::trim) |
| | | .filter(line -> line.startsWith("password:")) |
| | | .findFirst().orElseThrow().substring("password:".length()).trim(); |
| | | } |
| | | |
| | | private static List<String> tables(Connection connection) throws Exception { |
| | | List<String> result = new ArrayList<>(); |
| | | try (Statement statement = connection.createStatement(); |
| | | ResultSet rows = statement.executeQuery("SELECT table_name FROM information_schema.tables " |
| | | + "WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")) { |
| | | while (rows.next()) { |
| | | String table = rows.getString(1); |
| | | if (selected(table)) result.add(table); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private static long count(Connection connection, String table) throws Exception { |
| | | try (Statement statement = connection.createStatement(); |
| | | ResultSet rows = statement.executeQuery("SELECT COUNT(*) FROM `" + table + "`")) { |
| | | rows.next(); |
| | | return rows.getLong(1); |
| | | } |
| | | } |
| | | |
| | | private static String hex(byte[] bytes) { |
| | | StringBuilder result = new StringBuilder(bytes.length * 2); |
| | | for (byte value : bytes) result.append(String.format("%02X", value & 0xff)); |
| | | return result.toString(); |
| | | } |
| | | |
| | | private static String literal(ResultSet row, ResultSetMetaData meta, int column) throws Exception { |
| | | Object value = row.getObject(column); |
| | | if (value == null) return "NULL"; |
| | | int type = meta.getColumnType(column); |
| | | if (type == Types.BINARY || type == Types.VARBINARY || type == Types.LONGVARBINARY |
| | | || type == Types.BLOB || type == Types.BIT || type == Types.BOOLEAN) { |
| | | return "0x" + hex(row.getBytes(column)); |
| | | } |
| | | if (type == Types.TINYINT || type == Types.SMALLINT || type == Types.INTEGER |
| | | || type == Types.BIGINT || type == Types.FLOAT || type == Types.REAL |
| | | || type == Types.DOUBLE || type == Types.DECIMAL || type == Types.NUMERIC) { |
| | | return row.getString(column); |
| | | } |
| | | return "CONVERT(0x" + hex(row.getString(column).getBytes(StandardCharsets.UTF_8)) + " USING utf8mb4)"; |
| | | } |
| | | |
| | | private static void backup(Connection connection, List<String> tables, Path destination) throws Exception { |
| | | Files.createDirectories(destination.getParent()); |
| | | try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( |
| | | new GZIPOutputStream(Files.newOutputStream(destination)), StandardCharsets.UTF_8))) { |
| | | writer.write("-- Data backup before requested cleanup of " + DB + "\n"); |
| | | writer.write("-- Restore only after reviewing target schema and current data.\n"); |
| | | writer.write("SET NAMES utf8mb4;\n"); |
| | | for (String table : tables) { |
| | | writer.write("-- " + table + "\n"); |
| | | try (Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, |
| | | ResultSet.CONCUR_READ_ONLY)) { |
| | | statement.setFetchSize(Integer.MIN_VALUE); |
| | | try (ResultSet rows = statement.executeQuery("SELECT * FROM `" + table + "`")) { |
| | | ResultSetMetaData meta = rows.getMetaData(); |
| | | StringBuilder columns = new StringBuilder(); |
| | | for (int i = 1; i <= meta.getColumnCount(); i++) { |
| | | if (i > 1) columns.append(','); |
| | | columns.append('`').append(meta.getColumnName(i)).append('`'); |
| | | } |
| | | while (rows.next()) { |
| | | writer.write("INSERT INTO `" + table + "` (" + columns + ") VALUES ("); |
| | | for (int i = 1; i <= meta.getColumnCount(); i++) { |
| | | if (i > 1) writer.write(','); |
| | | writer.write(literal(rows, meta, i)); |
| | | } |
| | | writer.write(");\n"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | if (args.length < 1 || !List.of("audit", "backup", "delete").contains(args[0])) { |
| | | throw new IllegalArgumentException("Usage: Cleanup audit|backup|delete [backup-path]"); |
| | | } |
| | | try (Connection connection = DriverManager.getConnection(URL, "root", password())) { |
| | | if (!DB.equals(connection.getCatalog())) throw new IllegalStateException("Wrong database"); |
| | | List<String> tables = tables(connection); |
| | | long total = 0; |
| | | for (String table : tables) { |
| | | long rows = count(connection, table); |
| | | total += rows; |
| | | if (rows > 0 || args[0].equals("audit")) System.out.println(table + "\t" + rows); |
| | | } |
| | | System.out.println("TABLES=" + tables.size() + " ROWS=" + total); |
| | | for (String preserved : PRESERVED) System.out.println("PRESERVED " + preserved + "=" + count(connection, preserved)); |
| | | if (args[0].equals("audit")) return; |
| | | if (args.length != 2) throw new IllegalArgumentException("Backup path required"); |
| | | Path backupPath = Path.of(args[1]).toAbsolutePath(); |
| | | if (args[0].equals("backup")) { |
| | | if (Files.exists(backupPath)) throw new IllegalStateException("Backup already exists"); |
| | | backup(connection, tables, backupPath); |
| | | System.out.println("BACKUP=" + backupPath + " BYTES=" + Files.size(backupPath)); |
| | | return; |
| | | } |
| | | if (!Files.isRegularFile(backupPath) || Files.size(backupPath) == 0) { |
| | | throw new IllegalStateException("Backup is missing or empty"); |
| | | } |
| | | if (total != 53982 || count(connection, "mes_wm_warehouse") != 5 |
| | | || count(connection, "mes_wm_warehouse_area") != 3 |
| | | || count(connection, "mes_wm_warehouse_location") != 4 |
| | | || count(connection, "mes_pro_line") != 3) { |
| | | throw new IllegalStateException("Database changed since backup; aborting cleanup"); |
| | | } |
| | | connection.setAutoCommit(false); |
| | | try { |
| | | for (String table : tables) { |
| | | try (Statement statement = connection.createStatement()) { |
| | | System.out.println("DELETED " + table + "=" + statement.executeUpdate("DELETE FROM `" + table + "`")); |
| | | } |
| | | } |
| | | for (String table : tables) { |
| | | if (count(connection, table) != 0) throw new IllegalStateException("Not empty: " + table); |
| | | } |
| | | connection.commit(); |
| | | } catch (Exception failure) { |
| | | connection.rollback(); |
| | | throw failure; |
| | | } |
| | | System.out.println("COMMITTED " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 10æ15æ¥è³æåºç产åéå®å½å
¥æ¸
å |
| | | |
| | | 客æ·ï¼æ»å
¬å¸ï¼å计ï¼2,062,353.18å
ï¼4ç»éå®åæ®ï¼13项产åã |
| | | 忬¾ï¼11æ30æ¥ä¸æ¬¡æç»ï¼ä»
建ç«å款计åã |
| | | ä»å¤©ï¼èæ¡å³è¥å
»ç´ 饮åå
è£
é¨å宿800çï¼å°æªå½¢ææ«éæåï¼å
¶ä½12å·¥åå¾
æäº§ï¼ä¸æåæ¥å·¥ã |
| | | |
| | | | 产å | æ°é | åä½ | 计åå¼å·¥ | 交æ | å·¥å | |
| | | |---|---:|---|---|---|---| |
| | | |γ-æ°¨åºä¸é
¸è¥å
»ç´ 饮åï¼èæ¡å³ï¼|19216|ç|2026-10-15|2026-10-23|WO_20261015004| |
| | | |γ-æ°¨åºä¸é
¸é
¸æ£ä»é¥®åï¼æ¡åå³ï¼|30000|ç|2026-10-20|2026-10-23|WO_20261015005| |
| | | |è¡èç½è¥å
»ç´ 饮|10000|ç|2026-10-22|2026-10-27|WO_20261015006| |
| | | |è¡çº¢ç´ é红æ£é¥®|7992|ç|2026-10-19|2026-10-21|WO_20261015007| |
| | | |çº¢é»æ¸æåæµç¤¼ç-1800ml(30ml*60è¢)|3033|ç|2026-10-20|2026-10-22|WO_20261015008| |
| | | |é»çº¢æ¸æåæµ-30ml|100000|è¢|2026-10-21|2026-10-30|WO_20261015009| |
| | | |æ¸æåæµ-300ml|1400|ç|2026-10-16|2026-10-19|WO_20261015010| |
| | | |黿¸æ250å
ï¼50å
*5ï¼|168|ç|2026-10-19|2026-10-21|WO_20261015011| |
| | | |黿¸æ 大æ 500å
ï¼250å
*2ï¼ç¹ä¼çº§|666|å¥|2026-10-22|2026-10-26|WO_20261015012| |
| | | |é»ææ¸æ-250å
ç²çº§|1800|ç¶|2026-10-26|2026-10-28|WO_20261015013| |
| | | |é»ææ¸æ-90å
|90|ç¶|2026-10-27|2026-10-29|WO_20261015014| |
| | | |éªè|180|ç¶|2026-10-28|2026-10-30|WO_20261015015| |
| | | |æ¡æ¤¹åæµ|1000|ç|2026-10-16|2026-10-16|WO_20261015016| |
| | | |
| | | 以ä¸äº§åç°æBOMä¸å®æ´ï¼æªå¥ç¨å
¶ä»è§æ ¼æèæææï¼è¡èç½è¥å
»ç´ 饮ãè¡çº¢ç´ é红æ£é¥®ãé»çº¢æ¸æåæµ-30mlãé»ææ¸æ-90å
ãéªèãæ¡æ¤¹åæµã |
| | | å表ä¸ç项ç®å·ãè¿åº¦å¤æ³¨åä¿çå¨å¯¹åºåæ®ï¼168çã90ç¶ã180ç¶çå°æ¹éä¿æåæ°ï¼æ²¡æä¸ºäºåæ°éä¸è°ã |
| | | ä»·æ ¼æè¡¨åç»ç®åä»·åé颿§è¡ï¼æªé¢å¤å设ç¨çæè¿½å ç¨æ¬¾ã |
| | | æ°å¢äºè¡¨å
åç¼ç 缺失ç3款æåï¼è§èäºç¸å
³æåçå
è£
åä½åè§æ ¼ï¼åå²åæ®æ°éé颿ªæ¹å¨ã |
| | | 工使¥æ ¡å¯¹åèï¼https://www.gov.cn/zhengce/content/202511/content_7047090.htm |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å½åºç¹æ£ä¿å
»æ¢å¤æªå®æ |
| | | |
| | | æç¨æ·è¦æ±å¤ç2026-10-01 00:00:00è³2026-10-08 00:00:00ï¼ä¸å«æ«ç«¯ï¼çè®°å½ã2026-10-14 20:55:49å·²æäº¤å¹¶è¯»åæ ¸éªï¼943æ¡ç¹æ£ç¶æ20æ¹ä¸º10ï¼å¾
ç¹æ£ï¼ï¼616æ¡ä¿å
»ç¶æ4æ¹ä¸º0ï¼å¾
ä¿å
»ï¼ï¼æ¸
空4065è¡ç¹æ£check_status/check_resultå672è¡ä¿å
»status/resultï¼ä¿ç项ç®åè®°å½å
³èå
³ç³»ã |
| | | |
| | | æå©ä½ææå®æè®°å½éç®åå½±åè®¾å¤æè¿ç¹æ£ãä¿å
»æ¶é´ãæè¿ç¹æ£åæåæåçææè®°å½ï¼æ éæ¹åï¼11å°æè¿ä¿å
»æ¶é´åéå°åæåæå宿çè®°å½ãä¿çcheck_time/mainten_timeä½ä¸ºåè®°å½æ¥æåå¾
å¤çæ¥æï¼æ²¡æå¦è®¾å®ææ¶é´åãæ¹æ¡ä¸ºå¨ææ§å¯ç¨é
ç½®ï¼é忬¡å®æåæ®ï¼386ä»½æ¹æ¡å设å¤/项ç®å
³èä¿æä¸åãæ æ¥æºæç¡®å
³èæ¬æ¹æ¬¡çææç»´ä¿®å·¥åï¼ç¬ç«ç»´ä¿®æ°æ®ä¸åã |
| | | |
| | | æä½äºº244æä¸å¨ãæ¢æå建人ã责任人ãå建æ¶é´ãå
¶ä»æ¥æè®°å½ã设å¤ç±»åä¸å
¶ä»è®¾å¤ä¸å¡å段ä¸åãlocked-before.jsonä¿åäºå¡åææææmes_dvä¸å¡æ°æ®ï¼result.jsonå
å«å®æ´ç®æ è®°å½åæç»IDåè®¾å¤æ¥æåæ´ãäºå¡å
éåæ®µæ ¡éªï¼æäº¤å忬¡è¯»åéªè¯ï¼æªèæèå¤ã鿰宿æç宿§è¡æ
åµã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 两æ¡è®¾å¤ç»´ä¿®å |
| | | |
| | | æç¨æ·æç¡®è¦æ±âé ä¸¤æ¡æ°æ®âï¼äºå京æ¶é´2026-10-14 22:42:16æ°å¢ä¸¤ä»½ç»´ä¿®ååå䏿¡æç»ï¼çæä¾æ®ä¿å卿§è¡ç»ægenerated_at_user_requeståæ®µï¼ä¸å¦åçé¢å¤æ³¨è¿½å è¿ç¨è¯´æã |
| | | |
| | | RP_20260922001ï¼åèªå¨æçæºï¼2026-09-22 09:15æ¥ä¿®ã11:10ç»´ä¿®å®æã11:40éªæ¶ï¼å
³èä¼ å¨åå®ä½é¨ä»¶ç¹æ£é¡¹ç®26ï¼å¤çå®ä½é¨ä»¶æ¾å¨åå¼åã |
| | | |
| | | RP_20261013001ï¼çµåæåºå°å£æºï¼2026-10-13 09:30æ¥ä¿®ã10:55ç»´ä¿®å®æã11:20éªæ¶ï¼å
³èå·å´é£æç¹æ£é¡¹ç®213ï¼å¤çé£æç§¯å°åæ£çé®é¢ã |
| | | |
| | | 两份æç°æç»´ä¿®åå£å¾ä¸ºå·²ç¡®è®¤(4)ãéè¿(1)ï¼æ¥ä¿®å建人ã维修人ãéªæ¶äººãæç»å建人åä¿®æ¹äººå243èµµç£ï¼è®¾å¤é¨å¯ç¨è´¦å·ï¼ãä¸å¡æ¶å»å09:00â18:00å
ï¼å·¥ä½æ¥ä¸ä¸å¨ä¸ç§/å½åºåæï¼æ¥æä¾æ¬¡éå¢ä¸ä¸è¶
è¿æ§è¡æ¶å»ï¼è®¾å¤å项ç®çå建æ¶é´æ©äºç»´ä¿®æ¥æãæªå
³èä¸åå¨çæ¥ä¿®æ¥æºåï¼æ²¡æåå»ºèææè°æ´åºåã |
| | | |
| | | locked-before-20261014-224216.json为æ§è¡åå¤ä»½ï¼result.jsonå«IDãç¼å·åææä¸å¡æ¶å»ãäºå¡å
ä¸æäº¤åæ ¸éªåæè®°å½å®å
¨ä¸åã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 设å¤ç±»åæ´ç |
| | | |
| | | æç¨æ·è¦æ±ï¼äºå京æ¶é´2026-10-14 20:25:21æ´çmom-hm设å¤ç±»å为两个å¯ç¨æ ¹ç±»åï¼ç产设å¤26ï¼ç¼ç SCSBï¼ãå
¶ä»è®¾å¤27ï¼ç¼ç QTSBï¼ãåæ9个车é´ç±»åé»è¾å é¤ï¼134å°ææè®¾å¤éæ°ç»å®ï¼106å°ç产设å¤ã28å°å
¶ä»è®¾å¤ãè®¾å¤æªå é¤ï¼åç§°ãç¼ç ãè§æ ¼ã车é´ãå·¥ä½ç«ãç¶æã夿³¨ãæçãå建人åå建æ¶é´åä¸åï¼ä¿®æ¹äºº244æä¸å¨ï¼å·²æ ¸å®ç产管çåè§è²ã |
| | | |
| | | åç±»ä¾æ®ä¸ºéé¡¹æ ¸å¯¹çåç§°åç¨éãç´æ¥å å·¥ãæ¸
æ´åæãé
å¶ãæåãçèãå
è£
ãæåè¾éãå¨çº¿é屿£æµçå½ç产设å¤ï¼ç©ºè°ã餿¹¿ãå缩空æ°ã便°´ãå·å´ãé¤å°ãæ´è¡£ãæ¸
æ´ãå车ãæååå¨åç¬ç«æ£æµä»ªå¨çå½å
¶ä»è®¾å¤ãä¸é´æ¶²ä½å¨ç½åä¹éå·¥èºå¨ç½å½ç产设å¤ï¼ç¬ç«å¯å°æ§æµè¯ä»ªåçµå¯¼ç仪å½å
¶ä»è®¾å¤ã |
| | | |
| | | before.json为åªè¯»é¢è§ï¼locked-before.jsonä¸ºå®æ´äºå¡åå¤ä»½ï¼å
å«é»è¾å é¤åå²è¡ï¼ï¼result.json嫿¯å°è®¾å¤æ°æ§ç±»åæ å°ãå·²æ£æ¥æ°æ®åºåªæè®¾å¤å°è´¦å¼ç¨ç±»åï¼å
¨é¨ææè®¾å¤åå
³èææç±»åï¼æ æ¬ç©ºå¼ç¨ï¼äºå¡å
åæäº¤å读åéªè¯éè¿ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ¥ææ£éªåé£å彿 è¡¥å
ç»æ |
| | | |
| | | ç®æ åºï¼36.213.150.237:10000 / mom-hmãå¤çæ¥æï¼2026-10-12ã |
| | | |
| | | 59è¡æ¥æºæ°æ®ç´¯è®¡å¯¼å
¥40å¼ æ£éªåã441æ¡æ£éªæç»ï¼æ¤æ¬¡æ°å¢14å¼ ã185æ¡æç»ãæ¥ææ¥æåä¸ºæ£æµæ¥æå15å¤©ãæ£éªåä¿çèç¨¿ç¶æï¼åæ ¼æ°é䏿»ä½ç»è®ºæ¥èªåè¡¨ï¼æªçææä¼ªé 宿µæ°å¼ã |
| | | |
| | | ç©æï¼æ°å¢å±±æ¢¨ç³éã丹åç²2é¡¹ï¼æåç§°åå
è£
è§æ ¼å¤ç¨å·²æç©æ5é¡¹ï¼æªå ç¼ç ä¸åé夿°å»ºãåºä½å±±æ¢¨ç³éä¸å±±æ¢¨ç³éæ¶²åå«ä¿çã |
| | | |
| | | æ¬æ¬¡ä¾æ®å®æ¹CFSAæ 忣æè¡¥å
13ä¸ªæ¹æ¡ã177项æ£éªè¦æ±ï¼å
±æ°å¢147个å¯å¤ç¨ææ ï¼ï¼å¯ç¨12个ï¼é¦ç²¾æ¹æ¡ä»åç¨ãå¦8ä¸ªæªæç¡®éç¨æ åçæ¹æ¡ä¿æåç¨ãææéå¼ä»¥ææ¬æ¹å¼ä¿çï¼æ¡ä»¶é¡¹é¡»æéç¨èå´ã产åå½¢æåæ£éªæ¥æäººå·¥å¤æã |
| | | |
| | | ## 已补å
æ¹æ¡ |
| | | |
| | | |ç©æ|æ§è¡æ å|é¡¹ç®æ°|ç¶æ| |
| | | |---|---|---:|---| |
| | | |DL-è¹æé
¸|GB 25544-2010|13|å¯ç¨| |
| | | |ä¹³é
¸é¾çèç´ |GB 1886.231-2023|13|å¯ç¨| |
| | | |æ¨ç³é|GB 1886.234-2016|12|å¯ç¨| |
| | | |ä¹³é
¸é|GB 1886.21-2016|18|å¯ç¨| |
| | | |山梨ç³é|GB 1886.187-2016|13|å¯ç¨| |
| | | |æ æª¬é
¸é|GB 1903.14-2016|9|å¯ç¨| |
| | | |æ æª¬é
¸é|GB 1903.49-2020|17|å¯ç¨| |
| | | |çæ²¹|GB 29950-2013|12|å¯ç¨| |
| | | |çèç³è·|GB 1886.355-2022|12|å¯ç¨| |
| | | |è¡èç³é
¸äºé|GB 1903.10-2015|12|å¯ç¨| |
| | | |赤èç³é|GB 26404-2011|11|å¯ç¨| |
| | | |é»åè¶|GB 1886.41-2025|18|å¯ç¨| |
| | | |é£ç¨é¦ç²¾|GB 30616-2020|17|åç¨| |
| | | |
| | | æ¨ç³éå山梨ç³é第1å·ä¿®æ¹åèª2026-08-18宿½ï¼å岿£éªä¸è¿½æº¯ä½¿ç¨ä¾å¤ã赤èç³éæ¤æ¬¡ä½¿ç¨GB 26404-2011ï¼æ°çGB 1886.390-2026å¨2027-02-18æå®æ½ãæ æª¬é
¸éæåæ°´åç©éç¨èå´ï¼ä¹³é
¸é䏿 檬é
¸éä¿çåæ°´åå½¢æåæ¯ï¼å¤å®åé¡»æ ¸å¯¹COAãæ ç¾åéç¨èå´ã |
| | | |
| | | ## æç¼è¡ï¼19è¡ï¼ |
| | | |
| | | |Excelè¡|ç¼å·|åç§°|æç¼åå | |
| | | |---:|---|---|---| |
| | | |3|T202609023|L-èµæ°¨é
¸æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼GB 1903.1-2015é对L-çé
¸èµæ°¨é
¸ï¼ç°æåç§°æªè¯æçé
¸çå½¢æï¼ä¸ç´æ¥å¥ç¨ï¼å¾
COA/æ ç¾ç¡®è®¤ã| |
| | | |20|T202609011|çæ©é¦ç²¾æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
补产åç±»å/åå·ãæ¹å对ç
§ååå
¶ç¸å¯¹å¯åº¦/æå
ææ°ï¼æç¼æ£éªå导å
¥ã| |
| | | |22|Y202609003|çèæ ¹æµç¼©ç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼æªæ£å¾å¯ç´æ¥å¯¹åºè¯¥æµç¼©ç²çé£åå®å
¨äº§å彿 ï¼å¾
å·¥èºãé
æ¹åäº§åæ§è¡æ åã| |
| | | |23|Y202609026|ç½çä¸A2æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认åççª/è¡çåå 工形æã产å°ãä¾åºåæ§è¡æ åï¼ä¸å¥ç¨å³é£ççªææ ã| |
| | | |30|Y202609031|é»ææ¸æåæµæ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
ç¡®è®¤åæµå 工工èºãé
æ¹ãæèæ¹å¼åäº§åæ§è¡æ åï¼ä¸å¥ç¨å¹²ææ¸æææ ã| |
| | | |31|Y202609032|é»ææ¸æåæµ-ç»æµåæ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
ç¡®è®¤åæµå 工工èºãé
æ¹ãæèæ¹å¼åäº§åæ§è¡æ åï¼ä¸å¥ç¨å¹²ææ¸æææ ã| |
| | | |32|Y202607039|丹åç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认æ®éé£å/ä¿å¥é£åç¨éãåæéç¨ä¾æ®åäº§åæ åï¼ä¸å°è¯å
¸æ åç´æ¥å½ä½é£å彿 ã| |
| | | |37|Y202608014|å±±è¯ç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认çç²/çç²/åºä½é¥®æ/æ·ç²ææåç©å½¢æåäº§åæ åï¼ä¸å¥ç¨å
¶ä»ç±»å«éå¼ã| |
| | | |38|Y202608021|å±±è¯ç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认çç²/çç²/åºä½é¥®æ/æ·ç²ææåç©å½¢æåäº§åæ åï¼ä¸å¥ç¨å
¶ä»ç±»å«éå¼ã| |
| | | |39|Y202608006|æ¡åç²æ¥ææ£éª|ç¼å·éå¤ï¼æç¨æ·è¦æ±æä¸å¯¼å
¥è¿ä¸¤è¡| |
| | | |41|Y202607016|çèæ ¹æµç¼©ç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼æªæ£å¾å¯ç´æ¥å¯¹åºè¯¥æµç¼©ç²çé£åå®å
¨äº§å彿 ï¼å¾
å·¥èºãé
æ¹åäº§åæ§è¡æ åã| |
| | | |43|Y202608027|ç½çä¸A2æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认åççª/è¡çåå 工形æã产å°ãä¾åºåæ§è¡æ åï¼ä¸å¥ç¨å³é£ççªææ ã| |
| | | |44|Y202608039|ç½çä¸A2æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
确认åççª/è¡çåå 工形æã产å°ãä¾åºåæ§è¡æ åï¼ä¸å¥ç¨å³é£ççªææ ã| |
| | | |51|Y202608050|è±çè¡£ç²æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼GB 1886.323-2021æ¯é£åæ·»å åè±ç衣红ï¼ä¸æ¯è±çè¡£ç²ï¼å¾
åæç¨éãå·¥èºåäº§åæ åã| |
| | | |56|Y202608001|é»ææ¸æ-带æï¼ä¸æï¼æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼0006Så±äºå¾
确认çä¼ä¸æ åç¼å·ï¼é宿´ä¼ä¸æ ååçæ¬ï¼ä¸ä»ç¼å·æ¨å®å½æ ææ ã| |
| | | |57|Y202608002|é»ææ¸æ-带æï¼å°æï¼æ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼0006Så±äºå¾
确认çä¼ä¸æ åç¼å·ï¼é宿´ä¼ä¸æ ååçæ¬ï¼ä¸ä»ç¼å·æ¨å®å½æ ææ ã| |
| | | |58|Y202608041|é»ææ¸æ-å¸¦ææ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼0006Så±äºå¾
确认çä¼ä¸æ åç¼å·ï¼é宿´ä¼ä¸æ ååçæ¬ï¼ä¸ä»ç¼å·æ¨å®å½æ ææ ã| |
| | | |59|Y202608006|é»ææ¸æåæµæ¥ææ£éª|ç¼å·éå¤ï¼æç¨æ·è¦æ±æä¸å¯¼å
¥è¿ä¸¤è¡ï¼æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
ç¡®è®¤åæµå 工工èºãé
æ¹ãæèæ¹å¼åäº§åæ§è¡æ åï¼ä¸å¥ç¨å¹²ææ¸æææ ã| |
| | | |60|Y202608042|é»ææ¸æåæµæ¥ææ£éª|æ¹æ¡æªå¯ç¨æ¥ææ£éªï¼å¾
ç¡®è®¤åæµå 工工èºãé
æ¹ãæèæ¹å¼åäº§åæ§è¡æ åï¼ä¸å¥ç¨å¹²ææ¸æææ ã| |
| | | |
| | | ## æ ¸å¯¹ä¸çæ¡£ |
| | | |
| | | æ£å¼PDFãæ åå叿¶é´/宿½æ¥æãå®ç½è¯¦æ
龿¥ä¿åå¨standardsç®å½ã彿 ææ¯è¦æ±è¡¨åä¿®æ¹åå·²æ¸²ææ£æ¥ãæ°æ®åºäºå¡æäº¤å已夿 ¸æ¹æ¡ç¶æã177æ¡å
³èé¡¹åæ åææ¬ã40å¼ åæ®æ¥æï¼æ°å¢14å¼ åæ®æ§è¡æ ååæ®µå·²éæ¡æ ¸å¯¹ã |
| | | |
| | | [彿 ææ æç»](national-standards-review.csv) · [æç¼æ¸
å](skipped-rows.csv) · [彿 è½åºSQL](national-standards-executed.sql) · [æ°å¢æ£éªåSQL](executed-import.sql) · [æ§è¡æ ååæ®µSQL](national-iqc-execute-standard.sql) |
| | | |
| | | [宿¹é£åå®å
¨å½å®¶æ åæ£ç´¢å¹³å°](https://sppt.cfsa.net.cn:8086/db) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è¥é夿³¨æ´ç |
| | | |
| | | æç¨æ·âéçå®äº¤æä¸è¦åºç°ââæ´ä¸ªè¥éé½å¸®æä¼åä¸ä¸âçè¦æ±ï¼äºå京æ¶é´2026-10-14 21:52:10宿mom-hmè¥éä¸å¡å¤æ³¨æ´çãä»
å¤çremarkåæ®µï¼å建人ãéé¢ãæ¥æãæ´æ°æ¥æãåæ®ç¶æåå
³èå
³ç³»åä¸åï¼ä¿®æ¹äºº291æ±èãè·è¿æ£æåå
¶ä»é夿³¨åæ®µä¸æ¹ã |
| | | |
| | | æ«ææææremarkçææCRMä¸å¡è¡¨åERPéå®è®¢å/æç»ãå»é¤çº¯ä¸å¡é¾æ¼ç¤ºè¯´æãå°è´¦è¡¥å½ãæä»¶æ¥æºå导å
¥è¿ç¨è¯´æï¼çº¯è¯´æå¤æ³¨ç½®ç©ºãä¿ç仿¬¾ç¶æã票å·ãæ¸ éååä¸å¡å
容ï¼ç»ä¸å票称è°ãæ ç¹ï¼ä¿®å¤å·²ç¥æ¬å·é误ãåæºåä¸å¡å¤æ³¨ä¸»è¦ä¸ºå°¾é¨æ ç¹è§èï¼æ²¡æéåå
¶ä¸å¡è¿å±ã忬¾è®¡åæç¡®ä¿çâè®¡åæ¥æå¾
确认âï¼åå¹¶å¼ç¥¨æç¡®ä¿çâåå¼ éé¢å¾
æ ¸å¯¹âï¼ç¼ºå票é件仿 注å¾
è¡¥å
ã |
| | | |
| | | å
±è°æ´1761æ¡ï¼åæº1142ã线索44ã客æ·308ãåå25ãæ¥ä»·26ãæ¥ä»·æç»80ãå¼ç¥¨21ã忬¾5ã忬¾è®¡å26ãéå®è®¢å5ãéå®è®¢åæç»79ãè系人148æ¡ä¸å¡å¤æ³¨åéå®ç®æ çæ éè¦æ¸
ççå
容æªä¿®æ¹ã |
| | | |
| | | preview.json为åªè¯»æ«æï¼locked-before-20261014-215210.json为äºå¡å宿´å¤ä»½ï¼result.jsonè®°å½éæ¡åæä¸æ°æãåæ¼ç¤º/è¡¥å½æ¥æºä¿åå¨å¤ä»½ï¼æ¬æ¬¡åªæ¯å¤æ³¨å±ç¤ºè°æ´ï¼ä¸ææ¼ç¤ºåæ®éæ°è®¤å®ä¸ºçå®äº¤æãäºå¡å
éåæ®µæ¯è¾åæäº¤åå
¨éè¯»åæ ¸éªéè¿ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 10æ8æ¥è³14æ¥ä¸å¡é¾è¡¥å
æ¸
å |
| | | |
| | | å·²åå
¥æå®è¿ç¨ `mom-hm`ãæ¥æéç¨ 2026-10-08ã09ã12ã14ï¼é¿å¼å伿¥ãç¼å·ä¸ä¸å¡åç§°å·²è§èåï¼å¤æ³¨ä¿çè¡¥å½æ¥æºï¼çæçæ£éªç»æä¿çæ ·ä¾æ è¯ã |
| | | |
| | | ## è¥éè³åºåºçåæ¡é¾ |
| | | |
| | | æ¯æ¡é¾å
æ¬åæºãè·è¿ãæ¥ä»·ãååãéå®è®¢åãç产主计åãå·¥åãå·¥åºä»»å¡ä¸åæ°ãæ¥å·¥ãæ¥æåè¿ç¨æ£éªã产åºãæåå
¥åºãåºè´§æ£éªãéå®åºåºå两æå款计åãæªå½å
¥å®é
忬¾ã |
| | | |
| | | ### 2026-10-08 · æ´ççªå³é£ç¢è£
ççªï¼900å
ï¼150å
*6ï¼ï¼ |
| | | |
| | | - 客æ·ï¼å京åä»å å¥åº·è¯ä¸è¡ä»½æéå
¬å¸ï¼æ°éï¼200 çã |
| | | - æ¥ä»·ï¼`BJ-202610-L001`ï¼ååï¼`HT-202610-L001`ã |
| | | - éå®åå·ï¼`26000492`ï¼éé¢ï¼90,174.00 å
ã |
| | | - 主计åï¼`MPS20261008001`ï¼ç产工åï¼`WO_20261008001`ã |
| | | - æç»æåæ¹æ¬¡ï¼`BT_20261008013`ï¼å¯å¨è´¨éæ¹æ¬¡è¿½æº¯ä¸æ¥è¯¢ã |
| | | - å·¥åºä»»å¡/æ¥å·¥ï¼å 10 æ¡ï¼å款计åï¼2 æï¼æ»é¢ä¸ååä¸è´ã |
| | | |
| | | ### 2026-10-09 · å³é£å°ç½æ´ççªï¼360å
ï¼30å
Ã12ï¼ï¼ |
| | | |
| | | - 客æ·ï¼å京åä»å å¥åº·è¯ä¸çµåå塿éå
¬å¸ï¼æ°éï¼200 çã |
| | | - æ¥ä»·ï¼`BJ-202610-L002`ï¼ååï¼`HT-202610-L002`ã |
| | | - éå®åå·ï¼`26000493`ï¼éé¢ï¼54,014.00 å
ã |
| | | - 主计åï¼`MPS20261009001`ï¼ç产工åï¼`WO_20261009001`ã |
| | | - æç»æåæ¹æ¬¡ï¼`BT_20261009013`ï¼å¯å¨è´¨éæ¹æ¬¡è¿½æº¯ä¸æ¥è¯¢ã |
| | | - å·¥åºä»»å¡/æ¥å·¥ï¼å 10 æ¡ï¼å款计åï¼2 æï¼æ»é¢ä¸ååä¸è´ã |
| | | |
| | | ### 2026-10-12 · æ¸æåæµï¼300mlï¼ |
| | | |
| | | - 客æ·ï¼å京åä»å å¥åº·è¯åç»è¥æéå
¬å¸ï¼æ°éï¼200 个ã |
| | | - æ¥ä»·ï¼`BJ-202610-L003`ï¼ååï¼`HT-202610-L003`ã |
| | | - éå®åå·ï¼`26000494`ï¼éé¢ï¼3,842.00 å
ã |
| | | - 主计åï¼`MPS20261012001`ï¼ç产工åï¼`WO_20261012001`ã |
| | | - æç»æåæ¹æ¬¡ï¼`BT_20261012008`ï¼å¯å¨è´¨éæ¹æ¬¡è¿½æº¯ä¸æ¥è¯¢ã |
| | | - å·¥åºä»»å¡/æ¥å·¥ï¼å 3 æ¡ï¼å款计åï¼2 æï¼æ»é¢ä¸ååä¸è´ã |
| | | |
| | | ### 2026-10-14 · 黿¸æåæµï¼1.8Lï¼ |
| | | |
| | | - 客æ·ï¼å京åä»å å¥åº·ï¼å¤§è¿ï¼æµ·æ´é£åæéå
¬å¸ï¼æ°éï¼200 个ã |
| | | - æ¥ä»·ï¼`BJ-202610-L004`ï¼ååï¼`HT-202610-L004`ã |
| | | - éå®åå·ï¼`26000495`ï¼éé¢ï¼35,708.00 å
ã |
| | | - 主计åï¼`MPS20261014001`ï¼ç产工åï¼`WO_20261014001`ã |
| | | - æç»æåæ¹æ¬¡ï¼`BT_20261014008`ï¼å¯å¨è´¨éæ¹æ¬¡è¿½æº¯ä¸æ¥è¯¢ã |
| | | - å·¥åºä»»å¡/æ¥å·¥ï¼å 3 æ¡ï¼å款计åï¼2 æï¼æ»é¢ä¸ååä¸è´ã |
| | | |
| | | ## ä¸å¡äººå |
| | | |
| | | è¥éï¼æ±èï¼291ï¼ï¼çäº§ï¼æä¸å¨ï¼244ï¼ãå¼ æ
§æ¸
ï¼273ï¼ï¼è´¨éï¼åçèï¼289ï¼ãç½åï¼290ï¼ï¼ä»åºï¼æä¸å¨ï¼244ï¼åèå·²æä»åºåæ®ï¼ï¼è½æºï¼èµµç£ï¼243ï¼ã |
| | | |
| | | ## è½æº |
| | | |
| | | 4 æ¡ç¬ç«è®°å½ï¼è¦çæ°´ãçµãè¸æ±½ï¼åä»·åèæ¢æå°è´¦ï¼ç¨é为æ¼ç¤ºè¡¥å
ï¼ä¸ä¸å·¥å建ç«å
³èã |
| | | |
| | | - 2026-10-08ï¼WATERï¼åæµè°é
åºï¼ç¨é 32.600ï¼éé¢ 169.52 å
ã |
| | | - 2026-10-09ï¼ELECTRICITYï¼ççªå å·¥åºï¼ç¨é 1268.500ï¼éé¢ 1052.86 å
ã |
| | | - 2026-10-12ï¼STEAMï¼åæµæèåºï¼ç¨é 1.850ï¼éé¢ 458.80 å
ã |
| | | - 2026-10-14ï¼ELECTRICITYï¼å¨åç«ï¼ç¨é 1586.200ï¼éé¢ 1316.55 å
ã |
| | | |
| | | ## æ ¸éªä¸ä¿æ¤ |
| | | |
| | | - 4 æ¡æåæ¹æ¬¡åè½è¿½æº¯å°åææ¥ææ¹æ¬¡ãæ¥ææ£éªåå
¨é¨å·¥åºï¼å¹¶æ¥å°éå®å»åååºè´§æ£éªã |
| | | - 16 个ç¬ç«åææ¹æ¬¡ã26 ä¸ªå·¥åºæ¹æ¬¡ã124 æ¡åºåæµæ°´ï¼æ°å¢åºåå
¥åºå¹³è¡¡ï¼åæåºåæªæ¹å¨ã |
| | | - 24 å¼ è´¨æ£ååæææ æç»åæ ·ä¾æ£éªç»æã |
| | | - æ°å¢ 3 个éç¨æ£éªæ¹æ¡ï¼å¤æ³¨ä¿çè¡¥å½æ¥æºï¼ä¸æ¹åè´¨éæ åä¸å·¥èº/BOMä¸»æ°æ®ã |
| | | - æ¥ä»·ãååãéå®éé¢ä¸è´ï¼8 æ¡åæ¬¾è®¡åæ»é¢æååæ ¡éªï¼è®¡åæ¥æä¹é¿å¼å伿¥ã |
| | | - æ°æ®åºäºå¡æ¼ç»ãæäº¤åæ°è¿æ¥å¤æ ¸åéè¿ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æä½æ¥å¿è¡¥å
|
| | | |
| | | ç®æ ï¼36.213.150.237:10000 / mom-hmã2026-10-15 09:25:34 æäº¤ï¼09:26:31 使ç¨ç¬ç«è¿æ¥éªè¯éè¿ã |
| | | |
| | | æ°å¢ 922 æ¡æ¥å¿ï¼æ¶å 31 ç±»ä¸å¡ï¼æ¾ç¤ºä¸å¡æ¶é´ä¸º 2026-09-01 è³ 2026-10-14ã大æ¹é客æ·ãç©æãä»»å¡ãæ¥å·¥ãç¹æ£ãä¿å
»çææ¹æ¡ä¸éæ½å代表记å½ï¼ä¸æ¯å
¨éè¡¥é½ãéå¤ä¸å¡æ¥å¿ãé工使¥ãæªæ¥æ¶é´ãéä¹è³åå
«ç¹åäººåæ æ³å¹é
çè®°å½è·³è¿ï¼æç»è§ plan.jsonã |
| | | |
| | | - IP åä¸ºç¨æ·æå®ç 118.213.155.222ãextra 䏿³¨æ IP æ¥æºï¼ä¸å£°ç§°æ¥èªåå§ç½ç»è¯·æ±ã |
| | | - è´¨éä½¿ç¨ inspector_user_idï¼è¥éä½¿ç¨ owner_user_id æ sale_user_idï¼æ¥å·¥ãç¹æ£ãä¿å
»ã维修使ç¨åèªä¸å¡äººååæ®µãç产管çãçäº§é¢æå
¥åºå MDM/MES åºç¡æ°æ®ææ¤åç¨æ·è¦æ±å½å±ç产管çåãæ¥æºå»ºæ¡£äººä¿çå¨ extraã |
| | | - å¨å
卿¥å
¨é¨ä¸æï¼å«è°ä¼å·¥ä½æ¥ï¼9 æ 25â27 æ¥ã10 æ 1â7 æ¥ä¸æã便®ï¼[å½å¡é¢åå
Œ
2026 å¹´é¨åè忥宿](https://www.beijing.gov.cn/zhengce/zhengcefagui/202511/t20251104_4258873.html)ã |
| | | - åä¸å¡æ¶é´ç²¾ç¡®å°ç§çä¿æä¸åï¼106 æ¡åªææ¥ææé¶ç¹çè®°å½å¨åä¸å¤©åé
å±ç¤ºæ¶å»ï¼å¹¶å¨ extra æ æ³¨æ¥æç²¾åº¦å display_time_assignedï¼ä¸è®¤å®ä¸ºçå®è¯·æ±æ¶å»ã |
| | | - æ°æ¥å¿æâä¸å¡è®°å½è¡¥å
âç±»åå reconstructed æ¥æºæ è¯ï¼request_methodãrequest_urlãuser_agent ç空ãactual recorded_at ä¸å岿¾ç¤ºæ¶é´åå«ä¿åã |
| | | - åæ 1954 æ¡æ¥å¿å
¨é¨å段ä¸åï¼ä¸å¡è¡¨ä¸ä¿®æ¹ãbackup 为 locked-before-20261015-092534.jsonã |
| | | |
| | | æ§è¡åéå®å¹¶æ ¡éªæºåæ®ï¼äºå¡å
éåæ®µéªè¯æ°å¢æ¥å¿åæäº¤ãç¬ç«å读éªè¯ç»æè§ verification.jsonï¼ä¸å¡å人ååå¸è§ result.jsonï¼å¯æ¥çâæ¥å¿è¡¥å
æ¸
å.csvâãé²é便® trace_idãæ¥æºè¡¨/ä¸å¡ ID åå·²æå建记å½ã |
| | | |
| | | ## æ¾ç¤ºææ¡è°æ´ |
| | | |
| | | åç»æç¨æ·è¦æ±ï¼å°æ¬æ¹ 922 æ¡æ¥å¿ç sub_type å action æ¹ä¸ºèªç¶ä¸å¡æè¿°ï¼ä¾å¦âé宿¥ä»·ââæ¥ææ£éªââç产æ¥å·¥âï¼å
容使ç¨å½åä¸å¡åæ®ãè´è´£äººãæ¥æãé颿æ°éãæ¾ç¤ºå
容ä¸åå
å«âè¡¥å
ââè¡¥å½ââéåå§âç说æï¼ä¸æ¨æå®¡æ¹ãåæ ¼æå®æçäºå®ãæ©å±å段 extra ä¸ç reconstructedãæ¥æç²¾åº¦ãIP æ¥æºçä¿¡æ¯ä¿æåå¼ï¼æä½äººãæ¶é´ãIP åå
¶ä»ææåæ®µä¿æä¸åãåæ´åå¤ä»½è·¯å¾è§ display-result.jsonãdisplay-changes.jsonã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产ãè´¨éãä»åºå¤æ³¨æ´ç |
| | | |
| | | æç¨æ·æ¿æ¥è¥é夿³¨æ´ççè¦æ±ï¼äºå京æ¶é´2026-10-14 22:01:51宿mom-hm夿³¨å±ç¤ºè°æ´ï¼ç产181ãè´¨é514ãä»åº2274ï¼å
±2969æ¡ãä»
ä¿®æ¹remarkåä¿®æ¹äººï¼ä¸æ¹å建人ãå建/æ´æ°æ¶é´ãæ°éãéé¢ãåæ°å¼ãæ£éªç»æãç¶æãåºåæä¸å¡å
³èãè´¨éä¿®æ¹äºº289ï¼å
¶ä»MESä¸å¡ä¿®æ¹äºº244ï¼å·²æ ¸å®å¯ç¨ã |
| | | |
| | | æ¸
é¤çº¯ä¸å¡é¾æ¼ç¤ºåè¡¥å½è¯´æï¼çº¯è¯´æç½®ç©ºãçäº§åæ°è¯´ææ¹ä¸ºâåæ°å¼å¾
ç°åºæ ¸éªï¼å·¥èºéå¼ä¿æåè¦æ±âï¼æ ·ä¾æ£éªç»æè¯´ææ¹ä¸ºâæ£æµç»æå¾
夿 ¸ï¼ä¸ä½ä¸ºæ¾è¡ä¾æ®âï¼ä¿çéè¡¥æ åãæåæ£éªçå®é
è¦æ±ï¼ä¸éæ°è®¤å®æ£éªææ¾è¡ä¾æ®ã路线ä¿çå®é
é
æ¹ä»¥å®¢æ·å·¥èºæä»¶ä¸ºåã |
| | | |
| | | åºåä¿çæåæ±æ»æ¹æ¬¡ãè·¨çäº§æ¹æ¬¡æ±æ»ãçäº§æ¥æææææ£éªä¿¡æ¯å¾
è¡¥å
ãè§æ ¼å·®å¼ãåç¼ç å½å¹¶åæ¢ç®ç³»æ°ãåå²éå®çéè¡¥åºåä¿æâåå²éå®åºåçéè°æ´ï¼è¡¥å
¥ååºåºï¼ååºåä¸åï¼ä½¿ç¨åºåæ±æ»æ¹æ¬¡âãå½åSKUå
è£
1:1说ææç¡®éå®å½åSKUï¼ä¸ä¿®æ¹ä¸»å使æ¢ç®ä¸»æ°æ®ã |
| | | |
| | | preview.json为åªè¯»æ«æï¼locked-before-20261014-220151.jsonä¸ºå®æ´äºå¡åå¤ä»½ï¼result.jsonä¿åéæ¡æ°æ§å¤æ³¨ãåæ¼ç¤ºåè¡¥å½æ§è´¨ä¿åå¨å¤ä»½ï¼æ¬æ¬¡å¤æ³¨æ´çä¸è¯æå®é
çäº§ãæ£éªæç©æµå·²åçãå·²åäºå¡å
å
¨åæ®µå·®å¼æ ¡éªåæäº¤åå
¨éè¯»åæ ¡éªã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # èå䏿¥å£æéææ¥ç»æï¼2026-10-12ï¼ |
| | | |
| | | å·²æ«æå端 Controller æéãå端æéæ è¯ãç°æèåæéï¼å¹¶æ ¸å¯¹æ´»å¨é¡µé¢è°ç¨çæ¥å£ãæ¤æ¥åæ¯éæä¸è´æ§æ ¸æ¥ç»æï¼ä¸çåäºéè§è²æµè§å¨éªæ¶ã |
| | | |
| | | ## å·²æ§è¡ |
| | | |
| | | - æ¬å°åè¿ç¨ `36.213.150.237:10000/mom-hm` åå·²æ§è¡ `sql/mysql/menu_permission_consistency_patch.sql`ã |
| | | - è¿ç¨ä¿®æ£ 15 æ¡èåè®°å½ï¼æ°å¢ 53 æ¡ç¼ºå¤±æéï¼æ°å¢ 69 æ¡è¶
级管çåèåææï¼68 ä¸ªç®æ æéæ è¯ååå¨ä¸å¯ç¨ã |
| | | - æ¬å°è®¡éå使鿤å已修æ£ï¼æ¬æ¬¡ä¿®æ£å¦å¤ 13 æ¡èåè®°å½ï¼å¹¶æ°å¢ 53 æ¡æéã69 æ¡è¶
级管çåææã |
| | | - ä¿çåèå ID ååæè§è²å
³èãè¦ç计éåä½ãå·¥èºåæ°/模æ¿ãå§å¤é¢æå®æãéä¾åºå宿ãç§»åºã项ç®å½æ¡£ãé宿¥ä»·è½¬ååçæ è¯ä¸ä¸è´é®é¢ã |
| | | - è¡¥é½å·²æé¡µé¢å¯¹åºçæ¥è¯¢ã导å
¥ã导åºã宿çæéãæ°å¢æéèªå¨ææèå´ä»
为è¶
级管çåã |
| | | - ç¨æ· 244 çè§è² 166 仿 `mdm:unit:import`ã`mdm:unit:export`ã |
| | | - æ¬å° Redis å é¤äºä¸è¿°è®¡éå使éç 2 æ¡æ§æéèåç¼åãè¿ç¨ Redis 没æè¿æ¥ä¿¡æ¯ï¼æªæ¸
çï¼è¿ç¨åºç¨é¡»å·æ°æéç¼åæéå¯ã |
| | | - æ¬å°åè¿ç¨é夿§è¡ SQL åå½±å 0 è¡ï¼å¹çéªè¯éè¿ã |
| | | - å端修æ¹ç 14 个 Vue 模æ¿ç¼è¯éè¿ï¼é¦é¡µæé 5 ä¸ªåºæ¯ä¸éåºç»å½åå½èæ¬éè¿ã |
| | | |
| | | ## æ¥è¯¢ææè¡¥å
|
| | | |
| | | ç¨æ·äº 2026-10-12 æç¡®åå¤âå
许补å
âåï¼å·²æ§è¡ `sql/mysql/menu_page_query_role_grants_pending.sql`ï¼åå·²ææå¯¹åºé¡µé¢æéçè§è²è¡¥æè¯¥é¡µæ¥è¯¢æéï¼å
æ¬èªèµã社ä¿ãè夿°æ®ãæ¬å°æ°å¢ 7 æ¡è§è²èåææï¼è¿ç¨æ°å¢ 17 æ¡ï¼ä¸¤åºåæ ¸å¯¹å¾
è¡¥ææä¸º 0ï¼é夿§è¡å½±å 0 è¡ãä¿çå·²æææåå é¤è®°å½ï¼ä¸æ©å¤§å°å°æªææè¯¥é¡µé¢æéçè§è²ã |
| | | |
| | | ## å
¶ä»åç° |
| | | |
| | | éææ¥å£å¹é
å¦åç°é¨åæ§ ERPãAI 页é¢å设计项ç®ä»»å¡ãå¾çº¸è¯å®¡ãBOMãçæ¬åæ´é¡µé¢è°ç¨çæ¥å£ï¼å¨å½åå端没æå¯¹åºå®ç°ï¼éç¥æ¨¡æ¿å¯¼åºãå·¥èµåæ¾å¯¼åºãæ§ MES ç©æå¯¼å
¥æ¨¡æ¿ä¹å卿¥å£ç¼ºå¤±åéãè¿äºä¸è½ç¨å¢å èåæéä¿®å¤ï¼éåç¬ç¡®è®¤åè½æ¯å¦ä¿çå¹¶å®ç°æ¥å£ã宿´åå§æ ¸æ¥è®°å½è§ `permission-api-audit.json` å `permission-audit-report.json`ï¼è§£æå¨æ æ³è§£æç卿è°ç¨ä»éäººå·¥éªæ¶ã |
| | | |
| | | å端æ è¯ä¿®æ¹éè¦é¨ç½²åå¹¶éæ°ç»å½æè½æ´æ°æé®æéï¼SQL 忥æ¬èº«ä¸ä¼é¨ç½²å端代ç ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å·¥åºå»éåå·¥èºè·¯çº¿çæç»æ |
| | | |
| | | å·²åæ¥è³ 36.213.150.237:10000 / mom-hmï¼å¹¶å¨äºå¡æäº¤åæ ¸å¯¹è·¯çº¿å·¥åºé¡ºåºãåç»§å·¥åºåå
¨é¨æ è®°ã |
| | | |
| | | 26 份éä»¶å»éå为 24 份è§ç¨ï¼æ°å¢ 46 个工åºã575 æ¡å¸¦æ¥æºçå·¥åºæä½è¯´æã28 æ¡è·¯çº¿å 421 æ¡è·¯çº¿å·¥åºã |
| | | |
| | | ## è´¨æ£ä¸é¢æè®¾ç½® |
| | | |
| | | - åææµç¨å¾ä¸çå
¨é¨ 90 个æå·æ§å¶ç¹å·²è®¾ç½® `check_flag=1`ï¼éè¦è´¨æ£ï¼ï¼å¹¶å¨å¤æ³¨ä¿ç `*åæå
³é®æ§å¶ç¹`ã |
| | | - æåæ£éªåé屿¢æµä¹è®¾ç½®éè¦è´¨æ£ï¼å
± 122 个路线工åºã |
| | | - å
¨é¨ 421 个路线工åºå为 `backflush_flag=0`ï¼éåå²ãæå¨é¢æã |
| | | - ç³»ç» `key_flag` æ¯å¯ä¸äº§åºå·¥åºï¼ç¨äºç´¯è®¡å·¥å产éåçæäº§åºåï¼å¹¶éåæå¤å¤å
³é®æ§å¶ç¹åæ®µãæ¯æ¡è·¯çº¿ä»
éå
å
è£
æççè£
为产åºå
³é®å·¥åºï¼æææå·æ§å¶ç¹ç¬ç«æ è®°éè¦è´¨æ£ãè¿æ ·é¿å
å¤ä¸ªå·¥åºéå¤ç´¯è®¡æå产éã |
| | | |
| | | ## è·¯çº¿ç¶æä¸èå´ |
| | | |
| | | 28 æ¡è·¯çº¿åæç³»ç»æ°å»ºè§åä¿å为æªå¯ç¨ï¼status=1ï¼ï¼å¯å¨ç产管ççå·¥èºè·¯çº¿ä¸æ¥çãç¼è¾ãå·¥åºä¸»æ°æ®ä¸ºå¯ç¨ç¶æã |
| | | |
| | | è¢è£
ä¸ç¶è£
çåå¤çä¸åï¼æ²æ£åæµç½å¤´ãé»ææ¸æåæµç½å¤´ãæ¡èåæµåççªè½é¥®ååå«çæä¸¤æ¡è·¯çº¿ï¼ä¸¤ä»½é»ææ¸æè§ç¨ç±»å«/çæ¬ä¸åï¼åå«ä¿çã |
| | | |
| | | æªç»å®äº§åææ°å»ºç©æï¼äº§ååç§°ãè§æ ¼ãå
è£
åç©æç±»ååå¨å¤åéï¼ç³»ç»è¿éå¶æ¯ä¸ªäº§ååªè½ç»å®ä¸æ¡è·¯çº¿ãåé产ååå¨ `产ååéåå¾
æ ¸å®äºé¡¹.csv`ï¼æ²¡ææ²¿ç¨è´¨æ£ä»»å¡ä¸çéæºéæ©è§åãBOM ç¨éãæ¹æ¬¡äº§éåç产æ»ç¨æ¶æªå¡«é ã |
| | | |
| | | åææµè¯è·¯çº¿åå
¶äº§åå
³ç³»ä¿æåæ ·ï¼æªçæç产工åæè¿ç¨æ£éªåï¼æªä¿®æ¹æ¤åæ¥æãåºè´§æ£éªæ°æ®ã |
| | | |
| | | ## å·²ä¿ççå·®å¼ |
| | | |
| | | - å³é£èéº¦ç² R åï¼æµç¨å¾åè´¨éçæ§è¡¨æ··å40minï¼æ£ææ··å30minï¼ä¿çå²çªï¼æªæ¿ç¨æ·éå®ç产设å®å¼ã |
| | | - å³é£èéº¦ç² B åï¼æµç¨å¾ææµ¸æ³¡ã沥干ã髿¸©æèãç²ç¢ãè¿çåé屿¢æµï¼æ£ææªå®æ´å±å¼åå¤çï¼æå¾ä¿çæ¥éª¤å¹¶æ 注å¾
æ ¸å®ã |
| | | - çº¢é»æ¸æåæµï¼çº¢æ¸æãé»ææ¸æåèªå¶æµååæµãç³»ç»åªæ¯æä¸æ¡åç»§å·¥åºé¾ï¼éç¨ä¸¤é¡¹å¤åå·¥åºä¿ååæ¯çº¿è¯´æï¼æ¾ç¤ºé¡ºåºä¸è¡¨ç¤ºå°çº¢æ¸æåæåæå°é»æ¸æåå¤ç线ä¸ã |
| | | - é»ææ¸æç«ç°æèï¼å¾ä¸é¢çåè¿40ç®çï¼æ£ææªååï¼å·²ä¿çè¿æ»¤æ¥éª¤ã |
| | | - å»å¹²æ¸ææä»¶ä»å·²å»å¹²åæçå
è£
å¼å§ï¼æªèæå»å¹²å å·¥æ¥éª¤ã |
| | | - 人åèæ ¹æ³æ¤åçç±³ä½èè½é¥®ååææªåå·å´é£å¹²ï¼æªä»å
¶ä»äº§åå¤å¶è¡¥å
¥ã |
| | | |
| | | ## ç³»ç»çææ¸
å |
| | | |
| | | | 路线ID | æ¥æºç¼å· | 产ååå
è£
| å·¥åºæ° | æå·è´¨æ£æ° | |
| | | | ---: | --- | --- | ---: | ---: | |
| | | | 2 | STP-SG-003-01 | ææºé»ææ¸æ | 13 | 2 | |
| | | | 3 | STP-DY-007-00 | é»ææ¸æ | 13 | 2 | |
| | | | 4 | STP-SG-002-04 | å»å¹²æ¸æ | 8 | 0 | |
| | | | 5 | STP-GT-015-04 | æ²æ£åæµç½å¤´ï¼è¢è£
ï¼ | 20 | 5 | |
| | | | 6 | STP-GT-015-04 | æ²æ£åæµç½å¤´ï¼ç¶è£
ï¼ | 20 | 5 | |
| | | | 7 | STP-GT-016-04 | é»ææ¸æåæµç½å¤´ï¼è¢è£
ï¼ | 20 | 0 | |
| | | | 8 | STP-GT-016-04 | é»ææ¸æåæµç½å¤´ï¼ç¶è£
ï¼ | 20 | 0 | |
| | | | 9 | STP-GY-001-06 | å³é£è麦ç²Rå | 8 | 0 | |
| | | | 10 | STP-DY-001-02 | é»ææ¸æè¢æ³¡è¶ | 13 | 2 | |
| | | | 11 | STP-GT-009-07 | æ¸æåæµç½å¤´ | 19 | 5 | |
| | | | 12 | STP-GY-002-05 | å³é£è麦ç²Bå | 14 | 0 | |
| | | | 13 | STP-SG-001-09 | é»ææ¸æ | 13 | 2 | |
| | | | 14 | STP-GT-010-05 | é»ææ¸æç«ç°æè | 18 | 3 | |
| | | | 15 | STP-FB-005-00 | 鿣山è¯ç² | 11 | 3 | |
| | | | 16 | STP-YL-006-00 | æ¡èåæµï¼è¢è£
ï¼ | 13 | 0 | |
| | | | 17 | STP-YL-006-00 | æ¡èåæµï¼ç¶è£
ï¼ | 13 | 0 | |
| | | | 18 | STP-YL-016-00 | çº¢é»æ¸æåæµ | 15 | 5 | |
| | | | 19 | STP-YL-008-00 | ççå
西æ¢
饮 | 15 | 5 | |
| | | | 20 | STP-YL-010-00 | γ-æ°¨åºä¸é
¸é
¸æ£ä»é¥®åï¼æ¡åå³ï¼ | 15 | 5 | |
| | | | 21 | STP-YL-015-00 | äººåæ¸æåæµ | 19 | 5 | |
| | | | 22 | STP-YL-018-00 | é»ææ¸ææ¡èåæµ | 20 | 5 | |
| | | | 23 | STP-YL-009-00 | γ-æ°¨åºä¸é
¸è¥å
»ç´ 饮åï¼èæ¡å³ï¼ | 15 | 5 | |
| | | | 24 | STP-YL-012-00 | èèå¶é»ç´ DHA饮å | 15 | 4 | |
| | | | 25 | STP-YL-017-00 | 人åèæ ¹æ³æ¤åçç±³ä½èè½é¥®å | 17 | 6 | |
| | | | 26 | STP-YL-011-00 | 西æ¢
åæµ | 13 | 6 | |
| | | | 27 | STP-YL-007-00 | ççªè½Î³-æ°¨åºä¸é
¸é±¼è¶åèç½è½é¥®åï¼è¢è£
ï¼ | 13 | 5 | |
| | | | 28 | STP-YL-007-00 | ççªè½Î³-æ°¨åºä¸é
¸é±¼è¶åèç½è½é¥®åï¼ç¶è£
ï¼ | 13 | 5 | |
| | | | 29 | STP-YL-013-00 | DHAè»æ²¹é¥®å | 15 | 5 | |
| | | |
| | | ## æç»å审计 |
| | | |
| | | - [å»éå·¥åºæ¸
å](å»éå·¥åºæ¸
å.csv) |
| | | - [å·¥èºè·¯çº¿çæç»æ](å·¥èºè·¯çº¿çæç»æ.csv) |
| | | - [路线ä¸å·¥åºæç»](å·¥èºè·¯çº¿ä¸å·¥åºæç».csv) |
| | | - [产ååéåå¾
æ ¸å®äºé¡¹](产ååéåå¾
æ ¸å®äºé¡¹.csv) |
| | | - `documents.json`ï¼åæä»¶è·¯å¾ãSHA256 忣æãå `æåææ¬.txt`ãXML åæµç¨å¾ PNG ä¸ºæ ¸å¯¹ä¸é´æä»¶ã |
| | | - `route-plan-with-ids.json`ï¼è·¯çº¿ãå·¥åºãåæè¯æ®ãæ è®°ä¸ç³»ç»IDã |
| | | - `before-route-import.json`ï¼åæ¥åç¸å
³ç³»ç»æ°æ®å¿«ç
§ã |
| | | - `route-import-executed.sql`ï¼å®é
æ§è¡ç SQLã |
| | | - `route-import-result.json`ï¼æäº¤åéªè¯ç»æã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产åºç¡æ°æ®è¡¥å
ç»æ |
| | | |
| | | å·²åæ¥æ°æ®åºï¼`mom-hm`ãæ¥æºä¸ºæ¬æ¬¡ç产工èºè§ç¨ãç°æäº§ååBOMãç°æè½¦é´åç³»ç»åæ°ç±»åã |
| | | |
| | | | é¡¹ç® | æ°é | |
| | | | --- | ---: | |
| | | | 产ååå°å
è£
åæå路线ç»å® | 97 | |
| | | | 已使ç¨è·¯çº¿ï¼å«å®æ´ç产ãå
è£
段ãå°å
è£
è·¯çº¿ï¼ | 46 | |
| | | | æ¬æ¬¡æ°å¢è·¯çº¿åä½ | 23 | |
| | | | 产åBOMå·¥åºæå
¥ | 470 | |
| | | | ç产åºç¡åæ° | 21 | |
| | | | åæ°æ¨¡æ¿ | 63 | |
| | | | 模æ¿åæ°æç» | 99 | |
| | | | è·¯çº¿å·¥åºæ¨¡æ¿ç»å® | 643 | |
| | | | å·¥åºéç¨åæ°ç»å® | 68 | |
| | | | å·¥ä½ç« | 46 | |
| | | | è¡¥å
计éåä½ | 8 | |
| | | |
| | | ## 产åãæå
¥ä¸äº§åº |
| | | |
| | | æåç§°ãè§æ ¼åBOMå
è£
/é
æ¹è¯æ®å¹é
ï¼ç¬¦åæ¡ä»¶çå¤ä¸ªäº§ååå·²ç»å®ãä¸ä¸ªäº§ååªç»å®ä¸æ¡è·¯çº¿ã |
| | | BOMæå
¥ä¿ç忝ä¾ï¼æ¯ä¸ªç´æ¥BOMç¨æåªå®æå°ä¸ä¸ªå·¥åºãå·²çè£
åæåè¿å
¥å
è£
路线ï¼åæåé
æ¹ç¨æè¿å
¥å¶é 路线ãå°å
è£
åæå妿ç产路线ï¼çç¥å¤ç段ã |
| | | 产åºéç产工å产åç¼ç ååä½å¯¹åºãç³»ç»ç©ºäº§åºé
ç½®ä¼åçåéå°å·¥å产åï¼æ²¡æå°å¤ç§æåç¼ç åæåºå®é¦é¡¹ï¼ä¹æ²¡æå°æ´çå·¥å忢æåè¢ç©æèä¿çé误æ°éã |
| | | |
| | | æªèªå¨ç»å® 7 个产åï¼ |
| | | |
| | | - Q2100072 é»ææ¸æ 200å
ï¼100å
*2ï¼ï¼å·²ç»å®ç°æè·¯çº¿1ï¼ä¿çæ¢æç»å®ï¼åé为STP-SG-001-09ã |
| | | - Q2100197 çº¢é»æ¸æåæµ 1.8Lï¼BOMæ¯çº¢ãé»ä¸¤ç§30mlè¢æ¼è£
ï¼ä¸æ¯ææ¡£çº¢é»æ··ååæµï¼ç¼ºæ¼è£
è§ç¨ã |
| | | - Q2100228 çº¢é»æ¸æåæµ 1.8Lï¼BOMåå«ä½¿ç¨çº¢ãé»å
è£
èï¼å±äºä¸¤ç§åæµæ¼è£
ï¼ç¼ºæ¼è£
è§ç¨ã |
| | | - Q2100314 é»çº¢æ¸æåæµ é»ææ¸æåæµ30mlï¼çº¢æ¸æåæµ30mlï¼è§æ ¼æç¡®çº¢åæµ30mlåé»åæµ30ml两ç§ï¼ä¸æ¯æ··ååæµã |
| | | - 12101914 ææºé»ææ¸æåæµ 1.44Lï¼60ml*24ï¼ï¼ææºé»ææ¸æåæµç¼ºææºåæµè§ç¨ï¼ä¸è½å¥ç¨ææºå¹²ææéææºåæµã |
| | | - 74000488 é»ææ¸æï¼é¶æ 240gï¼(å
è´ä¸ç¨ï¼ ï¼240gå¯å¹é
ä¸¤ä»½é»ææ¸æè§ç¨ï¼ç¼ºå°å
è£
åäº§åæ§è¡æ åï¼æä¸éçæ¬ã |
| | | - 74000565 æ¸ææ²æ£åæµç½å¤´ 300mlï¼30ml/è¢Ã10ï¼ï¼æ¸ææ²æ£æ··ååæµæ 对åºé
æ¹è§ç¨ã |
| | | |
| | | 妿 42 个已ç»å®äº§å/åæåæªæ¾å°èªèº«å¶é BOMï¼æªèææå
¥ã24个产å使ç¨å·²å°è£
åæåBOMï¼å·²ç»å®å
è£
段ãå³é£è麦ç²Båææªæ¾å°æç¡®å¯¹åºäº§åï¼è§ç¨è·¯çº¿ååæ°æ¨¡æ¿å·²ä¿çã |
| | | |
| | | ## 忰䏿¨¡æ¿ |
| | | |
| | | 沿ç¨ç³»ç»æ°å¼åæ°ç±»åï¼çäº§è¦æ±æ¨¡æ¿ç±»å1ãèªæ£è¦æ±ç±»å2ãåä½å¤ç¨ç°æMDM计éåä½ï¼è¡¥å
ææ°åº¦ãåéãç§ãå
å¸ã转/åéãæ¯«ç±³ãç¾åæ¯ãç®ã |
| | | æ¸©åº¦ãæ¶é´ãååãçè£
åå«éçæç¡®å·¥èºè¦æ±ä¿å卿¨¡æ¿åæ°å¤æ³¨ï¼ä¿çæ¥æºè§ç¨ã带æå·å·¥åºçæç¡®æ°å¼è®°å½é¡¹è®¾ç½®å¿
å¡«ï¼æªæç¡®çéç¨è®°å½é¡¹ä¸èæéå¼ã |
| | | |
| | | | å·¥åº | ææ¡£è¦æ±ç¤ºä¾ | |
| | | | --- | --- | |
| | | | 微波æè | ææºåSG黿55ï½65âã13ï½15minï¼DY黿åè¢æ³¡è¶50ï½60â | |
| | | | çç©ºè±æ° | -0.07MPa | |
| | | | åè´¨ | 18ï½20MPa | |
| | | | ç¬æ¶çè | 100âã30s | |
| | | | ççè£
| â¥87âï¼å饮åå嫿30/35/50mlæå·¥åå°å
è£
è§æ ¼è®°å½ | |
| | | | æ°´æµ´çè | 90âï¼30minä¸40minå嫿¨¡æ¿ï¼æäº§åè§ç¨ç»å® | |
| | | | é¢çä¿æ¸© | 85âã30min | |
| | | | æèæåè¿æ»¤ | 80±5âï¼2æ¬¡ãæ¯æ¬¡15minï¼120ç® | |
| | | | å±±è¯ç²è¿ç | 80ç® | |
| | | |
| | | Råèéº¦ç²æ··å30/40minå²çªæ²¡æéæ©ç»ä¸æ§è¡å¼ãBååå¤ç髿¸©æèæ°å¼ä»
è§æµç¨å¾ï¼æ¨¡æ¿æ 为å¾
æ ¸å®ã |
| | | ç°ææ¨¡æ¿è¡¨æ²¡æç»æåä¸ä¸éåæ®µï¼ä¹æ²¡æé»è®¤çäº§å®æµå¼åæ®µï¼æ ååå¨å¤æ³¨ï¼å®é
å¼ç±ç°åºå¡«åï¼ç³»ç»ä¸ä¼æ®æ¤èªå¨å¤å®è¶
éã |
| | | |
| | | ## å·¥ä½ç« |
| | | |
| | | ä¸¥æ ¼æä¸ä¸ªå»éå·¥åºå¯¹åºä¸ä¸ªå·¥ä½ç«å»ºç«46个工ä½ç«ï¼å·¥åºåç§°ç¸åä¸å 产åæè½¦é´éå¤å»ºç«ãåèç°æè½¦é´çå²ä½èè´£å½å±ï¼å
¨é¨å
³èå·²æèæçº¿è¾¹ä»ãåºåºååºä½ã |
| | | å·¥ä½ç«å·²å¯ç¨ï¼å®ä½å°åã设å¤ãäººåæªèæï¼å¾
ç°åºèµæè¡¥å½ãç°æè½¦é´ä¿æä¸åã |
| | | |
| | | | ç°æè½¦é´ | å·¥ä½ç«æ° | |
| | | | --- | ---: | |
| | | | ç½å¤´é£åï¼çè£
ï¼è½¦é´ | 13 | |
| | | | é£åè½¦é´ | 8 | |
| | | | æåè½¦é´ | 9 | |
| | | | æååå¤çè½¦é´ | 10 | |
| | | | çäº§è½¦é´ | 6 | |
| | | |
| | | ## æ ¡éªä¸å½åç¶æ |
| | | |
| | | äºå¡åå
¥å¹¶æ ¡éªï¼ä¸å·¥åºä¸å·¥ä½ç«ã产åå¯ä¸ç»å®ãBOMç¨ææ éå¤ä¸æ¯ä¾ä¸è´ãåä½å模æ¿å
³èææãåå·¥åºè´¨æ£æ å¿å®æ´ä¿çãå
¨é¨éåå²ã |
| | | æææ¬æ¬¡å·¥èºè·¯çº¿ä»åç¨ï¼ä¿çæå¨é¢æï¼ç¼ºå°å¶é BOMãè®¡éæ¯ä¾åææ¡£åæ°å²çªé¡¹è§æ¸
åãæ²¡æçææ°çç产工åãæ¥å·¥å®æµå¼ã颿åæåºåæµæ°´ã |
| | | |
| | | ## æä»¶ |
| | | |
| | | - 产å路线å¹é
æç».csv |
| | | - å·¥åºæå
¥å¹é
æç».csv |
| | | - å·¥åºäº§åºå¹é
æç».csv |
| | | - 产åç»å®åæå
¥å¾
æ ¸å®æ¸
å.csv |
| | | - å·¥ä½ç«ä¸å·¥åºè½¦é´å¯¹åº.csv |
| | | - çäº§åæ°å®ä¹.csv |
| | | - çäº§åæ°æ¨¡æ¿æç».csv |
| | | - 路线工åºåæ°æ¨¡æ¿ç»å®.csv |
| | | - binding-import-result.jsonãparameter-station-import-result.jsonï¼æ ¡éªç»æ |
| | | - before-binding-import.jsonãbefore-parameter-station-import.jsonï¼åå
¥åå¿«ç
§ |
| | | - binding-import-executed.sqlãparameter-station-import-executed.sqlï¼å®é
æ§è¡SQLï¼ä¸å«å£ä»¤ï¼ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç产é¨é¨æç |
| | | |
| | | å·²äºå京æ¶é´2026-10-14 20:06:30åæå®mom-hmåºåå
¥å¹¶æ ¸éªãèå´2026-09-01è³2026-10-14ï¼ç产é¨119åä¸çº§ç产车é´126ç45åå¯ç¨ç¨æ·ï¼æä½äºº244æä¸å¨ï¼å·²æ ¸å®ç产管çåè§è²166ã |
| | | |
| | | æç¨æ·è¦æ±09:00â18:00åç½çãåºå®åä¼ãè忥䏿çãæé¤ä¸ç§9æ25æ¥è³27æ¥åå½åº10æ1æ¥è³7æ¥ï¼9æ20æ¥ã10æ10æ¥è½ç¶å®æ¹ä¸ºè°ä¼ä¸çæ¥ï¼ä»ä¾ç¨æ·åºå®åä¼è¦æ±ä¸æçã宿¹æ¥æºï¼https://www.beijing.gov.cn/cs/gncs/zcwj/202603/t20260327_4568275.html ã |
| | | |
| | | æ°å»ºç产类ååå
¸å¼5ï¼åç±»ååªææ³¨å¡ãææå·¥ãç»è£
ãä»åºï¼ãç产ç½çç»ã45个æåã9æå10ææªè³14æ¥ä¸¤ä»½å·²ç¡®è®¤è®¡åï¼ç次å09:00â18:00ãæç³»ç»åççç»æ¥ååå¨26æ¡çç»æçï¼å¯¹åº1170人次ï¼ä¸æ¯1170æ¡è夿æ¥å·¥ï¼ä¸æ¨æå®é
å°å²æ
åµã |
| | | |
| | | 宿´æ§è¡åå¤ä»½locked-before.jsonï¼æ§è¡å
³èå
³ç³»åæé¤æ¥æresult.jsonãäºå¡å
ä¿æ¤æ¢æè®°å½ãé¨é¨åç¨æ·ä¸åï¼æäº¤åéæ°è¯»åå¹¶æ ¸éª26å¤©æ¥æéåãæåéåã计åç¶æåçæ¬¡æ¶é´ï¼æ é夿¥æï¼ä¸å
å«å¨æ«æåæã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # éè¦ç产订åçæ¶é´é´éè°æ´ |
| | | |
| | | å京æ¶é´2026-10-14 23:40:18æäº¤ï¼23:41:15ç¬ç«è¯»åæ ¸éªéè¿ãä»
å¤çæç»need_production=1æå±8å¼ ææéå®è®¢åï¼ä¸ä»¥production_status宿æ 记代æ¿éè¦ç产æ¡ä»¶ãåæ¡£æ°éæéå®è®¢åtotal_countï¼å«å¤ä¸ªéç产产åçè®¢åææ´å宿ï¼å¹¶è¡å·¥ååå«ä¿æå·¥åºå
å顺åºã |
| | | |
| | | éç¨å·¥ä½æ¥å£å¾ï¼09:00â18:00å
宿æ§è¡æ¶å»ï¼ç产工åºåéåé
å¦é¿å¼12:00â13:00ï¼åºå®åä¼ï¼æé¤2026-09-25è³27æ¥ä¸ç§å10-01è³07æ¥å½åºã9æ20æ¥ã10æ10æ¥æç¨æ·æ¤ååºå®åä¼å£å¾ä»ä¸å®æãåæ¥æ¥æºä¸ºå½å¡é¢2026å¹´æ¾å宿ï¼https://www.beijing.gov.cn/cs/gncs/zcwj/202603/t20260327_4568275.html ãä»»å¡èå´è·¨ä¼æ¯æ¥æ¶ï¼ä»
å¨å·¥ä½æ¶æ®µåé
ç产åéï¼ææè®°å½çèµ·æ¢åæ§è¡æ¶å»åå¨å·¥ä½æ¥ãé¢è®¡æææãä¿è´¨æçéå®é
æ§è¡æ¥æä¿çåå¼ã |
| | | |
| | | |éå®è®¢å|æ»æ°é|工使¥å¨æ|è®¢åæ¥æ|åºåºæ¥æ| |
| | | |---|---:|---:|---|---| |
| | | |26000111|99|3|2026-10-09|2026-10-13| |
| | | |26000427|14|2|2026-10-12|2026-10-13| |
| | | |26000442|10037|10|2026-09-22|2026-10-13| |
| | | |26000458|6018|8|2026-09-24|2026-10-13| |
| | | |26000492|200|3|2026-10-08|2026-10-12| |
| | | |26000493|200|4|2026-10-09|2026-10-14| |
| | | |26000494|200|3|2026-10-12|2026-10-14| |
| | | |26000495|200|3|2026-10-12|2026-10-14| |
| | | |
| | | ç¨æ·æç¡®ç¡®è®¤26000495å
³èæ¥ä»·ãååç±10æ14æ¥åç§»è³10æ12æ¥ï¼åå«09:05ã09:10ï¼éå®è®¢å09:20ï¼ç¸å
³äº§åæç»å建æ¶é´åæ¥ãæ¥ä»·ä¸ååå
³èåæºå·²ä¸ºç©ºï¼ä¸æ¢å¤æ¤åå é¤çåæºãå
¶ä»æ¥ä»·ãåååè¥éæ°æ®ä¸æ¹ã |
| | | |
| | | å
±è°æ´49å¼ è¡¨2401æ¡è®°å½ï¼åä»
æ¹åæ¥ææ¶é´å段ï¼ä¸æ¹ä¿®æ¹äºº/å建人ãç¼å·ãæ°éãéé¢ãç¶æãæ£éªç»æãåæ°å¼ãä»»ä½IDæå
³èå
³ç³»ãè¦ç9份主计åã9å¼ å·¥åã83éä»»å¡/æ¥å·¥ãç¸å
³æ¥æåè¿ç¨/åºè´§è´¨æ£ãåºå
¥åºååæç»ã190ç¬åºåæµæ°´åä¸ç¨æ¹æ¬¡/åºåæ¶é´ã强å
³è沿订åã主计åãå·¥åãä»»å¡ãåé¦ãæ¥æºåãæ£éªIDçéåï¼ä¸æç©æåç§°æ¨¡ç³æ©å±ã |
| | | |
| | | åæå
±äº«æååºååå
¨è®¢åå
±ç¨ççéè¡¥åºååæ®ä¿æåæ ·ï¼å
¶å
¥åºæµæ°´æ©äºè°æ´åç对åºåºåºãä»
对å
¨é¨ç¸å
³æµæ°´é½å¨åä¸ç®æ é¾å
çä¸ç¨åºå/æ¹æ¬¡åæ¥æ¶é´ãéåºå对ç
§è°æ´ååçæµæ°´æä½ç´¯è®¡éï¼æªäº§çæ°çå
åºåå
¥ç¼ºå£ï¼åºåæ°éå§ç»æªæ¹åã |
| | | |
| | | snapshot.json为è§åæ¶å¿«ç
§ï¼plan.jsonä¿åéåæ®µä¿®æ¹ååå¼åæ¯å工使¥æéåï¼locked-before-20261014-234018.json为æäº¤å宿´æææ°æ®å¤ä»½ï¼result.json为æäº¤ç»æï¼verification.json为ç¬ç«è¿æ¥è¯»åæ ¸éªãæ ¡éªå
嫿´ååæ¡£å¨æãMPS/å·¥å/å·¥åº/æ¥å·¥å
åãå
æ¥æåæ£éªåå
¥åºãçäº§å®æååºè´§æ£éªååºåºãéç®æ è®°å½å®å
¨ä¸åãæ¥æä¸è¶
æ§è¡æ¶å»ãæ²¡ææ°å¢ãå é¤æåæ´å®¡è®¡æä½æ¥å¿ï¼æ¬æ¬¡ä¸ºç¨æ·è¦æ±çä¸å¡å±ç¤ºæ¶é´æ´çï¼ä¸è¯æçå®ç产æç°åºæ£éªå·²åçã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¨æ£æ£æµé¡¹ãæ¹æ¡ä¸æ¥åä¼å |
| | | |
| | | 已忥è¿ç¨ `mom-hm`ï¼åå§å¿«ç
§ãåæ´SQLåé项æ åæ ¸å¯¹è¡¨å¨åç®å½ä¿åã |
| | | |
| | | - åç»ï¼æå®ä¸æ§ç¶ãçåä¸ç©æ§ãè¥å
»ä¸æ´»æ§æåãå¾®çç©ã污æç©ä¸ééå±ãåå
½è¯æ®çï¼ä¿çç²éä¸é¡¹åç»ã |
| | | - ç»æç±»åï¼205个浮ç¹ã6ä¸ªæ´æ°ã69ä¸ªææ¬ã7个æ ç»æå¼çåç»é¡¹ã |
| | | - 22ç§æ£æµåä½ï¼ç¾åæ¯ãè´¨éåæ°ãæ±¡æç©æµåº¦ãå¾®çç©è®¡æ°åç©æ§åä½ï¼ä¸æ¹äº§åå
è£
åä½ã |
| | | - æ åä¸ä¸éæç°æSOP/彿 èµæåææåï¼æ åå/è¯å纯度ãåçº§ãæ½æ ·æ¹æ¡åæ£åºæ¡ä»¶ä¸åå¹¶æä¸ä¸ªéç¨éªæ¶éå¼ã |
| | | - åæ¥åªæâåæ ¼ãæ£å¸¸âçæåçæ°å¼é¡¹ï¼ä¿çåæå°å¤æ³¨åå¤ä»½ï¼æ°å¼ç空å¾
è¡¥å½æç¡®è®¤ï¼ä¸çæåç宿µæ°åã |
| | | - 12ä»½æææ¥æºæ¥åéæ°çæï¼1ä»½æ¥æºå·²å é¤çæ¥åä¿çåå»ç»æ°æ®ãç©ææ¥å模æ¿å级å°v1.2ï¼æ¾ç¤ºå®æ´æ åè¦æ±å¹¶æ¹åå宽ï¼ä¿çåçæ¬ã |
| | | - 6份æ§PDFéä»¶å
³èä½åºï¼å®ä½æä»¶ä¿çï¼éæ°å¯¼åºPDFå³å¯å徿´æ°æ¥åã |
| | | - 4份æ¥åï¼ID 5ã13ã15ã18ï¼æç°åæ°å¼è¶
åºå¯¹åºæ åï¼è§âæ¥åå¼å¸¸ä¸å¾
æ ¸å¯¹.csvâï¼éäººå·¥å¤æ ¸ï¼åè´¨æ£å人工ç»è®ºæªæ¹å¨ã |
| | | - åéå®ãç产ãåºåãè´¨éåå¤´çæ°éåç¶ææªåï¼ç¬ç«è¿æ¥æ ¸éªéè¿ã |
| | | - å端28项ç¸å
³æµè¯ãå®é
æ¥å渲æåå端ç产æå»ºéè¿ï¼æ¥åå¤å®åæ°å¼è¾å
¥ç代ç ä¿®å¤éå叿°çåå端åçæã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # åºè´§æ£éªå½å
¥å客æ·å¯ç©ºä¿®æ¹ |
| | | |
| | | ç®æ æ°æ®åºï¼36.213.150.237:10000 / mom-hmã |
| | | |
| | | å表 496 è¡ï¼å·²å½å
¥ 220 å¼ åºè´§æ£éªåï¼ID 1â220ï¼ï¼çæ 3,866 æ¡æ¹æ¡æ£éªæç»ï¼276 è¡æç¼ãæäº¤åå·²éåæ ¸å¯¹å表ç¼å·ãæ¥æãæ°éãæ±æ»ç»è®ºãæ£æµäººåãç©æåé宿¹æ¡ï¼å¹¶æ ¸å¯¹æç»æ°éã |
| | | |
| | | ## å½å
¥è§å |
| | | |
| | | - å¤ç¨å
åææ£éªååç§°ä¸ç³»ç»æ¹æ¡å称模ç³å¹é
ãå¤ä¸ªåééæºéæ©åä¿åçæ å°ï¼æ²¡æéæ°æ½åã |
| | | - 客æ·å
¨é¨ä¿åä¸ºç©ºï¼æ²¡æèæå®¢æ·ææ¥æºåºè´§åã |
| | | - ä¿çåè¡¨æ£æµæ¥æãåºè´§æ¥æåæ°éãæ¥ææ¥ææå约 15 天çè§åä»
éç¨äºæ¥æåã |
| | | - æææ°åæ®ä¸ºè稿ï¼å表ä»
æä¾æ±æ»ç»è®ºï¼æ²¡ææ·»å èæç宿µææ ç»ææå®æå®¡æ¹ã |
| | | - 使ç¨ç 9 个已å¯ç¨æ¹æ¡å¢å åºè´§æ£éªéç¨ç±»åï¼1 â 1,3ï¼åæå¯ç¨ç¶ææªä¿®æ¹ï¼åç¨æ¹æ¡æªå¯ç¨ãæ¹æ¡ IDï¼15ã14ã3ã19ã12ã7ã1ã136ã35ã |
| | | - æ¹æ¡åç§°å¹é
åç»å®æ²¿ç¨ç¨æ·æå®è§åï¼å¢å éç¨ç±»åä¸ä»£è¡¨å·²å¦è¡éªè¯è¿äºåææ¹æ¡å¯¹æ¯ç§æåçæ³è§éç¨æ§ã |
| | | - æªå¯¼å
¥è¿ç¨æ£éªï¼æ¥æåè¿ç¨æ£éªåææ°æ®å·²æ ¸å¯¹ä¿æä¸è´ã |
| | | |
| | | ## æç¼æ¸
å |
| | | |
| | | 详è§åç®å½ `åºè´§æ£éª-å½å
¥ç»æåæç¼æ¸
å.csv`ï¼æ¯è¡ååºå
¨é¨ç¼ºé¡¹ãä¸åææ¯è¡é¦ä¸ªåå å½ç±»ï¼å
± 276 è¡ï¼ |
| | | |
| | | | é¦ä¸ªæç¼åå | è¡æ° | |
| | | | --- | ---: | |
| | | | ç©æç¼ç 为空æç³»ç»ä¸åå¨ | 132 | |
| | | | æéè´¨æ£æ¹æ¡åç¨ | 93 | |
| | | | æ£éªåç¼å·éå¤ï¼æªæ
èªæ¹å· | 30 | |
| | | | æ£éªåç¼å·ä¸ºç©º | 11 | |
| | | | åºè´§æ°é为空 | 8 | |
| | | | æ åç§°å¹é
æ¹æ¡ | 2 | |
| | | |
| | | ## 客æ·å¯ä¸ºç©ºç代ç ä¿®æ¹ |
| | | |
| | | - å端ä¿å请æ±å Excel 导å
¥è¯´æåæ¶å®¢æ·å¿
å¡«ã |
| | | - 空客æ·å¯¼å
¥è·³è¿å®¢æ·è§£æåæéæ¥è¯¢ï¼å¡«åå®¢æ·æ¶ä¿çåæå®¢æ·åå¨åæéæ ¡éªã |
| | | - åºè´§å¯¼å
¥å»éå°ç©ºå®¢æ·ä¸æå®å®¢æ·åå«å¤çï¼ç©ºå®¢æ·ä½¿ç¨ `IS NULL`ã |
| | | - å表å
许æ¥è¯¢æ²¡æå®¢æ·çåæ®ï¼å·²ç»å®å®¢æ·çåæ®ç»§ç»æåæå®¢æ·æéè¿æ»¤ã |
| | | - ç¼è¾å
许æ¸
空客æ·ï¼å®ææ£éªçå±é¨æ´æ°ä¿çå·²æå®¢æ·ã |
| | | - å端åºè´§è¡¨å客æ·åæ®µåæ¶å¿
å¡«ï¼å
许æ¸
空ã |
| | | - å·²æä¾ `sql/mysql/mes_qc_oqc_client_optional_20261012.sql` ä¾å
¶ä»æ°æ®åºå级使ç¨ï¼ç®æ è¿ç¨åºå®¢æ·åå·²ç»å¯ç©ºï¼å æ¤æ éæ§è¡æ¤ DDLã |
| | | |
| | | 代ç 已卿¬æºä¿®æ¹ï¼å°æªé¨ç½²å°è¿ç¨åºç¨ï¼é¨ç½²å表åãæ¥å£å空客æ·å表é»è¾çæãè¿ç¨æ°æ®å½å
¥å·²å®æã |
| | | |
| | | ## 审计æä»¶ |
| | | |
| | | å端ç¼è¯å 7 项ä¸é¡¹åå½å·²éè¿ï¼ç©ºå®¢æ·ä¿ååå»éã空客æ·å¯è§æ§ãæå®å®¢æ·æéãå±é¨æ´æ°ä¿ç客æ·ã导å
¥è§£æåä¿åè¯·æ±æ ¡éªï¼ãåç«¯ä¿®æ¹æä»¶ TypeScript è¯æ³æ£æ¥æ é误ï¼å®æ´åç«¯ç±»åæ£æ¥åä¸è¿°å·²æé误é»å¡ï¼å°æªéè¿ã |
| | | |
| | | - `before-oqc-import.json`ï¼äºå¡æ§è¡åç¸å
³æ°æ®å¿«ç
§ã |
| | | - `oqc-import-executed.sql`ï¼å®é
æ§è¡çç±»ååæ´åæ°å¢åæ®ãæç» SQLã |
| | | - `oqc-import-result.json`ï¼æäº¤åæ ¸å¯¹ç»æã |
| | | - `oqc-import-review.json`ï¼ææå表è¡çæ¹æ¡ãç©æãå½å
¥ ID åæç¼åå ã |
| | | - `customer-optional-tests.log`ï¼å端ä¸é¡¹å彿§è¡æ¥å¿ã |
| | | - `frontend-typecheck.log`ï¼å®æ´åç«¯ç±»åæ£æ¥æ¥å¿ãç°æ Vue / @vben 导åºåéå¼ any çé误导è´å®æ´æ£æ¥æªéè¿ï¼æ¬æ¬¡ä¿®æ¹æä»¶ç TypeScript è¯æ³æ£æ¥åç¬æ§è¡ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è¿ç¨ãåºè´§æ£éªåç§°æ¨¡ç³æ å°ç»æ |
| | | |
| | | ç®æ åºï¼36.213.150.237:10000 / mom-hmãå¤çæ¥æï¼2026-10-12ã |
| | | |
| | | ä»
ä½¿ç¨æ£éªååç§°ä¸ç³»ç»è´¨æ£æ¹æ¡åç§°å¹é
ï¼å表âè´¨æ£æ¹æ¡âåæ®µåªçæ¡£ï¼ä¸åä¸è¯åãæ¸
çæ£éªåç¼ãæ åç¼å·ãç©ºæ ¼åæ ç¹ï¼ç»ä¸æ¡æ¤¹/æ¡èã黿¸æ/é»ææ¸æçåæ³ï¼ä¼å
å®å
¨ç¸ååç§°ï¼ååè¾¾å°0.67ä¸è·æé«åä¸è¶
è¿0.04çè¿ä¼¼åéãå¤ä¸ªåéæç¨æ·è¦æ±éæºåä¸ä¸ªï¼å¹¶ææ£éªç±»å«å产ååæä¹
ä¿åï¼éå¤è¿è¡ä¸ä¼éæ°éæºãåå产ååè¡æ²¿ç¨å䏿¬¡éæ©ã |
| | | |
| | | |ç±»å«|æ¥æºè¡æ°|æåç§°åé|æ åç§°åé|å¤ä¸ªåéçè¡æ°|å¯å¯¼å
¥| |
| | | |---|---:|---:|---:|---:|---:| |
| | | |åºè´§æ£éª|496|494|2|352|0| |
| | | |è¿ç¨æ£éª|48|47|1|30|0| |
| | | |
| | | ## æç¼åå |
| | | |
| | | - åºè´§496è¡å®¢æ·åç§°å
¨é¨ä¸ºç©ºï¼åºä¸åºè´§å/åºè´§æç»ä¸ºç©ºï¼ä¸è½åæ¥å®¢æ·ã |
| | | - è¿ç¨48è¡ç产工ååå·¥ä½å
¨é¨ä¸ºç©ºï¼åºä¸å·¥åãå·¥ä½ãç产任å¡ä¸ºç©ºï¼ä¸è½å»ºç«çå®ä¸å¡å
³èã |
| | | - æ¬æºåè¿ç¨ç°æ252ä¸ªè´¨æ£æ¹æ¡å
¨é¨ä»
æ¯ææ¥ææ£éªï¼types=1ï¼ï¼æ è¿ç¨ï¼2ï¼æåºè´§ï¼3ï¼æ¹æ¡ãåç§°åéä¸çäºäº§åéç¨æ§ç¡®è®¤ï¼æ²¡æå°æ¥ææ¹æ¡ç´æ¥æ¹ææå/åæåæ¹æ¡ã |
| | | - åºè´§æ15ç»éå¤ç¼å·ï¼30è¡ï¼å11è¡ç©ºç¼å·ï¼è¿ç¨æ3ç»éå¤ç¼å·ï¼6è¡ï¼ãä»ä¿çåç¼å·å¹¶åå
¥æ¸
åã |
| | | - åºè´§9è¡åºè´§æ°é为空ï¼7è¡åæ ¼/ä¸åæ ¼æ°é为空ï¼è¿ç¨3è¡åæ ¼/ä¸åæ ¼æ°éä¸ºç©ºãæªå¡«é æ£æµæ°éæå®æµæ°æ®ã |
| | | |
| | | ## åç§°åéæè¦ |
| | | |
| | | |ç±»å«|æ£éªååç§°|éæºåéæ¹æ¡|åéæ°é|æ¶åè¡æ°| |
| | | |---|---|---|---:|---:| |
| | | |åºè´§|γ-æ°¨åºä¸é
¸è¥å
»ç´ 饮åï¼èæ¡å³ï¼åºè´§æ£éª|γ-æ°¨åºä¸é
¸åæè´¨æ£æ¹æ¡ï¼015ï¼|1|2| |
| | | |åºè´§|γ-æ°¨åºä¸é
¸é
¸æ£ä»é¥®åï¼æ¡åå³ï¼åºè´§æ£éª|γ-æ°¨åºä¸é
¸åæè´¨æ£æ¹æ¡ï¼015ï¼|2|4| |
| | | |åºè´§|äººåæ¸æåæµåºè´§æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|1|1| |
| | | |åºè´§|å»å¹²æ¸æåºè´§æ£éª|å»å¹²æ¸æåæè´¨æ£æ¹æ¡ï¼003ï¼|1|9| |
| | | |åºè´§|åºæ¢¨åæµç½å¤´åºè´§æ£éª|åºæ¢¨åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼053ï¼|1|1| |
| | | |åºè´§|å³é£è麦ç²Rååºè´§æ£éª|è麦ç²åæè´¨æ£æ¹æ¡ï¼021ï¼|1|4| |
| | | |åºè´§|æ¸æåæµç½å¤´åºè´§æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|1|53| |
| | | |åºè´§|æ¡èåæµåºè´§æ£éª|æ¡èåæµåæè´¨æ£æ¹æ¡ï¼050ï¼|1|1| |
| | | |åºè´§|æ²æ£åæµç½å¤´åºè´§æ£éª|æ²æ£åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼019ï¼|1|4| |
| | | |åºè´§|æ»ç»çæ´ççå³é£ççªç½å¤´åºè´§æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|8| |
| | | |åºè´§|å³é£å°ç½æ´ççªï¼å°äº«æ¬¾ï¼åºè´§æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|28| |
| | | |åºè´§|å³é£ç¢è£
æ´ççªï¼èªçåï¼åºè´§æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|4| |
| | | |åºè´§|æ´ççªå³é£ç¢è£
ççªåºè´§æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|25| |
| | | |åºè´§|å³é£ç¢è£
æ´ççªï¼æ¡ç¢çï¼åºè´§æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|12| |
| | | |åºè´§|å³é£å°ç½æ´ççªåºè´§æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|74| |
| | | |åºè´§|å³é£ç¢è£
é±¼è¶æ´ççªï¼èªçåï¼åºè´§æ£éª|STP-QA-(YL)012ççªè´¨éæ å|3|8| |
| | | |åºè´§|å³é£ç¢è£
çº¢æ£æ¸ææ´ççªï¼èªçåï¼åºè´§æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|7| |
| | | |åºè´§|ççªè½Î³-æ°¨åºä¸é
¸é±¼è¶åèç½è½é¥®ååºè´§æ£éª|γ-æ°¨åºä¸é
¸åæè´¨æ£æ¹æ¡ï¼015ï¼|3|5| |
| | | |åºè´§|ççå
西æ¢
饮åºè´§æ£éª|æ å¹é
|0|2| |
| | | |åºè´§|çº¢é»æ¸æåæµç½å¤´ç¤¼çåºè´§æ£éª|é»ææ¸æ0009Såæè´¨æ£æ¹æ¡ï¼002ï¼|6|8| |
| | | |åºè´§|鿣山è¯ç²åºè´§æ£éª|STP-QA-(YL)067鿣山è¯ç²è´¨éæ å|2|9| |
| | | |åºè´§|人åè¯èçèå¹²å§ç²åºè´§æ£éª|çèåæè´¨æ£æ¹æ¡ï¼045ï¼|4|1| |
| | | |åºè´§|éªèåºè´§æ£éª|éªèåæè´¨æ£æ¹æ¡ï¼007ï¼|1|20| |
| | | |åºè´§|é»çº¢æ¸æåæµåºè´§æ£éª|ãSTP-QA-(YL)035 é»ææ¸æåæµè´¨éæ åã|3|1| |
| | | |åºè´§|é»ææ¸æåºè´§æ£éª|é»ææ¸æ0006Såæè´¨æ£æ¹æ¡ï¼001ï¼|3|100| |
| | | |åºè´§|ææºé»ææ¸æåºè´§æ£éª|ææºé»ææ¸æåæè´¨æ£æ¹æ¡ï¼137ï¼|1|47| |
| | | |åºè´§|é»ææ¸æåæµç½å¤´åºè´§æ£éª|黿¸æåæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼035ï¼|2|40| |
| | | |åºè´§|é»ææ¸ææ¡èåæµåºè´§æ£éª|ãSTP-QA-(YL)035 é»ææ¸æåæµè´¨éæ åã|2|1| |
| | | |åºè´§|é»ææ¸æç«ç°æèåºè´§æ£éª|é»ææ¸æ0009Såæè´¨æ£æ¹æ¡ï¼002ï¼|3|5| |
| | | |åºè´§|é»ææ¸æè¢æ³¡è¶ï¼ä»£ç¨è¶ï¼åºè´§æ£éª|é»ææ¸æ0006Såæè´¨æ£æ¹æ¡ï¼001ï¼|3|10| |
| | | |åºè´§|é»çº¢æ¸æåæµç½å¤´åºè´§æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|3|2| |
| | | |è¿ç¨|æ¸æåæµç½å¤´è¿ç¨æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|1|8| |
| | | |è¿ç¨|å³é£å°ç½æ´ççªè¿ç¨æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|5| |
| | | |è¿ç¨|å³é£å°ç½æ´ççªï¼å°äº«æ¬¾ï¼è¿ç¨æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|2| |
| | | |è¿ç¨|æ²æ£åæµç½å¤´è¿ç¨æ£éª|æ²æ£åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼019ï¼|1|2| |
| | | |è¿ç¨|é»ææ¸æåæµç½å¤´è¿ç¨æ£éª|ãSTP-QA-(YL)035 é»ææ¸æåæµè´¨éæ åã|2|8| |
| | | |è¿ç¨|γ-æ°¨åºä¸é
¸è¥å
»ç´ 饮åï¼èæ¡å³ï¼è¿ç¨æ£éª|γ-æ°¨åºä¸é
¸åæè´¨æ£æ¹æ¡ï¼015ï¼|1|1| |
| | | |è¿ç¨|æ´ççªå³é£ç¢è£
ççªè¿ç¨æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|3| |
| | | |è¿ç¨|å³é£ç¢è£
çº¢æ£æ¸ææ´ççªï¼èªçåï¼è¿ç¨æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|1| |
| | | |è¿ç¨|ççªè½Î³-æ°¨åºä¸é
¸é±¼è¶åèç½è½é¥®åè¿ç¨æ£éª|é±¼è¶åèç½è½åæè´¨æ£æ¹æ¡ï¼055ï¼|3|2| |
| | | |è¿ç¨|å³é£ç¢è£
æ´ççªï¼èªçåï¼è¿ç¨æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|1| |
| | | |è¿ç¨|ççå
西æ¢
饮è¿ç¨æ£éª|æ å¹é
|0|1| |
| | | |è¿ç¨|å³é£ç¢è£
é±¼è¶æ´ççªï¼èªçåï¼è¿ç¨æ£éª|STP-QA-(YL)012ççªè´¨éæ å|3|1| |
| | | |è¿ç¨|æ²æ£åæµç½å¤´ï¼éæºå ï¼è¿ç¨æ£éª|æ²æ£åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼019ï¼|1|1| |
| | | |è¿ç¨|γ-æ°¨åºä¸é
¸é
¸æ£ä»é¥®åï¼æ¡åå³ï¼è¿ç¨æ£éª|γ-æ°¨åºä¸é
¸åæè´¨æ£æ¹æ¡ï¼015ï¼|2|2| |
| | | |è¿ç¨|åºæ¢¨åæµç½å¤´è¿ç¨æ£éª|åºæ¢¨åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼053ï¼|1|1| |
| | | |è¿ç¨|äººåæ¸æåæµè¿ç¨æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|1|1| |
| | | |è¿ç¨|æ»ç»çæ´ççå³é£ççªç½å¤´è¿ç¨æ£éª|ççªåæè´¨æ£æ¹æ¡ï¼012ï¼|2|1| |
| | | |è¿ç¨|é»ææ¸æåæµè¿ç¨æ£éª|ãSTP-QA-(YL)035 é»ææ¸æåæµè´¨éæ åã|2|1| |
| | | |è¿ç¨|æ¸æåæµè¿ç¨æ£éª|æ¸æåæµåæè´¨æ£æ¹æ¡ï¼014ï¼|1|1| |
| | | |è¿ç¨|æ²æ£åæµç½å¤´ï¼é å
»éå¹´ï¼è¿ç¨æ£éª|æ²æ£åæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼019ï¼|1|1| |
| | | |è¿ç¨|é»ææ¸ææ¡æ¤¹åæµè¿ç¨æ£éª|黿¸æåæµï¼æ±ï¼åæè´¨æ£æ¹æ¡ï¼035ï¼|2|1| |
| | | |è¿ç¨|æ¡èåæµè¿ç¨æ£éª|æ¡èåæµåæè´¨æ£æ¹æ¡ï¼050ï¼|1|1| |
| | | |è¿ç¨|å³é£ç¢è£
æ´ççªï¼æ¡ç¢çï¼è¿ç¨æ£éª|STP-QA-(YL)012ççªè´¨éæ å|2|1| |
| | | |è¿ç¨|é»ææ¸æç«ç°æèè¿ç¨æ£éª|é»ææ¸æ0009Såæè´¨æ£æ¹æ¡ï¼002ï¼|3|1| |
| | | |
| | | ææåéä»éè¦éç¨æ£éªç±»åã产åå½¢æåå¯ç¨ç¶ææ ¡éªãå¤å饮åä¸å
¶åä¸åæåç§°è¿ä¼¼ä»
ä½åéåèï¼ä¸è½æ®æ¤å¤ææååæ ¼ãæ¤æ¬¡æªåå
¥æ°æ®åºåæ®ï¼æªæ¹å¨æºExcelã |
| | | |
| | | [åºè´§éè¡æ å°å缺项](åºè´§æ£éª-æ¹æ¡æ¨¡ç³æ å°å缺项.csv) · [è¿ç¨éè¡æ å°å缺项](è¿ç¨æ£éª-æ¹æ¡æ¨¡ç³æ å°å缺项.csv) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¨æ£æ£éªé¡¹è¡¨è¿°æ´ç |
| | | |
| | | 2026-10-14 22:15:08è¿ä¸æ¥æç¨æ·è¦æ±æ¸
é¤212å¤âæ¼ç¤ºââéçå®å®æµâçå 使åã154ä¸ªææ¬ç»æå 使¹ä¸ºâå¾
夿 ¸âï¼24å¤åæ ·ä½ç½®å 使¸
空ï¼ä¸ç¼é ä½ç½®ï¼34夿¹æ³è¯´æä¿çå¤è§/æ°éæ ¸éªå¹¶è¯´ææ¹æ³éç¨æ§å¾
ç¡®è®¤ãæ°å¼ãç¶æãæ¶é´åå
³ç³»å䏿¹ã宿´å¤ä»½display-labels-before-20261014-221508.jsonï¼æ°æ§æ å°display-labels-result.jsonãæäº¤å忬¡æ«æç产ãè´¨æ£ãä»åºææææè®°å½çåç¬¦ä¸²åæ®µï¼ç¸å
³æåå¹é
为0ã |
| | | |
| | | å京æ¶é´2026-10-14 22:10:29æç¨æ·è¦æ±è°æ´287ä¸ªæææ£éªé¡¹ç夿³¨ï¼å°SOPåæä»¶æ¥æºçè¿ç¨è¯´ææ¹ä¸ºç®æ´æ£éªè¦æ±ã6个åç»å廿SOPåç¼ï¼ä¿æåææ£éª-æå®/çå/æå/å¾®çç©/污æç©/åå
½è¯æ®ççåç»å«ä¹ãå
¶ä½ä¸ä¸åç§°åæ åç»æåºåä¿çï¼æ åç§°éå¤ã |
| | | |
| | | ç»æå¤æ³¨æç¡®âä¸åç¬å¤å®æé夿£éªâï¼å½å®¶æ åé¡¹ä»æç¡®äººåå½å
¥å¹¶å¤å®ç»æãä¸è°æ´æ åå¼ãå
¬å¼ãåä½ã仪å¨ãç»æç±»åãæ å½¢å
³ç³»ãç¼ç ãå建人åå建/æ´æ°æ¶é´ãæ¹æ¡ãæ£éªåãå
³èæç»åæ£éªç»æé表æ¯å¯¹å®å
¨ä¸åãä¿®æ¹äºº289ã |
| | | |
| | | preview.json为åªè¯»é¢è§ï¼locked-before-20261014-221029.json为å
¨é¨ææè´¨æ£æ°æ®äºå¡åå¤ä»½ï¼result.jsonä¸ºæ°æ§åç§°å¤æ³¨æ å°ã已宿äºå¡å
æ ¡éªåæäº¤åå
¨éè¯»åæ ¸éªï¼æ¬æ¬¡ä¸å®¡æ ¸ææ´æ¹åæ åå
容ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å忍¡æ¿æ§è¡è¯´æ |
| | | åå§ DOC ä¿æä¸åï¼ä½¿ç¨ Word 转为 reference.docxãçå¼ä»¥è¯¥å¯æ¬ä¸ºåï¼ä¿ç页é¢å°ºå¯¸ãåä½ã段è½ãåååå
¨é¨æ¡æ¬¾åç²æ¹æ¶æ¬¾ä¿¡æ¯ã |
| | | ä»
ç¼è¾ word/document.xmlï¼ä¹æ¹åç§°ãæ é¢ä¸çååç¼å·ä¸æ¥æã产åæç»è¡ãå计å大åéé¢ï¼äº§åè¡å¯ææ°éå
éï¼å两æ¡ç©ºè¡ç§»é¤ï¼è¡¨å¤´è·¨é¡µéå¤ï¼äº§åè¡ç¦æ¢è·¨é¡µæåï¼æ¡æ¬¾æ é¢ä¸åæå页ã |
| | | é颿¥èªååå®é
æ°æ®ï¼å«æ´å伿 æ¶æç¡®æ³¨æä¼æ éé¢åå®ä»å计ãç¾ç« åºåç¾åæ¶é´ä¿ç为空ï¼ä¸èªå¨ä»£ç¾ã |
| | | 忍¡æ¿å¼æ·è¡å为å
¬å¸åç§°ï¼æåæ ·ä¿çï¼æ£å¼ç¾ç½²ååºæ ¸å¯¹ã |
| | | åå§æä»¶ SHA256ï¼b708f48a2f810bb2d55f3eca2c0e6762eff543ce36cee940a4f4adc0f3a65224 |
| | | DOCX SHA256ï¼ec92b4ef44352c40e600a7995f6563511be439943ee7f22d237729f1f11a2481 |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ¥ä»·ãåååéå®è®¢ååæ¥ç»æ |
| | | |
| | | ç®æ ï¼çº¿ä¸ 36 ç mom-hmãæç¨æ·è¦æ±ï¼345 å¼ æ¥ä»·å·²è½¬ä¸º 345 å¼ ååï¼å转为 345 å¼ å·²çæéå®è®¢åï¼1702 æ¡æç»ï¼æ»éé¢ 15,392,805.71 å
ï¼è´è´£äººæ±èï¼291ï¼ã |
| | | |
| | | ååå·ä¸º HT-忥价å·ï¼è®¢åå·ä¸º XSDD-忥价å·ï¼æ¥ä»·ãååã订å已建ç«å
³èã客æ·ãè´è´£äººãåå
è£
åä½ãåä»·ãæ°éãè¡éé¢å订åæç»å¤æ³¨ä¿æåæ¥ä»·æ°æ®ãæ¥ä»·å·²è½¬ååï¼ååä¸è®¢åæç¨æ·æç¡®è¦æ±å
³éå®¡æ ¸åå
审çæï¼ç¶æ20ï¼ãæ¬æ¬¡è½¬æ¢æªçæåºåºæç产计åã |
| | | |
| | | ç¨æ·æç¡®è¦æ±å
³éææå®¡æ ¸ãéèå¯¹åº BPM å®¡æ ¸å
¥å£å¹¶èªå¨éè¿ãå®é
çæå¼å
³ä¸º bpm_process_auto_approve_config ä¸ process_definition_key='*'ãauto_approve=1ã弿åå»ºäººå·¥å®¡æ ¸èç¹æ¶èªå¨éè¿ï¼ä»è®°å½æµç¨å¹¶æ§è¡åä¸å¡éè¿åè°ãå¾
åä»»å¡ãå·²åä»»å¡ãä»»å¡ç®¡çèå已设为éèï¼åæéä¿æãæä½æ¶æ å¾
å¤çä»»å¡ã |
| | | |
| | | ç¬ç«åè¯»æ ¸éªè§ orders-verification.txtï¼æä½ååå¿«ç
§è§ before.xmlãafter-orders.xmlãafter-auto-approve.xmlï¼é忏
åè§ååå订åè½¬æ¢æ¸
å.csvã |
| | | |
| | | åå端代ç 已补å
å®¡æ ¸çé¢å¼å
³ï¼ç»å½æ¶è¯»ååªä¾ç»å½ç¨æ·æ¥çç ui-policyï¼å
³éå®¡æ ¸åéèå®¡æ ¸ç¶æçä¸ç¨æ¥è¯¢å段ãå表åã详æ
åæ®µåæ¥ç审æ¹/åå®¡æ ¸å
¥å£ï¼æäº¤å®¡æ¹æ¹ä¸ºçææä½ï¼æ²¿ç¨ä¸å¡æäº¤æ¥å£ä»¥è§¦åèªå¨æµç¨ãååãéè´ç³è¯·ã仿¬¾åã项ç®ãä¾åºåç³è¯·å人äºç³è¯·å¨èªå¨æ¨¡å¼ä¸è·³è¿æµç¨éæ©å¼¹çªãéæ°å
³éå
¨å±å
å®¡æ ¸æ¶ï¼é¡µé¢æ¢å¤ååæ®µåå¨ä½ãUI æ¹å¨éè¦åå¸åå端æè½å¨è¿è¡ç¯å¢çæã |
| | | |
| | | å端 BPM 模ååä¾èµç¦»çº¿ç¼è¯æåãå®¡æ ¸æ¾ç¤ºçç¥æµè¯ãä¿®æ¹ç Vue èæ¬åæ¨¡æ¿ç¼è¯æåã宿´åç«¯ç±»åæ£æ¥åå½åä¾èµå®è£
é®é¢å½±åï¼å¤§é Vue æ ¸å¿å¯¼åºå Vben å·¥ä½åºå¼ç¨ç¼ºå¤±ï¼æªéè¿å®æ´æ£æ¥ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ¬å°é宿¥ä»·åæ¥ç»æ |
| | | |
| | | 2026-10-12 å·²å½å
¥æ¬å° `mom-hm` ç CRM é宿¥ä»·è¡¨ã |
| | | |
| | | | é¡¹ç® | ç»æ | |
| | | | --- | ---: | |
| | | | æ¥ä»·å | 345 å¼ | |
| | | | 产åæç» | 1,702 æ¡ | |
| | | | 客æ·ä¸»ä½ | 344 个 | |
| | | | 产ååç§°åè§æ ¼ç»å | 36 个 | |
| | | | æç»éé¢å计 | 15,392,805.71 å
| |
| | | | 补建éå®äº§å | 4 个 | |
| | | | ç¶æ | è稿 | |
| | | |
| | | ä»
使ç¨åå®¢æ·æç»å·¥ä½è¡¨ï¼æªä»âæ¥ä»·åæ±æ»æ»è¡¨âæâç¼å¶è¯´æâçæä¸å¡æ°æ®ãæ¥ä»·åå·æ¥èªæç»è¡¨ï¼èå´ä¸º BJ20261012-0001 è³ BJ20261012-0345ãåæä»¶æªä¿®æ¹ã |
| | | |
| | | è´è´£äººä¸ºæ±èãè¿ç¨è´¦å·ä¸º `zhuli`ï¼è¿ç¨æµç§°å¸¦æåå¯¼ç©ºæ ¼ï¼å¹é
æ¶å»é¤ç©ºæ ¼ãæ¬å°åæ 该账å·ï¼å·²åæ¥æ¬æ¬¡æ¥ä»·æéçè´è´£äººè®°å½ãæ¬å°ç¨æ·ç¼å·ä¸º 289ï¼æ¥ä»·åæ°å»ºå®¢æ·åä»¥æ¤æ¬å°ç¼å·å
³èãæªä½¿ç¨è¿ç¨ç¼å·ç´æ¥ææ¥æ¬å°è®°å½ã |
| | | |
| | | æ¬å°åæ 客æ·è®°å½ï¼ææç»è¡¨å®¢æ·ä¸»ä½è¡¥å»º 344 个客æ·ã礼éä»ï¼æ é¡ï¼åè´¸æéå
¬å¸çä¸¤ç§æ¬å·åæ³å
³èåä¸ä¸ªå®¢æ·ï¼ä¸¤å¼ æºæ¥ä»·ååå«ä¿çã |
| | | |
| | | 32 个产åæåç§°ãè§æ ¼åå
è£
对åºå·²æ TC ç³»å产åãå表å
è£
åä½âçãç¶ãæ¡¶ãè¢âå嫿 å°å°æ¬å°åä½ BXãBTãBLãBCï¼åå¨å¨æ¥ä»·æç»è®¡éåä½å段ãåè¡¨å®æ´åç§°åè§æ ¼ä¿ç卿ç»å¤æ³¨ä¸ï¼å¹é
详æ
è§â产åå¹é
æ¸
å.csvâã |
| | | |
| | | 4 个æªè½å¨æ¬å°ææç©æä¸å¹é
çéå®äº§åæå表åç§°åè§æ ¼è¡¥å»ºï¼ä½¿ç¨ç¨³å®ç SQ20261012 ç¼ç ï¼ |
| | | |
| | | - é²å¬è«å¤èï¼4A级ï¼1.01-1.3gï¼/æ ¹Ã9æ ¹ï¼ç¶ã |
| | | - éªèï¼50gï¼ç¶ï¼æªå
³èè³å·²æç140å
éªèã |
| | | - é»ææ¸æç«ç°æèï¼30ml/è¢ï¼è¢ã |
| | | - é»ææ¸æï¼120å
ï¼4g/ç½Ã30ï¼ï¼çï¼æ¬å°å·²å é¤ç TC0020 æªæ¢å¤ã |
| | | |
| | | åä»·ãæ¥ä»·åä»·ãæ°éãæç»å°è®¡åé项ä¿çå表å¼ã7 è¡çåèäºå
¥åä»·ä¹ä»¥æ°éåï¼ä¸æºå°è®¡åå¨ 1ï½2 åå·®å¼ï¼ææºå°è®¡å½å
¥å¹¶å¨å¤æ³¨æ³¨æï¼æ»ä½å·®é¢ä¸º 0.03 å
ã导å
¥æ»é¢æ¥èªåæç»è¡ä¹åï¼ä¸åå®¢æ·æç»è¡¨èªå·±çå计è¡ä¸è´ã |
| | | |
| | | ç¨çæªå¡«åï¼åæ®ä¸æç»ç¨çãç¨é¢ä¿æ NULLï¼æ´åææ£å伿 éé¢ä¸º0ãåè¡¨åæºåç§°â2026å¹´8-10æé¶å®æäº¤âä¿çå¨å¤æ³¨ï¼æªæ®æ¤çææ°çåæºï¼è系人æªå¡«ï¼ä¿æç©ºç½ãæ¥ä»·æ¥æãæææææç»åå¼ä¿å为2026-10-12ã2026-11-11ã |
| | | |
| | | å建 689 æ¡ä»
å
³èæ¬æ¬¡å®¢æ·åæ¥ä»·çè´è´£äººæ°æ®æéï¼344 æ¡å®¢æ·æéã345 æ¡æ¥ä»·æéãä¸å¢å å
¶ä»ç¨æ·çæ°æ®ææã |
| | | |
| | | è¿ç¨æ°æ®åºä»
ç¨äºæ ¸å¯¹å读åè´è´£äººï¼æªåå
¥æ¬æ¬¡æ¥ä»·æ°æ®ã |
| | | |
| | | 导å
¥å¨äºå¡ä¸æ§è¡ï¼æ¢ææ¥ä»·åå·ææç»å²çªä¼åæ»ãæ£æ¥å
æ¬äº§åååä½å¹é
ãæ¯å¼ åæ®çæç»æ°ä¸éé¢ãè´è´£äººå
³èãæ°æ®æéåéå¤åå
¥ï¼æäº¤å忬¡ç¬ç«å读é项æ¯è¾å表ï¼å
¨é¨éè¿ã |
| | | |
| | | 注æï¼å½åæ¥ä»·é¡µé¢å è½½æç»ãç¼è¾ä¿åæ¶ä¼ä¾æ®åä»·åæ°ééæ°è®¡ç®éé¢ï¼ä¸è¿°7è¡ç页é¢å±ç¤ºå¯è½æåä½å·®å¼ï¼ç¼è¾ä¿åè¿å¯è½è¦ç导å
¥æ¶ä¿ççå表å°è®¡ãæ¤æ¬¡æ°æ®åºå¯¼å
¥ååè¯»æ ¸éªä¿çäºå表å°è®¡ã |
| | | |
| | | å¯è¿½æº¯æ°æ®ä¿çå¨ source.jsonãlocal-plan.jsonãæ¥ä»·æç»æ¸
å.csvï¼æäº¤ä¸åè¯»æ ¡éªè®°å½ä¸º local-result.txtãverification-result.txtãå¿«ç
§ä¸å
å«è´¦å·å¯ç ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 线ä¸é宿¥ä»·åæ¥ |
| | | |
| | | 2026-10-12 å·²åæ¥è³ `36.213.150.237:10000` ç `mom-hm`ã |
| | | |
| | | - æ°å¢345å¼ é宿¥ä»·åã1702æ¡æç»ï¼å¯¹åº344个客æ·ä¸»ä½ã |
| | | - æ¥ä»·æç»éé¢å计15,392,805.71å
ï¼è´è´£äººä¸ºçº¿ä¸ç°ææ±èè´¦å· `zhuli`ï¼ç¨æ·291ï¼ï¼ç¶æä¸ºè稿ã |
| | | - å¤ç¨86个已æå®¢æ·ï¼è¡¥å»º258个客æ·ä¸»ä½ï¼å®¢æ·å§åçä¸¤ç§æ¬å·åæ³ç»ä¸å
³èï¼åå§ä¸¤å¼ æ¥ä»·åä¿çã |
| | | - å¤ç¨å·²æäº§åï¼å¹¶è¡¥å»ºé²å¬è«å¤èã50géªèã30mlè¢è£
é»ææ¸æç«ç°æèä¸ä¸ªéå®è§æ ¼ã120å
ä¼ æ¸ é»æ¸æå
³èçº¿ä¸ææ TC0020ï¼ç©æ962ï¼ï¼æé¤åç¼ç å·²å 餿§è®°å½ã |
| | | - æ°å»º603æ¡ä»
䏿¬æ¬¡æ°æ®å
³èçæ±èè´è´£äººæéï¼345æ¡æ¥ä»·æéå258æ¡æ°å»ºå®¢æ·æéï¼å
¶ä½86个客æ·å·²æç¸åºæéã |
| | | - æ±æ»è¡¨æªå¯¼å
¥ï¼ç¨çãç¨é¢ä¿æç©ºç½ï¼åä»·ãæ¥ä»·åä»·ãæ°éãæç»å°è®¡ãæ¥ä»·æ¥æåææææå表ä¿çã |
| | | - 7æ¡æºè¡¨åä»·åèäºå
¥å·®å¼ä¿çåå§åä»·åå°è®¡ï¼å¤æ³¨å¯è¿½æº¯ã页é¢éæ°è®¡ç®å¯è½åºç°åä½å·®å¼ï¼ä¸æ¬å°å¯¼å
¥è¯´æä¸è´ã |
| | | |
| | | 导å
¥ä½¿ç¨äºå¡ï¼æ£æ¥å®¢æ·ã产åã计éåä½ãè´è´£äººãæ¯åæç»æ°åéé¢ãéå¤åå
¥æ£æ¥æ æ°å¢ï¼æäº¤åéæ°ä»çº¿ä¸å读ï¼é项æ¯è¾å表ï¼345å¼ åæ®å1702æ¡æç»å
¨é¨éè¿ã |
| | | |
| | | 线ä¸å®é
ç©æã客æ·åè´è´£äººç¼å·ç¬ç«å¹é
ï¼æªç´æ¥å¥ç¨æ¬å°ç¼å·ãæªè¦ççº¿ä¸æ¢æåæ®æç©æã |
| | | |
| | | è®°å½ï¼remote-result.txtãremote-verification-result.txtãremote-plan.jsonãremote-post-snapshot.xmlã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # éå京åä»å å®¢æ·æ¥ä»·å
³èåæº |
| | | |
| | | æç¨æ·è¦æ±ï¼äºå京æ¶é´2026-10-14 23:08:12è¡¥é½16份éå京åä»å å®¢æ·æ¥ä»·çåæºå
³èã对åºååå·²ç»æç¡®å
³è16个已æåæºï¼æ
ç´æ¥å¤ç¨ï¼ä¸é夿°å»ºåæºãæååå«ç¨äº§åå£å¾è¡¥34è¡åå
缺失çåæºäº§åï¼è¡¥äº§åæ»éé¢ãé¶ææ£ååéå®è®¢åID/ç¼å·ï¼åæºæ»éé¢ãé¢è®¡æäº¤æ¥æãåå»ºæ¥æåé¶æ®µå䏿¹ãå·²æ ¸éªååæºäº§åéé¢ä¸ååæºæ»é¢ä¸è´ã |
| | | |
| | | æ¥ä»·æ¥æååå»ºæ¥æä»¥ä¸æ©äº2026-09-17为ä¸éï¼ä¸è¶
è¿æ§è¡æ¶é´ï¼ä¿æä¸¤è
ç¸çï¼6份æ¥ä»·åæ¥ææ©äºä¸éï¼æ¹ä¸º2026-09-17ï¼å
¶ä½10份忥æä¿çãå
³èæ¥ä»·æç»åå»ºæ¥æåæ¥ç¶åãä¿çæ¥ä»·åæ´æ°æ¶é´ï¼ä»
å½å°äºè°æ´åçåå»ºæ¥ææ¶ææåè³åå»ºæ¥æã |
| | | |
| | | 客æ·åç§°å
å«å京åä»å çæ¥ä»·ãåæºåå
¶å
³èæ°æ®å®å
¨ä¸åãååã订åãå票ãå®é
忬¾å忬¾è®¡åæ¥æ/ç¶æ/éé¢å䏿¹ï¼æªåæ¥æ¨åæ©äºæ¥ä»·æ°æ¥æçåå²å忥æï¼è¿æ¯ç¨æ·æå®çæ¥ä»·æ¶é´æ´çï¼åæ¥æä¿åå¨å¤ä»½ã |
| | | |
| | | preview.json为åªè¯»æ ¸å¯¹ï¼locked-before-20261014-230812.json为äºå¡å宿´å¤ä»½ï¼result.json为æ¥ä»·-åæº-åå-订å对åºå
³ç³»åæ°äº§åIDãæä½äºº291æ±èï¼å·²æ ¸éªæ°æ®è´è´£äººæéãäºå¡å
éåæ®µä¿æ¤åæäº¤åå
¨éè¯»åæ ¸éªéè¿ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 乿éå®å°è´¦è¡¥å½ |
| | | |
| | | 2026-10-13 14:33:06æç¨æ·è¦æ±æ¸
ç22份ååå24å¼ éå®è®¢åè¡¨å¤´å¤æ³¨ç乿å°è´¦è¡¥å½ãåæ¨æ¥æã导å
¥è¡å·ãåç»ä¸å°¾å·®è§£éççæè¯´æãååä¿çå仿¬¾ç¶æãå¼ç¥¨è¯´æå票å·ï¼éå®è®¢åç§»é¤çæè¯´æï¼æ å
¶ä»ä¸å¡å¤æ³¨ç置空ï¼è´æ°éè´§åä¿çé货说æãæç¡®åååupdate_timeï¼ç»´æç¨æ·æå®çååæè¿10å¤©æ´æ°æ¶é´åå¸ï¼å建æ¶é´ãéé¢åå
¨é¨å
¶ä»ä¸å¡å段ä¸åãç»æcontract-order-remarks-cleaned-result.jsonãå¤ä»½contract-order-remarks-before-20261013-143306.jsonï¼å·²æäº¤å¹¶æ ¸éªã |
| | | |
| | | 2026-10-13 14:25:30æç¨æ·è¦æ±å°22份ææååupdate_timeéæºåå¸äºæè¿10天ï¼å京æ¶é´2026-10-03 14:25:30è³æ§è¡æ¶å»ï¼ï¼å®é
èå´2026-10-03 14:52:46è³2026-10-12 17:07:14ãæ¯æ¡å䏿©äºcreate_timeãä¸æäºæ§è¡æ¶å»ï¼ä»
æ¹åupdate_timeï¼ä¸ä¿®æ¹æä½æ¥å¿æå
¶ä»åååæ®µï¼è¿æ¯ç¨æ·è¦æ±çæ°æ®å±ç¤ºæ¶é´è°æ´ï¼ä¸ä½ä¸ºå®é
ä¿®æ¹äºä»¶æ¶é´è¯æãç»æcontract-update-times-result.jsonï¼å¤ä»½contract-update-times-before-20261013-142530.jsonï¼å·²æäº¤å¹¶æ ¸éªã |
| | | |
| | | 2026-10-13 14:13:07æç¨æ·è¦æ±å°å®é
è¥éä¸å¡å建æ¶é´åæ¥ä¸ºä¸å¡æ¥æï¼æ¥ä»·22ãåå22ã订å24ãå¼ç¥¨21ãå®é
忬¾5ï¼å
±94å¼ åæ®ï¼æ¥ä»·/åå/订åæç»å76è¡ï¼å
±228è¡åæ¥ç¶åä¸å¡æ¥æãæ¥æåªææ¥ç²åº¦çéç¨ååæ®µç00:00:00ï¼æªæ¨æå
·ä½æ¶åç§ãæç¨æ·æç¡®ç¡®è®¤ä¿ç忬¾è®¡åååæºé¢è®¡æ¥æåå建æ¶é´ï¼å®¢æ·ã线索ãè·è¿é¢çº¦æ¶é´ä¹ä¸ä½ä¸ºåå»ºæ¥æãåå建人åå
¨é¨ä¸å¡å段ä¸åï¼ä¿®æ¹äººåæ´æ°æ¶é´è®°å½æ¬æ¬¡è°æ´ãæ§è¡ç»æbusiness-create-times-result.jsonï¼å¤ä»½business-create-times-before-20261013-141307.jsonï¼æç»è¥éä¸å¡å建æ¶é´åæ¥æ¸
å.csvï¼å·²æäº¤å¹¶æ ¸éªã |
| | | |
| | | 2026-10-13 14:07:48æç¨æ·è¦æ±å°22份é宿¥ä»·åç§°åæ¥ä¸ºå
¶contract_idæç¡®å
³èçåååç§°ï¼æªä¿®æ¹åå忥价å
¶ä»ä¸å¡å段ãquotation-name-sync-result.jsonè®°å½å¯¹åºå
³ç³»ï¼quotation-name-sync-before-20261013-140748.jsonä¿åæ§è¡åå¤ä»½ï¼å·²æäº¤å¹¶æ ¸éªã |
| | | |
| | | 2026-10-13 14:05:45æç¨æ·è¦æ±å»æ22份åååç§°å¼å¤´çâ乿å°è´¦-âï¼å
¶ä½åç§°é¨ååååä¸å¡å段ä¸åãæ§è¡ç»æcontract-name-prefix-result.jsonï¼æ¸
çåå¤ä»½contract-name-prefix-before-20261013-140545.jsonï¼å·²æäº¤å¹¶æ ¸éªã |
| | | |
| | | 2026-10-13 13:10:19æç¨æ·è¦æ±æ¸
ç©ºæ¬æ¬¡23å¼ åè´§éç¥å23å¼ éå®åºåºåçè¡¨å¤´å¤æ³¨ï¼æç»ãå
¶ä»å
¥åºå夿³¨åä¸å¡å段ä¸åãæ¸
空åå¤ä»½shipping-remarks-before-20261013-131019.jsonï¼æäº¤åå·²æ ¸éª46å¼ åæ®å¤æ³¨ä¸ºç©ºãè¿åå·ä»ä¸ºæ¨¡æçæï¼æ¥æºè¯´æä¿ç卿§è¡ç»æåé
鿏
åä¸ã |
| | | |
| | | **åºåºåè´§ææ°è¿å±ï¼2026-10-13已宿23å¼ æ£å订åã23å¼ åè´§éç¥ã23å¼ éå®åºåºåå75è¡æç»ï¼ERP为å
¨é¨åºåº(3)ï¼MESéç¥/åºåºä¸ºå·²å®æ(4)ã26000369éè´§è´æ°åä¸èµ°æ£ååè´§ãæç¨æ·è¦æ±å
çéè¡¥åºåååºåºï¼å¦å»ºå
¶ä»å
¥åºåQTCKDC-202609-20261013ã75è¡å
¥åºæç»å对åºåºåæµæ°´ï¼150ç¬å
¥/åºåºæµæ°´åé¢ä¸ºé¶ï¼75æ¡å ç¨è®°å½åå·²åºåº(3)ãåæ855æ¡åºåè®°å½æ°éãå»ç»éãå ç¨éãå¨ééçä¸å¡å段å®å
¨ä¸åï¼3ç§åæ¥æ åºåçæ°å¢ç©æå»ºå岿±æ»æ¹æ¬¡ååºåè®°å½ï¼æç»æ°éå为0ãç¬ç«æ ¸éªè§shipping-complete-verification.jsonï¼é
鿏
åè§ä¹æéå®åºåºåè´§æ ¸å¯¹æ¸
å.csvã** |
| | | |
| | | é
éï¼æ®éçµå8ååæé³çµå2åå为京ä¸ï¼10åï¼ï¼è¿åå·æç¨æ·è¦æ±æ¨¡æçæå¹¶å¨åæ®ä¸æ 注ï¼éçå®ç©æµåè¯ï¼æªåæ¿è¿åä¸åãå
¶ä½13åä¸ºèªæè½¦è¾é
éï¼è½¦çä»
è®°å½ç¨æ·æä¾çéHåç¼ï¼æ²¡æèæå®æ´è½¦çï¼é
éåå·ä¸ºå
é¨ç¼å·ãåæ®ä¸ºå岿µç¨è¡¥å½ï¼æ¶é´ä½¿ç¨å®é
æ§è¡æ¶é´ï¼æªå®£ç§°ç°å®è´§ç©å·²éè¾¾ã |
| | | |
| | | åä½ï¼9è¡æ¶å6个SKUçç¶/ç/个计æ°ç§°è°ä¸åï¼æç¸å宿´æåè§æ ¼çå
è£
计æ°1:1è¡¥å½ï¼ä¾æ®é项记å¨shipping-complete-result.jsonçunit_basiså忮夿³¨ï¼æªå»ºç«éç¨å使¢ç®ãæªä¿®æ¹ç©æä¸»åä½ãæ¹æ¬¡æ²¿ç¨9æåºåå§åæ±æ»æ¹æ¬¡ï¼æ°å¢æ¹æ¬¡æ³¨æåå²å¯¹å²ï¼æªèæçäº§æ¥ææè´¨æ£åæ ¼ç¶æã |
| | | |
| | | ç»æä¿®å¤ï¼å
¶ä»å
¥åºè¡è¡¥é½ä»£ç DOéè¦çbatch_codeãwarehouse_idãlocation_idãarea_idï¼å
¶ä»å
¥åºæç»è¡¥é½batch_codeï¼å为å¯ç©ºåãåç»æä¿åå¨shipping-receipt-schema-before.jsonåshipping-receipt-detail-schema-before.jsonï¼ä¸å¡æ§è¡åå¤ä»½ä¸ºshipping-complete-locked-before.jsonãå·²åäºå¡å
æ ¡éªåæäº¤åçç¬ç«æ°æ®åºæ ¸éªï¼æªæ§è¡çº¿ä¸HTTPææµè§å¨éªè¯ã |
| | | |
| | | **ææ°å®¢æ·å½å±æ´æ£ï¼å¤æ³¨ä¸ºâï¼çµåï¼âç7个ååå客æ·ä¿¡æ¯ç¼ºå¤±ç26000113å计8åç»ä¸å½âçµåâï¼å计2,030,440.62å
ãå·²åæ¥è®¢åãååãæ¥ä»·ãå¼ç¥¨ã忬¾è®¡åcustomer_idï¼åå¼ç¥¨æ¬å¤´åææè´¢å¡éé¢ä¸åã夿³¨âæé³çµåâç26000457ã26000491ä»å½å京åä»å å¥åº·è¯ä¸çµåå塿éå
¬å¸ãææ°æ ¸éªä¸º`current-sales-verification.json`ï¼ææ°24å¼ è®¢åæ¸
åå·²æ´æ°ã** |
| | | |
| | | **ææ°æ´æ£ï¼ç¨æ·ç¡®è®¤ç¸ååæ®å·ä¸ä¸ªè®¢åãç°ä¸º24å¼ è®¢åã76è¡æç»ï¼è®¢åå·ç´æ¥ä½¿ç¨ååæ®å·ãåå¼ç¥¨ç»202609-L008æä¸º26000393ã26000406ã26000369ä¸å¼ ï¼éè´§åå26000369ä¿ç-24/-4272å
ãåå忥价ä»å22份ï¼å¼ç¥¨ã忬¾åè®¡åæªéå¤å¢å ï¼é宿»éé¢ä¸åãææ°æ¸
å为`乿éå®è®¢åæåæ®å·æ¸
å.csv`ï¼æ ¸éªä¸º`source-order-verification.json`ãä¸é¢22ç»æè¿°æ¯åå§å¼ç¥¨/åååç»ãä¸ä¸ªåå¹¶ååçorder_id/order_noä¿ç第ä¸å¼ 主å
³è订åï¼å¦å¤ä¸¤å¼ 订åéè¿contract_idå
³èåä¸ååã** |
| | | |
| | | ç®æ åºï¼36.213.150.237:10000 / mom-hmãæ¥æºä»
åå·¥ä½ç°¿ `26.9æ` 第4â81è¡ï¼æOååå¹¶éé¢åç»ï¼æªéå¤å¯¼å
¥å¹´åº¦æ±æ»é¡µã |
| | | |
| | | ç¨æ·ç¡®è®¤è§åï¼ç¼ºå®¢æ·æå¤æ³¨æ°å¢ï¼399使ç¨399é¶å·åºï¼æ 客æ·ä¿¡æ¯æ°å¢çµåï¼å°è´¦æ¥æåå¼ç¥¨æ¥æï¼æªæ¶åé¨å忬¾çææªæ¶ä½é¢è®¡åï¼å®å
¨å款ä¸å»ºè®¡åï¼åå¹¶éé¢è´æ°ä¸å½å
¥ã |
| | | |
| | | åå§éå®å¯¼å
¥ç»æï¼22ç»éå®è®¢åã忍ååãæ¥ä»·ï¼76è¡æç»ï¼21æ¡å¼ç¥¨åå¹¶è®°å½ï¼ä¿ç24个å票å·ï¼5ç¬å款ã18æ¡ä½é¢è®¡åï¼æ°å¢6客æ·ã3ç©æãæ£éé¢åç»å
ç第36è¡éè´§ä¿çï¼è´åå¹¶éé¢ç¬¬62ã71è¡æé¤ãåå§é¶æ®µæ²¡æåºåæç产è¿è´¦ï¼åç»è®¢åæåååºåºè§ä¸æ¹ææ°è¿å±ã |
| | | |
| | | éé¢ï¼å«ç¨éå®12,404,821.61å
ï¼å款415,050.01å
ï¼è®¡åä½é¢11,989,771.60å
ãææ¯ä¸ªåå¹¶ç»çéé¢åèäºå
¥è³åï¼å æ¤æ»åå¯è½ä¸åå§å¤ä½å°æ°ç´æ¥æ±æ»ååæ´ç¸å·®1åãåé¢ç¨é¢ä¸åå¹¶éé¢å·®0.31å
ï¼ç»è®°ä¸ºæ¾å¼éé¢å°¾å·®ï¼ä¸è°æ´æ¥æºç¨çãååæç»å«ç¨ï¼æ¥ä»·ä¸è®¢åæç»ä¸ºç¨åéé¢ï¼ææåæ®æç»å«ç¨é¢ä¸è´ã |
| | | |
| | | æ¥æï¼åæ¨è®¢åãååãæ¥ä»·ä½¿ç¨å¼ç¥¨æ¥ï¼æç¡®ä¸æ¯åç¾çº¦æ¥æï¼æ 票çµå使ç¨å¤æ³¨2026-09-11ã忬¾æç¨æ·ç¡®è®¤çå¼ç¥¨æ¥ï¼æ 票çµå沿ç¨å¤æ³¨é宿¥ãè®¡åæ¥æå¼ç¥¨æé宿¥å30天æµç®ï¼å¤æ³¨æ³¨æé约å®è´¦æï¼å°è´¦ä»æ¬¾ç¶ææªè³2026-09-29ã |
| | | |
| | | ä¸ç»åå¹¶è®°å½åªæä¸¤å¼ å票åè®¡ï¼æ²¡æå票éé¢ã对åºå¼ç¥¨è®°å½ä¿ç两个票å·å¹¶æ æâåå¹¶ç»è®°âï¼æ²¡æèæåå¼ éé¢ãç³»ç»è¦æ±å款ç»å®å票æ¶å¿
é¡»ä¸ä¼ å票éä»¶ï¼å æ¤å款å½åå
³èååï¼invoice_id为空ï¼å票å·ä¿åå¨å¤æ³¨ãååçº§åæ¬¾ç»è®¡å®æ´ï¼ç¥¨çº§å款ç»è®¡é¡»è¡¥å票éä»¶å¹¶æ£å¼å
³èåæå®æ´ã |
| | | |
| | | éæµ·ç±å客æ·åææ¥æºæªæææ¬âéæµ·ç±åæé
æåæ
游æéå
¬âä¿çï¼å°æªæ¨ææ³¨åå
¨ç§°ã50122夿³¨âæäºæ¥ éå®âè§ä¸ºéå®è¯´æï¼å®¢æ·å½æ°å¢âçµåâãç©æç¼ºç¼ç å
æ ¸å¯¹åç§°åè§æ ¼ï¼å¤ç¨å·²åå¨ç90å
ã60å
ãåç级é²è«èçç©æï¼ä¸å ä¸åæ¥æºç¼ç éå¤å»ºç©æã |
| | | |
| | | æ§æ°æ®å®æ´å¤ä»½ï¼`locked-before-import.json`ï¼å¯¼å
¥å
³èIDï¼`import-result.json`ï¼å®æ´æ ¸éªï¼`verification-result.json`ï¼ä¸å¡æ ¸å¯¹ï¼`乿éå®å¯¼å
¥æ ¸å¯¹æ¸
å.csv`ãä»
æ°å¢æ¬æ¬¡æ°æ®ï¼æ¢æè®°å½ä¿æä¸åï¼å¦è¡¥é½4ä¸ªæ¬æ¬¡æ¶åçæ¢æå®¢æ·çè´è´£äººæ°æ®æéã |
| | | |
| | | ååè¯·æ±æ°éå·²æ¹BigDecimalï¼æ¥ä»·è½¬ååä¸åintValueæªæï¼ä¸¤é¡¹å彿µè¯éè¿ã代ç å°æªé¨ç½²çº¿ä¸ï¼æ°æ®åºæ°éåå¼å·²ä¿çãæªæ§è¡çº¿ä¸HTTPææµè§å¨éªè¯ï¼æ°æ®åºå
³ç³»ãéé¢ãæéåç²¾åº¦å·²æ ¸éªã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # SOPåæè´¨æ£æ°æ®å¯¼å
¥ç»æ |
| | | |
| | | 2026å¹´10æ12æ¥ï¼å·²ä» `C:\Users\äº\Desktop\SOP-QC-YL` 读å231份ææWordè§ç¨ãWord临æ¶é宿件已æé¤ï¼åæä»¶æªä¿®æ¹ã |
| | | |
| | | æ¬å°åè¿ç¨ `36.213.150.237:10000/mom-hm` å已宿以ä¸å¢é导å
¥ï¼ |
| | | |
| | | | æ°æ® | æ°é | |
| | | | --- | ---: | |
| | | | å»éåçæ£éªé¡¹ | 200 | |
| | | | æ£éªé¡¹åç» | 6 | |
| | | | æ åç»æé¡¹ | 16 | |
| | | | æ¥æè´¨æ£æ¹æ¡ | 231 | |
| | | | æ¹æ¡ææ å
³èè¡ï¼å«åç»åç»æï¼ | 2821 | |
| | | | æ¹æ¡ç©æå
³è | 51 | |
| | | | å¯ç¨æ¹æ¡ | 161 | |
| | | | åç¨å¾
夿 ¸æ¹æ¡ | 70 | |
| | | |
| | | ç³»ç»æ£éªé¡¹å表å
±æ°å¢222æ¡è®°å½ï¼å
å«200个æ£éªé¡¹ã6个åç»ã16个æ åç»æé¡¹ãè´¨æ£æ¹æ¡ç¼å·ä»¥ `SOP-QC-YL-` å¼å¤´ï¼æ¯ä»½è§ç¨åç¬å»ºæ¹æ¡ï¼ä¿çå°é¢çæ¬å·åæ¥æºæ¡æ¬¾ãåååæå¯è½æä¸åè§ç¨ï¼æªæ
èªåå¹¶çæ¬æå 餿§è§ç¨ã |
| | | |
| | | æ£éªé¡¹çç»æéç¨ææ¬å½å
¥å人工å¤å®ï¼æªçæèªå¨å¤æä¸ä¸éãåç级æ åãä¸¥æ ¼ä¸çå·ãæªæ£åºè¦æ±åå¾®çç© `n/c/m/M` æ½æ ·æ¹æ¡ä¿çåæï¼ææ°ä»¥ `10^(4)` çå½¢å¼ä¿çãç³»ç»æ ååæ®µæå¤255å符ï¼è¶
è¿é¿åº¦çå¤å®è¦æ±æä¸ºç»æé¡¹ï¼è¿äºç»æé¡¹ä¸åä¸ç¬ç«å¤å®ï¼ä¸éè¦é夿£éªã |
| | | |
| | | ç©æå
³èä»
使ç¨ç°æç©æç精确åç§°å¹é
ï¼ä¸ä½¿ç¨æ¨¡ç³å¹é
ã49ä¸ªæ¹æ¡å¹é
å°51æ¡ç©æå
³èï¼æ²¡æå¹é
çæ¹æ¡ä»ä¿çå¨ç³»ç»ï¼å°æªç»å®ç©æãè§ç¨æ²¡æç»ä¸æå®æ¹æ¡ç©æçæä½æ½æ ·æ°ãå
许ä¸åæ ¼æ°å缺é·çï¼å æ¤è¿äºå段çç©ºï¼æ²¡æå¡«å
¥çæµå¼ã |
| | | |
| | | 70ä¸ªæ¹æ¡å é¨åæ¡ç®æªæåå°ç¬ç«å¤å®æ åãæä»¶åä¸å°é¢ååä¸ä¸è´ãè®¡æ°æ åå°äºé¶ççç¹èåç¨ãéè´¨éè´è´£äººä¾æ®åæä»¶æ ¸å¯¹åå¯ç¨ãä¾å¦219巿件忝ç¦ç骨è¶åèç½è½ï¼èå°é¢åç骨è¶åèç½è½ï¼å·²åç¨ä¸æªèªå¨ç»å®ç©æãåç¨åå åæªå¹é
ç©æè¯¦è§ `å¾
夿 ¸æ¹æ¡æ¸
å.csv`ã |
| | | |
| | | æ¤ä»»å¡æ ¸å¯¹çæ¯æä¾ææ¡£ä¸ç³»ç»æ°æ®ç对åºå
³ç³»ï¼æªèªè¡æ¿æ¢è§ç¨å¼ç¨çæ åçæ¬ãæåèæ¬åä»£è¡¨æ§æ ·æ¬éªè¯éè¿ï¼æ°æ®åºäºå¡æäº¤åæ ¸å¯¹äºå
¨é¨é¢æè®°å½ååæ®µå
容ï¼é夿§è¡çæ°å¢æ°é为0ãéææåç»æè¿éæä¼ä¸è´¨æ£æµç¨éªæ¶ï¼ä¸è½çåäº231份è§ç¨å·²ç»éæ¡ä¸ä¸å®¡æ ¸ã |
| | | |
| | | ## çåæä»¶ |
| | | |
| | | - `æ£éªé¡¹æåæ¸
å.csv`ï¼æ¹æ¡ãç©æååãæ£éªé¡¹ãåæå¤å®è¦æ±ãæ¹æ³æ å忥æºã |
| | | - `å¾
夿 ¸æ¹æ¡æ¸
å.csv`ï¼åç¨åå åæ²¡æåç¡®ç©æå¹é
çæ¹æ¡ã |
| | | - `inspection-plan.json`ï¼å®æ´æåæ°æ®åæ£éªæ¹æ³åæç段ã |
| | | - `documents.json`ï¼æ¥æºææ¡£æ£æãè¡¨æ ¼åSHA256æè¦ã |
| | | - `local-import-result.txt`ã`remote-import-result.txt`ï¼ä¸¤åºäºå¡æäº¤åéªè¯è®°å½ã |
| | | - `../../sql/mysql/sop_qc_yl_import_20261012.sql`ï¼å®é
æ§è¡çå¢é导å
¥SQLï¼éè¦å¨å䏿°æ®åºè¿æ¥çäºå¡ä¸æ§è¡ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | å®é
ç³»ç»ä»£ç MdmItemServiceImpl.syncItemToMes ä¼ä½¿ç¨ mesMdItemTypeApi.getItemType(reqVO.getCategoryId()) è§£æ MDM åç±»ï¼åæåç±» code åæ¥å° MESãå·²åè¯»å¹¶æ ¸å®837个åºåç©æçMDM category_id ä¸å
¶MESæå½± item_type_id ä¸è´ï¼ä¸ä¾èµä¸¤å¥ç¬ç«å类表ç¼å·æ°å¥½ç¸åã |
| | | 线ä¸å®é
åå¨ä¸å¯ç¨ï¼MAT06 åæåï¼ID=23ãç±»åæä¸¾æ¥èªçº¿ä¸åå
¸ï¼1åæã2åæåã3æåã4è¾
æãéæ¡æ å°æ¸
åè®°å½é¢æåå¼ãå®é
åç±»ç¼ç ä¸ç®æ åç±»ç¼ç ï¼æ´æ°åéè¡ãæ ¡éªåæ¹åç±»åå¨åå¯ç¨ãéªè¯MDMåMESä¸è´ï¼æ´æ°åéæ¡æ¯å¯¹ï¼å¹¶æ ¡éªåºåæ°éãåºåºåºä½ãæ¹æ¬¡åæµæ°´æªåã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 2026å¹´9æåºåå°è´¦å¯¼å
¥ |
| | | |
| | | ç®æ ï¼çº¿ä¸ 36.213.150.237:10000 ç mom-hmã |
| | | |
| | | ç¨æ·å·²ç¡®è®¤æ Sheet1 çç»åæ°éè¦çåºåç°æéï¼è¡¥å»ºç¼ºå¤±ç©æï¼éåè¦æ±è®¾ç½®ä¸ä¸ä»åºï¼å¹¶å°æ¬æ¹åºååä»ãæææ°è¦æ±åé
è³ä¸å¡ä»åºï¼æªå»ºç«æä½¿ç¨ç»ä¸å¯¼å
¥ä»ã |
| | | |
| | | ## ä»åºè®¾è®¡ |
| | | |
| | | | ç¼ç | ä»åº | åè¡¨ä¾æ®åç¨é | |
| | | | --- | --- | --- | |
| | | | CPK01 | æåä» | å表æååºåï¼ä¾éå®åºåº | |
| | | | YLK | åæä» | åè¾
æåæ£è£
åæ | |
| | | | NBCK | å
å
æä» | ç´æ¥æ¥è§¦äº§åçå
è£
ææ | |
| | | | WBCK | å¤å
æä» | å¤çãå¤ç®±åå¤å
è£
ææ | |
| | | | CCCP | è«èå·é¾ä» | å表 CCCP è«èä¸ç¨åºåï¼å®é
å¨åæ¡ä»¶æåç§æ åæ§è¡ | |
| | | | BCPK | åæåä» | å°éç»§ç»å å·¥æå
è£
çä¸é´äº§å | |
| | | | QC_PENDING | å¾
æ£ä» | å¾
æ£åè´¨éå¾
确认åºåï¼æ¬è¡¨æ æç¡®å¾
æ£åºåï¼ä¿æä¸ºç©º | |
| | | | THK | éè´§åä¸åæ ¼åä» | å表éè´§åºåé离ï¼å¤ç½®ååç§»åº | |
| | | | WIP_VIRTUAL_WAREHOUSE | èæçº¿è¾¹ä» | å表 CCCJãYFKï¼å·²å车é´å°æªæ¶èçå¨å¶åºå | |
| | | |
| | | ## æ°éåæ¹æ¬¡å£å¾ |
| | | |
| | | - 843 个å¯ä¸ç©æç¼ç ï¼855 æ¡ç©æä¸ä»åºåºåè®°å½ã12 ä¸ªç©æå表åå¨è·¨ä»åºåï¼æå表å叿åï¼åç©æåä»åçæ°éä¹åä¸¥æ ¼çäºå°è´¦ç»åæ°éã |
| | | - 对æå表åºä½ä¾æ®çæ£ç»åææ´ç表åºä½åä»ï¼ä¸æéå¤çå并表ãçç¹è¡¨å次计å
¥ãæ å表åºåæç»çé¶ç»åæå°è´¦ç©æå¤§ç±»åååç¡®å®ä»åºã |
| | | - å¤ä»æ°é以å表æ°éæ¯ä¾åé
å°è´¦ç»åï¼å¹¶å°å
ä½å°æ°ç尾差å½å
¥æ°éæå¤§çä»åºï¼åä»ç´æ¥ä½¿ç¨å°è´¦ç»åãå°è´¦åæ´çè¡¨ä¿æ¹¿æ£æ°éç¸å·® 0.01ï¼æå°è´¦ 3416.11 è¦çã |
| | | - ä¿çåæç©æä¸»åä½åè§æ ¼ãå
¬æ¤/å
æ 1000 æ¢ç®ï¼åç¼ç å
è£
æåççãç½çä¸ç³»ç»è®¡æ°åä½âä¸ªâæ 1:1ã81013938 å
è¢å¨å°è´¦åâ个âï¼æ´ç表ãå并表ãå
æè¡¨å为 GMï¼æç³»ç»å
å½å
¥ 1,650,000 å
ï¼ä¿çå²çªè¯´æã |
| | | - Q2100196ãQ2100197 å表å为 900ml æ£è´§ï¼åç³»ç»åç¼ç è§æ ¼ä¸ä¸è´ï¼ç¨æ·å·²æç¡®ç¡®è®¤æåç¼ç åå½å
¥ 2992 个ï¼å表信æ¯ä¿ç夿³¨ï¼ä¸ä¿®æ¹ç°æç©æè§æ ¼ã |
| | | - 缺失ç 582 ä¸ªç©ææåç¼ç ãå°è´¦åç§°ï¼å
å«åå¹¶åå
æ ¼è¿åï¼å计éå使°å»ºï¼ä¸æ¢å¤ææ´æ¹æ§çå·²å é¤è®°å½ï¼ä¸åå¹¶ä¸åç¼ç çååç©æã |
| | | - æç¨æ·ç¡®è®¤çç©æç»åæ±æ»å£å¾å建 `INIT202609-ç©æç¼ç ` æåæ±æ»æ¹æ¬¡ãè¯¥æ¹æ¬¡æç¡®æ 注为æåæ±æ»ï¼ä¸è½è§ä¸ºçå®çäº§æ¹æ¬¡ï¼ä¸ä¼ªé çäº§æ¥æãææææè´¨æ£ç»æãå
¥åºåºåæ¶é´ä¸º 2026-09-30 23:59:59ã |
| | | - æ°éå·®é¢éè¿åºåè°æ´å
¥/åºåºæµæ°´è®°å½ãé¶ç»åä¿çåºåè®°å½ï¼ä½ä¸çæé¶æ°éæµæ°´ãå»ç»ãé¢çãå¨éåºåéå°å²çªæ¶åæ»ï¼å¯¼å
¥ä»
ä¿®æ¹æ¬æ¹æ±æ»æ¹æ¬¡ç对åºåºåï¼å
¶ä»åºåä¸åä¸è¦çã |
| | | |
| | | ## éªè¯ |
| | | |
| | | 馿¬¡å¯¼å
¥æ¶æºè¡¨åå¹¶åå
æ ¼çä¸è¡åç§°ä¸ºç©ºï¼æ°æ®åºæç»ç©æåå
¥ï¼æ´ä¸ªäºå¡å·²åæ»ï¼è¡¥é½åå¹¶åå
æ ¼åç§°åéæ°æ§è¡ã |
| | | |
| | | æ£å¼ç»æè§ `remote-result.txt`ï¼ç¬ç«æ°æ®åºåè¯»ç»æè§ `verification-result.txt`ï¼æºè¡¨ä¸å¯¼å
¥åæ°æ®åºå¿«ç
§ãå仿ç»åæ§è¡èæ¬åä¿çäºæ¬ç®å½ãéç©æç»åãåä»åºå䏿µæ°´å嫿 ¸éªï¼é夿§è¡ä¸ä¼ç´¯å æ°éã |
| | | |
| | | ## åºåºåºä½è¡¥é½ |
| | | |
| | | ç¨æ·éåè¦æ±æ¯ä»ä¸ä¸ªåºåºãä¸ä¸ªåºä½ï¼å¹¶è¡¥é½åºåæ°æ®ã线ä¸å·²å¢å 9 个é»è®¤åºåºå 9 个é»è®¤åºä½ï¼855 æ¡åºåå 755 æ¡å导å
¥æµæ°´åè¡¥é½ä½ç½®å
³èï¼æ°éåæ¹æ¬¡æªåçååã |
| | | |
| | | æ®éåºåºä½¿ç¨âä»åºç¼ç -L01âï¼åºä½ä½¿ç¨âä»åºç¼ç -A01âãèæçº¿è¾¹ä»ä½¿ç¨ MES å
ç½®ç¼ç `WIP_VIRTUAL_LOCATION` å `WIP_VIRTUAL_AREA`ãé»è®¤æ±æ»åºä½å
è®¸ç©æãæ¹æ¬¡æ··æ¾ï¼é¿å
ååºä½æ¿æ¥å¤ç©æåè¢«ç³»ç»æ··æ¾æ ¡éªé»æï¼é¢ç§¯ãè½½éãåæ æªæä¾ï¼ä¸å¡«åèææ°æ®ã |
| | | |
| | | è¡¥é½åçé
ç½®è§ `åºåºåºä½é
ç½®æ¸
å.csv`ï¼ç¬ç«åè¯»ç»æè§ `positions-verification.txt`ãæåæç©ºä½ç½®å¹é
çåºå导å
¥å½ä»¤å·²å¢å ä¿æ¤ï¼åç°æ¬æ¹åºåå·²ç»å
³èåºåºåºä½æ¶æç»æ§è¡ï¼é¿å
éå¤å建空ä½ç½®åºåãåºåºåºä½è¡¥é½æä½æ¬èº«æ¯æé夿§è¡ï¼æ 差弿¶ä¸ä¼æ°å¢ææ´æ°è®°å½ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ä¸çº¿åæ§è¡ï¼ç¬ç«äºå·²æ IP å½å±å°æ«ç ç»è®¡è¡¨ã |
| | | CREATE TABLE IF NOT EXISTS mes_trace_location_visit ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主é®', |
| | | trace_code VARCHAR(128) DEFAULT NULL COMMENT '追溯ç ï¼ç´æ¥æå¼ææé¡µæ¶ä¸ºç©ºï¼', |
| | | latitude DECIMAL(10,7) NOT NULL COMMENT '纬度 WGS84', |
| | | longitude DECIMAL(10,7) NOT NULL COMMENT 'ç»åº¦ WGS84', |
| | | accuracy DECIMAL(10,2) NOT NULL COMMENT 'å®ä½ç²¾åº¦ï¼ç±³ï¼', |
| | | visit_time DATETIME NOT NULL COMMENT 'ææè®¿é®æ¶é´', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
| | | creator VARCHAR(64) DEFAULT NULL, |
| | | updater VARCHAR(64) DEFAULT NULL, |
| | | deleted BIT(1) NOT NULL DEFAULT 0, |
| | | PRIMARY KEY (id), |
| | | KEY idx_trace_location_visit_time (visit_time), |
| | | KEY idx_trace_location_trace_code (trace_code) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ææå®ä½ç追溯访é®'; |
| | |
| | | @Positive(message = "çææ°éå¿
é¡»å¤§äº 0") |
| | | private Integer count; |
| | | |
| | | @Schema(description = "æ ç§°æ¯æè¢æ°ï¼ç§»å¨ç«¯éæ© 48 æ 100ï¼å¯ç»§ç»æ«æè¶
åºæ ç§°æ°ï¼") |
| | | @Positive(message = "æ¯æè¢æ°å¿
é¡»å¤§äº 0") |
| | | private Integer capacity; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | |
| | | @Positive(message = "çææ°éå¿
é¡»å¤§äº 0") |
| | | private Integer count; |
| | | |
| | | @Schema(description = "æ ç§°æ¯æè¢æ°ï¼ç§»å¨ç«¯éæ© 48 æ 100ï¼å¯ç»§ç»æ«æè¶
åºæ ç§°æ°ï¼") |
| | | @Positive(message = "æ¯æè¢æ°å¿
é¡»å¤§äº 0") |
| | | private Integer capacity; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | } |
| | |
| | | @ExcelProperty("æçåºå·") |
| | | private Integer palletNo; |
| | | |
| | | @Schema(description = "æ ç§°æ¯æè¢æ°") |
| | | @ExcelProperty("æ ç§°æ¯æè¢æ°") |
| | | private Integer capacity; |
| | | |
| | | @Schema(description = "å·²ç»å®è¢ç æ°é", example = "10") |
| | | @ExcelProperty("å·²è£
è¢æ°") |
| | | private Integer bagCount; |
| | |
| | | @Schema(description = "æ¹æ¬¡å
æçåºå·", example = "1") |
| | | private Integer palletNo; |
| | | |
| | | @Schema(description = "å¯è£
è¢æ°ï¼è¢/æçï¼", example = "25") |
| | | @Schema(description = "æ ç§°æ¯æè¢æ°ï¼å¯ç»§ç»æ«æè¶
åºè¯¥æ°éï¼", example = "48") |
| | | private Integer capacity; |
| | | |
| | | @Schema(description = "å·²ç»å®è¢ç æ°é", example = "10") |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.trace.consumer; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceLocationVisitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceLocationDistributionRespVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer.MesTraceLocationVisitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.trace.consumer.MesTraceLocationVisitMapper; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanDistributionReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanDistributionRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceConsumerScanSummaryRespVO; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | |
| | | |
| | | @Resource |
| | | private MesTraceConsumerScanStatisticsService statisticsService; |
| | | |
| | | @Resource |
| | | private MesTraceLocationVisitMapper locationVisitMapper; |
| | | |
| | | @GetMapping("/location-visits") |
| | | @Operation(summary = "å®ä½ææè®¿é®è®°å½ï¼å«ä½ç½®ä¸æ»æ°ï¼") |
| | | @PreAuthorize("@ss.hasPermission('mes:trace-consumer-scan:query')") |
| | | public CommonResult<PageResult<MesTraceLocationVisitDO>> getLocationVisits(@Valid MesTraceLocationVisitPageReqVO reqVO) { |
| | | return success(locationVisitMapper.selectPage(reqVO)); |
| | | } |
| | | |
| | | @GetMapping("/location-distribution") |
| | | @Operation(summary = "å®ä½ææè®¿é®çåæ ç½æ ¼åå¸") |
| | | @PreAuthorize("@ss.hasPermission('mes:trace-consumer-scan:query')") |
| | | public CommonResult<List<MesTraceLocationDistributionRespVO>> getLocationDistribution(@Valid MesTraceLocationVisitPageReqVO reqVO) { |
| | | Map<String, List<MesTraceLocationVisitDO>> groups = locationVisitMapper.selectListByFilter(reqVO).stream() |
| | | .collect(Collectors.groupingBy(e -> e.getLatitude().setScale(2, RoundingMode.HALF_UP).toPlainString() |
| | | + "," + e.getLongitude().setScale(2, RoundingMode.HALF_UP).toPlainString())); |
| | | return success(groups.entrySet().stream() |
| | | .sorted((a, b) -> Long.compare(b.getValue().size(), a.getValue().size())) |
| | | .limit(20) |
| | | .map(entry -> { |
| | | MesTraceLocationDistributionRespVO vo = new MesTraceLocationDistributionRespVO(); |
| | | String[] coordinates = entry.getKey().split(","); |
| | | vo.setLatitude(new BigDecimal(coordinates[0])); |
| | | vo.setLongitude(new BigDecimal(coordinates[1])); |
| | | vo.setCount((long) entry.getValue().size()); |
| | | return vo; |
| | | }).toList()); |
| | | } |
| | | |
| | | @GetMapping("/summary") |
| | | @Operation(summary = "æ¶è´¹è
æ«ç è®¿é®æ±æ»") |
| | |
| | | return success(statisticsService.getDistribution(reqVO)); |
| | | } |
| | | |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | public class MesTraceLocationDistributionRespVO { |
| | | private BigDecimal latitude; |
| | | private BigDecimal longitude; |
| | | private Long count; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | | |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class MesTraceLocationVisitPageReqVO extends PageParam { |
| | | private String traceCode; |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime startTime; |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime endTime; |
| | | } |
| | |
| | | @Schema(description = "客æ·åç§°ï¼éå®åºåº/éå®éè´§æ¶ï¼", example = "客æ·A") |
| | | private String clientName; |
| | | |
| | | @Schema(description = "éå®åºåºåè系人") |
| | | private String contactName; |
| | | |
| | | } |
| | |
| | | @Schema(description = "客æ·åç§°", example = "客æ·A") |
| | | private String clientName; |
| | | |
| | | @Schema(description = "éå®åºåºåè系人") |
| | | private String contactName; |
| | | |
| | | @Schema(description = "åºåæ£éªåå·ï¼OQCï¼", example = "OQC20250801001") |
| | | private String oqcCode; |
| | | |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.mes.controller.pub.trace.vo.MesProTracePublicConfigRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.pub.trace.vo.MesProTracePublicRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.pub.trace.vo.MesTraceLocationVisitReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer.MesTraceLocationVisitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.trace.consumer.MesTraceLocationVisitMapper; |
| | | import cn.iocoder.yudao.module.mes.service.trace.MesProTracePublicService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.annotation.security.PermitAll; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | |
| | | @Resource |
| | | private MesProTracePublicService service; |
| | | |
| | | @Resource |
| | | private MesTraceLocationVisitMapper locationVisitMapper; |
| | | |
| | | @GetMapping("/query") |
| | | @PermitAll |
| | | @Operation(summary = "æ ¹æ®è¿½æº¯ç æ¥è¯¢å
¨ç¨æº¯æºä¿¡æ¯") |
| | |
| | | return success(service.getPublicConfig()); |
| | | } |
| | | |
| | | @PostMapping("/location-visit") |
| | | @PermitAll |
| | | @Operation(summary = "è®°å½ç¨æ·ææå®ä½åç追溯访é®") |
| | | public CommonResult<Long> recordLocationVisit(@Valid @RequestBody MesTraceLocationVisitReqVO reqVO) { |
| | | MesTraceLocationVisitDO visit = new MesTraceLocationVisitDO(); |
| | | visit.setTraceCode(reqVO.getCode() == null || reqVO.getCode().isBlank() ? null : reqVO.getCode().trim()); |
| | | visit.setLatitude(reqVO.getLatitude()); |
| | | visit.setLongitude(reqVO.getLongitude()); |
| | | visit.setAccuracy(reqVO.getAccuracy()); |
| | | visit.setVisitTime(LocalDateTime.now()); |
| | | locationVisitMapper.insert(visit); |
| | | return success(visit.getId()); |
| | | } |
| | | |
| | | } |
| | |
| | | @Schema(description = "æ¯å¦è¿å£ç§ååºæ¯ï¼ä¸º true æ¶é¡µé¢æ ç¾åºå±ç¤ºãè¿å£ååç§°ã") |
| | | private Boolean imported; |
| | | |
| | | @Schema(description = "å®ä½ç追溯页æ¯å¦è¦æ±å®ä½ææï¼ä»
æ¬å°ç¯å¢å¯å
³é") |
| | | private Boolean traceLocationRequired; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.pub.trace.vo; |
| | | |
| | | import jakarta.validation.constraints.DecimalMax; |
| | | import jakarta.validation.constraints.DecimalMin; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import jakarta.validation.constraints.Size; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | public class MesTraceLocationVisitReqVO { |
| | | @Size(max = 128) |
| | | private String code; |
| | | @NotNull |
| | | @DecimalMin("-90") |
| | | @DecimalMax("90") |
| | | private BigDecimal latitude; |
| | | @NotNull |
| | | @DecimalMin("-180") |
| | | @DecimalMax("180") |
| | | private BigDecimal longitude; |
| | | @NotNull |
| | | @DecimalMin("0") |
| | | @DecimalMax("100000") |
| | | private BigDecimal accuracy; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** ç¨æ·æç¡®ææåç追溯å®ä½è®¿é®ã */ |
| | | @TableName("mes_trace_location_visit") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class MesTraceLocationVisitDO extends BaseDO { |
| | | @TableId |
| | | private Long id; |
| | | private String traceCode; |
| | | private BigDecimal latitude; |
| | | private BigDecimal longitude; |
| | | private BigDecimal accuracy; |
| | | private LocalDateTime visitTime; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.trace.consumer; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.trace.consumer.vo.MesTraceLocationVisitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer.MesTraceLocationVisitDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface MesTraceLocationVisitMapper extends BaseMapperX<MesTraceLocationVisitDO> { |
| | | default List<MesTraceLocationVisitDO> selectListByFilter(MesTraceLocationVisitPageReqVO reqVO) { |
| | | return selectList(new LambdaQueryWrapperX<MesTraceLocationVisitDO>() |
| | | .likeIfPresent(MesTraceLocationVisitDO::getTraceCode, reqVO.getTraceCode()) |
| | | .geIfPresent(MesTraceLocationVisitDO::getVisitTime, reqVO.getStartTime()) |
| | | .ltIfPresent(MesTraceLocationVisitDO::getVisitTime, reqVO.getEndTime())); |
| | | } |
| | | |
| | | default PageResult<MesTraceLocationVisitDO> selectPage(MesTraceLocationVisitPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MesTraceLocationVisitDO>() |
| | | .likeIfPresent(MesTraceLocationVisitDO::getTraceCode, reqVO.getTraceCode()) |
| | | .geIfPresent(MesTraceLocationVisitDO::getVisitTime, reqVO.getStartTime()) |
| | | .ltIfPresent(MesTraceLocationVisitDO::getVisitTime, reqVO.getEndTime()) |
| | | .orderByDesc(MesTraceLocationVisitDO::getVisitTime)); |
| | | } |
| | | } |
| | |
| | | */ |
| | | private String traceBaseUrl = ""; |
| | | |
| | | /** å®ä½ç追溯页æ¯å¦å¿
é¡»å
åå¾ç¨æ·å®ä½ï¼ä»
æ¬å°è°è¯é
置为 falseã */ |
| | | private boolean traceLocationRequired = true; |
| | | |
| | | /** |
| | | * ç产ç»è¥è
åç§°ï¼ç§åæ ç¾åè¦ç´ ä¹ä¸ï¼ã |
| | | * <p> |
| | |
| | | .setBatchId(batch.getId()) |
| | | .setBatchCode(batch.getCode()) |
| | | .setPalletNo(palletNo) |
| | | .setCapacity(createReqVO.getCapacity()) |
| | | .setBagCount(0) |
| | | .setAutoGenerated(false) |
| | | .setStatus(MesProPalletStatusEnum.IN_USE.getStatus()) |
| | |
| | | list.add(new MesProPalletDO() |
| | | .setTempCode(codeRedisDao.generate()) |
| | | .setBusinessCode(codeRedisDao.generate()) |
| | | .setCapacity(reqVO.getCapacity()) |
| | | .setBagCount(0) |
| | | .setAutoGenerated(false) |
| | | .setStatus(MesProPalletStatusEnum.IN_USE.getStatus()) |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.pro.MesProPalletStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.trace.MesTraceCodeStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.framework.qrcode.MesProQrLabelBuilder; |
| | | import cn.iocoder.yudao.module.mes.framework.config.MesProperties; |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.bagcode.MesProBagCodeService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.batch.MesProBatchService; |
| | |
| | | private MesTraceIntegrityService integrityService; |
| | | @Resource |
| | | private MesTraceConsumerScanEventMapper consumerScanEventMapper; |
| | | @Resource |
| | | private MesProperties mesProperties; |
| | | |
| | | @Override |
| | | public MesProTracePublicRespVO queryTrace(String code) { |
| | |
| | | respVO.setOperatorName(MesProQrLabelBuilder.resolveOperatorName()); |
| | | respVO.setTraceUrl(MesProQrLabelBuilder.resolveTraceUrl()); |
| | | respVO.setImported(MesProQrLabelBuilder.isImported()); |
| | | respVO.setTraceLocationRequired(mesProperties.isTraceLocationRequired()); |
| | | return respVO; |
| | | } |
| | | |
| | |
| | | --> |
| | | <select id="selectSalesTargetList" parameterType="String" |
| | | resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchSalesTargetRespVO"> |
| | | SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, |
| | | SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, s.contact_name, |
| | | oqc.code AS oqc_code, oqc.check_result AS check_result, |
| | | sl.batch_code, sl.item_id, sl.quantity, sl.quality_status |
| | | FROM mes_wm_product_sales_line sl |
| | |
| | | AND NOT EXISTS (SELECT 1 FROM mes_wm_product_sales_detail d |
| | | WHERE d.line_id = sl.id AND d.batch_code = #{batchCode} AND d.deleted = 0) |
| | | UNION ALL |
| | | SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, |
| | | SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, s.contact_name, |
| | | oqc.code AS oqc_code, oqc.check_result AS check_result, |
| | | d.batch_code, d.item_id, SUM(d.quantity) AS quantity, MAX(sl.quality_status) AS quality_status |
| | | FROM mes_wm_product_sales_detail d |
| | |
| | | JOIN mes_wm_product_sales_line sl ON sl.id = d.line_id AND sl.deleted = 0 |
| | | LEFT JOIN mes_qc_oqc oqc ON oqc.id = sl.oqc_id AND oqc.deleted = 0 |
| | | WHERE d.batch_code = #{batchCode} AND d.deleted = 0 AND s.status != 5 |
| | | GROUP BY s.id, s.code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, |
| | | GROUP BY s.id, s.code, s.sales_date, s.sales_order_code, s.client_id, s.client_name, s.contact_name, |
| | | oqc.code, oqc.check_result, d.batch_code, d.item_id |
| | | ORDER BY sales_date |
| | | </select> |
| | |
| | | resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchFlowRespVO"> |
| | | SELECT tx.type, tx.biz_type, tx.biz_code, tx.quantity, tx.transaction_time, |
| | | w.name AS warehouse_name, loc.name AS location_name, area.name AS area_name, |
| | | sales.client_name |
| | | sales.client_name, sales.contact_name |
| | | FROM mes_wm_transaction tx |
| | | LEFT JOIN mes_wm_warehouse w ON w.id = tx.warehouse_id AND w.deleted = 0 |
| | | LEFT JOIN mes_wm_warehouse_location loc ON loc.id = tx.location_id AND loc.deleted = 0 |
| | |
| | | mes: |
| | | # 追溯ç½åï¼äºç»´ç å
容åç¼ï¼ï¼é为å
¬ä¼æ«ç å¯è®¿é®çå°å |
| | | trace-base-url: http://192.168.0.10:48080/trace.html |
| | | # æ¬å° HTTP è°è¯æ¶è·³è¿æµè§å¨å®ä½ææï¼ç产ç¯å¢ä½¿ç¨é»è®¤å¼ true |
| | | trace-location-required: false |
| | | # ç产ç»è¥è
åç§°ï¼ç§åæ ç¾åè¦ç´ ä¹ä¸ï¼æ ç¾ä¸æº¯æºé¡µç»ä¸åæ¤å¼ï¼æªé
ç½®åæ æ³å¯¼åºæ ç¾ï¼ |
| | | operator-name: æ°çå¡éæ¨æ²³ç§ä¸è¡ä»½æéå
¬å¸ |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!doctype html> |
| | | <html lang="zh-CN"> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| | | <title>å®ä½ææ · 产å追溯</title> |
| | | <style> |
| | | * { box-sizing: border-box; } |
| | | body { margin: 0; min-height: 100vh; display: grid; place-items: center; padding: 24px; background: #f6f7f6; color: #1f2933; font: 16px/1.6 -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; } |
| | | .trace-background { position: fixed; inset: 0; width: 100%; height: 100%; border: 0; pointer-events: none; opacity: .45; filter: blur(2px); } |
| | | body.unlocked .trace-background { pointer-events: auto; opacity: 1; filter: none; } |
| | | body::before { content: ''; position: fixed; inset: 0; background: #f6f7f688; z-index: 1; } |
| | | body.unlocked::before, body.unlocked main { display: none; } |
| | | main { position: relative; z-index: 2; width: min(100%, 440px); background: white; border-radius: 16px; padding: 28px 24px; box-shadow: 0 6px 28px #17382224; } |
| | | .icon { width: 52px; height: 52px; display: grid; place-items: center; background: #eef7ef; color: #1f7a38; border-radius: 14px; font-size: 28px; } |
| | | h1 { margin: 20px 0 8px; font-size: 23px; } |
| | | p { margin: 0 0 18px; color: #58636d; } |
| | | button { width: 100%; min-height: 48px; border: 0; border-radius: 9px; background: #1f7a38; color: white; font: inherit; font-weight: 600; cursor: pointer; } |
| | | button:focus-visible { outline: 3px solid #7bc894; outline-offset: 3px; } |
| | | button:disabled { opacity: .6; cursor: wait; } |
| | | #status { min-height: 26px; margin-top: 14px; color: #b42318; } |
| | | small { display: block; margin-top: 16px; color: #6b7280; } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <iframe id="traceFrame" class="trace-background" src="trace.html" tabindex="-1" aria-hidden="true" title="产åè¿½æº¯èæ¯"></iframe> |
| | | <main> |
| | | <div class="icon" aria-hidden="true">â</div> |
| | | <h1>å¼å¯å®ä½åæ¥ç追溯信æ¯</h1> |
| | | <p>ä¸ºè®°å½æ¬æ¬¡è¿½æº¯æ¥è¯¢æå¨ä½ç½®ï¼è¯·å
许æµè§å¨è·åå½åä½ç½®ãæææååå°èªå¨è¿å
¥äº§å追溯页ã</p> |
| | | <button id="locate" type="button" disabled>å¼å¯å®ä½å¹¶ç»§ç»</button> |
| | | <div id="status" role="status" aria-live="polite"></div> |
| | | <small>æ¬æ¬¡ä¼è®°å½è¿½æº¯ç ãåæ ãå®ä½ç²¾åº¦åè®¿é®æ¶é´ï¼ä¾åå°æ¥çä¸ç»è®¡ãæç»æææå®ä½å¤±è´¥æ¶æ æ³ç»§ç»ã</small> |
| | | </main> |
| | | <script> |
| | | (function () { |
| | | 'use strict'; |
| | | var button = document.getElementById('locate'); |
| | | var status = document.getElementById('status'); |
| | | var code = new URLSearchParams(location.search).get('code') || ''; |
| | | function showTrace() { |
| | | var frame = document.getElementById('traceFrame'); |
| | | frame.src = 'trace.html' + (code ? '?code=' + encodeURIComponent(code) + '&view=location' : '?view=location'); |
| | | frame.removeAttribute('aria-hidden'); |
| | | frame.removeAttribute('tabindex'); |
| | | frame.title = '产å追溯信æ¯'; |
| | | document.body.classList.add('unlocked'); |
| | | } |
| | | |
| | | // æ¬å° profile ç±å端æç¡®å
³éå®ä½è¦æ±ï¼é
置失败æ¶ä¿æå¿
é¡»å®ä½ã |
| | | status.textContent = 'æ£å¨æ£æ¥è®¿é®é
ç½®â¦'; |
| | | fetch('/public/mes/trace/config') |
| | | .then(function (response) { return response.json(); }) |
| | | .then(function (result) { |
| | | if (result && result.code === 0 && result.data && result.data.traceLocationRequired === false) { |
| | | showTrace(); |
| | | } else { |
| | | status.textContent = ''; |
| | | button.disabled = false; |
| | | } |
| | | }) |
| | | .catch(function () { |
| | | status.textContent = ''; |
| | | button.disabled = false; |
| | | }); |
| | | |
| | | button.addEventListener('click', function () { |
| | | if (!window.isSecureContext || !navigator.geolocation) { |
| | | status.textContent = 'å½åç½å䏿¯æå®ä½ï¼è¯·ä½¿ç¨å·²é
ç½® HTTPS ç追溯ç½åæå¼ã'; |
| | | return; |
| | | } |
| | | button.disabled = true; |
| | | status.textContent = 'æ£å¨è·åå½åä½ç½®â¦'; |
| | | navigator.geolocation.getCurrentPosition(function (position) { |
| | | fetch('/public/mes/trace/location-visit', { |
| | | method: 'POST', |
| | | headers: { 'Content-Type': 'application/json' }, |
| | | body: JSON.stringify({ |
| | | code: code, |
| | | latitude: position.coords.latitude, |
| | | longitude: position.coords.longitude, |
| | | accuracy: position.coords.accuracy |
| | | }) |
| | | }).then(function (response) { return response.json(); }).then(function (result) { |
| | | if (!result || result.code !== 0) throw new Error(result && result.msg || 'ä½ç½®è®°å½å¤±è´¥'); |
| | | showTrace(); |
| | | }).catch(function (error) { |
| | | status.textContent = error.message || 'ä½ç½®è®°å½å¤±è´¥ï¼è¯·éè¯ã'; |
| | | button.disabled = false; |
| | | }); |
| | | }, function (error) { |
| | | status.textContent = error.code === 1 ? 'å®ä½æé被æç»ï¼è¯·å¨æµè§å¨è®¾ç½®ä¸å
许å®ä½åéè¯ã' : 'å®ä½å¤±è´¥ï¼è¯·æ£æ¥ææºå®ä½åç½ç»åéè¯ã'; |
| | | button.disabled = false; |
| | | }, { enableHighAccuracy: true, timeout: 15000, maximumAge: 0 }); |
| | | }); |
| | | })(); |
| | | </script> |
| | | </body> |
| | | </html> |
| | |
| | | var CODE_INPUT = document.getElementById('codeInput'); |
| | | var SEARCH_BTN = document.getElementById('searchBtn'); |
| | | |
| | | var FLOW_DIRECTION = { 1: ['å
¥åº', 'green'], 2: ['åºåº', 'blue'] }; |
| | | var FLOW_BIZ_TYPE = { |
| | | 110: 'éè´å
¥åº', 111: 'éè´å
¥åºåæ¶', 112: 'è°æ¨åºåº', 113: 'è°æ¨å
¥åº', |
| | | 114: 'å
¶ä»åºåº', 115: 'å
¶ä»å
¥åº', 116: 'çäº§é¢æ', 117: 'ç产éæ', |
| | | 118: 'ç产å
¥åº', 119: 'éå®åºåº', 120: 'éå®éè´§å
¥åº', 121: 'å¤ååæ', |
| | | 122: 'å¤åå
¥åº', 123: 'ç产æ¶è', 124: '产å产åº', 125: 'ä¾åºåéè´§åºåº', |
| | | 126: 'åºåè°æ´å
¥åº', 127: 'åºåè°æ´åºåº' |
| | | }; |
| | | var SOURCE_TYPE = { BAG: 'è¢ç ', PALLET: 'æçç ', BATCH: 'æ¹æ¬¡ç ' }; |
| | | |
| | | // ========== å·¥å
·å½æ° ========== |
| | |
| | | // è¡¨æ ¼çªåï¼æ°é / æ¥æï¼ä¸æ¢è¡ï¼é¿å
æ°å被æè¡ |
| | | function nw(html) { |
| | | return '<span style="white-space:nowrap">' + html + '</span>'; |
| | | } |
| | | |
| | | function statusBadge(map, key) { |
| | | var item = map[key]; |
| | | if (!item) return '<span class="badge gray">' + (key === null || key === undefined ? '' : esc(key)) + '</span>'; |
| | | return '<span class="badge ' + item[1] + '">' + esc(item[0]) + '</span>'; |
| | | } |
| | | |
| | | function kv(k, v, dim) { |
| | |
| | | return; |
| | | } |
| | | var html = ''; |
| | | if (new URLSearchParams(location.search).get('view') === 'location') { |
| | | html += locationSections(d); |
| | | html += sec('产å追溯æ è¯', null, tracePanel(d), null); |
| | | STATE.innerHTML = html; |
| | | window.scrollTo({ top: 0, behavior: 'smooth' }); |
| | | return; |
| | | } |
| | | html += sec('é²ä¼ªæ¥è¯¢', null, fakePanel(d), null); |
| | | html += sec('追溯æ¥è¯¢', null, tracePanel(d), null); |
| | | // ç产æç»æå åºï¼å¯¹å¤å±ç¤ºç§åæµåãå å·¥æµè½¬ï¼çäº§æ¹æ¬¡ä¿¡æ¯ä¸å±ç¤ºã |
| | | // ç产æç»æå åºï¼å¯¹å¤å±ç¤ºå å·¥æµè½¬ï¼çäº§æ¹æ¬¡ä¿¡æ¯ä¸å±ç¤ºã |
| | | // è´¨æ£/人å/æç/è¢ç /éè´æ¥æºçå
鍿ç»ä¸å¯¹å¤å±ç¤ºï¼ |
| | | // å¦éä¸å¹¶å±ç¤ºï¼æ¹ä¸º detailSections(d, true) å³å¯ã |
| | | html += detailSections(d, false); |
| | | STATE.innerHTML = html || '<div class="empty-tip">ææ è¿½æº¯æ°æ®</div>'; |
| | | window.scrollTo({ top: 0, behavior: 'smooth' }); |
| | | } |
| | | |
| | | // å®ä½ææå
¥å£æ²¿ç¨æ¬é¡µçåçèæ¯ä¸åºåæ ·å¼ï¼æç产ãä»å¨ãç©æµç»ç»å·²æç宿°æ®ã |
| | | function groupOutboundOrders(rows, codeOf, dateField) { |
| | | var grouped = []; |
| | | var byCode = new Map(); |
| | | rows.forEach(function (item) { |
| | | var code = String(codeOf(item) || '').trim(); |
| | | var quantity = Number(item.quantity); |
| | | var validQuantity = item.quantity !== null && item.quantity !== undefined && Number.isFinite(quantity); |
| | | var existing = code ? byCode.get(code) : null; |
| | | if (!existing) { |
| | | var order = Object.assign({}, item, { quantity: validQuantity ? Math.abs(quantity) : null }); |
| | | grouped.push(order); |
| | | if (code) byCode.set(code, order); |
| | | } else { |
| | | if (validQuantity) existing.quantity = (existing.quantity || 0) + Math.abs(quantity); |
| | | if (!existing.contactName && item.contactName) existing.contactName = item.contactName; |
| | | if (item[dateField] && (!existing[dateField] || item[dateField] > existing[dateField])) { |
| | | existing[dateField] = item[dateField]; |
| | | } |
| | | } |
| | | }); |
| | | return grouped; |
| | | } |
| | | |
| | | function locationSections(d) { |
| | | var production = kv('产ååç§°', text(d.itemName)) + |
| | | kv('è§æ ¼', text(d.itemSpecification || d.itemUnitMeasureName)) + |
| | | kv('å å·¥æ¹æ¬¡', text(d.batchCode || d.tempCode)); |
| | | if (d.produceDate) production = kv('çäº§æ¥æ', fmtDay(d.produceDate)) + production; |
| | | var html = sec('ç产信æ¯', null, production, null); |
| | | |
| | | var salesFlows = groupOutboundOrders((d.seedFlows || []).filter(function (item) { return item.bizType === 119; }), |
| | | function (item) { return item.bizCode; }, 'transactionTime'); |
| | | var salesTargets = groupOutboundOrders(d.salesTargets || [], |
| | | function (item) { return item.salesCode || item.salesOrderCode; }, 'salesDate'); |
| | | var flow = (d.seedFlows || []).find(function (item) { return item.warehouseName; }); |
| | | var storage = ''; |
| | | if (d.inboundTime) storage += kv('å
¥åºæ¥æ', fmtDay(d.inboundTime)); |
| | | var outboundDates = salesFlows.map(function (item) { return item.transactionTime; }) |
| | | .concat(salesTargets.map(function (item) { return item.salesDate; })).filter(Boolean).sort(); |
| | | if (outboundDates.length) storage += kv('æè¿åºåºæ¥æ', fmtDay(outboundDates[outboundDates.length - 1])); |
| | | if (flow) storage += kv('ä»åº', text(flow.warehouseName)); |
| | | html += sec('ä»å¨ä¿¡æ¯', null, storage || '<div class="empty-tip">ææ ä»å¨ä¿¡æ¯</div>', null); |
| | | |
| | | var logistics = salesFlows.map(function (item) { |
| | | var route = [item.warehouseName, item.clientName].filter(Boolean).join(' â '); |
| | | var description = 'è¯¥æ¹æ¬¡' + (item.transactionTime ? 'äº ' + String(item.transactionTime).slice(0, 10) + ' ' : '') + |
| | | (item.warehouseName ? 'ä»' + item.warehouseName + 'åºåº' : '宿éå®åºåº') + |
| | | (item.clientName ? 'ï¼åå¾' + item.clientName : '') + 'ã'; |
| | | return li('<span class="li-ttl">' + text(route || 'éå®åºåº') + '</span>', fmtDay(item.transactionTime), |
| | | kv('åºåºåå·', text(item.bizCode)) + kv('æ°é', fmtNum(item.quantity)) + |
| | | kv('æµè½¬è¯´æ', text(description)) + |
| | | (item.contactName ? kv('è系人', text(item.contactName)) : '')); |
| | | }).join(''); |
| | | if (!logistics && !isEmptyList(salesTargets)) { |
| | | logistics = salesTargets.map(function (item) { |
| | | var description = 'è¯¥æ¹æ¬¡' + (item.salesDate ? 'äº ' + String(item.salesDate).slice(0, 10) + ' ' : '') + |
| | | '宿éå®åºåº' + (item.clientName ? 'ï¼å»å' + item.clientName : '') + 'ã'; |
| | | return li('<span class="li-ttl">' + text(item.clientName || 'éå®å»å') + '</span>', fmtDay(item.salesDate), |
| | | kv('åºåºåå·', text(item.salesCode || item.salesOrderCode)) + kv('æ°é', fmtNum(item.quantity)) + |
| | | kv('æµè½¬è¯´æ', text(description)) + |
| | | (item.contactName ? kv('è系人', text(item.contactName)) : '')); |
| | | }).join(''); |
| | | } |
| | | html += sec('ç©æµä¿¡æ¯', null, logistics || '<div class="empty-tip">ææ ç©æµä¿¡æ¯</div>', null); |
| | | return html; |
| | | } |
| | | |
| | | function stripUrl(v) { |
| | |
| | | kv(operatorLabel, text(operatorName)) + |
| | | kv(codeLabel, text(code || '-')) + |
| | | kv('追溯ç½å', traceUrl |
| | | ? '<a class="link" href="' + esc(traceUrl) + '">' + esc(traceUrl) + '</a>' |
| | | ? '<a class="link" target="_top" href="' + esc(location.pathname.replace(/trace\.html$/, 'trace-location.html') + '?code=' + encodeURIComponent(code || '')) + '">' + esc(traceUrl) + '</a>' |
| | | : '-') + |
| | | kv('计éåä½', text(d.itemUnitMeasureName)) + |
| | | kv('追溯类å', esc(SOURCE_TYPE[d.sourceType] || '追溯ç ')) + |
| | |
| | | return [text(s.receiptCode), text(s.vendorName), nw(fmtNum(s.receivedQuantity)), nw(fmtDay(s.receiptDate))]; |
| | | }); |
| | | html += sec('éè´æ¥æº', null, table(['éè´å
¥åºå', 'ä¾åºå', 'æ°é', 'æ¥æ'], psRows), { collapsible: true, open: false }); |
| | | } |
| | | |
| | | // ç§åæµåä¿¡æ¯ï¼ä»
éå®åºåº bizType=119ï¼ |
| | | var salesFlows = (d.seedFlows || []).filter(function (f) { return f.bizType === 119; }); |
| | | if (!isEmptyList(salesFlows)) { |
| | | var sfBody = salesFlows.map(function (f) { |
| | | var qty = (f.quantity === null || f.quantity === undefined) ? '-' : fmtNum(Math.abs(Number(f.quantity))); |
| | | var wh = [f.warehouseName, f.locationName].filter(Boolean).join(' / ') || '-'; |
| | | return li(statusBadge(FLOW_DIRECTION, f.type) + '<span class="li-ttl">' + esc(FLOW_BIZ_TYPE[f.bizType] || '') + '</span>', |
| | | fmtDate(f.transactionTime), |
| | | kv('æ¥æºåå·', text(f.bizCode)) + |
| | | kv('客æ·', text(f.clientName)) + |
| | | kv('æ°é', qty) + |
| | | kv('ä»åº/åºåº', text(wh))); |
| | | }).join(''); |
| | | html += sec('ç§åæµåä¿¡æ¯', null, '<div class="scroll-list">' + sfBody + '</div>', { collapsible: true, open: false }); |
| | | } else if (!isEmptyList(d.salesTargets)) { |
| | | var stRows = d.salesTargets.map(function (s) { |
| | | return [text(s.salesCode || s.salesOrderCode || ''), text(s.clientName), nw(fmtNum(s.quantity)), nw(fmtDay(s.salesDate))]; |
| | | }); |
| | | html += sec('ç§åæµåä¿¡æ¯', null, table(['éå®åºåºå', '客æ·', 'æ°é', 'æ¥æ'], stRows), { collapsible: true, open: false }); |
| | | } |
| | | |
| | | // å å·¥æµè½¬ |