销售提交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 Sales_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_040, "销售订单明细不存在");
ErrorCode ORDER_DONT_SUBMIT = new ErrorCode(1_008_000_050, "该订单不支持审批"); ErrorCode ORDER_DONT_SUBMIT = new ErrorCode(1_008_000_050, "该订单不支持审批");
ErrorCode MTRL_CODE_NOT_EXISTS = new ErrorCode(1_008_000_150, "中铜物料不存在"); 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.MaterialInfomationPageReqDTO;
import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; 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.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.BpmProcessInstanceApi;
import com.zt.plat.module.bpm.api.task.BpmTaskApi; import com.zt.plat.module.bpm.api.task.BpmTaskApi;
import com.zt.plat.module.bpm.api.task.dto.*; 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.contract.SystemRelativityMapper;
import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; 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.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.contract.DictEnum;
import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum;
import com.zt.plat.module.contractorder.service.contract.ContractService; import com.zt.plat.module.contractorder.service.contract.ContractService;
import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants; 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.ErpOrderSaveReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderUpdateReqVO; 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.ErpOrderService;
import com.zt.plat.module.erp.service.erp.WarehouseFactoryService; 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.sequence.SequenceApi;
import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
@@ -95,6 +100,8 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
@Resource @Resource
private WarehouseFactoryService warehouseFactoryService; private WarehouseFactoryService warehouseFactoryService;
@Resource
private InternalWarehouseService internalWarehouseService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) { public PurchaseOrderRespVO createPurchaseOrder(PurchaseOrderSaveReqVO createReqVO) {
@@ -312,12 +319,12 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
throw exception(MTRL_CODE_NOT_EXISTS); throw exception(MTRL_CODE_NOT_EXISTS);
} }
//查询库位绑定编码 //查询库位绑定编码
WarehouseFactoryRespVO factoryAndWarehouse = getBoundFactoryAndWarehouse(detail.getRcvFactNum(), detail.getRcvWrhNum());
// 3.1 行项目基本信息 // 3.1 行项目基本信息
item.setPo_item(detail.getLineNum() != null ? detail.getLineNum().intValue() : null); // 行项目 -> 行号 item.setPo_item(detail.getLineNum() != null ? detail.getLineNum().intValue() : null); // 行项目 -> 行号
item.setMaterial(mtrlZhongtongCode); // 物料编码 -> 物料号 item.setMaterial(mtrlZhongtongCode); // 物料编码 -> 物料号
item.setPlant(detail.getRcvFactNum()); // 收货工厂编码 -> 工厂 item.setPlant(factoryAndWarehouse.getErpTargetFactoryNumber()); // 收货工厂编码 -> 工厂
item.setStge_loc(detail.getRcvWrhNum()); // 收货库位编码 -> 库存地点 item.setStge_loc(factoryAndWarehouse.getErpTargetWarehouseNumber()); // 收货库位编码 -> 库存地点
item.setQuantity(detail.getQty()); // 暂估数量 -> 数量 item.setQuantity(detail.getQty()); // 暂估数量 -> 数量
item.setPo_unit(detail.getUnt()); // 计量单位 -> 计量单位 item.setPo_unit(detail.getUnt()); // 计量单位 -> 计量单位
item.setNet_price(detail.getInTaxUprc()); // 含税单价 -> 含税单价 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 @Override
public PageResult<PurchaseOrderDO> queryOrderAndPlanData(OrderAndPlanDataReqDTO reqDTO) { public PageResult<PurchaseOrderDO> queryOrderAndPlanData(OrderAndPlanDataReqDTO reqDTO) {
@@ -859,4 +862,26 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
: allData.subList(startIndex, endIndex); : allData.subList(startIndex, endIndex);
return new PageResult<>(pageData, (long) allData.size()); 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.dataobject.salesorder.SalesOrderDO;
import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; 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.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.contract.DictEnum;
import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum;
import com.zt.plat.module.contractorder.service.contract.ContractService; import com.zt.plat.module.contractorder.service.contract.ContractService;
import com.zt.plat.module.contractorder.util.constants.ProcessDefinitionKeyConstants; 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.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.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.sequence.SequenceApi;
import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
@@ -87,7 +92,10 @@ public class SalesOrderServiceImpl implements SalesOrderService {
@Resource @Resource
private MaterialInfomationApi materialInfomationApi; private MaterialInfomationApi materialInfomationApi;
@Resource
private WarehouseFactoryService warehouseFactoryService;
@Resource
private InternalWarehouseService internalWarehouseService;
@Override @Override
@Transactional @Transactional
@@ -225,11 +233,13 @@ public class SalesOrderServiceImpl implements SalesOrderService {
if (mtrlZhongtongCode.isEmpty()){ if (mtrlZhongtongCode.isEmpty()){
throw exception(MTRL_CODE_NOT_EXISTS); throw exception(MTRL_CODE_NOT_EXISTS);
} }
//查询对应的库位和工厂
WarehouseFactoryRespVO boundFactoryAndWarehouse = getBoundFactoryAndWarehouse(salesOrderDetailRespVO.getFactoryNumber(), salesOrderDetailRespVO.getWarehouseNumber());
ErpSalesOrderSaveReqVO.Item item = new ErpSalesOrderSaveReqVO.Item(); ErpSalesOrderSaveReqVO.Item item = new ErpSalesOrderSaveReqVO.Item();
item.setItem_categ(String.valueOf(salesOrderDetailRespVO.getLineNumber())); item.setItem_categ(String.valueOf(salesOrderDetailRespVO.getLineNumber()));
item.setMaterial(mtrlZhongtongCode); item.setMaterial(mtrlZhongtongCode);
item.setPlant(salesOrderDetailRespVO.getFactoryNumber()); item.setPlant(boundFactoryAndWarehouse.getErpTargetFactoryNumber());
item.setStore_loc(salesOrderDetailRespVO.getShippingPlace()); item.setStore_loc(boundFactoryAndWarehouse.getErpTargetWarehouseNumber());
item.setSales_unit(salesOrderDetailRespVO.getUnit()); item.setSales_unit(salesOrderDetailRespVO.getUnit());
item.setDlvschduse(salesOrderDetailRespVO.getInvoiceType()); item.setDlvschduse(salesOrderDetailRespVO.getInvoiceType());
item.setTarget_qty(salesOrderDetailRespVO.getQuantity()); item.setTarget_qty(salesOrderDetailRespVO.getQuantity());
@@ -588,4 +598,26 @@ public class SalesOrderServiceImpl implements SalesOrderService {
public SalesOrderDO getSalesOrderByOrderNo(String orderNo) { public SalesOrderDO getSalesOrderByOrderNo(String orderNo) {
return salesOrderMapper.selectOne(SalesOrderDO::getSystemOrderNumber, 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 + " 无符合操作条件的库位"));
}
} }

View File

@@ -13,6 +13,7 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -90,7 +91,14 @@ public class WarehouseFactoryServiceImpl implements WarehouseFactoryService {
@Override @Override
public List<WarehouseFactoryRespVO> getWarehouseFactoryByMainId(String mainId) { public List<WarehouseFactoryRespVO> getWarehouseFactoryByMainId(String mainId) {
return BeanUtils.toBean(warehouseFactoryMapper.selectList(WarehouseFactoryDO::getMainWarehouseId, mainId), WarehouseFactoryRespVO.class); List<WarehouseFactoryDO> warehouseFactoryDOS = warehouseFactoryMapper.selectList(WarehouseFactoryDO::getMainWarehouseId, mainId);
List<WarehouseFactoryRespVO> warehouseFactoryRespVOS=new ArrayList<>();
for (WarehouseFactoryDO warehouseFactoryDO : warehouseFactoryDOS) {
WarehouseFactoryRespVO bean = BeanUtils.toBean(warehouseFactoryDO, WarehouseFactoryRespVO.class);
bean.setMmsiType(warehouseFactoryDO.getMmsiType());
warehouseFactoryRespVOS.add(bean);
}
return warehouseFactoryRespVOS;
} }
} }

View File

@@ -64,4 +64,7 @@ public interface InternalWarehouseService {
PageResult<InternalWarehouseDO> getInternalWarehousePage(InternalWarehousePageReqVO pageReqVO); PageResult<InternalWarehouseDO> getInternalWarehousePage(InternalWarehousePageReqVO pageReqVO);
void enableDisable(List<InternalWarehouseEnableDisableReqVO> reqVOS); void enableDisable(List<InternalWarehouseEnableDisableReqVO> reqVOS);
//通过工厂编码查询库位
InternalWarehouseDO getInternalWarehouseByFactoryCodeAndWarehouseCode(String factoryCode, String warehouseCode);
} }

View File

@@ -126,4 +126,14 @@ public class InternalWarehouseServiceImpl implements InternalWarehouseService {
}); });
} }
@Override
public InternalWarehouseDO getInternalWarehouseByFactoryCodeAndWarehouseCode(String factoryCode, String warehouseCode) {
return internalWarehouseMapper.selectOne(
new LambdaQueryWrapperX<InternalWarehouseDO>()
.eq(InternalWarehouseDO::getFactoryNumber, factoryCode)
.eq(InternalWarehouseDO::getNumber, warehouseCode)
.eq(InternalWarehouseDO::getIsEnable, '1')
);
}
} }