From 7e2473051bd3dbd771c47323e780979b2ab3a4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Mon, 26 Jan 2026 02:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E6=8F=90=E4=BA=A4erp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contractorder/enums/ErpConstants.java | 11 ++++++ .../purchaseorder/ErrorCodeConstants.java | 1 + .../PurchaseOrderServiceImpl.java | 39 +++++++++++++++---- .../salesorder/SalesOrderServiceImpl.java | 38 ++++++++++++++++-- .../erp/WarehouseFactoryServiceImpl.java | 10 ++++- .../InternalWarehouseService.java | 3 ++ .../InternalWarehouseServiceImpl.java | 10 +++++ 7 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java new file mode 100644 index 00000000..e3fab99d --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java @@ -0,0 +1,11 @@ +package com.zt.plat.module.contractorder.enums; + +/** + * ERP相关常量类 + */ +public class ErpConstants { + public static final String PO_WAREHOUSE_TYPE = "into"; + public static final String PO_WAREHOUSE_MMSITYPE = "PUR"; + public static final String SALE_WAREHOUSE_TYPE = "out"; + public static final String SALE_WAREHOUSE_MMSITYPE = "SALE"; +} diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java index 4e25805f..dc14d2dc 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/purchaseorder/ErrorCodeConstants.java @@ -19,4 +19,5 @@ public interface ErrorCodeConstants { ErrorCode Sales_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_040, "销售订单明细不存在"); ErrorCode ORDER_DONT_SUBMIT = new ErrorCode(1_008_000_050, "该订单不支持审批"); ErrorCode MTRL_CODE_NOT_EXISTS = new ErrorCode(1_008_000_150, "中铜物料不存在"); + ErrorCode WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS = new ErrorCode(1_008_000_151, "{}"); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java index e686be0b..819cb1ee 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java @@ -14,6 +14,7 @@ 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.api.materialinfomation.dto.MaterialInfomationSimplePageReqDTO; +import com.zt.plat.module.base.service.internalsupplyfactory.InternalSupplyFactoryService; import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi; import com.zt.plat.module.bpm.api.task.BpmTaskApi; import com.zt.plat.module.bpm.api.task.dto.*; @@ -28,14 +29,18 @@ import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper; +import com.zt.plat.module.contractorder.enums.ErpConstants; 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.contractorder.util.constants.ProcessDefinitionKeyConstants; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderUpdateReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.WarehouseFactoryRespVO; +import com.zt.plat.module.erp.dal.dataobject.erp.internalwarehouse.InternalWarehouseDO; import com.zt.plat.module.erp.service.erp.ErpOrderService; import com.zt.plat.module.erp.service.erp.WarehouseFactoryService; +import com.zt.plat.module.erp.service.erp.internalwarehouse.InternalWarehouseService; import com.zt.plat.module.system.api.sequence.SequenceApi; import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; @@ -95,6 +100,8 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { @Resource private WarehouseFactoryService warehouseFactoryService; + @Resource + private InternalWarehouseService internalWarehouseService; @Override @Transactional(rollbackFor = Exception.class) public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) { @@ -312,12 +319,12 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { throw exception(MTRL_CODE_NOT_EXISTS); } //查询库位绑定编码 - + WarehouseFactoryRespVO factoryAndWarehouse = getBoundFactoryAndWarehouse(detail.getRcvFactNum(), detail.getRcvWrhNum()); // 3.1 行项目基本信息 item.setPo_item(detail.getLineNum() != null ? detail.getLineNum().intValue() : null); // 行项目 -> 行号 item.setMaterial(mtrlZhongtongCode); // 物料编码 -> 物料号 - item.setPlant(detail.getRcvFactNum()); // 收货工厂编码 -> 工厂 - item.setStge_loc(detail.getRcvWrhNum()); // 收货库位编码 -> 库存地点 + item.setPlant(factoryAndWarehouse.getErpTargetFactoryNumber()); // 收货工厂编码 -> 工厂 + item.setStge_loc(factoryAndWarehouse.getErpTargetWarehouseNumber()); // 收货库位编码 -> 库存地点 item.setQuantity(detail.getQty()); // 暂估数量 -> 数量 item.setPo_unit(detail.getUnt()); // 计量单位 -> 计量单位 item.setNet_price(detail.getInTaxUprc()); // 含税单价 -> 含税单价 @@ -835,10 +842,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { }); } - private String R(){ - int number = (int) (Math.random() * 900000 + 100000); - return String.valueOf(number); - } @Override public PageResult queryOrderAndPlanData(OrderAndPlanDataReqDTO reqDTO) { @@ -859,4 +862,26 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { : allData.subList(startIndex, endIndex); return new PageResult<>(pageData, (long) allData.size()); } + + + public WarehouseFactoryRespVO getBoundFactoryAndWarehouse(String factoryCode, String warehouseCode) { + // 1. 查询主库信息,空值直接抛异常(精准异常信息) + InternalWarehouseDO internalWarehouseDO = internalWarehouseService + .getInternalWarehouseByFactoryCodeAndWarehouseCode(factoryCode, warehouseCode); + if (internalWarehouseDO == null) { + throw exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, + "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 不存在关联记录"); + } + + // 2. Stream流式查询+过滤,直接获取符合条件的唯一VO,空值抛异常 + return warehouseFactoryService.getWarehouseFactoryByMainId(String.valueOf(internalWarehouseDO.getId())) + .stream() + // 过滤条件:MMSI类型+操作类型匹配ERP常量 + .filter(vo -> ErpConstants.PO_WAREHOUSE_MMSITYPE.equals(vo.getMmsiType()) + && ErpConstants.PO_WAREHOUSE_TYPE.equals(vo.getOperationType())) + // 取第一个匹配结果(无结果则抛指定异常) + .findFirst() + .orElseThrow(() -> exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, + "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 无符合操作条件的库位")); + } } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java index d27a8bed..ad4da072 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java @@ -25,12 +25,17 @@ import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrd import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; +import com.zt.plat.module.contractorder.enums.ErpConstants; 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.contractorder.util.constants.ProcessDefinitionKeyConstants; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrderSaveReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.WarehouseFactoryRespVO; +import com.zt.plat.module.erp.dal.dataobject.erp.internalwarehouse.InternalWarehouseDO; import com.zt.plat.module.erp.service.erp.ErpOrderService; +import com.zt.plat.module.erp.service.erp.WarehouseFactoryService; +import com.zt.plat.module.erp.service.erp.internalwarehouse.InternalWarehouseService; import com.zt.plat.module.system.api.sequence.SequenceApi; import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; @@ -87,7 +92,10 @@ public class SalesOrderServiceImpl implements SalesOrderService { @Resource private MaterialInfomationApi materialInfomationApi; - + @Resource + private WarehouseFactoryService warehouseFactoryService; + @Resource + private InternalWarehouseService internalWarehouseService; @Override @Transactional @@ -225,11 +233,13 @@ public class SalesOrderServiceImpl implements SalesOrderService { if (mtrlZhongtongCode.isEmpty()){ throw exception(MTRL_CODE_NOT_EXISTS); } + //查询对应的库位和工厂 + WarehouseFactoryRespVO boundFactoryAndWarehouse = getBoundFactoryAndWarehouse(salesOrderDetailRespVO.getFactoryNumber(), salesOrderDetailRespVO.getWarehouseNumber()); ErpSalesOrderSaveReqVO.Item item = new ErpSalesOrderSaveReqVO.Item(); item.setItem_categ(String.valueOf(salesOrderDetailRespVO.getLineNumber())); item.setMaterial(mtrlZhongtongCode); - item.setPlant(salesOrderDetailRespVO.getFactoryNumber()); - item.setStore_loc(salesOrderDetailRespVO.getShippingPlace()); + item.setPlant(boundFactoryAndWarehouse.getErpTargetFactoryNumber()); + item.setStore_loc(boundFactoryAndWarehouse.getErpTargetWarehouseNumber()); item.setSales_unit(salesOrderDetailRespVO.getUnit()); item.setDlvschduse(salesOrderDetailRespVO.getInvoiceType()); item.setTarget_qty(salesOrderDetailRespVO.getQuantity()); @@ -588,4 +598,26 @@ public class SalesOrderServiceImpl implements SalesOrderService { public SalesOrderDO getSalesOrderByOrderNo(String orderNo) { return salesOrderMapper.selectOne(SalesOrderDO::getSystemOrderNumber, orderNo); } + + + public WarehouseFactoryRespVO getBoundFactoryAndWarehouse(String factoryCode, String warehouseCode) { + // 1. 查询主库信息,空值直接抛异常(精准异常信息) + InternalWarehouseDO internalWarehouseDO = internalWarehouseService + .getInternalWarehouseByFactoryCodeAndWarehouseCode(factoryCode, warehouseCode); + if (internalWarehouseDO == null) { + throw exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, + "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 不存在关联记录"); + } + + // 2. Stream流式查询+过滤,直接获取符合条件的唯一VO,空值抛异常 + return warehouseFactoryService.getWarehouseFactoryByMainId(String.valueOf(internalWarehouseDO.getId())) + .stream() + // 过滤条件:MMSI类型+操作类型匹配ERP常量 + .filter(vo -> ErpConstants.SALE_WAREHOUSE_MMSITYPE.equals(vo.getMmsiType()) + && ErpConstants.SALE_WAREHOUSE_TYPE.equals(vo.getOperationType())) + // 取第一个匹配结果(无结果则抛指定异常) + .findFirst() + .orElseThrow(() -> exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, + "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 无符合操作条件的库位")); + } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/WarehouseFactoryServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/WarehouseFactoryServiceImpl.java index 411e2bec..8c9a6a69 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/WarehouseFactoryServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/WarehouseFactoryServiceImpl.java @@ -13,6 +13,7 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; import java.util.List; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -90,7 +91,14 @@ public class WarehouseFactoryServiceImpl implements WarehouseFactoryService { @Override public List getWarehouseFactoryByMainId(String mainId) { - return BeanUtils.toBean(warehouseFactoryMapper.selectList(WarehouseFactoryDO::getMainWarehouseId, mainId), WarehouseFactoryRespVO.class); + List warehouseFactoryDOS = warehouseFactoryMapper.selectList(WarehouseFactoryDO::getMainWarehouseId, mainId); + List warehouseFactoryRespVOS=new ArrayList<>(); + for (WarehouseFactoryDO warehouseFactoryDO : warehouseFactoryDOS) { + WarehouseFactoryRespVO bean = BeanUtils.toBean(warehouseFactoryDO, WarehouseFactoryRespVO.class); + bean.setMmsiType(warehouseFactoryDO.getMmsiType()); + warehouseFactoryRespVOS.add(bean); + } + return warehouseFactoryRespVOS; } } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseService.java index a345df9d..023f6eb4 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseService.java @@ -64,4 +64,7 @@ public interface InternalWarehouseService { PageResult getInternalWarehousePage(InternalWarehousePageReqVO pageReqVO); void enableDisable(List reqVOS); + //通过工厂编码查询库位 + InternalWarehouseDO getInternalWarehouseByFactoryCodeAndWarehouseCode(String factoryCode, String warehouseCode); + } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseServiceImpl.java index a7f27b73..5160d946 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/internalwarehouse/InternalWarehouseServiceImpl.java @@ -126,4 +126,14 @@ public class InternalWarehouseServiceImpl implements InternalWarehouseService { }); } + @Override + public InternalWarehouseDO getInternalWarehouseByFactoryCodeAndWarehouseCode(String factoryCode, String warehouseCode) { + return internalWarehouseMapper.selectOne( + new LambdaQueryWrapperX() + .eq(InternalWarehouseDO::getFactoryNumber, factoryCode) + .eq(InternalWarehouseDO::getNumber, warehouseCode) + .eq(InternalWarehouseDO::getIsEnable, '1') + ); + } + } \ No newline at end of file