订单管理相关
This commit is contained in:
@@ -12,6 +12,6 @@ import com.zt.plat.framework.common.exception.ErrorCode;
|
|||||||
public interface ErrorCodeConstants {
|
public interface ErrorCodeConstants {
|
||||||
|
|
||||||
ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "采购订单不存在");
|
ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "采购订单不存在");
|
||||||
|
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, "采购订单明细不存在");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.zt.plat.module.contractorder.enums.purchaseorder;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum PurchaseOrderStatusEnum {
|
||||||
|
// 草稿状态
|
||||||
|
DRAFT("DRAFT", "草稿"),
|
||||||
|
// 审批中状态
|
||||||
|
APPROVING("APPR", "审批中"),
|
||||||
|
// 待提交ERP状态
|
||||||
|
TO_SUBMIT_ERP("SUB", "待提交ERP"),
|
||||||
|
// 执行中状态
|
||||||
|
IN_PROGRESS("IN_PROGRESS", "执行中"),
|
||||||
|
// 关闭状态
|
||||||
|
CLOSED("CLOSE", "关闭");
|
||||||
|
|
||||||
|
/** 状态编码 */
|
||||||
|
private final String code;
|
||||||
|
/** 状态描述 */
|
||||||
|
private final String description;
|
||||||
|
|
||||||
|
PurchaseOrderStatusEnum(String code, String description) {
|
||||||
|
this.code = code;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据编码获取枚举实例
|
||||||
|
* @param code 状态编码
|
||||||
|
* @return 匹配的枚举,无匹配时返回 null
|
||||||
|
*/
|
||||||
|
public static PurchaseOrderStatusEnum getByCode(String code) {
|
||||||
|
for (PurchaseOrderStatusEnum status : PurchaseOrderStatusEnum.values()) {
|
||||||
|
if (status.getCode().equals(code)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -107,4 +107,20 @@ public class PurchaseOrderController implements BusinessControllerMarker {
|
|||||||
BeanUtils.toBean(list, PurchaseOrderRespVO.class));
|
BeanUtils.toBean(list, PurchaseOrderRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提交订单审核
|
||||||
|
@PostMapping("/submit-order")
|
||||||
|
@Operation(summary = "提交订单审核")
|
||||||
|
@PreAuthorize("@ss.hasPermission('bse:purchase-order:update')")
|
||||||
|
public CommonResult<Boolean> submitOrder(@RequestParam("id") Long id) {
|
||||||
|
purchaseOrderService.submitOrder(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//提交ERP订单
|
||||||
|
@PostMapping("/submit-erp")
|
||||||
|
@Operation(summary = "提交ERP订单", description = "bse:purchase-order:update')")
|
||||||
|
public CommonResult<?> submitErp(@RequestBody List<Long> ids) {
|
||||||
|
return success( purchaseOrderService.submitErp(ids));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo;
|
package com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -148,4 +149,22 @@ public class PurchaseOrderSaveReqVO {
|
|||||||
@Schema(description = "订单明细")
|
@Schema(description = "订单明细")
|
||||||
@ExcelProperty("订单明细")
|
@ExcelProperty("订单明细")
|
||||||
private List<PrchOrdDtlSaveReqVO> prchOrdDtlSaveReqVOS;
|
private List<PrchOrdDtlSaveReqVO> prchOrdDtlSaveReqVOS;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "流程实例编号")
|
||||||
|
@ExcelProperty("流程实例编号")
|
||||||
|
@NotEmpty(message = "流程实例编号不能为空")
|
||||||
|
private String processInstanceId;
|
||||||
|
|
||||||
|
@Schema(description = "流程当前任务节点id")
|
||||||
|
@ExcelProperty("流程当前任务节点id")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
@Schema(description = " 审批意见")
|
||||||
|
@ExcelProperty(" 审批意见")
|
||||||
|
private String reviewOpinion;
|
||||||
|
|
||||||
|
@Schema(description = "是否提交审核,value为0或1")
|
||||||
|
@ExcelProperty("是否提交审核")
|
||||||
|
private int isPush;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo;
|
||||||
|
|
||||||
|
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO;
|
||||||
|
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采购订单及明细查询结果 VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PurchaseOrderWithDetailsVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 采购订单信息
|
||||||
|
*/
|
||||||
|
private PurchaseOrderDO purchaseOrder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单明细列表
|
||||||
|
*/
|
||||||
|
private List<PrchOrdDtlDO> orderDetails;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单号(用于分组)
|
||||||
|
*/
|
||||||
|
private String systemOrderNumber;
|
||||||
|
}
|
||||||
@@ -214,4 +214,27 @@ public class PurchaseOrderDO extends BusinessBaseDO {
|
|||||||
@TableField("PRCH_GRP_NAME")
|
@TableField("PRCH_GRP_NAME")
|
||||||
private String purchaseGroupName;
|
private String purchaseGroupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程实例编号
|
||||||
|
*/
|
||||||
|
@TableField("PRCS_INSC_ID")
|
||||||
|
private String processInstanceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程当前任务节点id
|
||||||
|
*/
|
||||||
|
@TableField("TSK_NDE_ID")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批意见
|
||||||
|
*/
|
||||||
|
@TableField("RVW_ONN")
|
||||||
|
private String reviewOpinion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否需要审批
|
||||||
|
*/
|
||||||
|
@TableField("IS_PUSH")
|
||||||
|
private int isPush;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|||||||
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
|
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
|
||||||
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
|
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
|
||||||
|
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderWithDetailsVO;
|
||||||
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,4 +62,5 @@ public interface PurchaseOrderMapper extends BaseMapperX<PurchaseOrderDO> {
|
|||||||
.orderByDesc(PurchaseOrderDO::getId));
|
.orderByDesc(PurchaseOrderDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<PurchaseOrderWithDetailsVO> selectOrderById(@Param("ids") List<Long> id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,4 +63,8 @@ public interface PurchaseOrderService {
|
|||||||
*/
|
*/
|
||||||
PageResult<PurchaseOrderDO> getPurchaseOrderPage(PurchaseOrderPageReqVO pageReqVO);
|
PageResult<PurchaseOrderDO> getPurchaseOrderPage(PurchaseOrderPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
String submitOrder(Long id);
|
||||||
|
|
||||||
|
String submitErp(List<Long> ids);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,41 @@
|
|||||||
package com.zt.plat.module.contractorder.service.purchaseorder;
|
package com.zt.plat.module.contractorder.service.purchaseorder;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PrchOrdDtlRespVO;
|
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
|
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
|
||||||
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderRespVO;
|
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
|
||||||
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderSaveReqVO;
|
import com.zt.plat.module.bpm.api.task.dto.BpmApprovalDetailReqDTO;
|
||||||
|
import com.zt.plat.module.bpm.api.task.dto.BpmApprovalDetailRespDTO;
|
||||||
|
import com.zt.plat.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
||||||
|
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
|
||||||
|
import com.zt.plat.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
|
||||||
|
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.*;
|
||||||
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||||
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.purchaseorder.PurchaseOrderStatusEnum;
|
||||||
|
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.service.erp.ErpOrderService;
|
||||||
|
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.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.zt.plat.framework.common.pojo.PageResult;
|
import com.zt.plat.framework.common.pojo.PageResult;
|
||||||
import com.zt.plat.framework.common.pojo.PageParam;
|
|
||||||
import com.zt.plat.framework.common.util.object.BeanUtils;
|
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.framework.common.util.collection.CollectionUtils.convertList;
|
import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.ORDER_ID_NOT_EXISTS;
|
||||||
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
|
|
||||||
import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.PURCHASE_ORDER_NOT_EXISTS;
|
import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.PURCHASE_ORDER_NOT_EXISTS;
|
||||||
|
|
||||||
|
|
||||||
@@ -31,23 +44,39 @@ import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeCons
|
|||||||
*
|
*
|
||||||
* @author 后台管理-1
|
* @author 后台管理-1
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
||||||
|
@Resource
|
||||||
|
private ErpOrderService erpOrderService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PurchaseOrderMapper purchaseOrderMapper;
|
private PurchaseOrderMapper purchaseOrderMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private PrchOrdDtlService prchOrdDtlService;
|
private PrchOrdDtlService prchOrdDtlService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BpmProcessInstanceApi bpmProcessInstanceApi;
|
||||||
|
@Resource
|
||||||
|
private AdminUserApi adminUserApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BpmTaskApi bpmTaskApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
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)) {
|
||||||
|
purchaseOrder.setStatus(PurchaseOrderStatusEnum.DRAFT.getCode()); //设置初始状态
|
||||||
|
} else {
|
||||||
|
purchaseOrder.setStatus(PurchaseOrderStatusEnum.TO_SUBMIT_ERP.getCode());
|
||||||
|
}
|
||||||
purchaseOrderMapper.insert(purchaseOrder);
|
purchaseOrderMapper.insert(purchaseOrder);
|
||||||
// 返回
|
// 返回
|
||||||
//批量插入订单明细
|
//批量插入订单明细
|
||||||
createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO->prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId()));
|
createReqVO.getPrchOrdDtlSaveReqVOS().forEach(prchOrdDtlSaveReqVO -> prchOrdDtlSaveReqVO.setOrdId(purchaseOrder.getId()));
|
||||||
List<PrchOrdDtlRespVO> prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS());
|
List<PrchOrdDtlRespVO> prchOrdDtlRespVOS = prchOrdDtlService.batchCreatePrchOrdDtl(createReqVO.getPrchOrdDtlSaveReqVOS());
|
||||||
PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
|
PurchaseOrderRespVO purchaseOrderRespVO = BeanUtils.toBean(purchaseOrder, PurchaseOrderRespVO.class);
|
||||||
purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS);
|
purchaseOrderRespVO.setPrchOrdDtlRespVOS(prchOrdDtlRespVOS);
|
||||||
@@ -72,7 +101,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deletePurchaseOrderListByIds(List<Long> ids) {
|
public void deletePurchaseOrderListByIds(List<Long> ids) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validatePurchaseOrderExists(ids);
|
validatePurchaseOrderExists(ids);
|
||||||
// 删除
|
// 删除
|
||||||
@@ -80,7 +109,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
//删除根据订单号订单明细
|
//删除根据订单号订单明细
|
||||||
prchOrdDtlService.deletePrchOrdDtlListByOrdIds(ids);
|
prchOrdDtlService.deletePrchOrdDtlListByOrdIds(ids);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validatePurchaseOrderExists(List<Long> ids) {
|
private void validatePurchaseOrderExists(List<Long> ids) {
|
||||||
List<PurchaseOrderDO> list = purchaseOrderMapper.selectByIds(ids);
|
List<PurchaseOrderDO> list = purchaseOrderMapper.selectByIds(ids);
|
||||||
@@ -105,4 +134,111 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
return purchaseOrderMapper.selectPage(pageReqVO);
|
return purchaseOrderMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public String submitOrder(Long id) {
|
||||||
|
if (ObjectUtils.isEmpty(id)) {
|
||||||
|
throw exception(ORDER_ID_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectById(id);
|
||||||
|
if (ObjectUtils.isEmpty(purchaseOrderDO)) {
|
||||||
|
throw exception(ORDER_ID_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(SecurityFrameworkUtils.getLoginUserId()).getData();
|
||||||
|
if (ObjectUtils.isEmpty(purchaseOrderDO.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();
|
||||||
|
purchaseOrderDO.setProcessInstanceId(data);
|
||||||
|
if (CollectionUtils.isNotEmpty(taskList)) {
|
||||||
|
BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);// 获取流程当前审批的任务节点
|
||||||
|
purchaseOrderDO.setTaskId(undoTask.getId());
|
||||||
|
}
|
||||||
|
purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode()); //
|
||||||
|
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||||
|
return "提交审批成功";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 获取流程当前审批的任务节点
|
||||||
|
List<BpmTaskRespDTO> taskList = bpmTaskApi.getTaskListByProcessInstanceId(purchaseOrderDO.getProcessInstanceId()).getData();
|
||||||
|
if (CollectionUtils.isNotEmpty(taskList)) {
|
||||||
|
BpmTaskRespDTO bpmTaskDto = taskList.get(taskList.size() - 1);
|
||||||
|
BpmApprovalDetailReqDTO badrDto = new BpmApprovalDetailReqDTO();
|
||||||
|
badrDto.setProcessInstanceId(purchaseOrderDO.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();
|
||||||
|
purchaseOrderDO.setProcessInstanceId(data);
|
||||||
|
if (CollectionUtils.isNotEmpty(taskListNew)) {
|
||||||
|
BpmTaskRespDTO undoTask = taskListNew.get(taskListNew.size() - 1);
|
||||||
|
purchaseOrderDO.setTaskId(undoTask.getId());
|
||||||
|
}
|
||||||
|
purchaseOrderDO.setStatus(PurchaseOrderStatusEnum.APPROVING.getCode());
|
||||||
|
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||||
|
return "提交审批成功";
|
||||||
|
}
|
||||||
|
} else if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) {
|
||||||
|
return "该授信单审批流程已经审批通过";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("流程实例id:{}", purchaseOrderDO.getProcessInstanceId());
|
||||||
|
return "提交审批成功";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String submitErp(List<Long> ids) {
|
||||||
|
//通过订单号查询订单
|
||||||
|
List<PurchaseOrderWithDetailsVO> purchaseOrderWithDetailsVOS = purchaseOrderMapper.selectOrderById(ids);
|
||||||
|
if (!purchaseOrderWithDetailsVOS.isEmpty()) {
|
||||||
|
purchaseOrderWithDetailsVOS.forEach(purchaseOrderWithDetailsVO -> {
|
||||||
|
ErpOrderSaveReqVO erpOrderSaveReqVO = new ErpOrderSaveReqVO();
|
||||||
|
if (purchaseOrderWithDetailsVO.getPurchaseOrder() != null) {
|
||||||
|
erpOrderSaveReqVO.setOrderid(purchaseOrderWithDetailsVO.getPurchaseOrder().getOrderNumber());
|
||||||
|
erpOrderSaveReqVO.setCompCode(purchaseOrderWithDetailsVO.getPurchaseOrder().getCompanyNumber());//公司代码
|
||||||
|
erpOrderSaveReqVO.setVendor(purchaseOrderWithDetailsVO.getPurchaseOrder().getSupplierNumber());// 供应商帐号
|
||||||
|
erpOrderSaveReqVO.setDocType(purchaseOrderWithDetailsVO.getPurchaseOrder().getType());//采购凭证类型
|
||||||
|
erpOrderSaveReqVO.setDocDate(purchaseOrderWithDetailsVO.getPurchaseOrder().getVoucherDate()); //采购凭证日期
|
||||||
|
erpOrderSaveReqVO.setPurchOrg(purchaseOrderWithDetailsVO.getPurchaseOrder().getPurchaseOrganizationCustomsDeclaration());//采购组织
|
||||||
|
erpOrderSaveReqVO.setPurGroup(purchaseOrderWithDetailsVO.getPurchaseOrder().getPurchaseGroup());//采购组
|
||||||
|
erpOrderSaveReqVO.setCurrency(purchaseOrderWithDetailsVO.getPurchaseOrder().getCurrencyNumber()); // 货币码
|
||||||
|
erpOrderSaveReqVO.setExchRate(purchaseOrderWithDetailsVO.getPurchaseOrder().getExchangeRate());//汇率
|
||||||
|
erpOrderSaveReqVO.setZzhth(purchaseOrderWithDetailsVO.getPurchaseOrder().getContractNumber());//纸质合同号
|
||||||
|
erpOrderSaveReqVO.setZxxyh(purchaseOrderWithDetailsVO.getPurchaseOrder().getPaperContractNumber());//小协议号
|
||||||
|
|
||||||
|
}
|
||||||
|
if (purchaseOrderWithDetailsVO.getOrderDetails()!= null){
|
||||||
|
purchaseOrderWithDetailsVO.getOrderDetails().forEach(orderDetail -> {
|
||||||
|
erpOrderSaveReqVO.setPoItem(orderDetail.getLineNum()); //行号
|
||||||
|
erpOrderSaveReqVO.setMaterial(orderDetail.getRcvFactNum());//物料号
|
||||||
|
erpOrderSaveReqVO.setQuantity(orderDetail.getQty());// 数量
|
||||||
|
erpOrderSaveReqVO.setPoUnit(orderDetail.getUnt());// 计量单位
|
||||||
|
erpOrderSaveReqVO.setNetPrice(orderDetail.getInTaxUprc());// 含税单价
|
||||||
|
erpOrderSaveReqVO.setActsCtgrDtl(orderDetail.getActsCtgrDtl());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
erpOrderService.submitOrderToErp(erpOrderSaveReqVO);
|
||||||
|
log.info("订单推送成功,订单id【{}】", purchaseOrderWithDetailsVO.getPurchaseOrder().getId());
|
||||||
|
});
|
||||||
|
return "ERP推送成功";
|
||||||
|
} else {
|
||||||
|
return "订单不存在";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.zt.plat.module.contractorder.util.constants;
|
||||||
|
|
||||||
|
public interface ProcessDefinitionKeyConstants {
|
||||||
|
|
||||||
|
String PURCHASE_ORDER_REVIEW_PROCESS = "purchase_order_review_process";
|
||||||
|
}
|
||||||
@@ -9,4 +9,203 @@
|
|||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<select id="selectOrderById" resultMap="PurchaseOrderWithDetailsResultMap">
|
||||||
|
SELECT
|
||||||
|
po.ID as po_id,
|
||||||
|
po.ORD_SAP_NUM,
|
||||||
|
po.SYS_ORD_NUM,
|
||||||
|
po.CPN_NAME,
|
||||||
|
po.CPN_NUM,
|
||||||
|
po.SPLR_NUM,
|
||||||
|
po.SPLR_NAME,
|
||||||
|
po.TP,
|
||||||
|
po.VCHR_DT,
|
||||||
|
po.PRCH_ORGZ_CD,
|
||||||
|
po.RCV_FACT_NAME,
|
||||||
|
po.RCV_FACT_NUM,
|
||||||
|
po.RCV_WRH_NAME,
|
||||||
|
po.RCV_WRH_NUM,
|
||||||
|
po.PRCH_GRP,
|
||||||
|
po.CUR_NUM,
|
||||||
|
po.EXCH_RTE,
|
||||||
|
po.PPR_CTRT_NUM,
|
||||||
|
po.AGR_NUM,
|
||||||
|
po.RMK,
|
||||||
|
po.AGT_NUM,
|
||||||
|
po.AGT_NAME,
|
||||||
|
po.ORD_NUM,
|
||||||
|
po.CTRT_NUM,
|
||||||
|
po.MTRL_NUM,
|
||||||
|
po.MTRL_NAME,
|
||||||
|
po.CTRT_NAME,
|
||||||
|
po.TNT_NUM,
|
||||||
|
po.ERP_PRCH_CPN_NUM,
|
||||||
|
po.ERP_PRCH_CPN_NAME,
|
||||||
|
po.ERP_SALE_CPN_NUM,
|
||||||
|
po.ERP_SALE_CPN_NAME,
|
||||||
|
po.PRCH_ORGZ_NAME,
|
||||||
|
po.ERP_STS,
|
||||||
|
po.CAUS,
|
||||||
|
po.STS,
|
||||||
|
po.PRCH_GRP_NAME,
|
||||||
|
po.PRCS_INSC_ID,
|
||||||
|
po.RVW_ONN,
|
||||||
|
po.TSK_NDE_ID,
|
||||||
|
po.IS_PUSH,
|
||||||
|
pod.ID as pod_id,
|
||||||
|
pod.ORD_ID,
|
||||||
|
pod.LINE_NUM,
|
||||||
|
pod.MTRL_NUM,
|
||||||
|
pod.MTRL_NAME,
|
||||||
|
pod.RCV_FACT_NAME,
|
||||||
|
pod.RCV_FACT_NUM,
|
||||||
|
pod.RCV_WRH_NAME,
|
||||||
|
pod.RCV_WRH_NUM,
|
||||||
|
pod.QTY,
|
||||||
|
pod.UNT,
|
||||||
|
pod.IN_TAX_UPRC,
|
||||||
|
pod.PRC_UNT,
|
||||||
|
pod.TAX_NUM,
|
||||||
|
pod.IS_GR_INV,
|
||||||
|
pod.IS_UNL_RCV,
|
||||||
|
pod.BAT,
|
||||||
|
pod.PRJ_CTGR,
|
||||||
|
pod.ACTS_CTGR,
|
||||||
|
pod.MTRL_CPNT_NUM,
|
||||||
|
pod.MTRL_CPNT_DSP,
|
||||||
|
pod.SHRT_TXT,
|
||||||
|
pod.IS_RLBK_CGO,
|
||||||
|
pod.IS_FREE_RCV,
|
||||||
|
pod.OUT_LINE_NUM,
|
||||||
|
pod.RMK_UNT,
|
||||||
|
pod.RMK_MTRL,
|
||||||
|
pod.BGN_DT,
|
||||||
|
pod.DDL_DT,
|
||||||
|
pod.LST_QTY,
|
||||||
|
pod.TRF_QTY,
|
||||||
|
pod.AGR_NUM as pod_agr_num,
|
||||||
|
pod.TRF_FACT_NAME,
|
||||||
|
pod.TRF_FACT_NUM,
|
||||||
|
pod.TRF_WRH_NAME,
|
||||||
|
pod.TRF_WRH_NUM,
|
||||||
|
pod.RMK as pod_rmk,
|
||||||
|
pod.ORIG_WET,
|
||||||
|
pod.SALE_MTRL_NUM,
|
||||||
|
pod.IN_ORD,
|
||||||
|
pod.PRCH_CTGR,
|
||||||
|
pod.IS_ENB,
|
||||||
|
pod.ACTS_CTGR_DTL,
|
||||||
|
pod.ENTT_DTL,
|
||||||
|
pod.ELEM_ABBR,
|
||||||
|
pod.ELEM_NAME,
|
||||||
|
pod.ELEM_CDG
|
||||||
|
FROM BSE_PRCH_ORD po
|
||||||
|
LEFT JOIN BSE_PRCH_ORD_DTL pod ON po.ID = pod.ORD_ID
|
||||||
|
WHERE po.Id IN
|
||||||
|
<foreach collection="ids" item="orderNumber" open="(" separator="," close=")">
|
||||||
|
#{orderNumber}
|
||||||
|
</foreach>
|
||||||
|
AND po.deleted=0
|
||||||
|
ORDER BY po.SYS_ORD_NUM, pod.LINE_NUM
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<resultMap id="PurchaseOrderWithDetailsResultMap" type="com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderWithDetailsVO">
|
||||||
|
<result column="SYS_ORD_NUM" property="systemOrderNumber"/>
|
||||||
|
<association property="purchaseOrder" resultMap="PurchaseOrderResultMap"/>
|
||||||
|
<collection property="orderDetails" ofType="com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO" resultMap="PrchOrdDtlResultMap"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="PurchaseOrderResultMap" type="com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO">
|
||||||
|
<id column="po_id" property="id"/>
|
||||||
|
<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="SPLR_NUM" property="supplierNumber"/>
|
||||||
|
<result column="SPLR_NAME" property="supplierName"/>
|
||||||
|
<result column="TP" property="type"/>
|
||||||
|
<result column="VCHR_DT" property="voucherDate"/>
|
||||||
|
<result column="PRCH_ORGZ_CD" property="purchaseOrganizationCustomsDeclaration"/>
|
||||||
|
<result column="RCV_FACT_NAME" property="receiveFactoryName"/>
|
||||||
|
<result column="RCV_FACT_NUM" property="receiveFactoryNumber"/>
|
||||||
|
<result column="RCV_WRH_NAME" property="receiveWarehouseName"/>
|
||||||
|
<result column="RCV_WRH_NUM" property="receiveWarehouseNumber"/>
|
||||||
|
<result column="PRCH_GRP" property="purchaseGroup"/>
|
||||||
|
<result column="CUR_NUM" property="currencyNumber"/>
|
||||||
|
<result column="EXCH_RTE" property="exchangeRate"/>
|
||||||
|
<result column="PPR_CTRT_NUM" property="paperContractNumber"/>
|
||||||
|
<result column="AGR_NUM" property="agreementNumber"/>
|
||||||
|
<result column="RMK" property="remark"/>
|
||||||
|
<result column="AGT_NUM" property="agentNumber"/>
|
||||||
|
<result column="AGT_NAME" property="agentName"/>
|
||||||
|
<result column="ORD_NUM" property="orderNumber"/>
|
||||||
|
<result column="CTRT_NUM" property="contractNumber"/>
|
||||||
|
<result column="MTRL_NUM" property="materialNumber"/>
|
||||||
|
<result column="MTRL_NAME" property="materialName"/>
|
||||||
|
<result column="CTRT_NAME" property="contractName"/>
|
||||||
|
<result column="TNT_NUM" property="tenantNumber"/>
|
||||||
|
<result column="ERP_PRCH_CPN_NUM" property="erpPurchaseCompanyNumber"/>
|
||||||
|
<result column="ERP_PRCH_CPN_NAME" property="erpPurchaseCompanyName"/>
|
||||||
|
<result column="ERP_SALE_CPN_NUM" property="erpSalesCompanyNumber"/>
|
||||||
|
<result column="ERP_SALE_CPN_NAME" property="erpSalesCompanyName"/>
|
||||||
|
<result column="PRCH_ORGZ_NAME" property="purchaseOrganizationName"/>
|
||||||
|
<result column="ERP_STS" property="erpStatus"/>
|
||||||
|
<result column="CAUS" property="cause"/>
|
||||||
|
<result column="STS" property="status"/>
|
||||||
|
<result column="PRCH_GRP_NAME" property="purchaseGroupName"/>
|
||||||
|
<result column="PRCS_INSC_ID" property="processInstanceId"/>
|
||||||
|
<result column="RVW_ONN" property="reviewOpinion"/>
|
||||||
|
<result column="TSK_NDE_ID" property="taskId"/>
|
||||||
|
<result column="IS_PUSH" property="isPush"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="PrchOrdDtlResultMap" type="com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO">
|
||||||
|
<id column="pod_id" property="id"/>
|
||||||
|
<result column="ORD_ID" property="ordId"/>
|
||||||
|
<result column="LINE_NUM" property="lineNum"/>
|
||||||
|
<result column="MTRL_NUM" property="mtrlNum"/>
|
||||||
|
<result column="MTRL_NAME" property="mtrlName"/>
|
||||||
|
<result column="RCV_FACT_NAME" property="rcvFactName"/>
|
||||||
|
<result column="RCV_FACT_NUM" property="rcvFactNum"/>
|
||||||
|
<result column="RCV_WRH_NAME" property="rcvWrhName"/>
|
||||||
|
<result column="RCV_WRH_NUM" property="rcvWrhNum"/>
|
||||||
|
<result column="QTY" property="qty"/>
|
||||||
|
<result column="UNT" property="unt"/>
|
||||||
|
<result column="IN_TAX_UPRC" property="inTaxUprc"/>
|
||||||
|
<result column="PRC_UNT" property="prcUnt"/>
|
||||||
|
<result column="TAX_NUM" property="taxNum"/>
|
||||||
|
<result column="IS_GR_INV" property="isGrInv"/>
|
||||||
|
<result column="IS_UNL_RCV" property="isUnlRcv"/>
|
||||||
|
<result column="BAT" property="bat"/>
|
||||||
|
<result column="PRJ_CTGR" property="prjCtgr"/>
|
||||||
|
<result column="ACTS_CTGR" property="actsCtgr"/>
|
||||||
|
<result column="MTRL_CPNT_NUM" property="mtrlCpntNum"/>
|
||||||
|
<result column="MTRL_CPNT_DSP" property="mtrlCpntDsp"/>
|
||||||
|
<result column="SHRT_TXT" property="shrtTxt"/>
|
||||||
|
<result column="IS_RLBK_CGO" property="isRlbkCgo"/>
|
||||||
|
<result column="IS_FREE_RCV" property="isFreeRcv"/>
|
||||||
|
<result column="OUT_LINE_NUM" property="outLineNum"/>
|
||||||
|
<result column="RMK_UNT" property="rmkUnt"/>
|
||||||
|
<result column="RMK_MTRL" property="rmkMtrl"/>
|
||||||
|
<result column="BGN_DT" property="bgnDt"/>
|
||||||
|
<result column="DDL_DT" property="ddlDt"/>
|
||||||
|
<result column="LST_QTY" property="lstQty"/>
|
||||||
|
<result column="TRF_QTY" property="trfQty"/>
|
||||||
|
<result column="pod_agr_num" property="agrNum"/>
|
||||||
|
<result column="TRF_FACT_NAME" property="trfFactName"/>
|
||||||
|
<result column="TRF_FACT_NUM" property="trfFactNum"/>
|
||||||
|
<result column="TRF_WRH_NAME" property="trfWrhName"/>
|
||||||
|
<result column="TRF_WRH_NUM" property="trfWrhNum"/>
|
||||||
|
<result column="pod_rmk" property="rmk"/>
|
||||||
|
<result column="ORIG_WET" property="origWet"/>
|
||||||
|
<result column="SALE_MTRL_NUM" property="saleMtrlNum"/>
|
||||||
|
<result column="IN_ORD" property="inOrd"/>
|
||||||
|
<result column="PRCH_CTGR" property="prchCtgr"/>
|
||||||
|
<result column="IS_ENB" property="isEnb"/>
|
||||||
|
<result column="ACTS_CTGR_DTL" property="actsCtgrDtl"/>
|
||||||
|
<result column="ENTT_DTL" property="enttDtl"/>
|
||||||
|
<result column="ELEM_ABBR" property="elemAbbr"/>
|
||||||
|
<result column="ELEM_NAME" property="elemName"/>
|
||||||
|
<result column="ELEM_CDG" property="elemCdg"/>
|
||||||
|
</resultMap>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
package com.zt.plat.module.erp.controller.admin.erp.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ERP采购订单保存请求VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "ERP采购订单保存请求参数")
|
||||||
|
public class ErpOrderSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "公司代码")
|
||||||
|
@NotEmpty(message = "公司代码不能为空")
|
||||||
|
private String compCode; // BUKRS CHAR4
|
||||||
|
|
||||||
|
@Schema(description = "供应商帐号")
|
||||||
|
@NotEmpty(message = "供应商帐号不能为空")
|
||||||
|
private String vendor; // LIFNR CHAR10
|
||||||
|
|
||||||
|
@Schema(description = "采购凭证类型")
|
||||||
|
@NotEmpty(message = "采购凭证类型不能为空")
|
||||||
|
private String docType; // BSART CHAR4
|
||||||
|
|
||||||
|
@Schema(description = "采购凭证日期")
|
||||||
|
@NotEmpty(message = "采购凭证日期不能为空")
|
||||||
|
private LocalDateTime docDate; // BEDAT DATS8(格式:YYYYMMDD)
|
||||||
|
|
||||||
|
@Schema(description = "采购组织")
|
||||||
|
@NotEmpty(message = "采购组织不能为空")
|
||||||
|
private String purchOrg; // EKORG CHAR4
|
||||||
|
|
||||||
|
@Schema(description = "采购组")
|
||||||
|
@NotEmpty(message = "采购组不能为空")
|
||||||
|
private String purGroup; // EKGRP CHAR3
|
||||||
|
|
||||||
|
@Schema(description = "货币码")
|
||||||
|
@NotEmpty(message = "货币码不能为空")
|
||||||
|
private String currency; // WAERS CUKY5
|
||||||
|
|
||||||
|
@Schema(description = "汇率")
|
||||||
|
private BigDecimal exchRate; // WKURS DEC9,5
|
||||||
|
@NotEmpty(message = "纸质合同号不能为空(已启用财务共享单位)")
|
||||||
|
private String zzhth; // CHAR60
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "小协议号(绿星链通填入合同名称)")
|
||||||
|
private String zxxyh; // CHAR60
|
||||||
|
|
||||||
|
@Schema(description = "备注(绿星链通填入系统采购订单头号)")
|
||||||
|
private String znote; // CHAR60
|
||||||
|
|
||||||
|
@Schema(description = "代理方(使用客商编码)")
|
||||||
|
private String zlifnr; // CHAR60
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "行号")
|
||||||
|
@NotEmpty(message = "行号不能为空")
|
||||||
|
private Long poItem; // EBELP NUMC5
|
||||||
|
|
||||||
|
@Schema(description = "物料号")
|
||||||
|
private String material; // MATNR CHAR18
|
||||||
|
|
||||||
|
@Schema(description = "工厂")
|
||||||
|
@NotEmpty(message = "工厂不能为空")
|
||||||
|
private String plant; // WERKS CHAR4
|
||||||
|
|
||||||
|
@Schema(description = "库存地点")
|
||||||
|
private String stgeLoc; // LGORT CHAR4
|
||||||
|
|
||||||
|
@Schema(description = "数量")
|
||||||
|
@NotEmpty(message = "数量不能为空")
|
||||||
|
private String quantity; // MENGE QUAN13,3
|
||||||
|
|
||||||
|
@Schema(description = "计量单位")
|
||||||
|
@NotNull(message = "计量单位不能为空")
|
||||||
|
private BigDecimal poUnit; // MEINS UNIT3
|
||||||
|
|
||||||
|
@Schema(description = "含税单价")
|
||||||
|
@NotNull(message = "含税单价不能为空")
|
||||||
|
private BigDecimal netPrice; // NETPR CURR11,2
|
||||||
|
|
||||||
|
@Schema(description = "价格单位(默认值1,表示以上单价对应的采购单位数量)")
|
||||||
|
private Integer priceUnit; // PEINH DEC5
|
||||||
|
|
||||||
|
@Schema(description = "税码")
|
||||||
|
private String taxCode; // MWSKZ CHAR2
|
||||||
|
|
||||||
|
@Schema(description = "基于GR的发票校验")
|
||||||
|
private String grBasedIv; // WEBRE CHAR1
|
||||||
|
|
||||||
|
@Schema(description = "允许无限制过量交货")
|
||||||
|
private String unlimitedDlv; // UEBTK CHAR1
|
||||||
|
|
||||||
|
@Schema(description = "批次")
|
||||||
|
private String batch; // CHARG CHAR10
|
||||||
|
|
||||||
|
@Schema(description = "项目类别(委托加工订单时填入L)")
|
||||||
|
private String itemCat; // PSTYP CHAR1(原表CAHR为笔误,按CHAR处理)
|
||||||
|
|
||||||
|
@Schema(description = "科目分配类别(固定资产采购:A;服务采购:S-销售服务费、K-成本中心、F-订单)")
|
||||||
|
private String acctassCat; // KNTTP CHAR1
|
||||||
|
|
||||||
|
@Schema(description = "物料组(服务采购订单必填)")
|
||||||
|
private String matlGroup; // MATKL CHAR9
|
||||||
|
|
||||||
|
@Schema(description = "短文本(服务采购订单必填,绿星链通系统必须填入)")
|
||||||
|
private String shortText; // TXZ01 CHAR40
|
||||||
|
|
||||||
|
@Schema(description = "退货项目标识(退货行项目填X)")
|
||||||
|
private String retItem; // RETPO CHAR1
|
||||||
|
|
||||||
|
@Schema(description = "免费项目标识(免费行项目填X)")
|
||||||
|
private String freeItem; // UMSON CHAR1
|
||||||
|
|
||||||
|
@Schema(description = "外部行项目号(绿星链通必填)")
|
||||||
|
private String vendrBatch; // LICHN CHAR15
|
||||||
|
|
||||||
|
@Schema(description = "备注信息-需求单位")
|
||||||
|
private String noteXq; // TDLINE CHAR132
|
||||||
|
|
||||||
|
@Schema(description = "备注信息-物料详细")
|
||||||
|
private String noteWl; // TDLINE CHAR132
|
||||||
|
|
||||||
|
@Schema(description = "交货起止日期(格式:YYYYMMDD-YYYYMMDD)")
|
||||||
|
private String vendMat; // IDNLF CHAR22(原表说明为交货起止日期,按说明定义)
|
||||||
|
|
||||||
|
@Schema(description = "销售物料号(科目分配类别为S时必填)")
|
||||||
|
private String zmatnr;
|
||||||
|
|
||||||
|
@Schema(description = "统计型内部订单")
|
||||||
|
private String zaufnr;
|
||||||
|
|
||||||
|
@Schema(description = "采购类别(0-生产性物资类;1-项目投资类)")
|
||||||
|
private String zpurty;
|
||||||
|
|
||||||
|
@Schema(description = "原料湿重")
|
||||||
|
private BigDecimal zmenge;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "科目分配的序号(从1开始编号)")
|
||||||
|
@NotEmpty(message = "科目分配的序号不能为空")
|
||||||
|
private String serialNo; // DZEKKN NUMC2
|
||||||
|
|
||||||
|
@Schema(description = "总账科目编号")
|
||||||
|
private String glAccount; // SAKNR CHAR10
|
||||||
|
|
||||||
|
@Schema(description = "成本中心(科目分配类别为F时必填)")
|
||||||
|
private String costcenter; // KOSTL CHAR10
|
||||||
|
|
||||||
|
@Schema(description = "订单号(科目分配类别为F时必填)")
|
||||||
|
private String orderid; // AUFNR CHAR12
|
||||||
|
|
||||||
|
@Schema(description = "主资产号(科目分配类别为A时必填)")
|
||||||
|
private String assetNo; // ANLN1 CHAR12
|
||||||
|
|
||||||
|
@Schema(description = "资产子编号(科目分配类别为A时必填,固定值‘0’)")
|
||||||
|
private String subNumber; // ANLN2 CHAR4
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "计划行号(从1开始编号)")
|
||||||
|
private String schedLine; // ETENR NUMC4
|
||||||
|
|
||||||
|
@Schema(description = "项目编号(从1开始编号)")
|
||||||
|
private String itemNo; // RSPOS NUMC4
|
||||||
|
|
||||||
|
@Schema(description = "委托加工需求数量")
|
||||||
|
@NotNull(message = "委托加工需求数量不能为空")
|
||||||
|
private BigDecimal entryQuantity; // MENGE QUAN13,3
|
||||||
|
|
||||||
|
@Schema(description = "组件计量单位(为空时使用基本计量单位)")
|
||||||
|
private String entryUom; // MEINS UNIT3
|
||||||
|
|
||||||
|
@Schema(description = " 科目分配详情")
|
||||||
|
private String actsCtgrDtl;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
public interface ErpOrderService {
|
||||||
|
|
||||||
|
String submitOrderToErp(ErpOrderSaveReqVO createVo);
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.zt.plat.module.erp.service.erp;
|
||||||
|
|
||||||
|
|
||||||
|
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.zt.plat.module.erp.api.ErpExternalApi;
|
||||||
|
import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO;
|
||||||
|
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO;
|
||||||
|
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
@Service
|
||||||
|
public class ErpOrderServiceImpl implements ErpOrderService {
|
||||||
|
@Resource
|
||||||
|
public ErpExternalApi erpExternalApi;
|
||||||
|
@Override
|
||||||
|
public String submitOrderToErp(ErpOrderSaveReqVO createVo) {
|
||||||
|
|
||||||
|
ErpSubmitReqDTO reqDTO = buildBaseReqDTO(createVo, "061");
|
||||||
|
|
||||||
|
Map<String, Object> req = new HashMap<>();
|
||||||
|
Map<String, Object> head = new HashMap<>();
|
||||||
|
// head
|
||||||
|
head.put("comp_code", createVo.getCompCode());
|
||||||
|
head.put("vendor", createVo.getVendor());
|
||||||
|
head.put("doc_type", createVo.getDocType());
|
||||||
|
head.put("doc_date", createVo.getDocDate());
|
||||||
|
head.put("purch_org", createVo.getPurchOrg());
|
||||||
|
head.put("pur_group", createVo.getPurGroup());
|
||||||
|
head.put("currency", createVo.getCurrency());
|
||||||
|
head.put("exch_rate", createVo.getExchRate());
|
||||||
|
req.put("head", head);
|
||||||
|
//exte
|
||||||
|
Map<String, Object> exte = new HashMap<>();
|
||||||
|
exte.put("zzhth", createVo.getZzhth());
|
||||||
|
exte.put("zxxyh", createVo.getZxxyh());
|
||||||
|
exte.put("znote", createVo.getZnote());
|
||||||
|
exte.put("zlifnr", createVo.getZlifnr());
|
||||||
|
req.put("exte", exte);
|
||||||
|
getMaps(createVo, req);
|
||||||
|
reqDTO.setReq(req);
|
||||||
|
|
||||||
|
return submitToErp(reqDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ErpSubmitReqDTO buildBaseReqDTO(ErpOrderSaveReqVO vo, String funcnr) {
|
||||||
|
ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO();
|
||||||
|
reqDTO.setFuncnr(funcnr);
|
||||||
|
reqDTO.setBskey(vo.getOrderid());
|
||||||
|
reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
|
||||||
|
reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
|
||||||
|
return reqDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String submitToErp(ErpSubmitReqDTO reqDTO) {
|
||||||
|
HashMap<String, String> response = erpExternalApi.submitDataToErp(reqDTO);
|
||||||
|
return response.get("resStr");
|
||||||
|
}
|
||||||
|
private void getMaps(ErpOrderSaveReqVO vo, Map<String, Object> req) {
|
||||||
|
List<Map<String, Object>> items = new ArrayList<>();
|
||||||
|
Map<String, Object> item = new HashMap<>();
|
||||||
|
item.put("po_item", vo.getPoItem());
|
||||||
|
item.put("material", vo.getMaterial());
|
||||||
|
item.put("plant", vo.getPlant());
|
||||||
|
item.put("stge_loc", vo.getStgeLoc());
|
||||||
|
item.put("quantity", vo.getQuantity());
|
||||||
|
item.put("po_unit", vo.getPoUnit());
|
||||||
|
item.put("net_price", vo.getNetPrice());
|
||||||
|
item.put("price_unit", vo.getPriceUnit());
|
||||||
|
item.put("tax_code", vo.getTaxCode());
|
||||||
|
item.put("gr_based_iv", vo.getGrBasedIv());
|
||||||
|
item.put("unlimited_dlv", vo.getUnlimitedDlv());
|
||||||
|
item.put("batch", vo.getBatch());
|
||||||
|
item.put("item_cat", vo.getItemCat());
|
||||||
|
item.put("acctass_cat", vo.getAcctassCat());
|
||||||
|
item.put("matl_group", vo.getMatlGroup());
|
||||||
|
item.put("short_text", vo.getShortText());
|
||||||
|
item.put("ret_item", vo.getRetItem());
|
||||||
|
item.put("free_item", vo.getFreeItem());
|
||||||
|
item.put("vendr_batch", vo.getVendrBatch());
|
||||||
|
item.put("note_xq", vo.getNoteXq());
|
||||||
|
item.put("note_wl", vo.getNoteWl());
|
||||||
|
item.put("vend_mat", vo.getVendMat());
|
||||||
|
items.add(item);
|
||||||
|
if ("K".equals(vo.getAcctassCat())||"P".equals(vo.getAcctassCat())){
|
||||||
|
req.put("acct", vo.getActsCtgrDtl());
|
||||||
|
}
|
||||||
|
req.put("item", items);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user