1、订单管理相关 2、销售订单相关接口

This commit is contained in:
潘荣晟
2025-10-24 17:13:33 +08:00
parent 4c7a5e878d
commit 1427e5a55b
23 changed files with 592 additions and 54 deletions

View File

@@ -15,5 +15,6 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_ID_NOT_EXISTS = new ErrorCode(1_008_000_010, "订单id不能为空"); 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 PRCH_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_001, "采购订单明细不存在");
ErrorCode PURCHASE_ORDER_STATUS_ERROR = new ErrorCode(1_008_001_020, "非法的订单状态"); 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, "销售订单明细不存在");
} }

View File

@@ -3,7 +3,7 @@ package com.zt.plat.module.contractorder.enums.purchaseorder;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public enum PurchaseOrderStatusEnum { public enum OrderStatusEnum {
// 草稿状态 // 草稿状态
DRAFT("DRAFT", "草稿"), DRAFT("DRAFT", "草稿"),
// 审批中状态 // 审批中状态
@@ -20,7 +20,7 @@ public enum PurchaseOrderStatusEnum {
/** 状态描述 */ /** 状态描述 */
private final String description; private final String description;
PurchaseOrderStatusEnum(String code, String description) { OrderStatusEnum(String code, String description) {
this.code = code; this.code = code;
this.description = description; this.description = description;
} }
@@ -30,8 +30,8 @@ public enum PurchaseOrderStatusEnum {
* @param code 状态编码 * @param code 状态编码
* @return 匹配的枚举无匹配时返回 null * @return 匹配的枚举无匹配时返回 null
*/ */
public static PurchaseOrderStatusEnum getByCode(String code) { public static OrderStatusEnum getByCode(String code) {
for (PurchaseOrderStatusEnum status : PurchaseOrderStatusEnum.values()) { for (OrderStatusEnum status : OrderStatusEnum.values()) {
if (status.getCode().equals(code)) { if (status.getCode().equals(code)) {
return status; return status;
} }

View File

@@ -27,7 +27,7 @@ public class PurchaseOrderDetailsRespVO {
/** /**
* 公司编码;推送ERP必须 * 公司编码;推送ERP必须
*/ */
private String companyNumber; private String cpNum;
/** /**
* 客商编码;推送ERP必须 * 客商编码;推送ERP必须
*/ */

View File

@@ -27,7 +27,7 @@ public class PurchaseOrderRespVO {
@Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("公司编码;推送ERP必须") @ExcelProperty("公司编码;推送ERP必须")
private String companyNumber; private String cpNum;
@Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("客商编码;推送ERP必须") @ExcelProperty("客商编码;推送ERP必须")

View File

@@ -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.purchaseorder.vo.*;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderPageReqVO; 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.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.controller.admin.salesorder.vo.SalesOrderSaveReqVO;
import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO;
import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService; import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService;
@@ -122,6 +123,26 @@ public class SalesOrderController implements BusinessControllerMarker {
BeanUtils.toBean(list, PurchaseOrderRespVO.class)); BeanUtils.toBean(list, PurchaseOrderRespVO.class));
} }
//推送erp091
@PostMapping("/push-erp091")
@Operation(summary = "推送erp091")
public CommonResult<Boolean> pushErp091(@RequestParam("id")String id ) {
return success(salesOrderService.pushErp091(id));
}
//提交审批
@PostMapping("/submit-order")
@Operation(summary = "提交审批")
public CommonResult<String> submitOrder(@RequestParam("id")String id ) {
return success(salesOrderService.submitOrder(id));
}
//提交审批
@PostMapping("/order-pass-reject")
@Operation(summary = "订单审核")
public CommonResult<Boolean> orderPassReject(@RequestBody SalesOrderReviewReqVO reqVO) {
return success(salesOrderService.orderPassReject(reqVO));
}
} }

View File

@@ -27,7 +27,7 @@ public class SaleOrderDetailsRespVO {
/** /**
* 公司编码;推送ERP必须 * 公司编码;推送ERP必须
*/ */
private String companyNumber; private String cpNum;
/** /**
* 客商编码;推送ERP必须 * 客商编码;推送ERP必须
*/ */

View File

@@ -14,8 +14,8 @@ public class SalesOrderDetailSaveReqVO {
private Long id; private Long id;
@Schema(description = "订单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9072") @Schema(description = "订单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9072")
@NotNull(message = "订单主键不能为空") @NotEmpty(message = "订单主键不能为空")
private Long orderId; private String orderId;
@Schema(description = "行项目;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "行项目;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "行项目;推送ERP(必须)不能为空") @NotNull(message = "行项目;推送ERP(必须)不能为空")

View File

@@ -22,7 +22,7 @@ public class SalesOrderPageReqVO extends PageParam {
private String systemOrderNumber; private String systemOrderNumber;
@Schema(description = "公司编码;推送ERP必须") @Schema(description = "公司编码;推送ERP必须")
private String companyNumber; private String cpNum;
@Schema(description = "客商编码;推送ERP必须") @Schema(description = "客商编码;推送ERP必须")
private String supplierNumber; private String supplierNumber;

View File

@@ -30,7 +30,7 @@ public class SalesOrderRespVO {
@Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("公司编码;推送ERP必须") @ExcelProperty("公司编码;推送ERP必须")
private String companyNumber; private String cpNum;
@Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("客商编码;推送ERP必须") @ExcelProperty("客商编码;推送ERP必须")

View File

@@ -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;
}

View File

@@ -32,7 +32,7 @@ public class SalesOrderSaveReqVO {
@Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "公司编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "公司编码;推送ERP必须不能为空") @NotEmpty(message = "公司编码;推送ERP必须不能为空")
private String companyNumber; private String cpNum;
@Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "客商编码;推送ERP必须不能为空") @NotEmpty(message = "客商编码;推送ERP必须不能为空")

View File

@@ -52,7 +52,7 @@ public class PurchaseOrderDO extends BusinessBaseDO {
* 公司编码;推送ERP必须 * 公司编码;推送ERP必须
*/ */
@TableField("CPN_NUM") @TableField("CPN_NUM")
private String companyNumber; private String cpNum;
/** /**
* 客商编码;推送ERP必须 * 客商编码;推送ERP必须
*/ */

View File

@@ -51,7 +51,7 @@ public class SalesOrderDO extends BusinessBaseDO {
* 公司编码;推送ERP必须 * 公司编码;推送ERP必须
*/ */
@TableField("CPN_NUM") @TableField("CPN_NUM")
private String companyNumber; private String cpNum;
/** /**
* 客商编码;推送ERP必须 * 客商编码;推送ERP必须
*/ */
@@ -291,5 +291,16 @@ public class SalesOrderDO extends BusinessBaseDO {
*/ */
@TableField("SALE_ORGZ_NAME") @TableField("SALE_ORGZ_NAME")
private String saleOrgzName; private String saleOrgzName;
/**
* 付款方名称
*
*/
@TableField("PYER_NUM")
private String payerName;
/**
* 付款方编码
*
*/
@TableField("PYER_NUM")
private String payerNum;
} }

View File

@@ -26,7 +26,7 @@ public interface PurchaseOrderMapper extends BaseMapperX<PurchaseOrderDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<PurchaseOrderDO>() return selectPage(reqVO, new LambdaQueryWrapperX<PurchaseOrderDO>()
.eqIfPresent(PurchaseOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber()) .eqIfPresent(PurchaseOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber())
.likeIfPresent(PurchaseOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber()) .likeIfPresent(PurchaseOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber())
.eqIfPresent(PurchaseOrderDO::getCompanyNumber, reqVO.getCompanyNumber()) .eqIfPresent(PurchaseOrderDO::getCpNum, reqVO.getCompanyNumber())
.eqIfPresent(PurchaseOrderDO::getSupplierNumber, reqVO.getSupplierNumber()) .eqIfPresent(PurchaseOrderDO::getSupplierNumber, reqVO.getSupplierNumber())
.likeIfPresent(PurchaseOrderDO::getSupplierName, reqVO.getSupplierName()) .likeIfPresent(PurchaseOrderDO::getSupplierName, reqVO.getSupplierName())
.eqIfPresent(PurchaseOrderDO::getType, reqVO.getType()) .eqIfPresent(PurchaseOrderDO::getType, reqVO.getType())

View File

@@ -22,7 +22,7 @@ public interface SalesOrderMapper extends BaseMapperX<SalesOrderDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<SalesOrderDO>() return selectPage(reqVO, new LambdaQueryWrapperX<SalesOrderDO>()
.eqIfPresent(SalesOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber()) .eqIfPresent(SalesOrderDO::getOrderSAPNumber, reqVO.getOrderSAPNumber())
.eqIfPresent(SalesOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber()) .eqIfPresent(SalesOrderDO::getSystemOrderNumber, reqVO.getSystemOrderNumber())
.eqIfPresent(SalesOrderDO::getCompanyNumber, reqVO.getCompanyNumber()) .eqIfPresent(SalesOrderDO::getCpNum, reqVO.getCpNum())
.eqIfPresent(SalesOrderDO::getSupplierNumber, reqVO.getSupplierNumber()) .eqIfPresent(SalesOrderDO::getSupplierNumber, reqVO.getSupplierNumber())
.likeIfPresent(SalesOrderDO::getSupplierName, reqVO.getSupplierName()) .likeIfPresent(SalesOrderDO::getSupplierName, reqVO.getSupplierName())
.eqIfPresent(SalesOrderDO::getType, reqVO.getType()) .eqIfPresent(SalesOrderDO::getType, reqVO.getType())

View File

@@ -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.PrchOrdDtlMapper;
import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper; 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.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.service.contract.ContractService;
import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants; import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO;
@@ -92,26 +92,26 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) { public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) {
// 插入 // 插入
PurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, PurchaseOrderDO.class); PurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, PurchaseOrderDO.class);
if (Objects.equals(createReqVO.getIsPush(), 0)) { // if (Objects.equals(createReqVO.getIsPush(), 0)) {
purchaseOrder.setStatus(PurchaseOrderStatusEnum.DRAFT.getCode()); //设置初始状态 purchaseOrder.setStatus(OrderStatusEnum.DRAFT.getCode()); //设置初始状态
} else { // } else {
purchaseOrder.setStatus(PurchaseOrderStatusEnum.TO_SUBMIT_ERP.getCode()); // purchaseOrder.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode());
} // }
//生成订单号 //生成订单号
String orderNumber = generateOrderNumber(purchaseOrder.getMtrlTp()); String orderNumber = generateOrderNumber(purchaseOrder.getMtrlTp());
purchaseOrder.setSystemOrderNumber(orderNumber); purchaseOrder.setSystemOrderNumber(orderNumber);
purchaseOrderMapper.insert(purchaseOrder); purchaseOrderMapper.insert(purchaseOrder);
if (createReqVO.getPrchOrdDtlSaveReqVOS()==null||createReqVO.getPrchOrdDtlSaveReqVOS().isEmpty()) { // if (createReqVO.getPrchOrdDtlSaveReqVOS()==null||createReqVO.getPrchOrdDtlSaveReqVOS().isEmpty()) {
// return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
// }
// //批量插入订单明细
// createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO -> prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId()));
// List<PrchOrdDtlRespVO> prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS());
// PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
// purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS);
return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class); return BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
} }
//批量插入订单明细
createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO -> prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId()));
List<PrchOrdDtlRespVO> prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS());
PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS);
return purchaseOrderRespVO;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -205,7 +205,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);// 获取流程当前审批的任务节点 BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);// 获取流程当前审批的任务节点
purchaseOrderDO.setTaskId(undoTask.getId()); purchaseOrderDO.setTaskId(undoTask.getId());
} }
purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode()); // purchaseOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode()); //
purchaseOrderMapper.updateById(purchaseOrderDO); purchaseOrderMapper.updateById(purchaseOrderDO);
return "提交审批成功"; return "提交审批成功";
} }
@@ -233,7 +233,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
BpmTaskRespDTO undoTask = taskListNew.get(taskListNew.size() - 1); BpmTaskRespDTO undoTask = taskListNew.get(taskListNew.size() - 1);
purchaseOrderDO.setTaskId(undoTask.getId()); purchaseOrderDO.setTaskId(undoTask.getId());
} }
purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode()); purchaseOrderDO.setStatus(OrderStatusEnum.APPROVING.getCode());
purchaseOrderMapper.updateById(purchaseOrderDO); purchaseOrderMapper.updateById(purchaseOrderDO);
return "提交审批成功"; return "提交审批成功";
} }
@@ -258,7 +258,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
erpOrderSaveReqVO.setOrderNo(order.getSystemOrderNumber()); erpOrderSaveReqVO.setOrderNo(order.getSystemOrderNumber());
// 1. 处理抬头信息(Head) // 1. 处理抬头信息(Head)
ErpOrderSaveReqVO.Head head = new ErpOrderSaveReqVO.Head(); ErpOrderSaveReqVO.Head head = new ErpOrderSaveReqVO.Head();
head.setComp_code(order.getCompanyNumber()); // 公司编码 -> 公司代码 head.setComp_code(order.getCpNum()); // 公司编码 -> 公司代码
head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号 head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号
head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型 head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型
head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().toLocalDate() : null); // 凭证日期 -> 采购凭证日期 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) { public boolean updateOrderStatus(Long orderId, String status) {
// 校验存在 // 校验存在
validatePurchaseOrderExists(orderId); validatePurchaseOrderExists(orderId);
PurchaseOrderStatusEnum byCode = PurchaseOrderStatusEnum.getByCode(status); OrderStatusEnum byCode = OrderStatusEnum.getByCode(status);
if (byCode == null) { if (byCode == null) {
throw exception(PURCHASE_ORDER_STATUS_ERROR); throw exception(PURCHASE_ORDER_STATUS_ERROR);
} }
@@ -433,7 +433,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
if (reqVO.getOrderNos() != null) { if (reqVO.getOrderNos() != null) {
validatePurchaseOrderNosExists(reqVO.getOrderNos()); validatePurchaseOrderNosExists(reqVO.getOrderNos());
} }
PurchaseOrderStatusEnum byCode = PurchaseOrderStatusEnum.getByCode(reqVO.getSts()); OrderStatusEnum byCode = OrderStatusEnum.getByCode(reqVO.getSts());
if (byCode == null) { if (byCode == null) {
throw exception(PURCHASE_ORDER_STATUS_ERROR); throw exception(PURCHASE_ORDER_STATUS_ERROR);
} }
@@ -569,10 +569,10 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData();
//如果审核通过 //如果审核通过
if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { 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())) { } else if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) {
//如果审核不通过 //如果审核不通过
purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.DRAFT.getCode()); purchaseOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode());
} }
//设置审核意见 //设置审核意见
purchaseOrderDO.setReviewOpinion(purchaseorderReqVO.getReviewOpinion()); purchaseOrderDO.setReviewOpinion(purchaseorderReqVO.getReviewOpinion());

