配合示方优化
This commit is contained in:
@@ -1265,22 +1265,22 @@ jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/con
|
|||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixerCondition/MesXslMixerCondition.api.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixerCondition/MesXslMixerCondition.api.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixerCondition/MesXslMixerCondition.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixerCondition/MesXslMixerCondition.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.data.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaSpecModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaSpecModal.vue
|
||||||
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>3λ<33><CEBB>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ<33><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2λ ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>3λ<33><CEBB>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ<33><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2λ ---
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue
|
||||||
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ϼ<EFBFBD>ʾ<EFBFBD><CABE>ѡ<EFBFBD>ϸ<EFBFBD>Ϊģ<CEAA><C4A3><EFBFBD><EFBFBD>ѯ ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ϼ<EFBFBD>ʾ<EFBFBD><CABE>ѡ<EFBFBD>ϸ<EFBFBD>Ϊģ<CEAA><C4A3><EFBFBD><EFBFBD>ѯ ---
|
||||||
jeecgboot-vue3/src/views/mes/material/materialQuery.util.ts
|
jeecgboot-vue3/src/views/mes/material/materialQuery.util.ts
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue
|
jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMaterialList.vue
|
jeecgboot-vue3/src/views/mes/material/MesMaterialList.vue
|
||||||
@@ -1288,53 +1288,53 @@ jeecgboot-vue3/src/views/mes/material/modules/MesMixerMaterialSelectModal.vue
|
|||||||
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingMaterialSelectModal.vue
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>༭У<E0BCAD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>༭У<E0BCAD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ ---
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.api.ts
|
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.api.ts
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts
|
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMaterial.api.ts
|
jeecgboot-vue3/src/views/mes/material/MesMaterial.api.ts
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMaterial.data.ts
|
jeecgboot-vue3/src/views/mes/material/MesMaterial.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>365<36><35> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>365<36><35> ---
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts
|
jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts
|
||||||
yy-admin-master/YY.Admin/ViewModels/MixerMaterial/MixerMaterialEditDialogViewModel.cs
|
yy-admin-master/YY.Admin/ViewModels/MixerMaterial/MixerMaterialEditDialogViewModel.cs
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%/<2F><><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>%/<2F><><EFBFBD>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_171__mes_xsl_formula_spec_line_decimal3.sql
|
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_171__mes_xsl_formula_spec_line_decimal3.sql
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.data.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaSpecModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaSpecModal.vue
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><>WebSocket<65><74>pongTimeout 1s<31><73>10s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><>WebSocket<65><74>pongTimeout 1s<31><73>10s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecgboot-vue3/src/hooks/web/useWebSocket.ts
|
jeecgboot-vue3/src/hooks/web/useWebSocket.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><>WebSocket<65><74><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Redis<69>ذ<EFBFBD><D8B0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><>WebSocket<65><74><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Redis<69>ذ<EFBFBD><D8B0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
|
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
|
||||||
jeecgboot-vue3/src/hooks/web/useWebSocket.ts
|
jeecgboot-vue3/src/hooks/web/useWebSocket.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><>HTTP<54><50>Ĭ<EFBFBD>ϳ<EFBFBD>ʱ10s<30><73>60s<30><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120s ---
|
-- author:jiangxh---date:20260729--for: <20><>HTTP<54><50>Ĭ<EFBFBD>ϳ<EFBFBD>ʱ10s<30><73>60s<30><73><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120s ---
|
||||||
jeecgboot-vue3/src/utils/http/axios/index.ts
|
jeecgboot-vue3/src/utils/http/axios/index.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.api.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.api.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>B/F<><46><EFBFBD>ϸ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ƥ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ά<EFBFBD><CEAC> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>B/F<><46><EFBFBD>ϸ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ƥ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ά<EFBFBD><CEAC> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>ս<EFBFBD><D5BD><EFBFBD>ϸĸ<CFB8><C4B8><EFBFBD>д<EFBFBD><D0B4>뽺<EFBFBD><EBBDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>ս<EFBFBD><D5BD><EFBFBD>ϸĸ<CFB8><C4B8><EFBFBD>д<EFBFBD><D0B4>뽺<EFBFBD><EBBDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260729--for: <20><>ѡ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260729--for: <20><>ѡ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>/<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1> ---
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingMaterialSelectModal.vue
|
||||||
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
||||||
jeecgboot-vue3/src/views/mes/material/materialQuery.util.ts
|
jeecgboot-vue3/src/views/mes/material/materialQuery.util.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD>ʾ<EFBFBD><CABE>Ԥ<EFBFBD><D4A4>ʱ<EFBFBD><CAB1>ƥ<EFBFBD>佺<EFBFBD><E4BDBA><EFBFBD>б<EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD>ʾ<EFBFBD><CABE>Ԥ<EFBFBD><D4A4>ʱ<EFBFBD><CAB1>ƥ<EFBFBD>佺<EFBFBD><E4BDBA><EFBFBD>б<EFBFBD> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaGenerateMixingModal.vue
|
jeecgboot-vue3/src/views/xslmes/mesXslFormulaSpec/components/MesXslFormulaGenerateMixingModal.vue
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>B/Fƥ<46><C6A5><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD>ǰ+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴSA01<30>Ȱ汾<C8B0><E6B1BE> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>B/Fƥ<46><C6A5><EFBFBD>Ž<EFBFBD>ǰ+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴSA01<30>Ȱ汾<C8B0><E6B1BE> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ֶΣ<EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>ҵ<EFBFBD><D2B5><EFBFBD>ֶΣ<D6B6>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMaterial.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMaterial.java
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/service/IMesMaterialService.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/service/IMesMaterialService.java
|
||||||
@@ -1346,7 +1346,7 @@ jeecgboot-vue3/src/views/mes/material/MesMaterial.api.ts
|
|||||||
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŸĶ<EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>ŸĶ<C5B8> ---
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMaterial.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMaterial.java
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/service/IMesMaterialService.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/service/IMesMaterialService.java
|
||||||
@@ -1358,35 +1358,46 @@ jeecgboot-vue3/src/views/mes/material/MesMaterial.api.ts
|
|||||||
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
jeecgboot-vue3/src/views/mes/material/modules/MesMaterialSelectModal.vue
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><D4B6>뽺<EFBFBD><EBBDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><D4B6>뽺<EFBFBD><EBBDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ---
|
||||||
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/controller/MesMaterialController.java
|
||||||
jeecgboot-vue3/src/views/mes/material/MesMaterial.data.ts
|
jeecgboot-vue3/src/views/mes/material/MesMaterial.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD>汾<EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>ƴ<EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD>ƴ<EFBFBD>汾<EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>ϲ<EFBFBD>ƴ<EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>ͬһ<CDAC><D2BB><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>ͬ<EFBFBD><CDAC>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>ͬ<EFBFBD><CDAC>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>;NP FOR<4F><52>һ<EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>;NP FOR<4F><52>һ<EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;ȡ<CDBE><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BDBABC><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>ۼ<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BDBABC><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ϸ<EFBFBD>ۼ<EFBFBD><DBBC>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BDBABC><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<EFBFBD><EFBFBD> ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BDBABC><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1> ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
|
||||||
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
|
||||||
|
|
||||||
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PS<50><53><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>(recognition_pass) ---
|
-- author:jiangxh---date:20260730--for: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PS<50><53><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>(recognition_pass) ---
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslMixerPsCompileService.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslMixerPsCompileService.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixerPsCompileServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixerPsCompileServiceImpl.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslMixingSpecService.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslMixingSpecService.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/executor/RegistryStageSyncExecutor.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/executor/RegistryStageSyncExecutor.java
|
||||||
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/executor/RegistryStageRevertExecutor.java
|
jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/executor/RegistryStageRevertExecutor.java
|
||||||
|
|
||||||
|
-- author:GHT---date:20260730--for: <20><>XSLMES-20260730-DING-PULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD> ---
|
||||||
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/IntegrationForceReplayHolder.java
|
||||||
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/integration/engine/IntegrationOrchestrator.java
|
||||||
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/dingtalk/stream/DingApprovalManualPullService.java
|
||||||
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/dingtalk/stream/DingBpmsEventProcessor.java
|
||||||
|
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalRecordController.java
|
||||||
|
jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_164__mes_xsl_approval_record_pull_ding_result.sql
|
||||||
|
jeecgboot-vue3/src/views/xslmes/approval/mesXslApprovalRecord/MesXslApprovalRecordList.vue
|
||||||
|
jeecgboot-vue3/src/views/xslmes/approval/mesXslApprovalRecord/MesXslApprovalRecord.api.ts
|
||||||
|
-- author:GHT---date:20260730--for: <20><>XSLMES-20260730-DING-PULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD> ---
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ import org.jeecg.common.system.base.controller.JeecgController;
|
|||||||
import org.jeecg.common.system.query.QueryGenerator;
|
import org.jeecg.common.system.query.QueryGenerator;
|
||||||
import org.jeecg.modules.xslmes.approval.entity.MesXslApprovalRecord;
|
import org.jeecg.modules.xslmes.approval.entity.MesXslApprovalRecord;
|
||||||
import org.jeecg.modules.xslmes.approval.service.IMesXslApprovalRecordService;
|
import org.jeecg.modules.xslmes.approval.service.IMesXslApprovalRecordService;
|
||||||
|
import org.jeecg.modules.xslmes.dingtalk.stream.DingApprovalManualPullService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@@ -35,6 +37,9 @@ public class MesXslApprovalRecordController extends JeecgController<MesXslApprov
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMesXslApprovalRecordService mesXslApprovalRecordService;
|
private IMesXslApprovalRecordService mesXslApprovalRecordService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DingApprovalManualPullService dingApprovalManualPullService;
|
||||||
|
|
||||||
@Operation(summary = "MES审批台账-分页列表查询")
|
@Operation(summary = "MES审批台账-分页列表查询")
|
||||||
@RequiresPermissions("xslmes:mes_xsl_approval_record:list")
|
@RequiresPermissions("xslmes:mes_xsl_approval_record:list")
|
||||||
@GetMapping(value = "/list")
|
@GetMapping(value = "/list")
|
||||||
@@ -61,6 +66,16 @@ public class MesXslApprovalRecordController extends JeecgController<MesXslApprov
|
|||||||
return Result.OK(entity);
|
return Result.OK(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】台账手动拉取钉钉结果并强制重跑集成-----
|
||||||
|
@Operation(summary = "MES审批台账-手动拉取钉钉审批结果并强制重跑集成")
|
||||||
|
// 与「补发IM卡片」一致:复用 list 权限,避免新权限未入库/未赋权导致管理员也无法操作
|
||||||
|
@RequiresPermissions("xslmes:mes_xsl_approval_record:list")
|
||||||
|
@PostMapping(value = "/pullDingResult")
|
||||||
|
public Result<String> pullDingResult(@RequestParam(name = "id") String id) {
|
||||||
|
return dingApprovalManualPullService.pullAndForceReplay(id);
|
||||||
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】台账手动拉取钉钉结果并强制重跑集成-----
|
||||||
|
|
||||||
@RequiresPermissions("xslmes:mes_xsl_approval_record:exportXls")
|
@RequiresPermissions("xslmes:mes_xsl_approval_record:exportXls")
|
||||||
@RequestMapping(value = "/exportXls")
|
@RequestMapping(value = "/exportXls")
|
||||||
public ModelAndView exportXls(HttpServletRequest request, MesXslApprovalRecord model) {
|
public ModelAndView exportXls(HttpServletRequest request, MesXslApprovalRecord model) {
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package org.jeecg.modules.xslmes.approval.integration.engine;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手动强制重跑集成时的线程标记:旁路幂等跳过,允许假 success 后再次执行。
|
||||||
|
*/
|
||||||
|
public final class IntegrationForceReplayHolder {
|
||||||
|
|
||||||
|
private static final ThreadLocal<Boolean> FORCE = ThreadLocal.withInitial(() -> Boolean.FALSE);
|
||||||
|
|
||||||
|
private IntegrationForceReplayHolder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isForced() {
|
||||||
|
return Boolean.TRUE.equals(FORCE.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void runForced(Runnable action) {
|
||||||
|
FORCE.set(Boolean.TRUE);
|
||||||
|
try {
|
||||||
|
action.run();
|
||||||
|
} finally {
|
||||||
|
FORCE.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -223,11 +223,16 @@ public class IntegrationOrchestrator {
|
|||||||
IIntegrationActionExecutor executor = findExecutor(action.getActionType());
|
IIntegrationActionExecutor executor = findExecutor(action.getActionType());
|
||||||
String response = executor.execute(ctx, action);
|
String response = executor.execute(ctx, action);
|
||||||
long ms = System.currentTimeMillis() - t0;
|
long ms = System.currentTimeMillis() - t0;
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】条件不符的「跳过」不记 success,避免假成功堵死重试-----------
|
||||||
|
if (oConvertUtils.isNotEmpty(response) && response.startsWith("跳过:")) {
|
||||||
|
writeLog(ctx, action, idempotentKey, "skipped", null, response, snapshot, null, ms);
|
||||||
|
log.info("[集成引擎] 动作条件跳过 action={} response={}", action.getActionName(), response);
|
||||||
|
} else {
|
||||||
writeLog(ctx, action, idempotentKey, "success", null, response, snapshot, null, ms);
|
writeLog(ctx, action, idempotentKey, "success", null, response, snapshot, null, ms);
|
||||||
successCount++;
|
successCount++;
|
||||||
//update-begin---author:GHT ---date:20260608 for:【审核集成】动作成功后刷新源单快照,供后续动作使用最新字段-----------
|
|
||||||
refreshSourceRecord(ctx);
|
refreshSourceRecord(ctx);
|
||||||
//update-end---author:GHT ---date:20260608 for:【审核集成】动作成功后刷新源单快照,供后续动作使用最新字段-----------
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】条件不符的「跳过」不记 success,避免假成功堵死重试-----------
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
long ms = System.currentTimeMillis() - t0;
|
long ms = System.currentTimeMillis() - t0;
|
||||||
String errMsg = e.getMessage();
|
String errMsg = e.getMessage();
|
||||||
@@ -386,8 +391,26 @@ public class IntegrationOrchestrator {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 回退类动作:历史 success 但源单 status 仍未到 targetStage 时,允许再次执行。
|
* 回退类动作:历史 success 但源单 status 仍未到 targetStage 时,允许再次执行。
|
||||||
|
* 环节同步:历史 success 但源单仍未到 statusAfter 时,允许再次执行(修复假成功堵死)。
|
||||||
|
* 手动强制重跑:一律旁路。
|
||||||
*/
|
*/
|
||||||
private boolean shouldBypassIdempotentSkip(IntegrationContext ctx, MesXslIntegrationAction action) {
|
private boolean shouldBypassIdempotentSkip(IntegrationContext ctx, MesXslIntegrationAction action) {
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】强制重跑+环节同步未达目标旁路幂等-----------
|
||||||
|
if (IntegrationForceReplayHolder.isForced()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ("REGISTRY_STAGE_SYNC".equals(action.getActionType())) {
|
||||||
|
String statusAfter = resolveSyncStatusAfter(ctx, action);
|
||||||
|
if (oConvertUtils.isEmpty(statusAfter)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String currentStatus = readSourceStatus(ctx);
|
||||||
|
if (oConvertUtils.isEmpty(currentStatus)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return !statusAfter.equals(currentStatus);
|
||||||
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】强制重跑+环节同步未达目标旁路幂等-----------
|
||||||
if (!"REGISTRY_STAGE_REVERT".equals(action.getActionType())) {
|
if (!"REGISTRY_STAGE_REVERT".equals(action.getActionType())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -399,6 +422,13 @@ public class IntegrationOrchestrator {
|
|||||||
return !targetStage.equals(currentStatus);
|
return !targetStage.equals(currentStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】解析环节同步目标状态-----------
|
||||||
|
private String resolveSyncStatusAfter(IntegrationContext ctx, MesXslIntegrationAction action) {
|
||||||
|
String stage = IntegrationActionConfigHelper.resolveStage(action, ctx.getPlan());
|
||||||
|
return IntegrationActionConfigHelper.resolveStatusAfter(action, stage);
|
||||||
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】解析环节同步目标状态-----------
|
||||||
|
|
||||||
private String resolveRevertTargetStage(MesXslIntegrationAction action) {
|
private String resolveRevertTargetStage(MesXslIntegrationAction action) {
|
||||||
String target = IntegrationActionConfigHelper.resolveTargetStage(action);
|
String target = IntegrationActionConfigHelper.resolveTargetStage(action);
|
||||||
if (oConvertUtils.isNotEmpty(target)) {
|
if (oConvertUtils.isNotEmpty(target)) {
|
||||||
|
|||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package org.jeecg.modules.xslmes.dingtalk.stream;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.common.util.oConvertUtils;
|
||||||
|
import org.jeecg.modules.xslmes.approval.constant.ApprovalRecordConstants;
|
||||||
|
import org.jeecg.modules.xslmes.approval.entity.MesXslApprovalRecord;
|
||||||
|
import org.jeecg.modules.xslmes.approval.integration.engine.IntegrationForceReplayHolder;
|
||||||
|
import org.jeecg.modules.xslmes.approval.service.IMesXslApprovalRecordService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批台账手动拉取钉钉结果并强制重跑集成。
|
||||||
|
* <p>
|
||||||
|
* 用于 Stream 接收节点未在线导致漏推、或集成假 success 后幂等卡死的人工修复。
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class DingApprovalManualPullService {
|
||||||
|
|
||||||
|
private static final String LOG_TAG = DingTalkStreamSdkRunner.LOG_TAG;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesXslApprovalRecordService approvalRecordService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DingTalkWorkflowService workflowService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DingBpmsEventProcessor eventProcessor;
|
||||||
|
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】台账手动拉取钉钉审批结果并强制重跑集成-----
|
||||||
|
/**
|
||||||
|
* 按台账 ID 拉取钉钉实例,强制重放已同意中间节点集成,终态时再触发 onInstanceChange。
|
||||||
|
*/
|
||||||
|
public Result<String> pullAndForceReplay(String recordId) {
|
||||||
|
if (oConvertUtils.isEmpty(recordId)) {
|
||||||
|
return Result.error("台账ID不能为空");
|
||||||
|
}
|
||||||
|
MesXslApprovalRecord record = approvalRecordService.getById(recordId);
|
||||||
|
if (record == null) {
|
||||||
|
return Result.error("未找到审批台账");
|
||||||
|
}
|
||||||
|
if (!ApprovalRecordConstants.CHANNEL_DINGTALK.equals(record.getChannel())) {
|
||||||
|
return Result.error("仅支持钉钉通道台账");
|
||||||
|
}
|
||||||
|
if (oConvertUtils.isEmpty(record.getExternalInstanceId())) {
|
||||||
|
return Result.error("台账无钉钉实例ID,无法拉取");
|
||||||
|
}
|
||||||
|
if (oConvertUtils.isEmpty(record.getBizTable()) || oConvertUtils.isEmpty(record.getBizDataId())) {
|
||||||
|
return Result.error("台账缺少业务表或业务ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
String instanceId = record.getExternalInstanceId();
|
||||||
|
JSONObject instance = workflowService.getProcessInstance(instanceId);
|
||||||
|
if (instance == null) {
|
||||||
|
return Result.error("拉取钉钉审批实例失败,请稍后重试");
|
||||||
|
}
|
||||||
|
|
||||||
|
String dingStatus = instance.getString("status");
|
||||||
|
String dingResult = instance.getString("result");
|
||||||
|
log.info("{} 手动拉取开始 recordId={} instanceId={} dingStatus={} dingResult={}",
|
||||||
|
LOG_TAG, recordId, instanceId, dingStatus, dingResult);
|
||||||
|
|
||||||
|
int[] nodeHolder = {0};
|
||||||
|
boolean[] terminalHolder = {false};
|
||||||
|
String[] errHolder = {null};
|
||||||
|
|
||||||
|
IntegrationForceReplayHolder.runForced(() -> {
|
||||||
|
try {
|
||||||
|
nodeHolder[0] = eventProcessor.forceReconcileAgreedNodes(record, instance);
|
||||||
|
JSONObject synthetic = buildSyntheticEvent(instance, instanceId);
|
||||||
|
if (synthetic != null) {
|
||||||
|
eventProcessor.onInstanceChange(synthetic);
|
||||||
|
terminalHolder[0] = true;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("{} 手动拉取强制重跑失败 recordId={} instanceId={}: {}",
|
||||||
|
LOG_TAG, recordId, instanceId, e.getMessage(), e);
|
||||||
|
errHolder[0] = e.getMessage();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (errHolder[0] != null) {
|
||||||
|
return Result.error("拉取成功但重跑集成失败: " + errHolder[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder msg = new StringBuilder("已拉取钉钉结果并强制重跑集成");
|
||||||
|
msg.append("(钉钉状态=").append(dingStatus);
|
||||||
|
if (oConvertUtils.isNotEmpty(dingResult)) {
|
||||||
|
msg.append(",结果=").append(dingResult);
|
||||||
|
}
|
||||||
|
msg.append(")");
|
||||||
|
msg.append(";中间节点重放 ").append(nodeHolder[0]).append(" 个");
|
||||||
|
if (terminalHolder[0]) {
|
||||||
|
msg.append(";已触发终态回调");
|
||||||
|
} else if ("RUNNING".equalsIgnoreCase(dingStatus)) {
|
||||||
|
msg.append(";钉钉仍流转中,仅补偿已同意节点");
|
||||||
|
} else {
|
||||||
|
msg.append(";未映射到可处理终态,请核对钉钉实例");
|
||||||
|
}
|
||||||
|
log.info("{} 手动拉取完成 recordId={} {}", LOG_TAG, recordId, msg);
|
||||||
|
return Result.OK(msg.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将钉钉实例状态映射为 onInstanceChange 所需的合成事件(与补偿扫描一致)。
|
||||||
|
*/
|
||||||
|
private JSONObject buildSyntheticEvent(JSONObject instance, String processInstanceId) {
|
||||||
|
String dingStatus = instance.getString("status");
|
||||||
|
String dingResult = instance.getString("result");
|
||||||
|
|
||||||
|
if ("RUNNING".equalsIgnoreCase(dingStatus)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject event = new JSONObject();
|
||||||
|
event.put("processInstanceId", processInstanceId);
|
||||||
|
|
||||||
|
if ("COMPLETED".equalsIgnoreCase(dingStatus)) {
|
||||||
|
if ("agree".equalsIgnoreCase(dingResult)) {
|
||||||
|
event.put("type", "finish");
|
||||||
|
event.put("result", "agree");
|
||||||
|
} else if ("refuse".equalsIgnoreCase(dingResult)) {
|
||||||
|
event.put("type", "finish");
|
||||||
|
event.put("result", "refuse");
|
||||||
|
} else {
|
||||||
|
event.put("type", "finish");
|
||||||
|
event.put("result", oConvertUtils.isEmpty(dingResult) ? "unknown" : dingResult);
|
||||||
|
}
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("TERMINATED".equalsIgnoreCase(dingStatus) || "CANCELED".equalsIgnoreCase(dingStatus)) {
|
||||||
|
event.put("type", "terminate");
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】台账手动拉取钉钉审批结果并强制重跑集成-----
|
||||||
|
}
|
||||||
@@ -491,10 +491,22 @@ public class DingBpmsEventProcessor {
|
|||||||
* @return 本次补偿触发的节点数
|
* @return 本次补偿触发的节点数
|
||||||
*/
|
*/
|
||||||
public int reconcileIntermediateNodes(MesXslApprovalRecord record, JSONObject instance) {
|
public int reconcileIntermediateNodes(MesXslApprovalRecord record, JSONObject instance) {
|
||||||
|
return reconcileAgreedNodes(record, instance, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//update-begin---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】强制重放已同意中间节点(不限台账流转态)-----
|
||||||
|
/**
|
||||||
|
* 手动拉取场景:忽略台账是否已终态、忽略历史集成 success,强制按序重放已同意节点。
|
||||||
|
*/
|
||||||
|
public int forceReconcileAgreedNodes(MesXslApprovalRecord record, JSONObject instance) {
|
||||||
|
return reconcileAgreedNodes(record, instance, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int reconcileAgreedNodes(MesXslApprovalRecord record, JSONObject instance, boolean force) {
|
||||||
if (record == null || instance == null) {
|
if (record == null || instance == null) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!ApprovalRecordConstants.STATUS_RUNNING.equals(record.getStatus())) {
|
if (!force && !ApprovalRecordConstants.STATUS_RUNNING.equals(record.getStatus())) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
MesXslApprovalFlow flow = loadFlow(record.getFlowId());
|
MesXslApprovalFlow flow = loadFlow(record.getFlowId());
|
||||||
@@ -504,8 +516,8 @@ public class DingBpmsEventProcessor {
|
|||||||
|
|
||||||
List<NodePair> pairs = instanceStageExtractor.alignMesNodesWithTasks(instance, flow.getFlowConfig());
|
List<NodePair> pairs = instanceStageExtractor.alignMesNodesWithTasks(instance, flow.getFlowConfig());
|
||||||
if (pairs.isEmpty()) {
|
if (pairs.isEmpty()) {
|
||||||
log.info("{} 中间节点补偿:无节点对齐 instanceId={} recordId={}",
|
log.info("{} 中间节点补偿:无节点对齐 instanceId={} recordId={} force={}",
|
||||||
LOG_TAG, record.getExternalInstanceId(), record.getId());
|
LOG_TAG, record.getExternalInstanceId(), record.getId(), force);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,7 +531,7 @@ public class DingBpmsEventProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String planId = resolveNodeIntegrationPlanId(pair.getMesNode());
|
String planId = resolveNodeIntegrationPlanId(pair.getMesNode());
|
||||||
if (oConvertUtils.isNotEmpty(planId) && hasIntegrationSuccess(record.getId(), planId)) {
|
if (!force && oConvertUtils.isNotEmpty(planId) && hasIntegrationSuccess(record.getId(), planId)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (oConvertUtils.isEmpty(planId)) {
|
if (oConvertUtils.isEmpty(planId)) {
|
||||||
@@ -529,8 +541,8 @@ public class DingBpmsEventProcessor {
|
|||||||
|
|
||||||
JSONObject mesNode = pair.getMesNode();
|
JSONObject mesNode = pair.getMesNode();
|
||||||
String nodeName = mesNode != null ? mesNode.getString("name") : null;
|
String nodeName = mesNode != null ? mesNode.getString("name") : null;
|
||||||
log.info("{} 中间节点补偿:触发集成 instanceId={} recordId={} nodeIndex={} nodeName={} planId={}",
|
log.info("{} 中间节点补偿:触发集成 instanceId={} recordId={} nodeIndex={} nodeName={} planId={} force={}",
|
||||||
LOG_TAG, record.getExternalInstanceId(), record.getId(), nodeIndex, nodeName, planId);
|
LOG_TAG, record.getExternalInstanceId(), record.getId(), nodeIndex, nodeName, planId, force);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fireCompensatedNodeApproved(record, instance, pair, nodeIndex, decision);
|
fireCompensatedNodeApproved(record, instance, pair, nodeIndex, decision);
|
||||||
@@ -542,6 +554,7 @@ public class DingBpmsEventProcessor {
|
|||||||
}
|
}
|
||||||
return compensated;
|
return compensated;
|
||||||
}
|
}
|
||||||
|
//update-end---author:GHT ---date:20260730 for:【XSLMES-20260730-DING-PULL】强制重放已同意中间节点(不限台账流转态)-----
|
||||||
|
|
||||||
private void fireCompensatedNodeApproved(MesXslApprovalRecord record, JSONObject instance,
|
private void fireCompensatedNodeApproved(MesXslApprovalRecord record, JSONObject instance,
|
||||||
NodePair pair, int nodeIndex, NodeTaskDecision decision) {
|
NodePair pair, int nodeIndex, NodeTaskDecision decision) {
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ============================================================
|
||||||
|
-- 审批台账:手动拉取钉钉审批结果权限
|
||||||
|
-- author: GHT date: 2026-07-30
|
||||||
|
-- for: 【XSLMES-20260730-DING-PULL】
|
||||||
|
-- ============================================================
|
||||||
|
|
||||||
|
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
|
||||||
|
SELECT '178046026420823', '178046026420820', '拉取钉钉审批结果', NULL, NULL, 0, NULL, NULL, 2, 'xslmes:mes_xsl_approval_record:pullDingResult', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2026-07-30 00:00:00', NULL, NULL, 0, 0, '1', 0
|
||||||
|
FROM DUAL
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM sys_permission WHERE id = '178046026420823');
|
||||||
|
|
||||||
|
INSERT INTO sys_role_permission (id, role_id, permission_id, data_rule_ids, operate_date, operate_ip)
|
||||||
|
SELECT REPLACE(UUID(),'-',''), 'f6817f48af4fb3af11b9e8bf182f618b', '178046026420823', NULL, '2026-07-30 00:00:00', '127.0.0.1'
|
||||||
|
FROM DUAL
|
||||||
|
WHERE NOT EXISTS (
|
||||||
|
SELECT 1 FROM sys_role_permission
|
||||||
|
WHERE role_id = 'f6817f48af4fb3af11b9e8bf182f618b' AND permission_id = '178046026420823'
|
||||||
|
);
|
||||||
@@ -4,6 +4,7 @@ enum Api {
|
|||||||
list = '/xslmes/mesXslApprovalRecord/list',
|
list = '/xslmes/mesXslApprovalRecord/list',
|
||||||
queryById = '/xslmes/mesXslApprovalRecord/queryById',
|
queryById = '/xslmes/mesXslApprovalRecord/queryById',
|
||||||
exportXls = '/xslmes/mesXslApprovalRecord/exportXls',
|
exportXls = '/xslmes/mesXslApprovalRecord/exportXls',
|
||||||
|
pullDingResult = '/xslmes/mesXslApprovalRecord/pullDingResult',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getExportUrl = Api.exportXls;
|
export const getExportUrl = Api.exportXls;
|
||||||
@@ -11,3 +12,7 @@ export const getExportUrl = Api.exportXls;
|
|||||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||||
|
|
||||||
export const queryById = (params: { id: string }) => defHttp.get({ url: Api.queryById, params });
|
export const queryById = (params: { id: string }) => defHttp.get({ url: Api.queryById, params });
|
||||||
|
|
||||||
|
/** 手动拉取钉钉审批结果并强制重跑集成(含钉钉API与多节点集成,超时放宽) */
|
||||||
|
export const pullDingResult = (params: { id: string }) =>
|
||||||
|
defHttp.post({ url: Api.pullDingResult, params, timeout: 120 * 1000 }, { joinParamsToUrl: true });
|
||||||
|
|||||||
@@ -19,6 +19,16 @@
|
|||||||
onClick: handleDetail.bind(null, record),
|
onClick: handleDetail.bind(null, record),
|
||||||
auth: 'xslmes:mes_xsl_approval_record:list',
|
auth: 'xslmes:mes_xsl_approval_record:list',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '拉取钉钉结果',
|
||||||
|
color: 'success',
|
||||||
|
ifShow: record.channel === 'DINGTALK' && !!record.externalInstanceId,
|
||||||
|
popConfirm: {
|
||||||
|
title: '将拉取钉钉最新审批结果并强制重跑集成方案,确认继续?',
|
||||||
|
confirm: handlePullDingResult.bind(null, record),
|
||||||
|
},
|
||||||
|
auth: 'xslmes:mes_xsl_approval_record:list',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '补发IM卡片',
|
label: '补发IM卡片',
|
||||||
color: 'warning',
|
color: 'warning',
|
||||||
@@ -43,7 +53,7 @@
|
|||||||
import { useListPage } from '/@/hooks/system/useListPage';
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
import MesXslApprovalRecordDetailModal from './components/MesXslApprovalRecordDetailModal.vue';
|
import MesXslApprovalRecordDetailModal from './components/MesXslApprovalRecordDetailModal.vue';
|
||||||
import { columns, searchFormSchema } from './MesXslApprovalRecord.data';
|
import { columns, searchFormSchema } from './MesXslApprovalRecord.data';
|
||||||
import { list, getExportUrl } from './MesXslApprovalRecord.api';
|
import { list, getExportUrl, pullDingResult } from './MesXslApprovalRecord.api';
|
||||||
import { resendApprovalCard } from '/@/views/approval/flow/approvalHandle.api';
|
import { resendApprovalCard } from '/@/views/approval/flow/approvalHandle.api';
|
||||||
import { useMessage } from '/@/hooks/web/useMessage';
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
|
||||||
@@ -63,7 +73,7 @@
|
|||||||
showAdvancedButton: true,
|
showAdvancedButton: true,
|
||||||
},
|
},
|
||||||
actionColumn: {
|
actionColumn: {
|
||||||
width: 180,
|
width: 280,
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -73,7 +83,7 @@
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const [registerTable] = tableContext;
|
const [registerTable, { reload }] = tableContext;
|
||||||
|
|
||||||
function handleDetail(record: Recordable) {
|
function handleDetail(record: Recordable) {
|
||||||
openModal(true, { record });
|
openModal(true, { record });
|
||||||
@@ -87,4 +97,17 @@
|
|||||||
createMessage.error(e?.message || '补发失败');
|
createMessage.error(e?.message || '补发失败');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function handlePullDingResult(record: Recordable) {
|
||||||
|
const hide = createMessage.loading('正在拉取钉钉结果并重跑集成,请稍候…', 0);
|
||||||
|
try {
|
||||||
|
const msg = await pullDingResult({ id: record.id });
|
||||||
|
createMessage.success(msg || '拉取并重跑完成');
|
||||||
|
reload();
|
||||||
|
} catch (e: any) {
|
||||||
|
createMessage.error(e?.message || '拉取钉钉结果失败');
|
||||||
|
} finally {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user