1、订单管理相关 2、销售订单相关接口
This commit is contained in:
@@ -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, "销售订单明细不存在");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -27,7 +27,7 @@ public class PurchaseOrderDetailsRespVO {
|
||||
/**
|
||||
* 公司编码;推送ERP(必须)
|
||||
*/
|
||||
private String companyNumber;
|
||||
private String cpNum;
|
||||
/**
|
||||
* 客商编码;推送ERP(必须)
|
||||
*/
|
||||
|
||||
@@ -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(必须)")
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public class SaleOrderDetailsRespVO {
|
||||
/**
|
||||
* 公司编码;推送ERP(必须)
|
||||
*/
|
||||
private String companyNumber;
|
||||
private String cpNum;
|
||||
/**
|
||||
* 客商编码;推送ERP(必须)
|
||||
*/
|
||||
|
||||
@@ -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(必须)不能为空")
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(必须)")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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(必须)不能为空")
|
||||
|
||||
@@ -52,7 +52,7 @@ public class PurchaseOrderDO extends BusinessBaseDO {
|
||||
* 公司编码;推送ERP(必须)
|
||||
*/
|
||||
@TableField("CPN_NUM")
|
||||
private String companyNumber;
|
||||
private String cpNum;
|
||||
/**
|
||||
* 客商编码;推送ERP(必须)
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<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) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user