diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java index a4a95c1c..ea9e4b29 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java @@ -342,4 +342,33 @@ public class OrdDtlDTO { */ @Schema(description = "来料加工原料详情") private String originDetail; + //=====================================委托加工订单======================================= + @Schema(description = "发货工厂名称", example = "张三") + private String sendFactoryName; + @Schema(description = "发货工厂编码") + private String sendFactoryNumber; + @Schema(description = "发货库位名称", example = "李四") + private String sendWarehouseName; + @Schema(description = "发货库位编码") + private String sendWarehouseNumber; + @Schema(description = "收货工厂名称", example = "赵六") + private String receiveFactoryName; + @Schema(description = "收货工厂编码") + private String receiveFactoryNumber; + @Schema(description = "收货库位名称", example = "张三") + private String receiveWarehouseName; + @Schema(description = "收货库位编码") + private String receiveWarehouseNumber; + @Schema(description = "发货物料名称", example = "张三") + private String sendMaterialName; + @Schema(description = "发货物料编码", example = "李四") + private String sendMaterialNumber; + @Schema(description = "收货物料名称", example = "王五") + private String receiveMaterialName; + @Schema(description = "收货物料编码", example = "王五") + private String receiveMaterialNumber; + @Schema(description = "发货计量单位") + private String sendUnit; + @Schema(description = "收货计量单位") + private String receiveUnit; } diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/originalmaterialprocessing/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/originalmaterialprocessing/ErrorCodeConstants.java index 076f1cd1..2cea4fc5 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/originalmaterialprocessing/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/originalmaterialprocessing/ErrorCodeConstants.java @@ -14,4 +14,5 @@ public interface ErrorCodeConstants { // ========== 合同模块 1-027-000-000 ========== ErrorCode ORIGINAL_MATERIAL_PROCESSING_DETAIL_NOT_EXISTS = new ErrorCode(1_027_130_000, "来料加工订单明细不存在"); ErrorCode ORIGINAL_MATERIAL_PROCESSING_DO_NOT_EXISTS = new ErrorCode(1_027_130_001, "来料加工订单不存在"); + ErrorCode ORIGINAL_MATERIAL_PROCESSING_NOT_ALLOW_CALL_ERP = new ErrorCode(1_027_130_002, "当前订单类型为【{}】不允许调用该erp接口"); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java index eaa0a32e..b6a3998f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java @@ -7,14 +7,18 @@ import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.contractorder.api.dto.order.*; +import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderDetailDO; +import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDetailDO; import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO; import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDetailDO; +import com.zt.plat.module.contractorder.dal.mysql.entrustorder.EntrustOrderDetailMapper; +import com.zt.plat.module.contractorder.dal.mysql.originalmaterialprocessing.OriginalMaterialProcessingDetailMapper; import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; -import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderDetailMapper; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; +import com.zt.plat.module.contractorder.enums.OrderTypeEnum; import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -47,16 +51,28 @@ public class OrderApiImpl implements OrderApi { List purchaseOrderIds = new ArrayList<>(); List salesOrderIds = new ArrayList<>(); List order = new ArrayList<>(); + List entOrdNoS = new ArrayList<>(); + List entEdSaleOrdNoS = new ArrayList<>(); + List entEdPurOrdNoS = new ArrayList<>(); if (ordersByIds.isEmpty()) { return CommonResult.success(new ArrayList<>()); } ordersByIds.forEach(o -> { - if ("SALE".equals(o.getSplyBsnTp())) { + if (OrderTypeEnum.SALE.getCode().equals(o.getSplyBsnTp())) { // 销售订单 salesOrderIds.add(o.getId()); - } else { + } else if (OrderTypeEnum.PUR.getCode().equals(o.getSplyBsnTp())) { // 非销售订单(采购订单) purchaseOrderIds.add(o.getId()); + } else if (OrderTypeEnum.ENT.getCode().equals(o.getSplyBsnTp())) { + //委托加工订单 + entOrdNoS.add(o.getId()); + } else if (OrderTypeEnum.ENTED_SALE.getCode().equals(o.getSplyBsnTp())) { + //来料加工销售订单 + entEdSaleOrdNoS.add(o.getId()); + } else if (OrderTypeEnum.ENTED_PUR.getCode().equals(o.getSplyBsnTp())) { + //来料加工采购订单 + entEdPurOrdNoS.add(o.getId()); } }); if (!purchaseOrderIds.isEmpty()) { @@ -65,6 +81,15 @@ public class OrderApiImpl implements OrderApi { if (!salesOrderIds.isEmpty()) { order.addAll(getSalesOrdByIds(salesOrderIds)); } + if (!entOrdNoS.isEmpty()) { + order.addAll(getEntOrdByIds(entOrdNoS)); + } + if (!entEdSaleOrdNoS.isEmpty()) { + order.addAll(getEntEdSaleOrdByIds(entEdSaleOrdNoS)); + } + if (!entEdPurOrdNoS.isEmpty()) { + order.addAll(getEntEdPurOrdByIds(entEdPurOrdNoS)); + } return success(order); } @@ -77,13 +102,25 @@ public class OrderApiImpl implements OrderApi { List order = new ArrayList<>(); List purchaseOrderNoS = new ArrayList<>(); List salesOrdNoS = new ArrayList<>(); + List entOrdNoS = new ArrayList<>(); + List entEdSaleOrdNoS = new ArrayList<>(); + List entEdPurOrdNoS = new ArrayList<>(); orderByNos.forEach(f -> { - if ("SALE".equals(f.getSplyBsnTp())) { + if (OrderTypeEnum.SALE.getCode().equals(f.getSplyBsnTp())) { // 销售订单 salesOrdNoS.add(f.getId()); - } else if ("PUR".equals(f.getSplyBsnTp())) { - // 非销售订单(采购订单) + } else if (OrderTypeEnum.PUR.getCode().equals(f.getSplyBsnTp())) { + // 采购订单 purchaseOrderNoS.add(f.getId()); + } else if (OrderTypeEnum.ENT.getCode().equals(f.getSplyBsnTp())) { + //委托加工订单 + entOrdNoS.add(f.getId()); + } else if (OrderTypeEnum.ENTED_SALE.getCode().equals(f.getSplyBsnTp())) { + //来料加工销售订单 + entEdSaleOrdNoS.add(f.getId()); + } else if (OrderTypeEnum.ENTED_PUR.getCode().equals(f.getSplyBsnTp())) { + //来料加工采购订单 + entEdPurOrdNoS.add(f.getId()); } }); if (!purchaseOrderNoS.isEmpty()) { @@ -92,10 +129,81 @@ public class OrderApiImpl implements OrderApi { if (!salesOrdNoS.isEmpty()) { order.addAll(getSalesOrdByIds(salesOrdNoS)); } - + if (!entOrdNoS.isEmpty()) { + order.addAll(getEntOrdByIds(entOrdNoS)); + } + if (!entEdSaleOrdNoS.isEmpty()) { + order.addAll(getEntEdSaleOrdByIds(entEdSaleOrdNoS)); + } + if (!entEdPurOrdNoS.isEmpty()) { + order.addAll(getEntEdPurOrdByIds(entEdPurOrdNoS)); + } return success(order); } + private List getEntOrdByIds(List ids) { + List purchaseOrderDOS = getOrderByIds(ids);// 订单主表都是同一个所以使用销售的主表暂时承载数据 + List orderDTOS = BeanUtils.toBean(purchaseOrderDOS, OrderDTO.class); + EntrustOrderDetailMapper entrustOrderDetailMapper = SpringUtil.getBean(EntrustOrderDetailMapper.class); + List entrustOrderDetailDOS = entrustOrderDetailMapper.selectList(new LambdaQueryWrapperX() + .in(EntrustOrderDetailDO::getOrderId, ids) + .eq(EntrustOrderDetailDO::getIsEnable, "1") + ); + orderDTOS.forEach(orderDTO -> { + List ordDtlDTOList = new ArrayList<>(); + entrustOrderDetailDOS.forEach(entrustOrderDetailDO -> { + if (orderDTO.getId().equals(entrustOrderDetailDO.getOrderId())) { + OrdDtlDTO ordDtlDTO = setOrderDtlDTO(orderDTO, entrustOrderDetailDO); + ordDtlDTOList.add(ordDtlDTO); + } + }); + orderDTO.setOrdDtlDTOS(ordDtlDTOList); + }); + return orderDTOS; + } + + private List getEntEdSaleOrdByIds(List ids) { + List purchaseOrderDOS = getOrderByIds(ids);// 订单主表都是同一个所以使用销售的主表暂时承载数据 + List orderDTOS = BeanUtils.toBean(purchaseOrderDOS, OrderDTO.class); + OriginalMaterialProcessingDetailMapper bean = SpringUtil.getBean(OriginalMaterialProcessingDetailMapper.class); + List originalMaterialProcessingDetailDOS = bean.selectList(new LambdaQueryWrapperX() + .in(OriginalMaterialProcessingDetailDO::getOrderId, ids) + .eq(OriginalMaterialProcessingDetailDO::getIsEnable, "1") + ); + orderDTOS.forEach(orderDTO -> { + List ordDtlDTOList = new ArrayList<>(); + originalMaterialProcessingDetailDOS.forEach(originalMaterialProcessingDetailDO -> { + if (orderDTO.getId().equals(originalMaterialProcessingDetailDO.getOrderId())) { + OrdDtlDTO ordDtlDTO = setOrderDtlDTO(orderDTO, originalMaterialProcessingDetailDO); + ordDtlDTOList.add(ordDtlDTO); + } + }); + orderDTO.setOrdDtlDTOS(ordDtlDTOList); + }); + return orderDTOS; + } + + private List getEntEdPurOrdByIds(List ids) { + List purchaseOrderDOS = getOrderByIds(ids);// 订单主表都是同一个所以使用销售的主表暂时承载数据 + List orderDTOS = BeanUtils.toBean(purchaseOrderDOS, OrderDTO.class); + OriginalMaterialProcessingDetailMapper bean = SpringUtil.getBean(OriginalMaterialProcessingDetailMapper.class); + List originalMaterialProcessingDetailDOS = bean.selectList(new LambdaQueryWrapperX() + .in(OriginalMaterialProcessingDetailDO::getOrderId, ids) + .eq(OriginalMaterialProcessingDetailDO::getIsEnable, "1") + ); + orderDTOS.forEach(orderDTO -> { + List ordDtlDTOList = new ArrayList<>(); + originalMaterialProcessingDetailDOS.forEach(originalMaterialProcessingDetailDO -> { + if (orderDTO.getId().equals(originalMaterialProcessingDetailDO.getOrderId())) { + OrdDtlDTO ordDtlDTO = setOrderDtlDTO(orderDTO, originalMaterialProcessingDetailDO); + ordDtlDTOList.add(ordDtlDTO); + } + }); + orderDTO.setOrdDtlDTOS(ordDtlDTOList); + }); + return orderDTOS; + } + @Override @Transactional(rollbackFor = Exception.class) public CommonResult updateOrderLstQty(List updateOrderLstQtyDTOS) { @@ -105,7 +213,7 @@ public class OrderApiImpl implements OrderApi { SalesOrderDetailMapper salesOrderDetailMapper = SpringUtil.getBean(SalesOrderDetailMapper.class); PrchOrdDtlMapper prchOrdDtlMapper = SpringUtil.getBean(PrchOrdDtlMapper.class); updateOrderLstQtyDTOS.forEach(f -> { - if ("SALE".equals(f.getSplyBsnTp())) { + if (OrderTypeEnum.SALE.getCode().equals(f.getSplyBsnTp())) { SalesOrderDetailDO salesOrderDetailDO = salesOrderDetailMapper.selectById(f.getOrderDetailId()); // 处理 trfQty 可能为 null 的情况,默认值 0 BigDecimal lstQty = Optional.ofNullable(salesOrderDetailDO.getTrfQty()) @@ -115,7 +223,7 @@ public class OrderApiImpl implements OrderApi { updateDO.setTrfQty(lstQty.add(f.getLstQty())); // 累加(trfQty ) 对应采购的lstQty(已收货量)字段 log.info("更新销售订单明细:{}", updateDO); salesOrderDetailMapper.updateById(updateDO); - } else if ("PUR".equals(f.getSplyBsnTp())) { + } else if (OrderTypeEnum.PUR.getCode().equals(f.getSplyBsnTp())) { // 采购 PrchOrdDtlDO prchOrdDtlDO = prchOrdDtlMapper.selectById(f.getOrderDetailId()); BigDecimal lstQty = Optional.ofNullable(prchOrdDtlDO.getLstQty()) @@ -201,7 +309,7 @@ public class OrderApiImpl implements OrderApi { } private List getOrderByIds(List ids) { - return SpringUtil.getBean(SalesOrderMapper.class).selectList(SalesOrderDO::getId, ids); // 采购订单与销售订单的 + return SpringUtil.getBean(SalesOrderMapper.class).selectList(SalesOrderDO::getId, ids); //订单主表都是同一个所以使用销售的主表暂时承载数据 } private List getPoOrdByIds(List ids) { @@ -320,6 +428,63 @@ public class OrderApiImpl implements OrderApi { ordDtlDTO.setRmk(s.getRemark()); ordDtlDTO.setTaxRte(s.getTaxRte()); ordDtlDTO.setInTaxUprc(s.getInTaxUnitPrice()); + } else if (t instanceof EntrustOrderDetailDO e) { + ordDtlDTO.setId(e.getId()); + ordDtlDTO.setOrderId(e.getOrderId()); + ordDtlDTO.setLineNum(Long.valueOf(e.getLineNumber())); + ordDtlDTO.setSendMaterialName(e.getSendMaterialName()); + ordDtlDTO.setSendMaterialNumber(e.getSendMaterialNumber()); + ordDtlDTO.setSendFactoryName(e.getSendFactoryName()); + ordDtlDTO.setSendFactoryNumber(e.getSendFactoryNumber()); + ordDtlDTO.setSendFactoryNumber(e.getSendFactoryNumber()); + ordDtlDTO.setSendWarehouseName(e.getSendWarehouseName()); + ordDtlDTO.setSendUnit(e.getSendUnit()); + ordDtlDTO.setReceiveFactoryName(e.getReceiveFactoryName()); + ordDtlDTO.setReceiveFactoryNumber(e.getReceiveFactoryNumber()); + ordDtlDTO.setReceiveWarehouseName(e.getReceiveWarehouseName()); + ordDtlDTO.setReceiveWarehouseNumber(e.getReceiveWarehouseNumber()); + ordDtlDTO.setReceiveUnit(e.getReceiveUnit()); + ordDtlDTO.setReceiveMaterialName(e.getReceiveMaterialName()); + ordDtlDTO.setReceiveMaterialNumber(e.getReceiveMaterialNumber()); + ordDtlDTO.setQuantity(e.getForecastQuantity()); + ordDtlDTO.setProjectCategory(e.getAccountingItemType()); + ordDtlDTO.setAgreementNumber(orderDTO.getAgreementNumber()); + ordDtlDTO.setElementAbbreviation(e.getElementAbbreviation()); + ordDtlDTO.setElementName(e.getElementName()); + ordDtlDTO.setElementCode(e.getElementNumber()); + ordDtlDTO.setIsEnable(e.getIsEnable()); + ordDtlDTO.setTaxNum(e.getTaxNumber()); + // ordDtlDTO.setLstQty(e.getForecastQuantity()); + ordDtlDTO.setRmk(e.getRemark()); + ordDtlDTO.setTaxRte(e.getTaxRate()); + ordDtlDTO.setInTaxUprc(e.getInTaxUnitPrice()); + } else if (t instanceof OriginalMaterialProcessingDetailDO o) { + ordDtlDTO.setId(o.getId()); + ordDtlDTO.setOrderId(o.getOrderId()); + ordDtlDTO.setLineNum(Long.valueOf(o.getLineNumber())); + ordDtlDTO.setMtrlName(o.getMaterialName()); + ordDtlDTO.setMtrlNum(o.getMaterialNumber()); + ordDtlDTO.setSendFactoryName(o.getSendFactoryName()); + ordDtlDTO.setSendFactoryNumber(o.getSendFactoryNumber()); + ordDtlDTO.setSendWarehouseName(o.getSendWarehouseName()); + ordDtlDTO.setUnit(o.getUnit()); + ordDtlDTO.setReceiveFactoryName(o.getReceiveFactoryName()); + ordDtlDTO.setReceiveFactoryNumber(o.getReceiveFactoryNumber()); + ordDtlDTO.setReceiveWarehouseName(o.getReceiveWarehouseName()); + ordDtlDTO.setReceiveWarehouseNumber(o.getReceiveWarehouseNumber()); + ordDtlDTO.setQuantity(o.getForecastQuantity()); + ordDtlDTO.setProjectCategory(o.getProjectCategory()); + ordDtlDTO.setAgreementNumber(orderDTO.getAgreementNumber()); + ordDtlDTO.setElementAbbreviation(o.getElementAbbreviation()); + ordDtlDTO.setElementName(o.getElementName()); + ordDtlDTO.setElementCode(o.getElementNumber()); + ordDtlDTO.setIsEnable(o.getIsEnable() ? "1" : "0"); + ordDtlDTO.setTaxNum(o.getTaxNumber()); + // ordDtlDTO.setLstQty(o.getForecastQuantity()); + ordDtlDTO.setRmk(o.getRemark()); + ordDtlDTO.setTaxRte(o.getTaxRte()); + ordDtlDTO.setInTaxUprc(o.getInTaxUnitPrice()); + } return ordDtlDTO; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/OriginalMaterialProcessingDetailController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/OriginalMaterialProcessingDetailController.java index 2e114e10..aa3e8c6f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/OriginalMaterialProcessingDetailController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/OriginalMaterialProcessingDetailController.java @@ -107,4 +107,6 @@ public class OriginalMaterialProcessingDetailController implements BusinessContr BeanUtils.toBean(list, OriginalMaterialProcessingDetailRespVO.class)); } + + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailPageReqVO.java index 45e4f22f..51f9feae 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailPageReqVO.java @@ -115,4 +115,16 @@ public class OriginalMaterialProcessingDetailPageReqVO extends PageParam { @Schema(description = "金属元素编码") private String elementNumber; + @Schema(description = "行号") + private Integer lineNumber; + + @Schema(description = "发票类型") + private String invoiceType; + + @Schema(description = "物料科目分配组") + private String metalAcctasscatGroup; + + @Schema(description = "税率") + private BigDecimal taxRte; + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailRespVO.java index 92b6ab2a..f44ab887 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailRespVO.java @@ -145,5 +145,16 @@ public class OriginalMaterialProcessingDetailRespVO { @ExcelProperty("金属元素编码") @Schema(description = "金属元素编码") private String elementNumber; + @ExcelProperty("行号") + @Schema(description = "行号") + private Integer lineNumber; + @ExcelProperty("发票类型") + @Schema(description = "发票类型") + private String invoiceType; + @ExcelProperty("物料科目分配组") + @Schema(description = "物料科目分配组") + private String metalAcctasscatGroup; + @Schema(description = "税率") + private BigDecimal taxRte; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailSaveReqVO.java index 570db17a..3dc4f15b 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingDetailSaveReqVO.java @@ -2,10 +2,15 @@ package com.zt.plat.module.contractorder.controller.admin.originalmaterialproces import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + import java.util.*; + import jakarta.validation.constraints.*; + import java.math.BigDecimal; + import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 来料加工订单明细新增/修改 Request VO") @@ -101,8 +106,22 @@ public class OriginalMaterialProcessingDetailSaveReqVO { @Schema(description = "金属元素缩写") private String elementAbbreviation; + @Schema(description = "金属元素名称") private String elementName; + @Schema(description = "金属元素编码") private String elementNumber; + + @Schema(description = "行号") + private Integer lineNumber; + + @Schema(description = "发票类型") + private String invoiceType; + + @Schema(description = "物料科目分配组") + private String metalAcctasscatGroup; + + @Schema(description = "税率") + private BigDecimal taxRte; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingPageReqVO.java index a4261ddb..135ece73 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingPageReqVO.java @@ -127,5 +127,20 @@ public class OriginalMaterialProcessingPageReqVO extends PageParam { @Schema(description = "相关订单ID") private Long relatedOrderId; + @Schema(description = "销售组织代码") + private String saleOrgzCd; + @Schema(description = "付款方名称") + private String payerName; + @Schema(description = "销售组织名称") + private String saleOrgzName; + @Schema(description = "分销聚道编码") + private String saleAcsCdg; + @Schema(description = "产品组编码") + private String pdtGrpCdg; + @Schema(description = "产品组名称") + private String pdtGrpName; + @Schema(description = "分销聚道名称") + private String saleAcsName; + } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingRespVO.java index 5524b3a3..97c9e223 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingRespVO.java @@ -172,5 +172,26 @@ public class OriginalMaterialProcessingRespVO { //绑定的来料采购订单 @Schema(description = "绑定的来料采购订单") private OriginalMaterialProcessingRespVO relatedOrder; + @Schema(description = "销售组织代码") + @ExcelProperty("销售组织代码") + private String saleOrgzCd; + @Schema(description = "付款方名称") + @ExcelProperty("付款方名称") + private String payerName; + @Schema(description = "销售组织名称") + @ExcelProperty("销售组织名称") + private String saleOrgzName; + @Schema(description = "分销聚道编码") + @ExcelProperty("分销聚道编码") + private String saleAcsCdg; + @Schema(description = "产品组编码") + @ExcelProperty("产品组编码") + private String pdtGrpCdg; + @Schema(description = "产品组名称") + @ExcelProperty("产品组名称") + private String pdtGrpName; + @Schema(description = "分销聚道名称") + @ExcelProperty("分销聚道名称") + private String saleAcsName; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingSaveReqVO.java index a33719a3..28e37cd0 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/originalmaterialprocessing/vo/OriginalMaterialProcessingSaveReqVO.java @@ -166,4 +166,19 @@ public class OriginalMaterialProcessingSaveReqVO { @Schema(description = "相关订单ID") private Long relatedOrderId; + @Schema(description = "销售组织代码") + private String saleOrgzCd; + @Schema(description = "付款方名称") + private String payerName; + @Schema(description = "销售组织名称") + private String saleOrgzName; + @Schema(description = "分销聚道编码") + private String saleAcsCdg; + @Schema(description = "产品组编码") + private String pdtGrpCdg; + @Schema(description = "产品组名称") + private String pdtGrpName; + @Schema(description = "分销聚道名称") + private String saleAcsName; + } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDO.java index 7ac705bc..16fef775 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDO.java @@ -268,4 +268,48 @@ public class OriginalMaterialProcessingDO extends BusinessBaseDO { */ @TableField(value = "REL_ORD_ID") private Long relatedOrderId; + /** + * 付款方名称 + * + */ + @TableField("PYER_NAME") + private String payerName; + /** + * 付款方编码 + * + */ + @TableField("PYER_NUM") + private String payerNum; + + @TableField("SALE_ORGZ_CD") + private String saleOrgzCd; + /** + * 销售组织名称 + * + */ + @TableField("SALE_ORGZ_NAME") + private String saleOrgzName; + /** + * 分销聚道编码 + * + */ + @TableField("SALE_ACS_CDG") + private String saleAcsCdg; + /** + * 分销聚道名称 + * + */ + @TableField("SALE_ACS_NAME") + private String saleAcsName; + /** + * 产品组编码 + * + */ + @TableField("PDT_GRP_CDG") + private String pdtGrpCdg; + /** + * 产品组名 + */ + @TableField("PDT_GRP_NAME") + private String pdtGrpName; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDetailDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDetailDO.java index befbad4e..0bee201d 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDetailDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/originalmaterialprocessing/OriginalMaterialProcessingDetailDO.java @@ -192,5 +192,25 @@ public class OriginalMaterialProcessingDetailDO extends BusinessBaseDO { */ @TableField("ELEM_NUM") private String elementNumber; + /** + * 行号 + */ + @TableField("LINE_NUM") + private Integer lineNumber; + /** + * 发票类型 + */ + @TableField("INV_TP") + private String invoiceType; + /** + * 物料科目分配组 + */ + @TableField("MTL_ACTS_GRP") + private String metalAcctasscatGroup; + /** + * 税率 + */ + @TableField("TAX_RTE") + private BigDecimal taxRte; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailService.java index 83d4b94a..bea8da76 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailService.java @@ -94,4 +94,12 @@ public interface OriginalMaterialProcessingDetailService { * */ void deleteOriginalMaterialProcessingDetailByOrderIds(List orderIds); + /** + * 根据订单id获得来料加工订单明细列表 + * + * @param orderId 订单编号 + * @return 来料加工订单明细列表 + */ + List queryOriginalMaterialProcessingDetailListByOrderId(Long orderId); + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailServiceImpl.java index 16e0e3c7..1b2a5335 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingDetailServiceImpl.java @@ -1,6 +1,10 @@ package com.zt.plat.module.contractorder.service.originalmaterialprocessing; import cn.hutool.core.collection.CollUtil; +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; import com.zt.plat.module.base.dal.dataobject.base.ElementDO; import com.zt.plat.module.base.service.base.ElementService; import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocessing.vo.OriginalMaterialProcessingDetailPageReqVO; @@ -9,6 +13,7 @@ import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocess import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderDetailDO; import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDetailDO; import com.zt.plat.module.contractorder.dal.mysql.originalmaterialprocessing.OriginalMaterialProcessingDetailMapper; +import com.zt.plat.module.erp.service.erp.ErpOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -16,6 +21,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; + 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; @@ -24,6 +30,7 @@ import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.e import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList; import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList; import static com.zt.plat.module.contractorder.enums.originalmaterialprocessing.ErrorCodeConstants.ORIGINAL_MATERIAL_PROCESSING_DETAIL_NOT_EXISTS; +import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.MTRL_CODE_NOT_EXISTS; /** @@ -41,6 +48,11 @@ public class OriginalMaterialProcessingDetailServiceImpl implements OriginalMate @Resource private ElementService elementService; + @Resource + private MaterialInfomationApi materialInfomationApi; + @Resource + private ErpOrderService erpOrderService; + @Override public OriginalMaterialProcessingDetailRespVO createOriginalMaterialProcessingDetail(OriginalMaterialProcessingDetailSaveReqVO createReqVO) { // 插入 @@ -70,12 +82,12 @@ public class OriginalMaterialProcessingDetailServiceImpl implements OriginalMate } @Override - public void deleteOriginalMaterialProcessingDetailListByIds(List ids) { + public void deleteOriginalMaterialProcessingDetailListByIds(List ids) { // 校验存在 validateOriginalMaterialProcessingDetailExists(ids); // 删除 originalMaterialProcessingDetailMapper.deleteByIds(ids); - } + } private void validateOriginalMaterialProcessingDetailExists(List ids) { List list = originalMaterialProcessingDetailMapper.selectByIds(ids); @@ -114,17 +126,21 @@ public class OriginalMaterialProcessingDetailServiceImpl implements OriginalMate updateList.forEach(this::setElemInfo); originalMaterialProcessingDetailMapper.insertOrUpdate(updateList); } + @Override + public void deleteOriginalMaterialProcessingDetailByOrderIds(List orderIds) { + originalMaterialProcessingDetailMapper.delete(OriginalMaterialProcessingDetailDO::getOrderId, orderIds); + } + + @Override + public List queryOriginalMaterialProcessingDetailListByOrderId(Long orderId) { + return originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId); + } @Override public List getOriginalMaterialProcessingDetailListByOrderId(Long orderId) { - List originalMaterialProcessingDetails = originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId); - return BeanUtils.toBean(originalMaterialProcessingDetails, OriginalMaterialProcessingDetailRespVO.class); + return BeanUtils.toBean(originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId), OriginalMaterialProcessingDetailRespVO.class); } - @Override - public void deleteOriginalMaterialProcessingDetailByOrderIds(List orderIds) { - originalMaterialProcessingDetailMapper.delete(OriginalMaterialProcessingDetailDO::getOrderId,orderIds); - } private void setElemInfo(OriginalMaterialProcessingDetailDO originalMaterialProcessingDetailDO) { if (originalMaterialProcessingDetailDO.getElementAbbreviation() == null) { return; @@ -139,4 +155,30 @@ public class OriginalMaterialProcessingDetailServiceImpl implements OriginalMate } + public String getMtrlZhongtongCode(String materialNumber) { + MaterialInfomationPageReqDTO infomationPageReqDTO = new MaterialInfomationPageReqDTO(); + infomationPageReqDTO.setPageSize(10000); + infomationPageReqDTO.setCode(materialNumber); + CommonResult> materialInfomationPage = materialInfomationApi.getMaterialInfomationPage(infomationPageReqDTO); + if (materialInfomationPage.getData() == null || materialInfomationPage.getData().getList().isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + + } + MaterialInfomationRespDTO materialInfomationRespDTO = materialInfomationPage.getData().getList().get(0); + Map flatAttributes = materialInfomationRespDTO.getFlatAttributes(); + //获取中铜物料编码 + String mtrlZhongtongCode = flatAttributes.getOrDefault("mtrlZhongtongCode", "").toString(); + if (mtrlZhongtongCode.isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + } + return mtrlZhongtongCode; + } + + private String completePrefix(String str) { + String target = str == null ? "" : str; + if (target.length() >= 18) return target; + String temp = "000000000000000000" + target; + return temp.substring(temp.length() - 18); + } + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingService.java index 007ba6e0..4bda3f10 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingService.java @@ -105,4 +105,6 @@ public interface OriginalMaterialProcessingService { List getOriginalMaterialProcessingDetailListByOrderId(Long id); void submitToErp061(Long id); + + void submitToErp(Long id); } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingServiceImplImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingServiceImplImpl.java index 2756e217..690f8000 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingServiceImplImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/originalmaterialprocessing/OriginalMaterialProcessingServiceImplImpl.java @@ -1,13 +1,18 @@ package com.zt.plat.module.contractorder.service.originalmaterialprocessing; import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; import com.zt.plat.module.contractorder.api.vo.contract.ContractRespVO; import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocessing.vo.OriginalMaterialProcessingDetailRespVO; import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocessing.vo.OriginalMaterialProcessingPageReqVO; @@ -20,24 +25,33 @@ import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.Purcha import com.zt.plat.module.contractorder.dal.dataobject.contract.SystemRelativityDO; import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderOrderDO; import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDO; +import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDetailDO; import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; import com.zt.plat.module.contractorder.dal.mysql.originalmaterialprocessing.OriginalMaterialProcessingMapper; +import com.zt.plat.module.contractorder.enums.OrderTypeEnum; import com.zt.plat.module.contractorder.enums.contract.DictEnum; import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; import com.zt.plat.module.contractorder.service.contract.ContractService; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; +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 jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.time.format.DateTimeFormatter; import java.util.*; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.contractorder.enums.ErpConstants.CONSTANTS_L; import static com.zt.plat.module.contractorder.enums.ErrorCodeConstants.CONTRACT_ORDER_EXISTS; import static com.zt.plat.module.contractorder.enums.entrustorder.ErrorCodeConstants.ENTRUST_ORDER_NOT_EXISTS; -import static com.zt.plat.module.contractorder.enums.originalmaterialprocessing.ErrorCodeConstants.ORIGINAL_MATERIAL_PROCESSING_DO_NOT_EXISTS; +import static com.zt.plat.module.contractorder.enums.originalmaterialprocessing.ErrorCodeConstants.*; +import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.MTRL_CODE_NOT_EXISTS; /** @@ -64,6 +78,11 @@ public class OriginalMaterialProcessingServiceImplImpl implements OriginalMateri @Resource private ContractService contractService; + @Resource + private MaterialInfomationApi materialInfomationApi; + @Resource + private ErpOrderService erpOrderService; + @Override @Transactional(rollbackFor = Exception.class) public OriginalMaterialProcessingRespVO createOriginalMaterialProcessing(OriginalMaterialProcessingSaveReqVO createReqVO) { @@ -87,23 +106,23 @@ public class OriginalMaterialProcessingServiceImplImpl implements OriginalMateri @Override public List createBatchOriginalMaterialProcessing(List createReqVOS) { List respVOS = new ArrayList<>(); - createReqVOS.forEach(createReqVO->{ - // 插入 - OriginalMaterialProcessingDO originalMaterialProcessingDO = BeanUtils.toBean(createReqVO, OriginalMaterialProcessingDO.class); - originalMaterialProcessingDO.setIsPush(0); - originalMaterialProcessingDO.setStatus(OrderStatusEnum.IN_PROGRESS.getCode()); - originalMaterialProcessingDO.setSystemOrderNumber(this.generateOrderNumber("")); - originalMaterialProcessingMapper.insert(originalMaterialProcessingDO); - OriginalMaterialProcessingRespVO bean = BeanUtils.toBean(originalMaterialProcessingDO, OriginalMaterialProcessingRespVO.class); - //批量插入来料加工订单明细 - if (createReqVO.getDetails() != null && !createReqVO.getDetails().isEmpty()) { - createReqVO.getDetails().forEach(entrustOrderDetail -> entrustOrderDetail.setOrderId(originalMaterialProcessingDO.getId())); - List originalMaterialProcessingDetailRespVOS = originalMaterialProcessingDetailService.insertBatchSomeColumn(createReqVO.getDetails()); - bean.setDetails(originalMaterialProcessingDetailRespVOS); - } - respVOS.add(bean); - }); - return respVOS; + createReqVOS.forEach(createReqVO -> { + // 插入 + OriginalMaterialProcessingDO originalMaterialProcessingDO = BeanUtils.toBean(createReqVO, OriginalMaterialProcessingDO.class); + originalMaterialProcessingDO.setIsPush(0); + originalMaterialProcessingDO.setStatus(OrderStatusEnum.IN_PROGRESS.getCode()); + originalMaterialProcessingDO.setSystemOrderNumber(this.generateOrderNumber("")); + originalMaterialProcessingMapper.insert(originalMaterialProcessingDO); + OriginalMaterialProcessingRespVO bean = BeanUtils.toBean(originalMaterialProcessingDO, OriginalMaterialProcessingRespVO.class); + //批量插入来料加工订单明细 + if (createReqVO.getDetails() != null && !createReqVO.getDetails().isEmpty()) { + createReqVO.getDetails().forEach(entrustOrderDetail -> entrustOrderDetail.setOrderId(originalMaterialProcessingDO.getId())); + List originalMaterialProcessingDetailRespVOS = originalMaterialProcessingDetailService.insertBatchSomeColumn(createReqVO.getDetails()); + bean.setDetails(originalMaterialProcessingDetailRespVOS); + } + respVOS.add(bean); + }); + return respVOS; } private String generateOrderNumber(String materialType) { @@ -264,13 +283,234 @@ public class OriginalMaterialProcessingServiceImplImpl implements OriginalMateri } @Override - public List getOriginalMaterialProcessingDetailListByOrderId(Long id) { + public List getOriginalMaterialProcessingDetailListByOrderId(Long id) { return originalMaterialProcessingDetailService.getOriginalMaterialProcessingDetailListByOrderId(id); } @Override + @Transactional(rollbackFor = Exception.class) public void submitToErp061(Long id) { + //获取订单并且判断 + OriginalMaterialProcessingDO originalMaterialProcessingDO + = originalMaterialProcessingMapper.selectById(id); + if (originalMaterialProcessingDO == null) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_DO_NOT_EXISTS); + } + + + if (!OrderTypeEnum.ENTED_PUR.getCode().equals(originalMaterialProcessingDO.getSplyBsnTp())) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_NOT_ALLOW_CALL_ERP, originalMaterialProcessingDO.getSplyBsnTp()); + } + + //获取明细 + List originalMaterialProcessingDetailDOS = originalMaterialProcessingDetailService.queryOriginalMaterialProcessingDetailListByOrderId(id); + if (originalMaterialProcessingDetailDOS.isEmpty()) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_DETAIL_NOT_EXISTS); + } + ErpOrderSaveReqVO erpOrderSaveReqVO = new ErpOrderSaveReqVO(); + build061ReqData(originalMaterialProcessingDO, originalMaterialProcessingDetailDOS, erpOrderSaveReqVO); + String result = erpOrderService.submitOrderToErp061(erpOrderSaveReqVO); + Long localOrderId = originalMaterialProcessingDO.getId(); + log.info("提交订单结果:{}", result); + OriginalMaterialProcessingDO upVo = new OriginalMaterialProcessingDO(); + upVo.setId(localOrderId); + String erpId = null; // ERP订单号(PO_NUMBER) + try { + if (StringUtils.isNotBlank(result)) { + // 解析顶层JSON对象 + JSONObject rootJson = JSONObject.parseObject(result); + String eResp = rootJson.getString("E_RESP"); + if (StringUtils.isNotBlank(eResp)) { + // 解析E_RESP为JSON对象,获取PO_NUMBER + JSONObject eRespJson = JSONObject.parseObject(eResp); + erpId = eRespJson.getString("PO_NUMBER"); + } + } + + // 3. 根据ERP订单号是否有效,设置本地订单更新属性 + if (StringUtils.isNotBlank(erpId)) { + // ERP返回有效订单号,更新为成功状态 + upVo.setOrderSAPNumber(erpId); + upVo.setCause("ERP提交成功,erpID为:" + erpId); + upVo.setErpStatus(OrderStatusEnum.FIND.getCode()); // 推送成功状态 + log.info("订单推送ERP成功,本地订单ID【{}】,ERP订单号【{}】,已更新本地状态", localOrderId, erpId); + } else { + upVo.setOrderSAPNumber(null); + upVo.setErpStatus(OrderStatusEnum.RLBK.getCode()); + upVo.setCause(result); + log.warn("订单推送ERP失败,本地订单ID【{}】,失败原因【{}】", localOrderId, result); + } + originalMaterialProcessingMapper.updateById(upVo); + } catch (Exception e) { + upVo.setOrderSAPNumber(null); + upVo.setErpStatus(OrderStatusEnum.RLBK.getCode()); // 异常时强制置为失败状态 + upVo.setCause("ERP返回结果解析/处理异常:" + e.getMessage()); + // 异常时仍需更新数据库,保证订单状态一致性 + originalMaterialProcessingMapper.updateById(upVo); + log.error("订单推送ERP发生异常,本地订单ID【{}】,异常信息如下", localOrderId, e); + } } + private void build061ReqData(OriginalMaterialProcessingDO order, List originalMaterialProcessingDetailDOS, ErpOrderSaveReqVO erpOrderSaveReqVO) { + //订单号 + erpOrderSaveReqVO.setOrderNo(order.getSystemOrderNumber()); + // 1. 处理抬头信息(Head) + ErpOrderSaveReqVO.Head head = new ErpOrderSaveReqVO.Head(); + head.setComp_code(order.getCpNum()); // 公司编码 -> 公司代码 + head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号 + head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型 + head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().format(DateTimeFormatter.ofPattern("yyyyMMdd")) : null); // 凭证日期 -> 采购凭证日期 + head.setPurch_org(order.getPurchaseOrganizationCustomsDeclaration()); // 采购组织编码 -> 采购组织 + head.setPur_group(order.getPurchaseGroup()); // 采购组编码 -> 采购组 + head.setCurrency(order.getCurrencyNumber()); // 货币码 -> 货币码 + head.setExch_rate(order.getExchangeRate()); // 汇率 -> 汇率 + erpOrderSaveReqVO.setHead(head); + + // 2. 处理抬头扩展信息(Exte) + ErpOrderSaveReqVO.Exte exte = new ErpOrderSaveReqVO.Exte(); + exte.setZzhth(order.getPaperContractNumber()); // 合同纸质合同号 -> 纸质合同号 + exte.setZxxyh(order.getAgreementNumber()); // 小协议号 -> 小协议号 + exte.setZnote(order.getRemark()); // 备注 -> 备注 + exte.setZlifnr(order.getAgentNumber()); // 代理方编码 -> 代理方 + erpOrderSaveReqVO.setExte(exte); + + List items = new ArrayList<>(); + List itexes = new ArrayList<>(); + originalMaterialProcessingDetailDOS.forEach(detail -> { + ErpOrderSaveReqVO.Item item = new ErpOrderSaveReqVO.Item(); + item.setPo_item(detail.getLineNumber() != null ? detail.getLineNumber() : null); // 行项目 -> 行号 + item.setMaterial(completePrefix(getMtrlZhongtongCode(detail.getMaterialNumber()))); // 物料编码 -> 物料号 + item.setPlant(detail.getReceiveFactoryNumber()); // 收货工厂编码 -> 工厂 + item.setStge_loc(detail.getReceiveWarehouseNumber()); // 收货库位编码 -> 库存地点 + item.setQuantity(detail.getForecastQuantity()); // 暂估数量 -> 数量 + item.setPo_unit(detail.getUnit()); // 计量单位 -> 计量单位 + item.setNet_price(detail.getInTaxUnitPrice()); // 含税单价 -> 含税单价 + item.setPrice_unit(detail.getInTaxUnitPrice() != null ? detail.getInTaxUnitPrice().intValue() : 1); // 价格单位 -> 价格单位 + item.setTax_code(detail.getTaxNumber()); // 税码 -> 税码 + + // 处理交货起止日期(格式:YYYYMMDD-YYYYMMDD) + StringBuilder vendMat = new StringBuilder(); + if (detail.getDeliveryCargoBeginDate() != null) { + vendMat.append(detail.getDeliveryCargoBeginDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + vendMat.append("-"); + if (detail.getDeliveryCargoEndDate() != null) { + vendMat.append(detail.getDeliveryCargoEndDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + //vendMat不以'-'开头 + if (vendMat.charAt(0) != '-') { + item.setVend_mat(vendMat.toString()); + } + items.add(item); + + ErpOrderSaveReqVO.Itex itex = new ErpOrderSaveReqVO.Itex(); + itex.setPo_item(detail.getLineNumber() != null ? detail.getLineNumber() : null); + }); + erpOrderSaveReqVO.setItems(items); + erpOrderSaveReqVO.setItex(itexes); + } + public void submitToErp091(Long id) { + //获取订单并且判断 + OriginalMaterialProcessingDO originalMaterialProcessingDO + = originalMaterialProcessingMapper.selectById(id); + if (originalMaterialProcessingDO == null) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_DO_NOT_EXISTS); + } + List originalMaterialProcessingDetailDOS = originalMaterialProcessingDetailService.queryOriginalMaterialProcessingDetailListByOrderId(id); + if (originalMaterialProcessingDetailDOS.isEmpty()) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_DETAIL_NOT_EXISTS); + } + ErpSalesOrderSaveReqVO erpSalesOrderSaveReqVO = new ErpSalesOrderSaveReqVO(); + //构建091请求数据 + build091ReqData(originalMaterialProcessingDO, originalMaterialProcessingDetailDOS, erpSalesOrderSaveReqVO); + //提交091 + String result = erpOrderService.submitOrderToErp091(erpSalesOrderSaveReqVO); + log.info("提交订单结果:{}", result); + } + private void build091ReqData(OriginalMaterialProcessingDO salesOrder, List originalMaterialProcessingDetailDOS, ErpSalesOrderSaveReqVO erpSalesOrderSaveReqVO) { + erpSalesOrderSaveReqVO.setOrderNo(salesOrder.getSystemOrderNumber()); + erpSalesOrderSaveReqVO.setPartn_es(salesOrder.getPayerNum()); // 供应商编码 + erpSalesOrderSaveReqVO.setPartn_numb(salesOrder.getSupplierNumber());// 付款方编码 + + // 销售订单抬头 + ErpSalesOrderSaveReqVO.Head head = new ErpSalesOrderSaveReqVO.Head(); + head.setDoc_type(salesOrder.getType()); // 销售订单类型 + head.setSales_org(salesOrder.getSaleOrgzCd()); // 销售组织 + head.setDistr_chan(salesOrder.getSaleAcsCdg()); // 销售渠道 + head.setDivision(salesOrder.getPdtGrpCdg());// 产品组 + head.setReq_date_h(salesOrder.getVoucherDate()); // 交货日期 + head.setSales_grp(salesOrder.getPurchaseGroup()); // 销售组 + // head.setSales_off(salesOrder.getSaleOrgzName()); // 销售办事处 + // head.setCust_grp1("10"); // 客户组 + head.setPurch_no_c(salesOrder.getPaperContractNumber());//纸质合同编号 + head.setName(salesOrder.getContractName()); + // head.setRef_1(); + // head.setPurch_date(); + // head.setOrd_reason(); + head.setCurrency(salesOrder.getCurrencyNumber()); // 货币码 + // head.setTaxclass(1); + erpSalesOrderSaveReqVO.setHead(head); + List items = new ArrayList<>(); + originalMaterialProcessingDetailDOS.forEach(detail -> { + ErpSalesOrderSaveReqVO.Item item = new ErpSalesOrderSaveReqVO.Item(); + item.setItem_categ(String.valueOf(detail.getLineNumber())); + item.setMaterial(completePrefix(getMtrlZhongtongCode(detail.getMaterialNumber()))); + item.setPlant(detail.getSendFactoryNumber()); + item.setStore_loc(detail.getSendWarehouseNumber()); + item.setSales_unit(detail.getUnit()); + item.setDlvschduse(detail.getInvoiceType()); // 开票类型 + item.setTarget_qty(detail.getForecastQuantity()); + item.setItm_number(Math.toIntExact(detail.getLineNumber())); + item.setItem_categ(detail.getProjectCategory()); + item.setShip_point(detail.getShippingPlace()); // 装运地点 + item.setAcct_assgt(detail.getMetalAcctasscatGroup());//todo 物料科目分配组 + items.add(item); + }); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void submitToErp(Long id) { + //获取订单并且判断 + OriginalMaterialProcessingDO originalMaterialProcessingDO + = originalMaterialProcessingMapper.selectById(id); + if (originalMaterialProcessingDO == null) { + throw exception(ORIGINAL_MATERIAL_PROCESSING_DO_NOT_EXISTS); + } + if (OrderTypeEnum.ENTED_PUR.getCode().equals(originalMaterialProcessingDO.getSplyBsnTp())) { + submitToErp061(id); + } else if (OrderTypeEnum.ENTED_SALE.getCode().equals(originalMaterialProcessingDO.getSplyBsnTp())) { + //销售 + submitToErp091(id); + } else { + throw exception(ORIGINAL_MATERIAL_PROCESSING_NOT_ALLOW_CALL_ERP, originalMaterialProcessingDO.getSplyBsnTp()); + } + } + + public String getMtrlZhongtongCode(String materialNumber) { + MaterialInfomationPageReqDTO infomationPageReqDTO = new MaterialInfomationPageReqDTO(); + infomationPageReqDTO.setPageSize(10000); + infomationPageReqDTO.setCode(materialNumber); + CommonResult> materialInfomationPage = materialInfomationApi.getMaterialInfomationPage(infomationPageReqDTO); + if (materialInfomationPage.getData() == null || materialInfomationPage.getData().getList().isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + + } + MaterialInfomationRespDTO materialInfomationRespDTO = materialInfomationPage.getData().getList().get(0); + Map flatAttributes = materialInfomationRespDTO.getFlatAttributes(); + //获取中铜物料编码 + String mtrlZhongtongCode = flatAttributes.getOrDefault("mtrlZhongtongCode", "").toString(); + if (mtrlZhongtongCode.isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + } + return mtrlZhongtongCode; + } + + private String completePrefix(String str) { + String target = str == null ? "" : str; + if (target.length() >= 18) return target; + String temp = "000000000000000000" + target; + return temp.substring(temp.length() - 18); + } } \ No newline at end of file