From 1427e5a55b4c6e568b14d6ba250f946c55f76ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Fri, 24 Oct 2025 17:13:33 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=20=202=E3=80=81=E9=94=80=E5=94=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../purchaseorder/ErrorCodeConstants.java | 3 +- ...erStatusEnum.java => OrderStatusEnum.java} | 8 +- .../vo/PurchaseOrderDetailsRespVO.java | 2 +- .../purchaseorder/vo/PurchaseOrderRespVO.java | 2 +- .../salesorder/SalesOrderController.java | 21 ++ .../salesorder/vo/SaleOrderDetailsRespVO.java | 2 +- .../vo/SalesOrderDetailSaveReqVO.java | 4 +- .../salesorder/vo/SalesOrderPageReqVO.java | 2 +- .../admin/salesorder/vo/SalesOrderRespVO.java | 2 +- .../salesorder/vo/SalesOrderReviewReqVO.java | 23 ++ .../salesorder/vo/SalesOrderSaveReqVO.java | 2 +- .../purchaseorder/PurchaseOrderDO.java | 2 +- .../dataobject/salesorder/SalesOrderDO.java | 15 +- .../purchaseorder/PurchaseOrderMapper.java | 2 +- .../mysql/salesorder/SalesOrderMapper.java | 2 +- .../PurchaseOrderServiceImpl.java | 44 +-- .../SalesOrderDetailServiceImpl.java | 4 + .../service/salesorder/SalesOrderService.java | 29 +- .../salesorder/SalesOrderServiceImpl.java | 251 +++++++++++++++++- .../purchaseorder/PurchaseOrderMapper.xml | 2 +- .../admin/erp/vo/ErpSalesOrderSaveReqVO.java | 196 ++++++++++++++ .../erp/service/erp/ErpOrderService.java | 3 + .../erp/service/erp/ErpOrderServiceImpl.java | 25 ++ 23 files changed, 592 insertions(+), 54 deletions(-) rename zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/{PurchaseOrderStatusEnum.java => OrderStatusEnum.java} (77%) create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderReviewReqVO.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpSalesOrderSaveReqVO.java diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java index bde6a38..4ac0e3a 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java @@ -15,5 +15,6 @@ public interface ErrorCodeConstants { ErrorCode ORDER_ID_NOT_EXISTS = new ErrorCode(1_008_000_010, "订单id不能为空"); ErrorCode PRCH_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_001, "采购订单明细不存在"); ErrorCode PURCHASE_ORDER_STATUS_ERROR = new ErrorCode(1_008_001_020, "非法的订单状态"); - ErrorCode Sales_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "销售订单不存在"); + ErrorCode Sales_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_030, "销售订单不存在"); + ErrorCode Sales_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_040, "销售订单明细不存在"); } diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/PurchaseOrderStatusEnum.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/OrderStatusEnum.java similarity index 77% rename from zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/PurchaseOrderStatusEnum.java rename to zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/OrderStatusEnum.java index b655a8b..e79428d 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/PurchaseOrderStatusEnum.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/OrderStatusEnum.java @@ -3,7 +3,7 @@ package com.zt.plat.module.contractorder.enums.purchaseorder; import lombok.Getter; @Getter -public enum PurchaseOrderStatusEnum { +public enum OrderStatusEnum { // 草稿状态 DRAFT("DRAFT", "草稿"), // 审批中状态 @@ -20,7 +20,7 @@ public enum PurchaseOrderStatusEnum { /** 状态描述 */ private final String description; - PurchaseOrderStatusEnum(String code, String description) { + OrderStatusEnum(String code, String description) { this.code = code; this.description = description; } @@ -30,8 +30,8 @@ public enum PurchaseOrderStatusEnum { * @param code 状态编码 * @return 匹配的枚举,无匹配时返回 null */ - public static PurchaseOrderStatusEnum getByCode(String code) { - for (PurchaseOrderStatusEnum status : PurchaseOrderStatusEnum.values()) { + public static OrderStatusEnum getByCode(String code) { + for (OrderStatusEnum status : OrderStatusEnum.values()) { if (status.getCode().equals(code)) { return status; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java index 3a0b69c..1feda79 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java @@ -27,7 +27,7 @@ public class PurchaseOrderDetailsRespVO { /** * 公司编码;推送ERP(必须) */ - private String companyNumber; + private String cpNum; /** * 客商编码;推送ERP(必须) */ diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderRespVO.java index efe6331..17079d6 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderRespVO.java @@ -27,7 +27,7 @@ public class PurchaseOrderRespVO { @Schema(description = "公司编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("公司编码;推送ERP(必须)") - private String companyNumber; + private String cpNum; @Schema(description = "客商编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("客商编码;推送ERP(必须)") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java index 918451e..c59bc2b 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java @@ -12,6 +12,7 @@ import com.zt.plat.module.contractorder.api.ContractApiImpl; import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.*; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderPageReqVO; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderRespVO; +import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderReviewReqVO; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderSaveReqVO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService; @@ -122,6 +123,26 @@ public class SalesOrderController implements BusinessControllerMarker { BeanUtils.toBean(list, PurchaseOrderRespVO.class)); } + //推送erp091 + @PostMapping("/push-erp091") + @Operation(summary = "推送erp091") + public CommonResult pushErp091(@RequestParam("id")String id ) { + return success(salesOrderService.pushErp091(id)); + } + + //提交审批 + @PostMapping("/submit-order") + @Operation(summary = "提交审批") + public CommonResult submitOrder(@RequestParam("id")String id ) { + return success(salesOrderService.submitOrder(id)); + } + + //提交审批 + @PostMapping("/order-pass-reject") + @Operation(summary = "订单审核") + public CommonResult orderPassReject(@RequestBody SalesOrderReviewReqVO reqVO) { + return success(salesOrderService.orderPassReject(reqVO)); + } } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SaleOrderDetailsRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SaleOrderDetailsRespVO.java index 573fca7..8daec59 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SaleOrderDetailsRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SaleOrderDetailsRespVO.java @@ -27,7 +27,7 @@ public class SaleOrderDetailsRespVO { /** * 公司编码;推送ERP(必须) */ - private String companyNumber; + private String cpNum; /** * 客商编码;推送ERP(必须) */ diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java index b1bf4f7..bb9301f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java @@ -14,8 +14,8 @@ public class SalesOrderDetailSaveReqVO { private Long id; @Schema(description = "订单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9072") - @NotNull(message = "订单主键不能为空") - private Long orderId; + @NotEmpty(message = "订单主键不能为空") + private String orderId; @Schema(description = "行项目;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "行项目;推送ERP(必须)不能为空") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderPageReqVO.java index ea6fa5a..fa33874 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderPageReqVO.java @@ -22,7 +22,7 @@ public class SalesOrderPageReqVO extends PageParam { private String systemOrderNumber; @Schema(description = "公司编码;推送ERP(必须)") - private String companyNumber; + private String cpNum; @Schema(description = "客商编码;推送ERP(必须)") private String supplierNumber; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderRespVO.java index fb28efa..ee87f60 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderRespVO.java @@ -30,7 +30,7 @@ public class SalesOrderRespVO { @Schema(description = "公司编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("公司编码;推送ERP(必须)") - private String companyNumber; + private String cpNum; @Schema(description = "客商编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("客商编码;推送ERP(必须)") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderReviewReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderReviewReqVO.java new file mode 100644 index 0000000..8f38ea0 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderReviewReqVO.java @@ -0,0 +1,23 @@ +package com.zt.plat.module.contractorder.controller.admin.salesorder.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 订单审核请求对象 Request VO") +@Data +public class SalesOrderReviewReqVO { + + @Schema(description = "合同主键ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "合同主键ID不能为空") + private Long id; + + @Schema(description = "审批意见", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "审核意见不能为空") + private String reviewOpinion; + + @Schema(description = "状态:待推送 WAIT_PUSH,已驳回 REJECTED", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "审核状态不能为空") + private String status; +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java index fea298e..2fa08df 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderSaveReqVO.java @@ -32,7 +32,7 @@ public class SalesOrderSaveReqVO { @Schema(description = "公司编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "公司编码;推送ERP(必须)不能为空") - private String companyNumber; + private String cpNum; @Schema(description = "客商编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "客商编码;推送ERP(必须)不能为空") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java index 723a1e5..4ce3794 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PurchaseOrderDO.java @@ -52,7 +52,7 @@ public class PurchaseOrderDO extends BusinessBaseDO { * 公司编码;推送ERP(必须) */ @TableField("CPN_NUM") - private String companyNumber; + private String cpNum; /** * 客商编码;推送ERP(必须) */ diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java index e02e3c1..b00d54b 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/salesorder/SalesOrderDO.java @@ -51,7 +51,7 @@ public class SalesOrderDO extends BusinessBaseDO { * 公司编码;推送ERP(必须) */ @TableField("CPN_NUM") - private String companyNumber; + private String cpNum; /** * 客商编码;推送ERP(必须) */ @@ -291,5 +291,16 @@ public class SalesOrderDO extends BusinessBaseDO { */ @TableField("SALE_ORGZ_NAME") private String saleOrgzName; - + /** + * 付款方名称 + * + */ + @TableField("PYER_NUM") + private String payerName; + /** + * 付款方编码 + * + */ + @TableField("PYER_NUM") + private String payerNum; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/purchaseorder/PurchaseOrderMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/purchaseorder/PurchaseOrderMapper.java index 1885696..9eed981 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/purchaseorder/PurchaseOrderMapper.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/purchaseorder/PurchaseOrderMapper.java @@ -26,7 +26,7 @@ public interface PurchaseOrderMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(PurchaseOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber()) .likeIfPresent(PurchaseOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber()) - .eqIfPresent(PurchaseOrderDO::getCompanyNumber, reqVO.getCompanyNumber()) + .eqIfPresent(PurchaseOrderDO::getCpNum, reqVO.getCompanyNumber()) .eqIfPresent(PurchaseOrderDO::getSupplierNumber, reqVO.getSupplierNumber()) .likeIfPresent(PurchaseOrderDO::getSupplierName, reqVO.getSupplierName()) .eqIfPresent(PurchaseOrderDO::getType, reqVO.getType()) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/salesorder/SalesOrderMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/salesorder/SalesOrderMapper.java index b7715e8..6e87021 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/salesorder/SalesOrderMapper.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/salesorder/SalesOrderMapper.java @@ -22,7 +22,7 @@ public interface SalesOrderMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SalesOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber()) .eqIfPresent(SalesOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber()) - .eqIfPresent(SalesOrderDO::getCompanyNumber, reqVO.getCompanyNumber()) + .eqIfPresent(SalesOrderDO::getCpNum, reqVO.getCpNum()) .eqIfPresent(SalesOrderDO::getSupplierNumber, reqVO.getSupplierNumber()) .likeIfPresent(SalesOrderDO::getSupplierName, reqVO.getSupplierName()) .eqIfPresent(SalesOrderDO::getType, reqVO.getType()) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java index 68bcc94..4a8e164 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java @@ -20,7 +20,7 @@ import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMappe import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper; import com.zt.plat.module.contractorder.enums.contract.DictEnum; -import com.zt.plat.module.contractorder.enums.purchaseorder.PurchaseOrderStatusEnum; +import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; import com.zt.plat.module.contractorder.service.contract.ContractService; import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; @@ -92,25 +92,25 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) { // 插入 PurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, PurchaseOrderDO.class); - if (Objects.equals(createReqVO.getIsPush(), 0)) { - purchaseOrder.setStatus(PurchaseOrderStatusEnum.DRAFT.getCode()); //设置初始状态 - } else { - purchaseOrder.setStatus(PurchaseOrderStatusEnum.TO_SUBMIT_ERP.getCode()); - } +// if (Objects.equals(createReqVO.getIsPush(), 0)) { + purchaseOrder.setStatus(OrderStatusEnum.DRAFT.getCode()); //设置初始状态 +// } else { +// purchaseOrder.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode()); +// } //生成订单号 String orderNumber = generateOrderNumber(purchaseOrder.getMtrlTp()); purchaseOrder.setSystemOrderNumber(orderNumber); purchaseOrderMapper.insert(purchaseOrder); - if (createReqVO.getPrchOrdDtlSaveReqVOS()==null||createReqVO.getPrchOrdDtlSaveReqVOS().isEmpty()) { - return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); - } - //批量插入订单明细 - createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO -> prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId())); - List prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS()); - PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); - purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS); - return purchaseOrderRespVO; +// if (createReqVO.getPrchOrdDtlSaveReqVOS()==null||createReqVO.getPrchOrdDtlSaveReqVOS().isEmpty()) { +// return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); +// } +// //批量插入订单明细 +// createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO -> prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId())); +// List prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS()); +// PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); +// purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS); + return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); } @Override @@ -205,7 +205,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);// 获取流程当前审批的任务节点 purchaseOrderDO.setTaskId(undoTask.getId()); } - purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode()); // + purchaseOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode()); // purchaseOrderMapper.updateById(purchaseOrderDO); return "提交审批成功"; } @@ -233,7 +233,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { BpmTaskRespDTO undoTask = taskListNew.get(taskListNew.size() - 1); purchaseOrderDO.setTaskId(undoTask.getId()); } - purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode()); + purchaseOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode()); purchaseOrderMapper.updateById(purchaseOrderDO); return "提交审批成功"; } @@ -258,7 +258,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { erpOrderSaveReqVO.setOrderNo(order.getSystemOrderNumber()); // 1. 处理抬头信息(Head) ErpOrderSaveReqVO.Head head = new ErpOrderSaveReqVO.Head(); - head.setComp_code(order.getCompanyNumber()); // 公司编码 -> 公司代码 + head.setComp_code(order.getCpNum()); // 公司编码 -> 公司代码 head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号 head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型 head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().toLocalDate() : null); // 凭证日期 -> 采购凭证日期 @@ -395,7 +395,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { public boolean updateOrderStatus(Long orderId, String status) { // 校验存在 validatePurchaseOrderExists(orderId); - PurchaseOrderStatusEnum byCode = PurchaseOrderStatusEnum.getByCode(status); + OrderStatusEnum byCode = OrderStatusEnum.getByCode(status); if (byCode == null) { throw exception(PURCHASE_ORDER_STATUS_ERROR); } @@ -433,7 +433,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { if (reqVO.getOrderNos() != null) { validatePurchaseOrderNosExists(reqVO.getOrderNos()); } - PurchaseOrderStatusEnum byCode = PurchaseOrderStatusEnum.getByCode(reqVO.getSts()); + OrderStatusEnum byCode = OrderStatusEnum.getByCode(reqVO.getSts()); if (byCode == null) { throw exception(PURCHASE_ORDER_STATUS_ERROR); } @@ -569,10 +569,10 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); //如果审核通过 if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { - purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.TO_SUBMIT_ERP.getCode()); + purchaseOrderDO.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode()); } else if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) { //如果审核不通过 - purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.DRAFT.getCode()); + purchaseOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode()); } //设置审核意见 purchaseOrderDO.setReviewOpinion(purchaseorderReqVO.getReviewOpinion()); diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java index 0639e06..bf996cb 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java @@ -39,6 +39,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { public SalesOrderDetailRespVO createSalesOrderDetail(SalesOrderDetailSaveReqVO createReqVO) { // 插入 SalesOrderDetailDO salesOrderDetail = BeanUtils.toBean(createReqVO, SalesOrderDetailDO.class); + salesOrderDetail.setOrderId(Long.valueOf(createReqVO.getOrderId())); salesOrderDetailMapper.insert(salesOrderDetail); // 返回 return BeanUtils.toBean(salesOrderDetail, SalesOrderDetailRespVO.class); @@ -48,6 +49,9 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { @Transactional public List createSalesOrderDetail(List createReqVOS) { List salesOrderDetailDOS = BeanUtils.toBean(createReqVOS, SalesOrderDetailDO.class); + salesOrderDetailDOS.forEach(salesOrderDetail -> { + createReqVOS.forEach(createReqVO -> salesOrderDetail.setOrderId(Long.valueOf(createReqVO.getOrderId()))); + }); salesOrderDetailMapper.insertBatch(salesOrderDetailDOS); return BeanUtils.toBean(salesOrderDetailDOS, SalesOrderDetailRespVO.class); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java index 1b26864..d73c7f7 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderService.java @@ -2,8 +2,10 @@ package com.zt.plat.module.contractorder.service.salesorder; import java.util.*; +import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseorderReqVO; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderPageReqVO; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderRespVO; +import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderReviewReqVO; import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderSaveReqVO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import jakarta.validation.*; @@ -61,7 +63,32 @@ public interface SalesOrderService { * @return 采购订单分页 */ PageResult getSalesOrderPage(SalesOrderPageReqVO pageReqVO); - + /** + * 设置采购订单详情 + * + * @param salesOrderRespVO 采购订单 + */ void setSalesOrderDetail(SalesOrderRespVO salesOrderRespVO); + /** + * 推送ERP + * + * @param orderId 订单编号 + * @return 是否成功 + */ + boolean pushErp091(String orderId); + /** + * 提交审批 + * + * @param orderId 订单编号 + * @return String + */ + String submitOrder(String orderId); + /** + * 订单审核通过和不通过 + * + * @param salesOrderReviewReqVO 采购审核 + * + */ + boolean orderPassReject(SalesOrderReviewReqVO salesOrderReviewReqVO); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java index 9b449e2..22e9255 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java @@ -1,14 +1,32 @@ package com.zt.plat.module.contractorder.service.salesorder; import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONException; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderDetailRespVO; -import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderPageReqVO; -import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderRespVO; -import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderSaveReqVO; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi; +import com.zt.plat.module.bpm.api.task.BpmTaskApi; +import com.zt.plat.module.bpm.api.task.dto.*; +import com.zt.plat.module.bpm.enums.task.BpmProcessInstanceStatusEnum; +import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseorderReqVO; +import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.*; +import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; +import com.zt.plat.module.contractorder.enums.contract.DictEnum; +import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; +import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO; +import com.zt.plat.module.erp.service.erp.ErpOrderService; import com.zt.plat.module.system.api.sequence.SequenceApi; +import com.zt.plat.module.system.api.user.AdminUserApi; +import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.transaction.annotation.Transactional; @@ -22,8 +40,7 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.PURCHASE_ORDER_NOT_EXISTS; -import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.Sales_ORDER_NOT_EXISTS; +import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.*; /** @@ -33,6 +50,7 @@ import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeCons */ @Service @Validated +@Slf4j public class SalesOrderServiceImpl implements SalesOrderService { @Resource @@ -40,23 +58,34 @@ public class SalesOrderServiceImpl implements SalesOrderService { @Resource private SalesOrderDetailService salesOrderDetailService; + @Resource + private BpmProcessInstanceApi bpmProcessInstanceApi; + @Resource + private AdminUserApi adminUserApi; + + @Resource + private BpmTaskApi bpmTaskApi; @Resource private SequenceApi sequenceApi; + @Resource + private ErpOrderService erpOrderService; + @Override @Transactional public SalesOrderRespVO createSalesOrder(SalesOrderSaveReqVO createReqVO) { // 插入 - SalesOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, SalesOrderDO.class); + SalesOrderDO salesOrderDO = BeanUtils.toBean(createReqVO, SalesOrderDO.class); //订单号 //生成订单号 - String orderNumber = generateOrderNumber(purchaseOrder.getMtrlTp()); - purchaseOrder.setSystemOrderNumber(orderNumber); - salesOrderMapper.insert(purchaseOrder); + String orderNumber = generateOrderNumber(salesOrderDO.getMtrlTp()); + salesOrderDO.setSystemOrderNumber(orderNumber); + salesOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode()); + salesOrderMapper.insert(salesOrderDO); // 返回 - return BeanUtils.toBean(purchaseOrder, SalesOrderRespVO.class); + return BeanUtils.toBean(salesOrderDO, SalesOrderRespVO.class); } @Override @@ -119,9 +148,207 @@ public class SalesOrderServiceImpl implements SalesOrderService { salesOrderRespVO.setSalesOrderDetailRespVOS(salesOrderDetailByOrderId); } - private String generateOrderNumber(String materialType) { return sequenceApi.getNextSequence("SALES_ORDER_NUMBER", null, null).getData(); } + + @Override + public boolean pushErp091(String orderId) { + SalesOrderDO salesOrderDO = salesOrderMapper.selectById(orderId); + if (salesOrderDO == null) { + throw exception(Sales_ORDER_NOT_EXISTS); + } + List salesOrderDetailByOrderId = salesOrderDetailService.getSalesOrderDetailByOrderId(Long.valueOf(orderId)); + if (CollUtil.isEmpty(salesOrderDetailByOrderId)) { + throw exception(Sales_ORD_DTL_NOT_EXISTS); + } + submitErp091(salesOrderDO, salesOrderDetailByOrderId); + return true; + } + + private void submitErp091(SalesOrderDO salesOrderDO, List salesOrderDetailByOrderId) { + ErpSalesOrderSaveReqVO erpSalesOrderSaveReqVO = new ErpSalesOrderSaveReqVO(); + erpSalesOrderSaveReqVO.setOrderNo(salesOrderDO.getSystemOrderNumber()); + erpSalesOrderSaveReqVO.setPartn_es(salesOrderDO.getPayerNum()); // 供应商编码 + erpSalesOrderSaveReqVO.setPartn_numb(salesOrderDO.getSupplierNumber());// 付款方编码 + + // 销售订单抬头 + ErpSalesOrderSaveReqVO.Head head = new ErpSalesOrderSaveReqVO.Head(); + head.setDoc_type(salesOrderDO.getType()); // 销售订单类型 + head.setSales_org(salesOrderDO.getSaleOrgzCd()); // 销售组织 + head.setDistr_chan(salesOrderDO.getSaleAcsCdg()); // 销售渠道 + head.setDivision(salesOrderDO.getPdtGrpCdg());// 产品组 + head.setReq_date_h(salesOrderDO.getVoucherDate()); // 交货日期 + head.setSales_grp(salesOrderDO.getPurchaseGroup()); // 销售组 + erpSalesOrderSaveReqVO.setHead(head); + // 销售订单明细 + List items = new ArrayList<>(); + for (SalesOrderDetailRespVO salesOrderDetailRespVO : salesOrderDetailByOrderId) { + ErpSalesOrderSaveReqVO.Item item = new ErpSalesOrderSaveReqVO.Item(); + item.setItem_categ(String.valueOf(salesOrderDetailRespVO.getLineNumber())); + item.setMaterial(salesOrderDetailRespVO.getMaterialNumber()); + item.setPlant(salesOrderDetailRespVO.getFactoryNumber()); + item.setStore_loc(salesOrderDetailRespVO.getShippingPlace()); + item.setSales_unit(salesOrderDetailRespVO.getUnit()); + item.setDlvschduse(salesOrderDetailRespVO.getInvoiceType()); + item.setTarget_qty(salesOrderDetailRespVO.getQuantity()); + items.add(item); + } + erpSalesOrderSaveReqVO.setItems(items); + // 请求列表-cond +// List conds = new ArrayList<>(); +// for (SalesOrderDetailRespVO salesOrderDetailRespVO : salesOrderDetailByOrderId) { +// ErpSalesOrderSaveReqVO.Cond cond = new ErpSalesOrderSaveReqVO.Cond(); +// cond.setCond_type(salesOrderDetailRespVO.getTaxAcctasscat());//条件类型 +// cond.setCond_value(salesOrderDetailRespVO.getGross());//条件金额 +// cond.setCurrency(salesOrderDO.getCurrencyNumber()); //货币码 +// cond.setCond_unit(salesOrderDetailRespVO.getUnit()); +// cond.setCond_p_unt(1); //固定值1 +// conds.add(cond); +// } +// erpSalesOrderSaveReqVO.setConds(conds); + List conds = new ArrayList<>(); + salesOrderDetailByOrderId.forEach(salesOrderDetailRespVO -> { + String priceConditionDetail = salesOrderDetailRespVO.getPriceConditionDetail(); + if (priceConditionDetail == null || priceConditionDetail.trim().isEmpty()) { + return; // 空字符串直接跳过 + } + try { + // 解析 JSON 数组,捕获格式错误 + List strList = JSONArray.parseArray(priceConditionDetail, String.class); + conds.addAll(strList); + } catch (JSONException e) { + // 处理解析失败(例如打日志、忽略错误数据等) + log.error("解析价格条件详情失败,内容:{}", priceConditionDetail, e); + } + }); + erpSalesOrderSaveReqVO.setConds(conds); + String result = erpOrderService.submitOrderToErp091(erpSalesOrderSaveReqVO); + if (result != null) { + JSONObject jsonObject = JSONObject.parseObject(result); + String salesdocument = jsonObject.getString("salesdocument"); + if (salesdocument != null) { + salesOrderDO.setOrderSAPNumber(salesdocument); + salesOrderMapper.updateById(salesOrderDO); + } + + } + } + + @Override + @Transactional + public String submitOrder(String id) { + if (ObjectUtils.isEmpty(id)) { + throw exception(ORDER_ID_NOT_EXISTS); + } + SalesOrderDO salesOrderDO = salesOrderMapper.selectById(id); + if (ObjectUtils.isEmpty(salesOrderDO)) { + throw exception(ORDER_ID_NOT_EXISTS); + } + AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(SecurityFrameworkUtils.getLoginUserId()).getData(); + if (ObjectUtils.isEmpty(salesOrderDO.getProcessInstanceId())) { + BpmProcessInstanceCreateReqDTO pidto = new BpmProcessInstanceCreateReqDTO(); + pidto.setProcessDefinitionKey(ProcessDefinitionKeyConstants.PURCHASE_ORDER_REVIEW_PROCESS); + pidto.setBusinessKey(String.valueOf(id)); + String data = bpmProcessInstanceApi.createProcessInstance(adminUserRespDTO.getId(), pidto).getData(); + if (StringUtils.isNotBlank(data)) { + // 获取流程当前审批的任务节点 + List taskList = bpmTaskApi.getTaskListByProcessInstanceId(data).getData(); + salesOrderDO.setProcessInstanceId(data); + if (CollectionUtils.isNotEmpty(taskList)) { + BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);// 获取流程当前审批的任务节点 + salesOrderDO.setTaskId(undoTask.getId()); + } + salesOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode()); // + salesOrderMapper.updateById(salesOrderDO); + return "提交审批成功"; + } + + } else { + // 获取流程当前审批的任务节点 + List taskList = bpmTaskApi.getTaskListByProcessInstanceId(salesOrderDO.getProcessInstanceId()).getData(); + if (CollectionUtils.isNotEmpty(taskList)) { + BpmTaskRespDTO bpmTaskDto = taskList.get(taskList.size() - 1); + BpmApprovalDetailReqDTO badrDto = new BpmApprovalDetailReqDTO(); + badrDto.setProcessInstanceId(salesOrderDO.getProcessInstanceId()); // 流程实例id + badrDto.setTaskId(bpmTaskDto.getId()); // 当前审核任务节点id + BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); + if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) { + // 如果状态是驳回状态,需要重新创建一个流程实例 + BpmProcessInstanceCreateReqDTO pidtoNew = new BpmProcessInstanceCreateReqDTO(); + pidtoNew.setProcessDefinitionKey(ProcessDefinitionKeyConstants.PURCHASE_ORDER_REVIEW_PROCESS); + pidtoNew.setBusinessKey(String.valueOf(id)); + String data = bpmProcessInstanceApi.createProcessInstance(adminUserRespDTO.getId(), pidtoNew).getData(); + if (StringUtils.isNotBlank(data)) { + // 获取流程当前审批的任务节点 + List taskListNew = bpmTaskApi.getTaskListByProcessInstanceId(data).getData(); + salesOrderDO.setProcessInstanceId(data); + if (CollectionUtils.isNotEmpty(taskListNew)) { + BpmTaskRespDTO undoTask = taskListNew.get(taskListNew.size() - 1); + salesOrderDO.setTaskId(undoTask.getId()); + } + salesOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode()); + salesOrderMapper.updateById(salesOrderDO); + return "提交审批成功"; + } + } else if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { + return "该授信单审批流程已经审批通过"; + } + } + } + log.info("流程实例id:{}", salesOrderDO.getProcessInstanceId()); + return "提交审批成功"; + } + + @Override + @Transactional + public boolean orderPassReject(SalesOrderReviewReqVO salesOrderReviewReqVO) { + SalesOrderDO salesOrderDO = salesOrderMapper.selectById(salesOrderReviewReqVO.getId()); + if (ObjectUtils.isEmpty(salesOrderDO)) { + throw exception(PURCHASE_ORDER_NOT_EXISTS); + } + // 获取当前流程正在审批的任务节点 + List taskList = bpmTaskApi.getTaskListByProcessInstanceId(salesOrderDO.getProcessInstanceId()).getData(); + BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1); + + // 判断是否流程已经通过、驳回 + BpmApprovalDetailReqDTO badrDto = new BpmApprovalDetailReqDTO(); + badrDto.setProcessInstanceId(salesOrderDO.getProcessInstanceId()); // 流程实例id + badrDto.setTaskId(undoTask.getId()); // 当前审核任务节点id + BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); + //如果审核通过 + if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { + salesOrderDO.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode()); + } else if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) { + //如果审核不通过 + salesOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode()); + } + //设置审核意见 + salesOrderDO.setReviewOpinion(salesOrderDO.getReviewOpinion()); + if (ObjectUtils.isNotEmpty(undoTask)) { + salesOrderDO.setTaskId(undoTask.getId()); + } + salesOrderMapper.updateById(salesOrderDO); //更新状态 + + // 需要调用bpm 审核接口更新审批中的状态 + if (DictEnum.BSE_CTRT_STS_WAIT_PUSH.getCode().equals(salesOrderDO.getStatus()) && ObjectUtils.isNotEmpty(undoTask)) { + if (approvalDetail.getStatus().equals(BpmProcessInstanceStatusEnum.RUNNING.getStatus())) { + BpmTaskApproveReqDTO btarDto = new BpmTaskApproveReqDTO(); + btarDto.setId(undoTask.getId()); + btarDto.setReason(salesOrderDO.getReviewOpinion()); + bpmProcessInstanceApi.approveTask(btarDto); + } + } else if (DictEnum.BSE_CTRT_STS_REJECTED.getCode().equals(salesOrderDO.getStatus()) && ObjectUtils.isNotEmpty(undoTask)) { + if (approvalDetail.getStatus().equals(BpmProcessInstanceStatusEnum.RUNNING.getStatus())) { + BpmTaskRejectReqDTO btrrDto = new BpmTaskRejectReqDTO(); + btrrDto.setId(undoTask.getId()); + btrrDto.setReason(salesOrderDO.getReviewOpinion()); + bpmProcessInstanceApi.rejectTask(btrrDto); + } + } + return false; + } + + } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/resources/mapper/purchaseorder/PurchaseOrderMapper.xml b/zt-module-contract-order/zt-module-contract-order-server/src/main/resources/mapper/purchaseorder/PurchaseOrderMapper.xml index 585f3e2..d303437 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/resources/mapper/purchaseorder/PurchaseOrderMapper.xml +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/resources/mapper/purchaseorder/PurchaseOrderMapper.xml @@ -244,7 +244,7 @@ - + diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpSalesOrderSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpSalesOrderSaveReqVO.java new file mode 100644 index 0000000..d81d1fd --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpSalesOrderSaveReqVO.java @@ -0,0 +1,196 @@ +package com.zt.plat.module.erp.controller.admin.erp.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * ERP销售订单保存请求VO + */ +@Data +@Schema(description = "ERP销售订单保存请求参数") +public class ErpSalesOrderSaveReqVO { + @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "订单号") + private String orderNo; + + @Schema(description = "客户编号-售达方", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "客户编号-售达方不能为空") + private String partn_numb; // 客户编号-售达方 CHAR10 + + @Schema(description = "客户编号-付款人") + private String partn_es; // 客户编号-付款人 CHAR10 + + @Valid + @NotNull(message = "销售订单抬头信息不能为空") + private Head head; + + @Valid + @NotEmpty(message = "销售订单行项目列表不能为空") + private List items; + + @Valid + private List conds; + + @Valid + private List sources; + + @Schema(description = "销售订单抬头信息") + @Data + public static class Head { + @Schema(description = "销售凭证类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "销售凭证类型不能为空") + private String doc_type; // 销售凭证类型 CHAR4 + + @Schema(description = "销售组织", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "销售组织不能为空") + private String sales_org; // 销售组织 CHAR4 + + @Schema(description = "分销渠道", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "分销渠道不能为空") + private String distr_chan; // 分销渠道 CHAR2 + + @Schema(description = "产品组", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "产品组不能为空") + private String division; // 产品组 CHAR2 + + @Schema(description = "要求的交货日期(YYYY-MM-DD)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "要求的交货日期不能为空") + private LocalDateTime req_date_h; // 要求的交货日期 DATS8 + + @Schema(description = "销售组") + private String sales_grp; // 销售组 CHAR3 + + @Schema(description = "销售办事处") + private String sales_off; // 销售办事处 CHAR4 + + @Schema(description = "业务分类(默认值10-自产,退货订单必须填写)") + private String cust_grp1 = "10"; // 业务分类 CHAR3 + + @Schema(description = "客户参考(销售合同编号)") + private String purch_no_c; // 客户参考 CHAR35 + + @Schema(description = "名称(销售合同名称)") + private String name; // 名称 CHAR35 + + @Schema(description = "参考(外部单据编号,默认会用bskey赋值)") + private String ref_1; // 参考 CHAR12 + + @Schema(description = "客户参考日期(YYYY-MM-DD)") + private LocalDate purch_date; // 客户参考日期 DATS8 + + @Schema(description = "订单原因(退货订单必须填写,默认值Z06-其他原因)") + private String ord_reason = "Z06"; // 订单原因 CHAR3 + + @Schema(description = "货币码") + private String currency; // 货币码 CUKY5 + + @Schema(description = "客户税分类(0-无税,1-必须上税。创建客户销售视图时需要,默认值1)") + private String taxclass = "1"; // 客户税分类 CHAR1 + } + + @Schema(description = "销售订单行项目信息") + @Data + public static class Item { + @Schema(description = "行号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "行号不能为空") + private Integer itm_number; // 行号 NUMC6 + + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "物料编号不能为空") + private String material; // 物料编号 CHAR18 + + @Schema(description = "工厂", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "工厂不能为空") + private String plant; // 工厂 CHAR4 + + @Schema(description = "存储地点", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "存储地点不能为空") + private String store_loc; // 存储地点 CHAR4 + + @Schema(description = "销售单位(使用基本计量单位)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "销售单位不能为空") + private String sales_unit; // 销售单位 UNIT3 + + @Schema(description = "使用标识(开票类型)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "使用标识不能为空") + private String dlvschduse; // 使用标识 CHAR3 + + @Schema(description = "销售数量(保留3位小数)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "销售数量不能为空") + private BigDecimal target_qty; // 销售数量 QUAN13,3 + + @Schema(description = "税分类(默认从客户和物料基础数据带出,创建物料销售视图时默认值为1-13%)") + private String tax_class1 = "1"; // 税分类 CHAR1 + + @Schema(description = "项目类别") + private String item_categ; // 项目类别 CHAR4 + + @Schema(description = "装运地点") + private String ship_point; // 装运地点 CHAR4 + + @Schema(description = "物料科目分配组(Z1-主营业务,Z2-其它业务,创建物料销售视图时必须填写)") + private String acct_assgt; // 物料科目分配组 CHAR2 + } + + @Schema(description = "销售订单条件信息") + @Data + public static class Cond { + @Schema(description = "行号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "行号不能为空") + private Integer itm_number; // 行号 NUMC6 + + @Schema(description = "条件类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "条件类型不能为空") + private String cond_type; // 条件类型 CHAR4 + + @Schema(description = "条件金额(保留9位小数)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "条件金额不能为空") + private BigDecimal cond_value; // 条件金额 DEC28,9 + + @Schema(description = "货币码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "货币码不能为空") + private String currency; // 货币码 CUKY5 + + @Schema(description = "条件单位(使用基本计量单位)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "条件单位不能为空") + private String cond_unit; // 条件单位 UNIT3 + + @Schema(description = "条件定价单位(固定值1)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "条件定价单位不能为空") + private Integer cond_p_unt = 1; // 条件定价单位 DEC5 + } + + @Schema(description = "来料加工原料信息") + @Data + public static class Source { + @Schema(description = "行号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "行号不能为空") + private Integer itm_number; // 行号 NUMC6 + + @Schema(description = "原料物料编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "原料物料编号不能为空") + private String material; // 原料物料编号 CHAR18 + + @Schema(description = "原料物料描述") + private String mat_desc; // 原料物料描述 CHAR40 + + @Schema(description = "数量(保留3位小数)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "数量不能为空") + private BigDecimal quantity; // 数量 QUAN13,3 + + @Schema(description = "计量单位", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "计量单位不能为空") + private String unit; // 计量单位 UNIT3 + + @Schema(description = "备注") + private String remark; // 备注 CHAR255 + } +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderService.java index 06cfcff..a6df36e 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderService.java @@ -3,10 +3,13 @@ package com.zt.plat.module.erp.service.erp; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderUpdateReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO; public interface ErpOrderService { String submitOrderToErp061(ErpOrderSaveReqVO createVo); String submitOrderToErp062(ErpOrderUpdateReqVO createVo); + + String submitOrderToErp091(ErpSalesOrderSaveReqVO erpSalesOrderSaveReqVO); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java index 6eed869..cd7772e 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java @@ -7,6 +7,7 @@ import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderUpdateReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -78,6 +79,21 @@ public class ErpOrderServiceImpl implements ErpOrderService { return submitToErp(reqDTO); } + @Override + public String submitOrderToErp091(ErpSalesOrderSaveReqVO createVo) { + ErpSubmitReqDTO reqDTO = buildBaseReqDTO091(createVo, "091"); + + Map req = new HashMap<>(); + req.put("head", createVo.getHead()); + req.put("item", createVo.getItems()); + req.put("conds", createVo.getConds()); + req.put("partn_es", createVo.getPartn_es()); + req.put("partn_numb", createVo.getPartn_numb()); + reqDTO.setReq(req); + + return submitToErp(reqDTO); + } + private ErpSubmitReqDTO buildBaseReqDTO062(ErpOrderUpdateReqVO vo, String funcnr) { ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO(); reqDTO.setFuncnr(funcnr); @@ -86,4 +102,13 @@ public class ErpOrderServiceImpl implements ErpOrderService { reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname())); return reqDTO; } + + ErpSubmitReqDTO buildBaseReqDTO091(ErpSalesOrderSaveReqVO vo, String funcnr){ + ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO(); + reqDTO.setFuncnr(funcnr); + reqDTO.setBskey(vo.getOrderNo()); + reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId())); + reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname())); + return reqDTO; + } }