View File

@@ -39,6 +39,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService {
public SalesOrderDetailRespVO createSalesOrderDetail(SalesOrderDetailSaveReqVO createReqVO) { public SalesOrderDetailRespVO createSalesOrderDetail(SalesOrderDetailSaveReqVO createReqVO) {
// 插入 // 插入
SalesOrderDetailDO salesOrderDetail = BeanUtils.toBean(createReqVO, SalesOrderDetailDO.class); SalesOrderDetailDO salesOrderDetail = BeanUtils.toBean(createReqVO, SalesOrderDetailDO.class);
salesOrderDetail.setOrderId(Long.valueOf(createReqVO.getOrderId()));
salesOrderDetailMapper.insert(salesOrderDetail); salesOrderDetailMapper.insert(salesOrderDetail);
// 返回 // 返回
return BeanUtils.toBean(salesOrderDetail, SalesOrderDetailRespVO.class); return BeanUtils.toBean(salesOrderDetail, SalesOrderDetailRespVO.class);
@@ -48,6 +49,9 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService {
@Transactional @Transactional
public List<SalesOrderDetailRespVO> createSalesOrderDetail(List<SalesOrderDetailSaveReqVO> createReqVOS) { public List<SalesOrderDetailRespVO> createSalesOrderDetail(List<SalesOrderDetailSaveReqVO> createReqVOS) {
List<SalesOrderDetailDO> salesOrderDetailDOS = BeanUtils.toBean(createReqVOS, SalesOrderDetailDO.class); List<SalesOrderDetailDO> salesOrderDetailDOS = BeanUtils.toBean(createReqVOS, SalesOrderDetailDO.class);
salesOrderDetailDOS.forEach(salesOrderDetail -> {
createReqVOS.forEach(createReqVO -> salesOrderDetail.setOrderId(Long.valueOf(createReqVO.getOrderId())));
});
salesOrderDetailMapper.insertBatch(salesOrderDetailDOS); salesOrderDetailMapper.insertBatch(salesOrderDetailDOS);
return BeanUtils.toBean(salesOrderDetailDOS, SalesOrderDetailRespVO.class); return BeanUtils.toBean(salesOrderDetailDOS, SalesOrderDetailRespVO.class);
} }

View File

@@ -2,8 +2,10 @@ package com.zt.plat.module.contractorder.service.salesorder;
import java.util.*; 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.SalesOrderPageReqVO;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderRespVO; 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.controller.admin.salesorder.vo.SalesOrderSaveReqVO;
import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO;
import jakarta.validation.*; import jakarta.validation.*;
@@ -61,7 +63,32 @@ public interface SalesOrderService {
* @return 采购订单分页 * @return 采购订单分页
*/ */
PageResult<SalesOrderDO> getSalesOrderPage(SalesOrderPageReqVO pageReqVO); PageResult<SalesOrderDO> getSalesOrderPage(SalesOrderPageReqVO pageReqVO);
/**
* 设置采购订单详情
*
* @param salesOrderRespVO 采购订单
*/
void setSalesOrderDetail(SalesOrderRespVO 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);
} }

View File

@@ -1,14 +1,32 @@
package com.zt.plat.module.contractorder.service.salesorder; package com.zt.plat.module.contractorder.service.salesorder;
import cn.hutool.core.collection.CollUtil; 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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderDetailRespVO; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderPageReqVO; import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderRespVO; import com.zt.plat.module.bpm.api.task.BpmTaskApi;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderSaveReqVO; 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.dataobject.salesorder.SalesOrderDO;
import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; 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.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 org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional; 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.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.*;
import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.Sales_ORDER_NOT_EXISTS;
/** /**
@@ -33,6 +50,7 @@ import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeCons
*/ */
@Service @Service
@Validated @Validated
@Slf4j
public class SalesOrderServiceImpl implements SalesOrderService { public class SalesOrderServiceImpl implements SalesOrderService {
@Resource @Resource
@@ -40,23 +58,34 @@ public class SalesOrderServiceImpl implements SalesOrderService {
@Resource @Resource
private SalesOrderDetailService salesOrderDetailService; private SalesOrderDetailService salesOrderDetailService;
@Resource
private BpmProcessInstanceApi bpmProcessInstanceApi;
@Resource
private AdminUserApi adminUserApi;
@Resource
private BpmTaskApi bpmTaskApi;
@Resource @Resource
private SequenceApi sequenceApi; private SequenceApi sequenceApi;
@Resource
private ErpOrderService erpOrderService;
@Override @Override
@Transactional @Transactional
public SalesOrderRespVO createSalesOrder(SalesOrderSaveReqVO createReqVO) { public SalesOrderRespVO createSalesOrder(SalesOrderSaveReqVO createReqVO) {
// 插入 // 插入
SalesOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, SalesOrderDO.class); SalesOrderDO salesOrderDO = BeanUtils.toBean(createReqVO, SalesOrderDO.class);
//订单号 //订单号
//生成订单号 //生成订单号
String orderNumber = generateOrderNumber(purchaseOrder.getMtrlTp()); String orderNumber = generateOrderNumber(salesOrderDO.getMtrlTp());
purchaseOrder.setSystemOrderNumber(orderNumber); salesOrderDO.setSystemOrderNumber(orderNumber);
salesOrderMapper.insert(purchaseOrder); salesOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode());
salesOrderMapper.insert(salesOrderDO);
// 返回 // 返回
return BeanUtils.toBean(purchaseOrder, SalesOrderRespVO.class); return BeanUtils.toBean(salesOrderDO, SalesOrderRespVO.class);
} }
@Override @Override
@@ -119,9 +148,207 @@ public class SalesOrderServiceImpl implements SalesOrderService {
salesOrderRespVO.setSalesOrderDetailRespVOS(salesOrderDetailByOrderId); salesOrderRespVO.setSalesOrderDetailRespVOS(salesOrderDetailByOrderId);
} }
private String generateOrderNumber(String materialType) { private String generateOrderNumber(String materialType) {
return sequenceApi.getNextSequence("SALES_ORDER_NUMBER", null, null).getData(); 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<SalesOrderDetailRespVO> 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<SalesOrderDetailRespVO> 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<ErpSalesOrderSaveReqVO.Item> 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<ErpSalesOrderSaveReqVO.Cond> 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<String> conds = new ArrayList<>();
salesOrderDetailByOrderId.forEach(salesOrderDetailRespVO -> {
String priceConditionDetail = salesOrderDetailRespVO.getPriceConditionDetail();
if (priceConditionDetail == null || priceConditionDetail.trim().isEmpty()) {
return; // 空字符串直接跳过
}
try {
// 解析 JSON 数组,捕获格式错误
List<String> 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<BpmTaskRespDTO> 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<BpmTaskRespDTO> 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<BpmTaskRespDTO> 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<BpmTaskRespDTO> 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;
}
} }

View File

@@ -244,7 +244,7 @@
<result column="ORD_SAP_NUM" property="orderSAPNumber"/> <result column="ORD_SAP_NUM" property="orderSAPNumber"/>
<result column="SYS_ORD_NUM" property="systemOrderNumber"/> <result column="SYS_ORD_NUM" property="systemOrderNumber"/>
<result column="CPN_NAME" property="cpName"/> <result column="CPN_NAME" property="cpName"/>
<result column="CPN_NUM" property="companyNumber"/> <result column="CPN_NUM" property="cpNum"/>
<result column="SPLR_NUM" property="supplierNumber"/> <result column="SPLR_NUM" property="supplierNumber"/>
<result column="SPLR_NAME" property="supplierName"/> <result column="SPLR_NAME" property="supplierName"/>
<result column="TP" property="type"/> <result column="TP" property="type"/>

View File

@@ -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<Item> items;
@Valid
private List<String> conds;
@Valid
private List<Source> 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
}
}

View File

@@ -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.ErpBillMainSaveReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; 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.ErpOrderUpdateReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO;
public interface ErpOrderService { public interface ErpOrderService {
String submitOrderToErp061(ErpOrderSaveReqVO createVo); String submitOrderToErp061(ErpOrderSaveReqVO createVo);
String submitOrderToErp062(ErpOrderUpdateReqVO createVo); String submitOrderToErp062(ErpOrderUpdateReqVO createVo);
String submitOrderToErp091(ErpSalesOrderSaveReqVO erpSalesOrderSaveReqVO);
} }

View File

@@ -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.ErpBillMainSaveReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; 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.ErpOrderUpdateReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -78,6 +79,21 @@ public class ErpOrderServiceImpl implements ErpOrderService {
return submitToErp(reqDTO); return submitToErp(reqDTO);
} }
@Override
public String submitOrderToErp091(ErpSalesOrderSaveReqVO createVo) {
ErpSubmitReqDTO reqDTO = buildBaseReqDTO091(createVo, "091");
Map<String, Object> 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) { private ErpSubmitReqDTO buildBaseReqDTO062(ErpOrderUpdateReqVO vo, String funcnr) {
ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO(); ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO();
reqDTO.setFuncnr(funcnr); reqDTO.setFuncnr(funcnr);
@@ -86,4 +102,13 @@ public class ErpOrderServiceImpl implements ErpOrderService {
reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname())); reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
return reqDTO; 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;
}
} }