销售提交erp

This commit is contained in:
潘荣晟
2026-01-26 02:44:15 +08:00
parent ea02e5af4e
commit 7e2473051b
7 changed files with 101 additions and 11 deletions

View File

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

View File

@@ -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, "{}");
}

View File

@@ -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<PurchaseOrderDO> 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 + " 无符合操作条件的库位"));
}
}

View File

@@ -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 + " 无符合操作条件的库位"));
}
}