|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.win.module.wms.service.deliverRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
@ -20,6 +21,8 @@ import com.win.module.wms.convert.deliverJob.DeliverJobMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.balance.BalanceDO; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.customerdock.CustomerdockDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverPlan.DeliverPlanDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverPlan.DeliverPlanMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestMainDO; |
|
|
@ -40,6 +43,8 @@ import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusState; |
|
|
|
import com.win.module.wms.service.customer.*; |
|
|
|
import com.win.module.wms.service.customerdock.*; |
|
|
|
import com.win.module.wms.service.deliverPlan.DeliverPlanDetailService; |
|
|
|
import com.win.module.wms.service.deliverPlan.DeliverPlanMainService; |
|
|
|
import com.win.module.wms.service.expectout.ExpectoutService; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.jobsetting.JobsettingService; |
|
|
@ -53,6 +58,7 @@ import javax.validation.Validator; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.*; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
@ -97,9 +103,16 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DictDataApi dictDataApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerService customerService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DeliverPlanMainService deliverPlanMainService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DeliverPlanDetailService deliverPlanDetailService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerdockService customerdockService; |
|
|
|
|
|
|
@ -197,7 +210,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
public PageResult<DeliverRequestMainDO> getDeliverRequestMainSenior(CustomConditions conditions) { |
|
|
|
return deliverRequestMainMapper.selectSenior(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public List<DeliverRequestMainDO> getDeliverRequestMainList(DeliverRequestMainExportReqVO exportReqVO) { |
|
|
|
return deliverRequestMainMapper.selectList(exportReqVO); |
|
|
@ -208,7 +221,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override
|
|
|
|
//关闭
|
|
|
|
@Override |
|
|
|
public Integer closeDeliverRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
@ -227,6 +240,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//打开
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer reAddDeliverRequestMain(Long id) { |
|
|
@ -246,7 +260,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override
|
|
|
|
//提交
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer submitDeliverRequestMain(Long id) { |
|
|
@ -265,7 +279,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override
|
|
|
|
//审批同意
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer agreeDeliverRequestMain(Long id) { |
|
|
@ -285,7 +299,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override
|
|
|
|
//执行
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer handleDeliverRequestMain(Long id) { |
|
|
@ -303,7 +317,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override
|
|
|
|
//审批拒绝
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer abortDeliverRequestMain(Long id) { |
|
|
@ -319,100 +333,21 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成采购收货任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* @param mainDO 采购收货主 |
|
|
|
* @param detailDOList 采购收货子 |
|
|
|
*/ |
|
|
|
private void generateJob(DeliverRequestMainDO mainDO, List<DeliverRequestDetailDO> detailDOList) { |
|
|
|
DeliverJobMainDO deliverJobMainDO = DeliverJobMainConvert.INSTANCE.convert(mainDO); |
|
|
|
BeanUtils.copyProperties(mainDO, deliverJobMainDO); |
|
|
|
deliverJobMainDO.setRequestNumber(mainDO.getNumber()); |
|
|
|
deliverJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_JOB.getCode()); |
|
|
|
deliverJobMainDO.setNumber(number); |
|
|
|
deliverJobMainDO.setId(null); |
|
|
|
deliverJobMainDO.setRequestTime(mainDO.getRequestTime()); |
|
|
|
deliverJobMainDO.setRequestDueTime(mainDO.getDueTime()); |
|
|
|
deliverJobMainDO.setCreator(null); |
|
|
|
deliverJobMainDO.setCreateTime(null); |
|
|
|
deliverJobMainDO.setUpdater(null); |
|
|
|
deliverJobMainDO.setUpdateTime(null); |
|
|
|
// 获取任务单据设置
|
|
|
|
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("DeliverJob"); |
|
|
|
deliverJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); |
|
|
|
deliverJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); |
|
|
|
deliverJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); |
|
|
|
deliverJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); |
|
|
|
deliverJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); |
|
|
|
deliverJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); |
|
|
|
deliverJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); |
|
|
|
deliverJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); |
|
|
|
deliverJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); |
|
|
|
deliverJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("DeliverJob"); |
|
|
|
deliverJobMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
deliverJobMainMapper.insert(deliverJobMainDO); |
|
|
|
List<ExpectoutCreateReqVO> expectpoutCreateReqVOList = new ArrayList<>(); |
|
|
|
List<DeliverJobDetailDO> deliverJobDetailDOList = new ArrayList<>(); |
|
|
|
detailDOList.forEach(item -> { |
|
|
|
// 根据批次策略/下架策略 返回 库存余额DO
|
|
|
|
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),"OK",item.getProjectCode(),item.getQty(),mainDO.getFromLocationTypes()); |
|
|
|
// 根据 查询出所需数据 解析成 任务子表数据
|
|
|
|
balanceDOListJob.forEach(balanceDOItem -> { |
|
|
|
DeliverJobDetailDO deliverJobDetailDo = new DeliverJobDetailDO(); |
|
|
|
BeanUtils.copyProperties(item, deliverJobDetailDo); |
|
|
|
deliverJobDetailDo.setId(null); |
|
|
|
deliverJobDetailDo.setCreateTime(null); |
|
|
|
deliverJobDetailDo.setCreator(null); |
|
|
|
deliverJobDetailDo.setUpdateTime(null); |
|
|
|
deliverJobDetailDo.setUpdater(null); |
|
|
|
deliverJobDetailDo.setProjectCode(item.getProjectCode()); |
|
|
|
deliverJobDetailDo.setPackingNumber(balanceDOItem.getPackingNumber()); |
|
|
|
deliverJobDetailDo.setContainerNumber(balanceDOItem.getContainerNumber()); |
|
|
|
deliverJobDetailDo.setBatch(balanceDOItem.getBatch()); |
|
|
|
deliverJobDetailDo.setFromLocationCode(balanceDOItem.getLocationCode()); |
|
|
|
deliverJobDetailDo.setToLocationCode(item.getToLocationCode()); |
|
|
|
deliverJobDetailDo.setItemCode(item.getItemCode()); |
|
|
|
deliverJobDetailDo.setItemName(item.getItemName()); |
|
|
|
deliverJobDetailDo.setItemDesc1(item.getItemDesc1()); |
|
|
|
deliverJobDetailDo.setItemDesc2(item.getItemDesc2()); |
|
|
|
deliverJobDetailDo.setProjectCode(item.getProjectCode()); |
|
|
|
deliverJobDetailDo.setQty(item.getQty()); |
|
|
|
deliverJobDetailDo.setUom(item.getUom()); |
|
|
|
deliverJobDetailDo.setNumber(deliverJobMainDO.getNumber()); |
|
|
|
deliverJobDetailDo.setMasterId(deliverJobMainDO.getId()); |
|
|
|
deliverJobDetailDo.setInventoryStatus(item.getInventoryStatus()); |
|
|
|
deliverJobDetailDOList.add(deliverJobDetailDo); |
|
|
|
//预计出
|
|
|
|
ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(deliverJobDetailDo, expectoutCreateReqVO); |
|
|
|
expectoutCreateReqVO.setJobNumber(number); |
|
|
|
expectoutCreateReqVO.setBusinessType(deliverJobMainDO.getBusinessType()); |
|
|
|
expectoutCreateReqVO.setLocationCode(deliverJobDetailDo.getFromLocationCode()); |
|
|
|
expectoutCreateReqVO.setBatch(deliverJobDetailDo.getBatch()); |
|
|
|
expectoutCreateReqVO.setOwnerCode(deliverJobDetailDo.getOwnerCode()); |
|
|
|
expectoutCreateReqVO.setQty(deliverJobDetailDo.getQty()); |
|
|
|
expectoutCreateReqVO.setInventoryStatus("OK"); |
|
|
|
expectpoutCreateReqVOList.add(expectoutCreateReqVO); |
|
|
|
}); |
|
|
|
}); |
|
|
|
deliverJobDetailMapper.insertBatch(deliverJobDetailDOList); |
|
|
|
//增加预计入
|
|
|
|
expectoutService.createExpectout(expectpoutCreateReqVOList); |
|
|
|
trendsApi.createTrends(deliverJobMainDO.getId(), "DeliverJob", "成品发货申请生成成品发货任务", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
//导入校验主表方法集合
|
|
|
|
private String validateDeliverRequestMainImport(DeliverRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try{ |
|
|
|
validatorcustomercode(mainDo.getCustomerCode()); |
|
|
|
validatorDeliverPlanExist(mainDo.getDeliverPlanNumber()); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
validatorCustomercode(mainDo.getCustomerCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
CustomerdockDO customerdockDO = validatorcustomerDockCode(mainDo.getCustomerCode(),mainDo.getCustomerDockCode()); |
|
|
|
CustomerdockDO customerdockDO = validatorCustomerDockCode(mainDo.getCustomerCode(),mainDo.getCustomerDockCode()); |
|
|
|
if(customerdockDO == null){ |
|
|
|
message.append("未查找到客户" + mainDo.getCustomerCode() + "与" + "客户月台" + mainDo.getCustomerDockCode() + "相关的数据"); |
|
|
|
}else { |
|
|
@ -449,15 +384,20 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
} |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
private String validateIssueRequestDetailImport(DeliverRequestDetailDO detailDo) { |
|
|
|
//导入校验子表方法集合
|
|
|
|
private String validateIssueRequestDetailImport(DeliverRequestMainDO mainDo, DeliverRequestDetailDO detailDo,BusinesstypeDO businesstypeDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = validatoritemcode(detailDo.getItemCode()); |
|
|
|
ItembasicDO itembasicDO = validatorItemcode(detailDo.getItemCode()); |
|
|
|
detailDo.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDo.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDo.setItemName(itembasicDO.getName()); |
|
|
|
detailDo.setProjectCode(itembasicDO.getProject()); |
|
|
|
if("TRUE".equals(businesstypeDO.getUseOnTheWay())){ |
|
|
|
detailDo.setToLocationCode("CUST"); |
|
|
|
}else { |
|
|
|
detailDo.setToLocationCode(null); |
|
|
|
} |
|
|
|
try{ |
|
|
|
Isuom(itembasicDO.getUom(),detailDo.getUom()); |
|
|
|
}catch (Exception ex) { |
|
|
@ -479,6 +419,11 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
// }catch (Exception ex) {
|
|
|
|
// message.append(ex.getMessage()).append(",");
|
|
|
|
// }
|
|
|
|
try { |
|
|
|
validatorIfPlanQtyBigThanShipedQty(mainDo.getDeliverPlanNumber(),detailDo.getItemCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, detailDo); |
|
|
|
} catch (Exception ex) { |
|
|
@ -487,6 +432,8 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//导入
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public List<DeliverRequestImportErrorVO> importDeliverRequestList(List<DeliverRequestMainCreateReqVO> datas, Integer mode, boolean updatePart){ |
|
|
@ -503,13 +450,14 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
// 是否有错误数据
|
|
|
|
boolean flag = true; |
|
|
|
for (DeliverRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = validateIssueRequestDetailImport(detailDO); |
|
|
|
String messageDetail = validateIssueRequestDetailImport(mainDo,detailDO,businesstypeDO); |
|
|
|
if (!messageMain.isEmpty() || !messageDetail.isEmpty()) { |
|
|
|
DeliverRequestImportErrorVO importErrorVO = DeliverRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); |
|
|
|
importErrorVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
|
errorList.add(importErrorVO); |
|
|
|
messageMain = ""; |
|
|
|
flag = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -529,12 +477,14 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
//新增时校验主子表方法
|
|
|
|
private DeliverRequestMainDO validatorToCreate(DeliverRequestMainCreateReqVO createReqVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO) { |
|
|
|
DeliverRequestMainDO deliverRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); |
|
|
|
List<DeliverRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<DeliverRequestDetailDO> subDOList = DeliverRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for (DeliverRequestDetailDO deliverRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(deliverRequestDetailDO); |
|
|
|
validatorIfPlanQtyBigThanShipedQty(deliverRequestMainDO.getDeliverPlanNumber(),deliverRequestDetailDO.getItemCode()); |
|
|
|
validateDetailMethod(deliverRequestDetailDO,businesstypeDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_REQUEST.getCode()); |
|
|
|
deliverRequestMainDO.setNumber(number); |
|
|
@ -548,10 +498,11 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
return deliverRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
//主表校验方法
|
|
|
|
private DeliverRequestMainDO validateMainMethod(DeliverRequestMainBaseVO baseVO ,BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO){ |
|
|
|
DeliverRequestMainDO deliverRequestMainDO = DeliverRequestMainConvert.INSTANCE.convert(baseVO); |
|
|
|
validatorcustomercode(deliverRequestMainDO.getCustomerCode()); |
|
|
|
CustomerdockDO customerdockDO = validatorcustomerDockCode(deliverRequestMainDO.getCustomerCode(),deliverRequestMainDO.getCustomerDockCode()); |
|
|
|
validatorCustomercode(deliverRequestMainDO.getCustomerCode()); |
|
|
|
CustomerdockDO customerdockDO = validatorCustomerDockCode(deliverRequestMainDO.getCustomerCode(),deliverRequestMainDO.getCustomerDockCode()); |
|
|
|
if(customerdockDO == null){ |
|
|
|
deliverRequestMainDO.setToWarehouseCode(null); |
|
|
|
}else { |
|
|
@ -569,42 +520,161 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
deliverRequestMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
deliverRequestMainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
deliverRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
deliverRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
return deliverRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
private DeliverRequestDetailDO validateDetailMethod(DeliverRequestDetailDO deliverRequestDetailDO) { |
|
|
|
ItembasicDO itembasicDO = validatoritemcode(deliverRequestDetailDO.getItemCode()); |
|
|
|
//子表校验方法
|
|
|
|
private DeliverRequestDetailDO validateDetailMethod(DeliverRequestDetailDO deliverRequestDetailDO,BusinesstypeDO businesstypeDO) { |
|
|
|
ItembasicDO itembasicDO = validatorItemcode(deliverRequestDetailDO.getItemCode()); |
|
|
|
deliverRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
deliverRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
deliverRequestDetailDO.setItemName(itembasicDO.getName()); |
|
|
|
deliverRequestDetailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
Isuom(itembasicDO.getUom(),deliverRequestDetailDO.getUom()); |
|
|
|
SaleDetailDO saleDetailDO =validatorSale(deliverRequestDetailDO.getSoNumber(),deliverRequestDetailDO.getSoLine(),deliverRequestDetailDO.getItemCode()); |
|
|
|
if ("TRUE".equals(businesstypeDO.getUseOnTheWay())) { |
|
|
|
deliverRequestDetailDO.setToLocationCode("CUST"); |
|
|
|
} else { |
|
|
|
deliverRequestDetailDO.setToLocationCode(null); |
|
|
|
} |
|
|
|
Isuom(itembasicDO.getUom(), deliverRequestDetailDO.getUom()); |
|
|
|
//TODO 后续销售订单开发后再解除注释
|
|
|
|
// SaleDetailDO saleDetailDO =validatorSale(deliverRequestDetailDO.getSoNumber(),deliverRequestDetailDO.getSoLine(),deliverRequestDetailDO.getItemCode());
|
|
|
|
// if(saleDetailDO!=null) {
|
|
|
|
// Isqty(saleDetailDO.getShippedQty(), deliverRequestDetailDO.getQty(), saleDetailDO.getOrderQty(), deliverRequestDetailDO.getSoNumber(), deliverRequestDetailDO.getSoLine(), deliverRequestDetailDO.getItemCode());
|
|
|
|
// }
|
|
|
|
return deliverRequestDetailDO; |
|
|
|
} |
|
|
|
|
|
|
|
private void validatorcustomercode(String code){ |
|
|
|
/** |
|
|
|
* 生成采购收货任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* @param mainDO 采购收货主 |
|
|
|
* @param detailDOList 采购收货子 |
|
|
|
*/ |
|
|
|
private void generateJob(DeliverRequestMainDO mainDO, List<DeliverRequestDetailDO> detailDOList) { |
|
|
|
DeliverJobMainDO deliverJobMainDO = DeliverJobMainConvert.INSTANCE.convert(mainDO); |
|
|
|
BeanUtils.copyProperties(mainDO, deliverJobMainDO); |
|
|
|
deliverJobMainDO.setRequestNumber(mainDO.getNumber()); |
|
|
|
deliverJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_JOB.getCode()); |
|
|
|
deliverJobMainDO.setNumber(number); |
|
|
|
deliverJobMainDO.setId(null); |
|
|
|
deliverJobMainDO.setRequestTime(mainDO.getRequestTime()); |
|
|
|
deliverJobMainDO.setRequestDueTime(mainDO.getDueTime()); |
|
|
|
deliverJobMainDO.setCreator(null); |
|
|
|
deliverJobMainDO.setCreateTime(null); |
|
|
|
deliverJobMainDO.setUpdater(null); |
|
|
|
deliverJobMainDO.setUpdateTime(null); |
|
|
|
deliverJobMainDO.setStatus("1"); |
|
|
|
// 获取任务单据设置
|
|
|
|
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("DeliverJob"); |
|
|
|
deliverJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); |
|
|
|
deliverJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); |
|
|
|
deliverJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); |
|
|
|
deliverJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); |
|
|
|
deliverJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); |
|
|
|
deliverJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); |
|
|
|
deliverJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); |
|
|
|
deliverJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); |
|
|
|
deliverJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); |
|
|
|
deliverJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("DeliverJob"); |
|
|
|
deliverJobMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
deliverJobMainDO.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses()); |
|
|
|
deliverJobMainDO.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
deliverJobMainMapper.insert(deliverJobMainDO); |
|
|
|
List<ExpectoutCreateReqVO> expectpoutCreateReqVOList = new ArrayList<>(); |
|
|
|
List<DeliverJobDetailDO> deliverJobDetailDOList = new ArrayList<>(); |
|
|
|
detailDOList.forEach(item -> { |
|
|
|
// 根据批次策略/下架策略 返回 库存余额DO
|
|
|
|
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),"OK",item.getProjectCode(),item.getQty(),null); |
|
|
|
// 根据 查询出所需数据 解析成 任务子表数据
|
|
|
|
balanceDOListJob.forEach(balanceDOItem -> { |
|
|
|
DeliverJobDetailDO deliverJobDetailDo = new DeliverJobDetailDO(); |
|
|
|
BeanUtils.copyProperties(item, deliverJobDetailDo); |
|
|
|
deliverJobDetailDo.setId(null); |
|
|
|
deliverJobDetailDo.setCreateTime(null); |
|
|
|
deliverJobDetailDo.setCreator(null); |
|
|
|
deliverJobDetailDo.setUpdateTime(null); |
|
|
|
deliverJobDetailDo.setUpdater(null); |
|
|
|
if("TRUE".equals(businesstypeDO.getUseOnTheWay())){ |
|
|
|
deliverJobDetailDo.setToLocationCode("FAC_INTRANS"); |
|
|
|
}else { |
|
|
|
deliverJobDetailDo.setToLocationCode(null); |
|
|
|
} |
|
|
|
deliverJobDetailDo.setPackingNumber(balanceDOItem.getPackingNumber()); |
|
|
|
deliverJobDetailDo.setContainerNumber(balanceDOItem.getContainerNumber()); |
|
|
|
deliverJobDetailDo.setBatch(balanceDOItem.getBatch()); |
|
|
|
deliverJobDetailDo.setFromLocationCode(balanceDOItem.getLocationCode()); |
|
|
|
deliverJobDetailDo.setToLocationCode(item.getToLocationCode()); |
|
|
|
deliverJobDetailDo.setItemCode(item.getItemCode()); |
|
|
|
deliverJobDetailDo.setItemName(item.getItemName()); |
|
|
|
deliverJobDetailDo.setItemDesc1(item.getItemDesc1()); |
|
|
|
deliverJobDetailDo.setItemDesc2(item.getItemDesc2()); |
|
|
|
deliverJobDetailDo.setProjectCode(item.getProjectCode()); |
|
|
|
deliverJobDetailDo.setQty(item.getQty()); |
|
|
|
deliverJobDetailDo.setUom(item.getUom()); |
|
|
|
deliverJobDetailDo.setNumber(deliverJobMainDO.getNumber()); |
|
|
|
deliverJobDetailDo.setMasterId(deliverJobMainDO.getId()); |
|
|
|
deliverJobDetailDo.setInventoryStatus(balanceDOItem.getInventoryStatus()); |
|
|
|
deliverJobDetailDOList.add(deliverJobDetailDo); |
|
|
|
//预计出
|
|
|
|
ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(deliverJobDetailDo, expectoutCreateReqVO); |
|
|
|
expectoutCreateReqVO.setJobNumber(number); |
|
|
|
expectoutCreateReqVO.setBusinessType(deliverJobMainDO.getBusinessType()); |
|
|
|
expectoutCreateReqVO.setLocationCode(deliverJobDetailDo.getFromLocationCode()); |
|
|
|
expectoutCreateReqVO.setBatch(deliverJobDetailDo.getBatch()); |
|
|
|
expectoutCreateReqVO.setOwnerCode(deliverJobDetailDo.getOwnerCode()); |
|
|
|
expectoutCreateReqVO.setQty(deliverJobDetailDo.getQty()); |
|
|
|
expectoutCreateReqVO.setInventoryStatus(balanceDOItem.getInventoryStatus()); |
|
|
|
expectpoutCreateReqVOList.add(expectoutCreateReqVO); |
|
|
|
}); |
|
|
|
}); |
|
|
|
deliverJobDetailMapper.insertBatch(deliverJobDetailDOList); |
|
|
|
//增加预计入
|
|
|
|
expectoutService.createExpectout(expectpoutCreateReqVOList); |
|
|
|
trendsApi.createTrends(deliverJobMainDO.getId(), "DeliverJob", "成品发货申请生成成品发货任务", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
//校验发货计划是否存在
|
|
|
|
private DeliverPlanMainDO validatorDeliverPlanExist(String code){ |
|
|
|
return deliverPlanMainService.selectDeliverPlanExist(code); |
|
|
|
} |
|
|
|
|
|
|
|
//校验客户是否存在
|
|
|
|
private void validatorCustomercode(String code){ |
|
|
|
customerService.selectCustomerExist(code); |
|
|
|
} |
|
|
|
|
|
|
|
private CustomerdockDO validatorcustomerDockCode(String customerCode,String customerDockCode){ |
|
|
|
//校验客户月台是否存在
|
|
|
|
private CustomerdockDO validatorCustomerDockCode(String customerCode,String customerDockCode){ |
|
|
|
return customerdockService.getCustomerdockByCustomerCode(customerCode,customerDockCode); |
|
|
|
} |
|
|
|
|
|
|
|
private ItembasicDO validatoritemcode(String code){ |
|
|
|
//校验物品代码是否存在
|
|
|
|
private ItembasicDO validatorItemcode(String code){ |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(code); |
|
|
|
return itembasicDO; |
|
|
|
} |
|
|
|
|
|
|
|
//校验发货计划数量是否大于已发货数量
|
|
|
|
private void validatorIfPlanQtyBigThanShipedQty(String number,String itemCode){ |
|
|
|
DeliverPlanDetailDO deliverPlanDetailDO = deliverPlanDetailService.selectDeliverPlanDetail(number, itemCode); |
|
|
|
BigDecimal planQty = deliverPlanDetailDO.getPlanQty(); |
|
|
|
BigDecimal shippedQty = deliverPlanDetailDO.getShippedQty(); |
|
|
|
if(shippedQty.compareTo(planQty) == 1){ |
|
|
|
throw new UtilException("发货计划" + deliverPlanDetailDO.getNumber() + "的已发货数量" + shippedQty + "大于" + "计划数量" + planQty + ",超出了" + shippedQty.subtract(planQty)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//校验销售订单明细
|
|
|
|
private SaleDetailDO validatorSale(String SoNumber,String SoLine,String ItemCode ){ |
|
|
|
SaleDetailDO saleDetailDO =deliverJobMainService.saleDetailExist(SoNumber,SoLine,ItemCode ); |
|
|
|
return saleDetailDO; |
|
|
|
} |
|
|
|
|
|
|
|
//校验单位是否正确
|
|
|
|
private String Isuom(String uom1, String uom2) { |
|
|
|
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(uom1); |
|
|
|
String value = dictDataRespDTO.getLabel(); |
|
|
@ -613,10 +683,12 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService |
|
|
|
if(value2.equals(value)){ |
|
|
|
return "ture"; |
|
|
|
}else { |
|
|
|
throw exception(UOM_ERROR, value2); |
|
|
|
throw exception(UOM_ERROR, value); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//TODO 后续销售订单开发后再解除注释
|
|
|
|
//校验发货数量与未发货数量
|
|
|
|
// private String Isqty(BigDecimal shippedqty, BigDecimal detailqty, BigDecimal orderqty, String sonumber, String soline, String itemcode) {
|
|
|
|
// BigDecimal resultqty = orderqty.subtract(shippedqty);
|
|
|
|
// if(resultqty.compareTo(detailqty) > 0)
|
|
|
|