From 0f6d7de996cd647658e2d13d121d9e775002ccf8 Mon Sep 17 00:00:00 2001 From: zhangt Date: Thu, 25 Sep 2025 15:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=91=E8=B4=A7=E5=8D=95ER?= =?UTF-8?q?P=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plat/module/erp/api/ErpBillMainApi.java | 24 ++++ .../erp/api/dto/ErpBillMainSaveReqDTO.java | 56 +++++++++ .../module/erp/api/ErpBillMainApiImpl.java | 25 ++++ .../admin/erp/ErpBillMainController.java | 31 +++++ .../admin/erp/vo/ErpBillMainSaveReqVO.java | 56 +++++++++ .../erp/service/erp/ErpBillMainService.java | 8 ++ .../service/erp/ErpBillMainServiceImpl.java | 110 ++++++++++++++++++ 7 files changed, 310 insertions(+) create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApi.java create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpBillMainSaveReqDTO.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBillMainController.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpBillMainSaveReqVO.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainService.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApi.java new file mode 100644 index 0000000..f1e677e --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApi.java @@ -0,0 +1,24 @@ +package com.zt.plat.module.erp.api; + +import com.zt.plat.module.erp.api.dto.ErpBillMainSaveReqDTO; +import com.zt.plat.module.erp.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务 - ERP") +public interface ErpBillMainApi { + String PREFIX = ApiConstants.PREFIX + "/erp-external"; + + @PostMapping(PREFIX + "/submit-bill-main") + @Operation(summary = "erp数据提交") + String submitBillMainToErp(@Valid @RequestBody ErpBillMainSaveReqDTO reqDTO); + + @PostMapping(PREFIX + "/submit-bill-reverse") + @Operation(summary = "冲销") + String submitBillMainReverseToErp(@Valid @RequestBody ErpBillMainSaveReqDTO reqDTO); +} diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpBillMainSaveReqDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpBillMainSaveReqDTO.java new file mode 100644 index 0000000..98c0500 --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpBillMainSaveReqDTO.java @@ -0,0 +1,56 @@ +package com.zt.plat.module.erp.api.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +@Schema(description = "管理后台 - 收发货单新增/修改 Request VO") +@Data +public class ErpBillMainSaveReqDTO { + + @Schema(description = "收货单号;自动生成") + private String billNumber; + + @Schema(description = "过账日期") + private LocalDateTime postingDate; + + @Schema(description = "实物物料编码") + private String materialCoding; + + @Schema(description = "工厂编码") + private String factoryNumber; + + @Schema(description = "库位编码") + private String warehouseNumber; + + @Schema(description = "实物收发货数量") + private BigDecimal materialQuantity; + + @Schema(description = "实物计量单位") + private String materialUom; + + @Schema(description = "批次") + private String batch; + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "采购订单行号") + private String poItem; + + @Schema(description = "客商编号") + private String customerNumber; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "用户id") + private String creatorId; + + @Schema(description = "用户名称") + private String creatorName; + +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java new file mode 100644 index 0000000..00f803a --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java @@ -0,0 +1,25 @@ +package com.zt.plat.module.erp.api; + +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.erp.api.dto.ErpBillMainSaveReqDTO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; +import com.zt.plat.module.erp.service.erp.ErpBillMainService; +import jakarta.annotation.Resource; + +public class ErpBillMainApiImpl implements ErpBillMainApi{ + + @Resource + private ErpBillMainService erpBillMainService; + + @Override + public String submitBillMainToErp(ErpBillMainSaveReqDTO reqDTO) { + ErpBillMainSaveReqVO erpBillMainSaveReqDTO = BeanUtils.toBean(reqDTO,ErpBillMainSaveReqVO.class); + return erpBillMainService.submitBillMainToErp(erpBillMainSaveReqDTO); + } + + @Override + public String submitBillMainReverseToErp(ErpBillMainSaveReqDTO reqDTO) { + ErpBillMainSaveReqVO erpBillMainSaveReqDTO = BeanUtils.toBean(reqDTO,ErpBillMainSaveReqVO.class); + return erpBillMainService.submitBillMainReverseToErp(erpBillMainSaveReqDTO); + } +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBillMainController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBillMainController.java new file mode 100644 index 0000000..41b988f --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBillMainController.java @@ -0,0 +1,31 @@ +package com.zt.plat.module.erp.controller.admin.erp; + +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; +import com.zt.plat.module.erp.service.erp.ErpBillMainService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "管理后台 - ERP收货订单") +@RestController +@RequestMapping("/base/bill-main") +@Validated +public class ErpBillMainController { + + @Resource + private ErpBillMainService erpBillMainService; + + @PostMapping("/submitBillMainToErp") + @Operation(summary = "ERP收货订单推送") + @PreAuthorize("@ss.hasPermission('sply:erp-bom:create')") + public String submitBillMainToErp(ErpBillMainSaveReqVO createVo) { + return erpBillMainService.submitBillMainToErp(createVo); + } + +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpBillMainSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpBillMainSaveReqVO.java new file mode 100644 index 0000000..1efaa32 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpBillMainSaveReqVO.java @@ -0,0 +1,56 @@ +package com.zt.plat.module.erp.controller.admin.erp.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +@Schema(description = "管理后台 - 收发货单新增/修改 Request VO") +@Data +public class ErpBillMainSaveReqVO { + + @Schema(description = "收货单号;自动生成") + private String billNumber; + + @Schema(description = "过账日期") + private LocalDateTime postingDate; + + @Schema(description = "实物物料编码") + private String materialCoding; + + @Schema(description = "工厂编码") + private String factoryNumber; + + @Schema(description = "库位编码") + private String warehouseNumber; + + @Schema(description = "实物收发货数量") + private BigDecimal materialQuantity; + + @Schema(description = "实物计量单位") + private String materialUom; + + @Schema(description = "批次") + private String batch; + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "采购订单行号") + private String poItem; + + @Schema(description = "客商编号") + private String customerNumber; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "用户id") + private String creatorId; + + @Schema(description = "用户名称") + private String creatorName; + +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainService.java new file mode 100644 index 0000000..f7cb72c --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainService.java @@ -0,0 +1,8 @@ +package com.zt.plat.module.erp.service.erp; + +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; + +public interface ErpBillMainService { + String submitBillMainToErp(ErpBillMainSaveReqVO createVo); + String submitBillMainReverseToErp(ErpBillMainSaveReqVO createVo); +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java new file mode 100644 index 0000000..eff0a54 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java @@ -0,0 +1,110 @@ +package com.zt.plat.module.erp.service.erp; + +import com.zt.plat.module.erp.api.ErpExternalApi; +import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; +import jakarta.annotation.Resource; +import org.jetbrains.annotations.NotNull; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static dm.jdbc.util.DriverUtil.log; + +@Service +public class ErpBillMainServiceImpl implements ErpBillMainService { + + @Resource + public ErpExternalApi erpExternalApi; + + @Override + public String submitBillMainToErp(ErpBillMainSaveReqVO createVo) { + ErpSubmitReqDTO reqDTO = buildBaseReqDTO(createVo, "071"); + + Map req = new HashMap<>(); + Map head = new HashMap<>(); + head.put("pstng_date", createVo.getPostingDate()); + head.put("doc_date", createVo.getPostingDate()); + head.put("header_txt", createVo.getRemark()); + head.put("bill_of_lading", ""); + req.put("head", head); + + List> items = getMaps(createVo); + req.put("item", items); + reqDTO.setReq(req); + + return submitToErp(reqDTO); + } + + @Override + public String submitBillMainReverseToErp(ErpBillMainSaveReqVO createVo) { + ErpSubmitReqDTO reqDTO = buildBaseReqDTO(createVo, "079"); + + Map req = new HashMap<>(); + Map head = new HashMap<>(); + head.put("pstng_date", createVo.getPostingDate()); + head.put("mat_doc", createVo.getMaterialCoding()); + head.put("doc_year", ""); + head.put("header_txt", ""); + req.put("head", head); + + List> items = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("matdoc_item", createVo.getPoItem()); + item.put("line_id", ""); + items.add(item); + req.put("item", items); + reqDTO.setReq(req); + + return submitToErp(reqDTO); + } + + // 抽取重复代码:构建基础 ErpSubmitReqDTO + private ErpSubmitReqDTO buildBaseReqDTO(ErpBillMainSaveReqVO vo, String funcnr) { + ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO(); + reqDTO.setFuncnr(funcnr); + reqDTO.setBskey(vo.getBillNumber()); + reqDTO.setUsrid(vo.getCreatorId()); + reqDTO.setUsrnm(vo.getCreatorName()); + return reqDTO; + } + + // 抽取重复代码:提交 ERP 并记录日志 + private String submitToErp(ErpSubmitReqDTO reqDTO) { + ResponseEntity response = erpExternalApi.submitDataToErp(reqDTO); + if (response.getStatusCode() == HttpStatus.OK) { + log.info("ERP数据提交成功"); + } + return response.toString(); + } + + @NotNull + private static List> getMaps(ErpBillMainSaveReqVO createVo) { + List> items = new ArrayList<>(); + Map item = new HashMap<>(); + item.put("material", createVo.getMaterialCoding()); + item.put("plant", createVo.getFactoryNumber()); + item.put("stge_loc", createVo.getWarehouseNumber()); + item.put("batch", createVo.getBatch()); + item.put("entry_qnt", createVo.getMaterialQuantity()); + item.put("entry_uom", createVo.getMaterialUom()); + item.put("po_number", createVo.getOrderNo()); + item.put("po_item", createVo.getPoItem()); + item.put("customer", createVo.getCustomerNumber()); + item.put("sales_ord", ""); + item.put("s_ord_item", ""); + item.put("consume_ant", ""); + item.put("item_text", createVo.getRemark()); + item.put("ref_doc_yr", ""); + item.put("ref_doc", ""); + item.put("ref_doc_it", ""); + item.put("unload_pt", ""); + items.add(item); + return items; + } +}