From 0bbd986930e4b41e0741fd07c4287208da398330 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期五, 01 八月 2025 17:03:37 +0800 Subject: [PATCH] art: 生产订单同步定时任务 --- src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java | 26 + db/双林新火炬MES数据库设计.pdma.json | 204 +++++++++---- src/main/java/org/jeecg/modules/pms/entity/PmsMaterialProcess.java | 67 ++-- src/main/java/org/jeecg/modules/sap/dto/OrderBomDTO.java | 2 src/main/java/org/jeecg/modules/mes/service/impl/MesProductionOrderServiceImpl.java | 49 +++ src/main/java/org/jeecg/modules/sap/FunctionConst.java | 12 src/main/java/org/jeecg/modules/pms/service/impl/PmsMaterialProcessServiceImpl.java | 34 ++ src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java | 59 +++ src/main/java/org/jeecg/modules/pms/service/IPmsMaterialProcessService.java | 16 + src/main/java/org/jeecg/modules/mes/service/IMesProductionOrderService.java | 17 + src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterials.java | 19 - src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncJob.java | 141 +++++++++ src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java | 18 + src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterialsDetail.java | 22 + src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsDetailService.java | 15 + src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java | 157 ++++++--- 16 files changed, 671 insertions(+), 187 deletions(-) diff --git "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" index 19f8250..79a4257 100644 --- "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" +++ "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" @@ -4,7 +4,7 @@ "avatar": "", "version": "4.9.2", "createdTime": "2025-3-10 16:38:19", - "updatedTime": "2025-7-31 10:26:58", + "updatedTime": "2025-8-1 16:49:40", "dbConns": [], "profile": { "default": { @@ -10822,6 +10822,114 @@ "id": "4BF071F1-4F69-4044-8C17-25D7B66404F7" }, { + "defKey": "dispatcher_code", + "defName": "璋冨害鍛樼紪鍙�", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "id": "09E4DA62-D2E3-4D82-9259-DCACA5C40FFD" + }, + { + "defKey": "dispatcher_name", + "defName": "璋冨害鍛樺悕绉�", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573", + "id": "C700FB1A-B747-4E97-A7BE-0044C0B3B2EE" + }, + { + "defKey": "order_create_date", + "defName": "璁㈠崟鍒涘缓鏃ユ湡", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "id": "BD647EC3-B32A-460E-A6D9-A4A1D808F849" + }, + { + "defKey": "order_update_date", + "defName": "璁㈠崟鏇存柊鏃ユ湡", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "id": "E2F64B2D-D193-410E-83F5-7CA29FC2F1C7" + }, + { + "defKey": "order_update_time", + "defName": "璁㈠崟鏇存柊鏃堕棿", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "id": "99C90188-1886-45E3-8A66-062CF8672F15" + }, + { + "defKey": "order_update_user", + "defName": "璁㈠崟淇敼浜�", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", + "extProps": {}, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "id": "57BE810E-5423-4B64-B5C4-914D4FC48965" + }, + { "defKey": "customer_order_model", "defName": "瀹㈡埛鍨嬪彿", "comment": "", @@ -12045,8 +12153,8 @@ "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098" }, { - "defKey": "del_flag", - "defName": "鍒犻櫎鏍囪", + "defKey": "order_id", + "defName": "鐢熶骇璁㈠崟ID", "comment": "", "type": "", "len": "", @@ -12057,10 +12165,10 @@ "defaultValue": "", "hideInGraph": false, "refDict": "", - "baseType": "1D764C4A-6F9F-421E-B11A-6F3E23B51811", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", "extProps": {}, - "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E", - "id": "ABF02681-A2E7-4077-AEEF-7338AF47C4B8" + "domain": "16120F75-6AA7-4483-868D-F07F511BB081", + "id": "FE30BEF4-FD2C-477D-83B9-DAE0546C7D09" }, { "defKey": "material_number", @@ -12107,24 +12215,6 @@ "attr9": "", "id": "CADE8A93-4759-4DA5-8210-942102A9F18B", "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64" - }, - { - "defKey": "factory_id", - "defName": "浜х嚎ID(SAP宸ヤ綔涓績)", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", - "extProps": {}, - "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573", - "id": "F5683C11-B21C-44C4-AF88-2D9A92F7444F" }, { "defKey": "process_code", @@ -12426,24 +12516,6 @@ "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098" }, { - "defKey": "del_flag", - "defName": "鍒犻櫎鏍囪", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "baseType": "1D764C4A-6F9F-421E-B11A-6F3E23B51811", - "extProps": {}, - "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E", - "id": "B43CBCB3-5BC6-4411-9999-C50D2C6A8A5D" - }, - { "defKey": "order_id", "defName": "鐢熸垚璁㈠崟ID", "comment": "", @@ -12516,24 +12588,6 @@ "attr9": "", "id": "5428A165-EF43-40AF-B56F-9F75CBA47A0C", "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64" - }, - { - "defKey": "bill_materials_code", - "defName": "BOM浠g爜", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", - "extProps": {}, - "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E", - "id": "07D7B55E-B88D-4493-B916-987978EA20D1" }, { "defKey": "production_unit", @@ -60905,7 +60959,35 @@ "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64" }, { - "defKey": "usage_unit", + "defKey": "production_unit", + "defName": "鍩烘湰鍗曚綅", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6", + "refDict": "", + "extProps": {}, + "notes": {}, + "attr1": "", + "attr2": "", + "attr3": "", + "attr4": "", + "attr5": "", + "attr6": "", + "attr7": "", + "attr8": "", + "attr9": "", + "id": "4F81E835-2971-44F0-872E-61BD47417674", + "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64" + }, + { + "defKey": "usage_quantity", "defName": "闇�姹傜敤閲�", "comment": "", "type": "", diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java b/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java index 47573aa..e6e7f4d 100644 --- a/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java +++ b/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java @@ -11,124 +11,167 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.sap.dto.ProductionOrderDTO; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** * @Description: SAP鐢熶骇璁㈠崟 * @Author: jeecg-boot - * @Date: 2025-07-04 + * @Date: 2025-07-04 * @Version: V1.0 */ @Data @TableName("mes_production_order") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@ApiModel(value="mes_production_order瀵硅薄", description="SAP鐢熶骇璁㈠崟") +@ApiModel(value = "mes_production_order瀵硅薄", description = "SAP鐢熶骇璁㈠崟") public class MesProductionOrder implements Serializable { private static final long serialVersionUID = 1L; - /**涓婚敭*/ - @TableId(type = IdType.ASSIGN_ID) + /**涓婚敭*/ + @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "涓婚敭") private String id; - /**鍒涘缓浜�*/ + /**鍒涘缓浜�*/ @ApiModelProperty(value = "鍒涘缓浜�") private String createBy; - /**鍒涘缓鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**鍒涘缓鏃ユ湡*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "鍒涘缓鏃ユ湡") private Date createTime; - /**鏇存柊浜�*/ + /**鏇存柊浜�*/ @ApiModelProperty(value = "鏇存柊浜�") private String updateBy; - /**鏇存柊鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**鏇存柊鏃ユ湡*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "鏇存柊鏃ユ湡") private Date updateTime; - /**鍒犻櫎鏍囪*/ - @Excel(name = "鍒犻櫎鏍囪", width = 15) + /**鍒犻櫎鏍囪*/ @ApiModelProperty(value = "鍒犻櫎鏍囪") @TableLogic private Integer delFlag; - /**鐢熶骇璁㈠崟鍙�*/ - @Excel(name = "鐢熶骇璁㈠崟鍙�", width = 15) + /**鐢熶骇璁㈠崟鍙�*/ @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�") private String orderCode; - /**璁㈠崟绫诲瀷*/ - @Excel(name = "璁㈠崟绫诲瀷", width = 15) + /**璁㈠崟绫诲瀷*/ @ApiModelProperty(value = "璁㈠崟绫诲瀷") private String orderCategory; - /**鐗╂枡缂栧彿*/ - @Excel(name = "鐗╂枡缂栧彿", width = 15) + /**鐗╂枡缂栧彿*/ @ApiModelProperty(value = "鐗╂枡缂栧彿") private String materialNumber; - /**鐗╂枡鍚嶇О*/ - @Excel(name = "鐗╂枡鍚嶇О", width = 15) + /**鐗╂枡鍚嶇О*/ @ApiModelProperty(value = "鐗╂枡鍚嶇О") private String materialName; - /**璁″垝寮�濮嬫棩鏈�*/ - @Excel(name = "璁″垝寮�濮嬫棩鏈�", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**璁″垝寮�濮嬫棩鏈�*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "璁″垝寮�濮嬫棩鏈�") private Date planStart; - /**璁″垝缁撴潫鏃ユ湡*/ - @Excel(name = "璁″垝缁撴潫鏃ユ湡", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**璁″垝缁撴潫鏃ユ湡*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "璁″垝缁撴潫鏃ユ湡") private Date planEnd; - /**璁㈠崟鏁伴噺*/ - @Excel(name = "璁㈠崟鏁伴噺", width = 15) + /**璁㈠崟鏁伴噺*/ @ApiModelProperty(value = "璁㈠崟鏁伴噺") - private Double orderQuantity; - /**浜у搧鍗曚綅*/ - @Excel(name = "浜у搧鍗曚綅", width = 15, dicCode = "production_unit") - @Dict(dicCode = "production_unit") + private BigDecimal orderQuantity; + /**浜у搧鍗曚綅*/ + @Dict(dicCode = "production_unit") @ApiModelProperty(value = "浜у搧鍗曚綅") private String productionUnit; - /**璁㈠崟鐘舵��*/ - @Excel(name = "璁㈠崟鐘舵��", width = 15, dicCode = "order_status") - @Dict(dicCode = "order_status") + /**璁㈠崟鐘舵��*/ + @Dict(dicCode = "order_status") @ApiModelProperty(value = "璁㈠崟鐘舵��") private String orderStatus; - /**浼樺厛绾�*/ - @Excel(name = "浼樺厛绾�", width = 15, dicCode = "priority") - @Dict(dicCode = "priority") + /**浼樺厛绾�*/ + @Dict(dicCode = "priority") @ApiModelProperty(value = "浼樺厛绾�") private String priority; - /**璁″垝宸ヨ壓璺嚎*/ - @Excel(name = "璁″垝宸ヨ壓璺嚎", width = 15) + /**璁″垝宸ヨ壓璺嚎*/ @ApiModelProperty(value = "璁″垝宸ヨ壓璺嚎") private String processRoute; - /**璁″垝鐗╂枡娓呭崟*/ - @Excel(name = "璁″垝鐗╂枡娓呭崟", width = 15) + /**璁″垝鐗╂枡娓呭崟*/ @ApiModelProperty(value = "璁″垝鐗╂枡娓呭崟") private String materialListCode; - /**宸ュ巶缂栫爜*/ - @Excel(name = "宸ュ巶缂栫爜", width = 15) + /**宸ュ巶缂栫爜*/ @ApiModelProperty(value = "宸ュ巶缂栫爜") private String factoryCode; - /**宸ュ巶鍚嶇О*/ - @Excel(name = "宸ュ巶鍚嶇О", width = 15) + /**宸ュ巶鍚嶇О*/ @ApiModelProperty(value = "宸ュ巶鍚嶇О") private String factoryName; - /**瀹㈡埛鍨嬪彿*/ - @Excel(name = "瀹㈡埛鍨嬪彿", width = 15) + /**璋冨害鍛樼紪鍙�*/ + @ApiModelProperty(value = "璋冨害鍛樼紪鍙�") + private String dispatcherCode; + /**璋冨害鍛樺悕绉�*/ + @ApiModelProperty(value = "璋冨害鍛樺悕绉�") + private String dispatcherName; + /**璁㈠崟鍒涘缓鏃ユ湡 yyyy-MM-dd*/ + @ApiModelProperty(value = "璁㈠崟鍒涘缓鏃ユ湡") + private String orderCreateDate; + /**璁㈠崟鏇存柊鏃ユ湡 yyyy-MM-dd*/ + @ApiModelProperty(value = "璁㈠崟鏇存柊鏃ユ湡") + private String orderUpdateDate; + /**璁㈠崟鏇存柊鏃堕棿 HH:mm:ss*/ + @ApiModelProperty(value = "璁㈠崟鏇存柊鏃堕棿") + private String orderUpdateTime; + /**璁㈠崟淇敼浜�*/ + @ApiModelProperty(value = "璁㈠崟淇敼浜�") + private String orderUpdateUser; + /**瀹㈡埛鍨嬪彿*/ @ApiModelProperty(value = "瀹㈡埛鍨嬪彿") private String customerOrderModel; - /**瀹㈡埛鍚嶇О*/ - @Excel(name = "瀹㈡埛鍚嶇О", width = 15) + /**瀹㈡埛鍚嶇О*/ @ApiModelProperty(value = "瀹㈡埛鍚嶇О") private String customer; - /**澶囨敞*/ - @Excel(name = "澶囨敞", width = 15) + /**澶囨敞*/ @ApiModelProperty(value = "澶囨敞") private String remark; + + public MesProductionOrder() { + } + + public MesProductionOrder(ProductionOrderDTO dto) { + this.orderCode = dto.getAUFNR(); + this.orderCategory = dto.getDAUAT(); + this.materialNumber = dto.getMATNR(); + this.materialName = dto.getMAKTX(); + this.planStart = DateUtils.str2Date(dto.getGSTRP(), DateUtils.date_sdf.get()); + this.planEnd = DateUtils.str2Date(dto.getGLTRP(), DateUtils.date_sdf.get()); + this.orderQuantity = new BigDecimal(dto.getGAMNG()); + this.productionUnit = dto.getGMEIN(); + this.orderStatus = dto.getTXT04(); + this.priority = dto.getAPRIO(); + this.processRoute = dto.getAUFPL(); + this.materialListCode = dto.getSTLNR(); + this.factoryCode = dto.getDWERK(); + this.factoryName = dto.getNAME1(); + this.dispatcherCode = dto.getFEVOR(); + this.dispatcherName = dto.getTXT(); + this.orderCreateDate = dto.getUDATE(); + this.orderUpdateDate = dto.getLAEDA(); + this.orderUpdateTime = dto.getTIMES(); + this.orderUpdateUser = dto.getUSNAM(); + this.delFlag = CommonConstant.DEL_FLAG_0; + } + + public void updateEntity(ProductionOrderDTO dto) { + this.orderCategory = dto.getDAUAT(); + this.planStart = DateUtils.str2Date(dto.getGSTRP(), DateUtils.date_sdf.get()); + this.planEnd = DateUtils.str2Date(dto.getGLTRP(), DateUtils.date_sdf.get()); + this.orderQuantity = new BigDecimal(dto.getGAMNG()); + this.orderStatus = dto.getTXT04(); + this.priority = dto.getAPRIO(); + this.orderCreateDate = dto.getUDATE(); + this.orderUpdateDate = dto.getLAEDA(); + this.orderUpdateTime = dto.getTIMES(); + this.orderUpdateUser = dto.getUSNAM(); + } } diff --git a/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncJob.java b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncJob.java new file mode 100644 index 0000000..f6db679 --- /dev/null +++ b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncJob.java @@ -0,0 +1,141 @@ +package org.jeecg.modules.mes.job; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.mes.entity.MesProductionOrder; +import org.jeecg.modules.mes.service.IMesProductionOrderService; +import org.jeecg.modules.pms.service.IPmsMaterialProcessService; +import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService; +import org.jeecg.modules.sap.dto.OrderBomDTO; +import org.jeecg.modules.sap.dto.OrderProcessDTO; +import org.jeecg.modules.sap.dto.ProductionOrderDTO; +import org.jeecg.modules.sap.service.OrderBomSync; +import org.jeecg.modules.sap.service.OrderProcessSync; +import org.jeecg.modules.sap.service.ProductionOrderSync; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class ProductionOrderSyncJob implements Job { + //宸ュ巶缂栫爜(鏂扮伀鐐� 2301) + private static final String FACTORY_CODE = "2301"; + /** + * 璁㈠崟绫诲瀷 + * 鏍囧噯鐢熶骇璁㈠崟 Z001 + * 瀹㈤��杩斿伐鐢熶骇璁㈠崟 Z002 + * 鍛嗘粸澶勭悊杩斿伐鐢熶骇璁㈠崟 Z003 + * 璇曞埗鐢熶骇璁㈠崟(鏂扮伀鐐�) Z011 + * 鎷嗛浂鐢熶骇璁㈠崟(鏂扮伀鐐�) 2012 + */ + private static final String ORDER_TYPE_CODE = "Z001"; + /** + * 鐢熶骇璋冨害鍛� + * 001 涓�鍒嗗巶璋冨害鍛� + * 002 浜屽垎鍘傝皟搴﹀憳 + * 003 涓夊垎鍘傝皟搴﹀憳 + * 004 鍥涘垎鍘傝皟搴﹀憳 + * 005 ABS璋冨害鍛� + * 006 璋冭川璋冨害鍛� + * 007 浜斿垎鍘傝皟搴﹀憳 + * 008 璇曞埗杞﹂棿璋冨害鍛� + * 009 澶栭噰璋冨害鍛� + * 010 鍏巶璋冨害鍛� + * 012 鍏垎鍘傝皟搴﹀憳 + */ + private static final String PRODUCTION_MANAGER = "010"; + /** + * 鐢熶骇璁㈠崟鐘舵�侊紝瀹為檯涓婏紝鍙湁REL鐘舵�佺殑宸ュ崟鎵嶅彲浠ヨ繘琛屾搷浣� + * CRTD 鏂板缓 + * REL 涓嬭揪 + * TECO 鍏抽棴 + */ + private static final String ORDER_STATUS = "REL"; + + /** + * 璇锋眰鎴愬姛缂栫爜 + */ + private static final String SUCCESS_CODE = "S"; + + @Autowired + private ProductionOrderSync productionOrderSync; + @Autowired + private OrderBomSync orderBomSync; + @Autowired + private OrderProcessSync orderProcessSync; + @Autowired + private IMesProductionOrderService productionOrderService; + @Autowired + private IPmsProcessBillMaterialsService processBillMaterialsService; + @Autowired + private IPmsMaterialProcessService materialProcessService; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + //鑾峰彇涓婃鍚屾鏃堕棿 + try { + //璋冪敤SAP鎺ュ彛鑾峰彇鐢熶骇璁㈠崟 + Map<String, Object> productionOrderMap = productionOrderSync.syncProductionOrder(FACTORY_CODE, ORDER_TYPE_CODE, PRODUCTION_MANAGER, ORDER_STATUS, null, null); + if (productionOrderMap == null || !SUCCESS_CODE.equals(productionOrderMap.get("ztype"))) { + log.error("鏈悓姝ュ埌璁㈠崟淇℃伅锛佹棩鏈燂細{}", LocalDateTime.now()); + return; + } + //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹� + Object result = productionOrderMap.get("result"); + boolean b = result instanceof List; + if(!b) { + log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass()); + return; + } + List<ProductionOrderDTO> productionOrderDTOList = (List<ProductionOrderDTO>) result; + Map<String, MesProductionOrder> orderMap = productionOrderService.saveOrUpdateProductionOrder(productionOrderDTOList); + String orderCodes = String.join(",", orderMap.keySet()); + //璁㈠崟BOM鍚屾 + Map<String, Object> orderBomMap = orderBomSync.syncOrderBom(FACTORY_CODE, orderCodes); + if (orderBomMap == null || !SUCCESS_CODE.equals(orderBomMap.get("ztype"))) { + log.error("鏈悓姝ュ埌璁㈠崟BOM淇℃伅锛佹棩鏈燂細{}", LocalDateTime.now()); + return; + } + //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹� + result = orderBomMap.get("result"); + b = result instanceof List; + if(!b) { + log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass()); + return; + } + List<OrderBomDTO> orderBomDTOList = (List<OrderBomDTO>) result; + b = processBillMaterialsService.saveOrUpdateOrderBom(orderMap, orderBomDTOList); + if(!b) { + log.error("淇濆瓨璁㈠崟BOM澶辫触锛屾棩鏈燂細{}", LocalDateTime.now()); + return; + } + //璁㈠崟宸ュ簭鍚屾 + Map<String, Object> orderProcessMap = orderProcessSync.syncOrderProcess(FACTORY_CODE, orderCodes); + if (orderBomMap == null || !SUCCESS_CODE.equals(orderProcessMap.get("ztype"))) { + log.error("鏈悓姝ュ埌璁㈠崟宸ュ簭淇℃伅锛佹棩鏈燂細{}", LocalDateTime.now()); + return; + } + //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹� + result = orderBomMap.get("result"); + b = result instanceof List; + if(!b) { + log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass()); + return; + } + List<OrderProcessDTO> orderProcessDTOList = (List<OrderProcessDTO>) result; + b = materialProcessService.saveOrUpdateOrderProcess(orderMap, orderProcessDTOList); + if(!b) { + log.error("淇濆瓨璁㈠崟宸ュ簭澶辫触锛屾棩鏈燂細{}", LocalDateTime.now()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + } +} diff --git a/src/main/java/org/jeecg/modules/mes/service/IMesProductionOrderService.java b/src/main/java/org/jeecg/modules/mes/service/IMesProductionOrderService.java index ff8affa..a833e82 100644 --- a/src/main/java/org/jeecg/modules/mes/service/IMesProductionOrderService.java +++ b/src/main/java/org/jeecg/modules/mes/service/IMesProductionOrderService.java @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mes.entity.MesProductionOrder; +import org.jeecg.modules.sap.dto.ProductionOrderDTO; + +import java.util.List; +import java.util.Map; /** * @Description: SAP鐢熶骇璁㈠崟 @@ -11,4 +15,17 @@ */ public interface IMesProductionOrderService extends IService<MesProductionOrder> { + /** + * SAP鍚屾鏁版嵁淇濆瓨 + * @param productionOrderDTOList + * @return + */ + Map<String, MesProductionOrder> saveOrUpdateProductionOrder(List<ProductionOrderDTO> productionOrderDTOList); + + /** + * 鏍规嵁璁㈠崟鍙锋煡璇� + * @param orderCode + * @return + */ + MesProductionOrder getByOrderCode(String orderCode); } diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionOrderServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionOrderServiceImpl.java index ed8e452..0b0f002 100644 --- a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionOrderServiceImpl.java +++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionOrderServiceImpl.java @@ -1,18 +1,65 @@ package org.jeecg.modules.mes.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.constant.CommonConstant; import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.mes.mapper.MesProductionOrderMapper; import org.jeecg.modules.mes.service.IMesProductionOrderService; +import org.jeecg.modules.sap.dto.ProductionOrderDTO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; /** * @Description: SAP鐢熶骇璁㈠崟 * @Author: jeecg-boot - * @Date: 2025-07-04 + * @Date: 2025-07-04 * @Version: V1.0 */ @Service public class MesProductionOrderServiceImpl extends ServiceImpl<MesProductionOrderMapper, MesProductionOrder> implements IMesProductionOrderService { + @Override + @Transactional(rollbackFor = Exception.class) + public Map<String, MesProductionOrder> saveOrUpdateProductionOrder(List<ProductionOrderDTO> productionOrderDTOList) { + List<MesProductionOrder> addList = new ArrayList<>(); + List<MesProductionOrder> updateList = new ArrayList<>(); + Map<String, MesProductionOrder> resultMap = new HashMap<>(); + for (ProductionOrderDTO productionOrderDTO : productionOrderDTOList) { + MesProductionOrder updated = getByOrderCode(productionOrderDTO.getAUFNR()); + if (updated == null) { + updated = new MesProductionOrder(productionOrderDTO); + addList.add(updated); + resultMap.put(updated.getOrderCode(), updated); + } else { + updated.updateEntity(productionOrderDTO); + updateList.add(updated); + resultMap.put(updated.getOrderCode(), updated); + } + } + if(CollectionUtil.isEmpty(addList)){ + super.saveBatch(addList); + } + if(CollectionUtil.isEmpty(updateList)){ + super.updateBatchById(updateList); + } + return resultMap; + } + + @Override + public MesProductionOrder getByOrderCode(String orderCode) { + LambdaQueryWrapper<MesProductionOrder> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MesProductionOrder::getOrderCode, orderCode); + queryWrapper.eq(MesProductionOrder::getDelFlag, CommonConstant.DEL_FLAG_0); + List<MesProductionOrder> list = super.list(queryWrapper); + if (CollectionUtil.isNotEmpty(list)) { + return list.get(0); + } + return null; + } + + } diff --git a/src/main/java/org/jeecg/modules/pms/entity/PmsMaterialProcess.java b/src/main/java/org/jeecg/modules/pms/entity/PmsMaterialProcess.java index 86974f7..0a341d6 100644 --- a/src/main/java/org/jeecg/modules/pms/entity/PmsMaterialProcess.java +++ b/src/main/java/org/jeecg/modules/pms/entity/PmsMaterialProcess.java @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -10,8 +9,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import org.jeecg.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.modules.sap.dto.OrderProcessDTO; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -20,65 +18,64 @@ /** * @Description: 鐗╂枡宸ュ簭 * @Author: jeecg-boot - * @Date: 2025-07-01 + * @Date: 2025-07-01 * @Version: V1.0 */ @Data @TableName("pms_material_process") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@ApiModel(value="pms_material_process瀵硅薄", description="鐗╂枡宸ュ簭") +@ApiModel(value = "pms_material_process瀵硅薄", description = "鐗╂枡宸ュ簭") public class PmsMaterialProcess implements Serializable { private static final long serialVersionUID = 1L; - /**涓婚敭*/ - @TableId(type = IdType.ASSIGN_ID) + /**涓婚敭*/ + @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "涓婚敭") private String id; - /**鍒涘缓浜�*/ + /**鍒涘缓浜�*/ @ApiModelProperty(value = "鍒涘缓浜�") private String createBy; - /**鍒涘缓鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**鍒涘缓鏃ユ湡*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "鍒涘缓鏃ユ湡") private Date createTime; - /**鏇存柊浜�*/ + /**鏇存柊浜�*/ @ApiModelProperty(value = "鏇存柊浜�") private String updateBy; - /**鏇存柊鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /**鏇存柊鏃ユ湡*/ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "鏇存柊鏃ユ湡") private Date updateTime; - /**鍒犻櫎鏍囪*/ - @Excel(name = "鍒犻櫎鏍囪", width = 15) - @ApiModelProperty(value = "鍒犻櫎鏍囪") - @TableLogic - private Integer delFlag; - /**鐗╂枡缂栫爜*/ - @Excel(name = "鐗╂枡缂栫爜", width = 15) + /**鐢熶骇璁㈠崟ID*/ + @ApiModelProperty(value = "鐢熶骇璁㈠崟ID") + private String orderId; + /**鐗╂枡缂栫爜*/ @ApiModelProperty(value = "鐗╂枡缂栫爜") private String materialNumber; - /**鐗╂枡鍚嶇О*/ - @Excel(name = "鐗╂枡鍚嶇О", width = 15) + /**鐗╂枡鍚嶇О*/ @ApiModelProperty(value = "鐗╂枡鍚嶇О") private String materialName; - /**浜х嚎ID(SAP宸ヤ綔涓績)*/ - @Excel(name = "浜х嚎ID(SAP宸ヤ綔涓績)", width = 15) - @ApiModelProperty(value = "浜х嚎ID(SAP宸ヤ綔涓績)") - @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name") - private String factoryId; - /**宸ュ簭鍙�*/ - @Excel(name = "宸ュ簭鍙�", width = 15) + /**宸ュ簭鍙�*/ @ApiModelProperty(value = "宸ュ簭鍙�") private String processCode; - /**宸ュ簭鍚嶇О*/ - @Excel(name = "宸ュ簭鍚嶇О", width = 15) + /**宸ュ簭鍚嶇О*/ @ApiModelProperty(value = "宸ュ簭鍚嶇О") private String processName; - /**鎺у埗鐮�*/ - @Excel(name = "鎺у埗鐮�", width = 15) + /**鎺у埗鐮�*/ @ApiModelProperty(value = "鎺у埗鐮�") private String controlCode; + + public PmsMaterialProcess(){} + + public PmsMaterialProcess(String orderId, String materialName, OrderProcessDTO dto) { + this.orderId = orderId; + this.materialNumber = dto.getMATNR(); + this.materialName = materialName; + this.processCode = dto.getVORNR(); + this.processName = dto.getLTXA1(); + this.controlCode = dto.getSTEUS(); + } } diff --git a/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterials.java b/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterials.java index 95ea7ca..f4ce7d6 100644 --- a/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterials.java +++ b/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterials.java @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -10,10 +9,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -50,33 +49,19 @@ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "鏇存柊鏃ユ湡") private Date updateTime; - /**鍒犻櫎鏍囪*/ - @Excel(name = "鍒犻櫎鏍囪", width = 15) - @ApiModelProperty(value = "鍒犻櫎鏍囪") - @TableLogic - private Integer delFlag; /**鐢熸垚璁㈠崟ID*/ - @Excel(name = "鐢熸垚璁㈠崟ID", width = 15) @ApiModelProperty(value = "鐢熸垚璁㈠崟ID") private String orderId; /**鐗╂枡缂栫爜*/ - @Excel(name = "鐗╂枡缂栫爜", width = 15) @ApiModelProperty(value = "鐗╂枡缂栫爜") private String materialNumber; /**鐗╂枡鍚嶇О*/ - @Excel(name = "鐗╂枡鍚嶇О", width = 15) @ApiModelProperty(value = "鐗╂枡鍚嶇О") private String materialName; - /**BOM浠g爜*/ - @Excel(name = "BOM浠g爜", width = 15) - @ApiModelProperty(value = "BOM浠g爜") - private String billMaterialsCode; /**鍩烘湰鍗曚綅*/ - @Excel(name = "鍩烘湰鍗曚綅", width = 15) @ApiModelProperty(value = "鍩烘湰鍗曚綅") private String productionUnit; /**璁㈠崟鏁伴噺*/ - @Excel(name = "璁㈠崟鏁伴噺", width = 15) @ApiModelProperty(value = "璁㈠崟鏁伴噺") - private Double productionQuantity; + private BigDecimal productionQuantity; } diff --git a/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterialsDetail.java b/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterialsDetail.java index 95dc6c7..b00dfef 100644 --- a/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterialsDetail.java +++ b/src/main/java/org/jeecg/modules/pms/entity/PmsProcessBillMaterialsDetail.java @@ -10,10 +10,11 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.modules.sap.dto.OrderBomDTO; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -51,20 +52,29 @@ @ApiModelProperty(value = "鏇存柊鏃ユ湡") private Date updateTime; /**鐢熶骇鐗╂枡ID*/ - @Excel(name = "鐢熶骇鐗╂枡ID", width = 15) @ApiModelProperty(value = "鐢熶骇鐗╂枡ID") @Dict(dictTable = "pms_process_bill_materials", dicCode = "id", dicText = "material_number") private String materialId; /**鐗╂枡缂栫爜*/ - @Excel(name = "鐗╂枡缂栫爜", width = 15) @ApiModelProperty(value = "鐗╂枡缂栫爜") private String materialNumber; /**鐗╂枡鍚嶇О*/ - @Excel(name = "鐗╂枡鍚嶇О", width = 15) @ApiModelProperty(value = "鐗╂枡鍚嶇О") private String materialName; + /**鍩烘湰鍗曚綅*/ + @ApiModelProperty(value = "鍩烘湰鍗曚綅") + private String productionUnit; /**闇�姹傜敤閲�*/ - @Excel(name = "闇�姹傜敤閲�", width = 15) @ApiModelProperty(value = "闇�姹傜敤閲�") - private Double usageUnit; + private BigDecimal usageQuantity; + + public PmsProcessBillMaterialsDetail(){} + + public PmsProcessBillMaterialsDetail(String materialId, OrderBomDTO dto) { + this.materialId = materialId; + this.materialNumber = dto.getMATNR(); + this.materialName = dto.getMAKTX(); + this.productionUnit = dto.getMEINS(); + this.usageQuantity = new BigDecimal(dto.getBDMNG()); + } } diff --git a/src/main/java/org/jeecg/modules/pms/service/IPmsMaterialProcessService.java b/src/main/java/org/jeecg/modules/pms/service/IPmsMaterialProcessService.java index 12c8cef..a3d097b 100644 --- a/src/main/java/org/jeecg/modules/pms/service/IPmsMaterialProcessService.java +++ b/src/main/java/org/jeecg/modules/pms/service/IPmsMaterialProcessService.java @@ -2,9 +2,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.pms.entity.PmsMaterialProcess; +import org.jeecg.modules.sap.dto.OrderProcessDTO; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Map; /** @@ -15,4 +18,17 @@ */ public interface IPmsMaterialProcessService extends IService<PmsMaterialProcess> { IPage<Map<String, Object>> getpmsMaterialProcessListData(Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * + * @param orderMap + * @param orderProcessDTOList + * @return + */ + boolean saveOrUpdateOrderProcess(Map<String, MesProductionOrder> orderMap, List<OrderProcessDTO> orderProcessDTOList); + /** + * 鍒犻櫎鍘熸湁鐨勬暟鎹� + * @param orderId + */ + void removeByOrderId(String orderId); } diff --git a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsDetailService.java b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsDetailService.java index 3d0b428..b49558b 100644 --- a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsDetailService.java +++ b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsDetailService.java @@ -3,8 +3,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.pms.entity.PmsProcessBillMaterialsDetail; +import org.jeecg.modules.sap.dto.OrderBomDTO; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Map; /** @@ -16,4 +18,17 @@ public interface IPmsProcessBillMaterialsDetailService extends IService<PmsProcessBillMaterialsDetail> { PmsProcessBillMaterialsDetail queryByMaterialId(String materialId); IPage<Map<String, Object>> getpmsProcessBillMaterialsDetailListData(Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 鍒犻櫎鍘熸湁鐨勬暟鎹� + * @param materialsId + */ + void removeByMaterialsId(String materialsId); + + /** + * 鎵归噺淇℃伅鐗╂枡娓呭崟鏄庣粏 + * @param materialsId + * @param collect + */ + void saveBatchDetail(String materialsId, List<OrderBomDTO> collect); } diff --git a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java index cacfe51..4ddfc1f 100644 --- a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java +++ b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java @@ -2,9 +2,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.pms.entity.PmsProcessBillMaterials; +import org.jeecg.modules.sap.dto.OrderBomDTO; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Map; /** @@ -15,4 +18,19 @@ */ public interface IPmsProcessBillMaterialsService extends IService<PmsProcessBillMaterials> { IPage<Map<String, Object>> getpmsProcessBillMaterialsListData(Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 鎵归噺淇濆瓨鎴栨洿鏂拌鍗旴OM鏁版嵁 + * @param orderMap + * @param orderBomDTOList + * @return + */ + boolean saveOrUpdateOrderBom(Map<String, MesProductionOrder> orderMap, List<OrderBomDTO> orderBomDTOList); + + /** + * 璁㈠崟鐗╂枡鏌ヨ + * @param orderId + * @return + */ + PmsProcessBillMaterials getByOrderId(String orderId); } diff --git a/src/main/java/org/jeecg/modules/pms/service/impl/PmsMaterialProcessServiceImpl.java b/src/main/java/org/jeecg/modules/pms/service/impl/PmsMaterialProcessServiceImpl.java index 3629fc2..876678d 100644 --- a/src/main/java/org/jeecg/modules/pms/service/impl/PmsMaterialProcessServiceImpl.java +++ b/src/main/java/org/jeecg/modules/pms/service/impl/PmsMaterialProcessServiceImpl.java @@ -1,22 +1,29 @@ package org.jeecg.modules.pms.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; +import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.pms.entity.PmsMaterialProcess; import org.jeecg.modules.pms.mapper.PmsMaterialProcessMapper; import org.jeecg.modules.pms.service.IPmsMaterialProcessService; +import org.jeecg.modules.sap.dto.OrderProcessDTO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 鐗╂枡宸ュ簭 * @Author: jeecg-boot - * @Date: 2025-07-01 + * @Date: 2025-07-01 * @Version: V1.0 */ @Service @@ -40,4 +47,29 @@ } return super.getBaseMapper().getpmsMaterialProcessListData(pageData, paramMap); } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveOrUpdateOrderProcess(Map<String, MesProductionOrder> orderMap, List<OrderProcessDTO> orderProcessDTOList) { + for (Map.Entry<String, MesProductionOrder> entry : orderMap.entrySet()) { + MesProductionOrder order = entry.getValue(); + //鍒犻櫎鍘熸湁鐨勬暟鎹� + this.removeByOrderId(order.getId()); + //閲嶆柊鏂板宸ュ簭淇℃伅 + List<OrderProcessDTO> collect = orderProcessDTOList.stream().filter(orderProcessDTO -> entry.getKey().equals(orderProcessDTO.getAUFNR())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(collect)) { + List<PmsMaterialProcess> list = collect.stream().map(orderBomDTO -> new PmsMaterialProcess(entry.getKey(), order.getMaterialName(), orderBomDTO)).collect(Collectors.toList()); + super.saveBatch(list); + } + } + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void removeByOrderId(String orderId) { + LambdaQueryWrapper<PmsMaterialProcess> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PmsMaterialProcess::getOrderId, orderId); + super.remove(queryWrapper); + } } diff --git a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java index 81fa739..8273062 100644 --- a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java +++ b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java @@ -1,5 +1,7 @@ package org.jeecg.modules.pms.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -7,16 +9,20 @@ import org.jeecg.modules.pms.entity.PmsProcessBillMaterialsDetail; import org.jeecg.modules.pms.mapper.PmsProcessBillMaterialsDetailMapper; import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsDetailService; +import org.jeecg.modules.sap.dto.OrderBomDTO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 鐗╂枡娓呭崟 * @Author: jeecg-boot - * @Date: 2025-07-01 + * @Date: 2025-07-01 * @Version: V1.0 */ @Service @@ -45,4 +51,22 @@ } return super.getBaseMapper().getpmsProcessBillMaterialsDetailListData(pageData, paramMap); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void removeByMaterialsId(String materialsId) { + LambdaQueryWrapper<PmsProcessBillMaterialsDetail> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PmsProcessBillMaterialsDetail::getMaterialId, materialsId); + this.getBaseMapper().delete(queryWrapper); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveBatchDetail(String materialsId, List<OrderBomDTO> collect) { + if (CollectionUtil.isEmpty(collect)) { + return; + } + List<PmsProcessBillMaterialsDetail> list = collect.stream().map(orderBomDTO -> new PmsProcessBillMaterialsDetail(materialsId, orderBomDTO)).collect(Collectors.toList()); + super.saveBatch(list); + } } diff --git a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java index eda1def..75cda98 100644 --- a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java +++ b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java @@ -1,26 +1,37 @@ package org.jeecg.modules.pms.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; +import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.pms.entity.PmsProcessBillMaterials; import org.jeecg.modules.pms.mapper.PmsProcessBillMaterialsMapper; +import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsDetailService; import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService; +import org.jeecg.modules.sap.dto.OrderBomDTO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 璁㈠崟BOM * @Author: jeecg-boot - * @Date: 2025-07-01 + * @Date: 2025-07-01 * @Version: V1.0 */ @Service public class PmsProcessBillMaterialsServiceImpl extends ServiceImpl<PmsProcessBillMaterialsMapper, PmsProcessBillMaterials> implements IPmsProcessBillMaterialsService { + @Autowired + private IPmsProcessBillMaterialsDetailService processBillMaterialsDetailService; @Override public IPage<Map<String, Object>> getpmsProcessBillMaterialsListData(Integer pageNo, Integer pageSize, HttpServletRequest req) { @@ -40,4 +51,50 @@ } return super.getBaseMapper().getpmsProcessBillMaterialsListData(pageData, paramMap); } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveOrUpdateOrderBom(Map<String, MesProductionOrder> orderMap, List<OrderBomDTO> orderBomDTOList) { + for (Map.Entry<String, MesProductionOrder> entry : orderMap.entrySet()) { + MesProductionOrder order = entry.getValue(); + PmsProcessBillMaterials materials = getByOrderId(order.getId()); + if(materials != null) { + //鏇存柊鐗╂枡鏁版嵁 + materials.setOrderId(order.getId()); + materials.setMaterialNumber(order.getMaterialNumber()); + materials.setMaterialName(order.getMaterialName()); + materials.setProductionUnit(order.getProductionUnit()); + materials.setProductionQuantity(order.getOrderQuantity()); + this.getBaseMapper().updateById(materials); + //鏇存柊鐗╂枡鏄庣粏鏁版嵁 + processBillMaterialsDetailService.removeByMaterialsId(materials.getId()); + //杩囨护鍑烘璁㈠崟鐨勭墿鏂欎俊鎭� + List<OrderBomDTO> collect = orderBomDTOList.stream().filter(orderBomDTO -> entry.getKey().equals(orderBomDTO.getAUFNR())).collect(Collectors.toList()); + processBillMaterialsDetailService.saveBatchDetail(materials.getId(), collect); + }else { + materials = new PmsProcessBillMaterials(); + materials.setOrderId(order.getId()); + materials.setMaterialNumber(order.getMaterialNumber()); + materials.setMaterialName(order.getMaterialName()); + materials.setProductionUnit(order.getProductionUnit()); + materials.setProductionQuantity(order.getOrderQuantity()); + this.getBaseMapper().insert(materials); + //杩囨护鍑烘璁㈠崟鐨勭墿鏂欎俊鎭� + List<OrderBomDTO> collect = orderBomDTOList.stream().filter(orderBomDTO -> entry.getKey().equals(orderBomDTO.getAUFNR())).collect(Collectors.toList()); + processBillMaterialsDetailService.saveBatchDetail(materials.getId(), collect); + } + } + return true; + } + + @Override + public PmsProcessBillMaterials getByOrderId(String orderId) { + LambdaQueryWrapper<PmsProcessBillMaterials> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PmsProcessBillMaterials::getOrderId, orderId); + List<PmsProcessBillMaterials> list = super.list(queryWrapper); + if (CollectionUtil.isNotEmpty(list)) { + return list.get(0); + } + return null; + } } diff --git a/src/main/java/org/jeecg/modules/sap/FunctionConst.java b/src/main/java/org/jeecg/modules/sap/FunctionConst.java index 3126ff1..68929c6 100644 --- a/src/main/java/org/jeecg/modules/sap/FunctionConst.java +++ b/src/main/java/org/jeecg/modules/sap/FunctionConst.java @@ -2,15 +2,15 @@ public class FunctionConst { //1.鐢熶骇璁㈠崟鍚屾鎺ュ彛 - public static String ZPPF_033_1 = "ZPPF_033_1"; + public static final String ZPPF_033_1 = "ZPPF_033_1"; //2.璁㈠崟BOM鍚屾鎺ュ彛 - public static String ZPPF_033_3 = "ZPPF_033_3"; + public static final String ZPPF_033_3 = "ZPPF_033_3"; //3.浜у搧宸ュ簭鍚屾鎺ュ彛 - public static String ZPPF_033_2 = "ZPPF_033_2"; + public static final String ZPPF_033_2 = "ZPPF_033_2"; //4.鐢熶骇璁㈠崟宸ュ簭鎶ュ伐鎺ュ彛銆佺敓浜ц鍗曞叆搴撱�佷笉鍚堟牸鍝佸鐞� - public static String ZMES_PRODORDCONF_CREATE_TT2301 = "ZMES_PRODORDCONF_CREATE_TT2301"; + public static final String ZMES_PRODORDCONF_CREATE_TT2301 = "ZMES_PRODORDCONF_CREATE_TT2301"; //5.鐢熶骇璁㈠崟鎶曟枡鎺ュ彛 - public static String ZMES_GOODSMVT_CREATE_2301 = "ZMES_GOODSMVT_CREATE_2301"; + public static final String ZMES_GOODSMVT_CREATE_2301 = "ZMES_GOODSMVT_CREATE_2301"; //6.鐢熶骇璁㈠崟鍏抽棴鎺ュ彛 - public static String ZPPF_019 = "ZPPF_019"; + public static final String ZPPF_019 = "ZPPF_019"; } diff --git a/src/main/java/org/jeecg/modules/sap/dto/OrderBomDTO.java b/src/main/java/org/jeecg/modules/sap/dto/OrderBomDTO.java index 6622759..7cb84b2 100644 --- a/src/main/java/org/jeecg/modules/sap/dto/OrderBomDTO.java +++ b/src/main/java/org/jeecg/modules/sap/dto/OrderBomDTO.java @@ -14,6 +14,6 @@ private String MAKTX; /** 闇�姹傞噺 */ private String BDMNG; - /** MEINS */ + /** 鍩烘湰璁¢噺鍗曚綅 */ private String MEINS; } -- Gitblit v1.9.3