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 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, "销售订单明细不存在");
}

View File

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

View File

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

View File

@@ -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必须")

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.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<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必须
*/
private String companyNumber;
private String cpNum;
/**
* 客商编码;推送ERP必须
*/

View File

@@ -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(必须)不能为空")

View File

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

View File

@@ -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必须")

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)
@NotEmpty(message = "公司编码;推送ERP必须不能为空")
private String companyNumber;
private String cpNum;
@Schema(description = "客商编码;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "客商编码;推送ERP必须不能为空")

View File

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

View File

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

View File

@@ -26,7 +26,7 @@ public interface PurchaseOrderMapper extends BaseMapperX<PurchaseOrderDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<PurchaseOrderDO>()
.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())

View File

@@ -22,7 +22,7 @@ public interface SalesOrderMapper extends BaseMapperX<SalesOrderDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<SalesOrderDO>()
.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())

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.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<PrchOrdDtlRespVO> 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<PrchOrdDtlRespVO> 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());

View File

@@ -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<SalesOrderDetailRespVO> createSalesOrderDetail(List<SalesOrderDetailSaveReqVO> createReqVOS) {
List<SalesOrderDetailDO> 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);
}

View File

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

View File

@@ -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<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="SYS_ORD_NUM" property="systemOrderNumber"/>
<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_NAME" property="supplierName"/>
<result column="TP" property="type"/>