|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.win.module.wms.service.putawayRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
@ -9,26 +10,43 @@ import com.win.module.infra.api.trends.TrendsApi; |
|
|
|
import com.win.module.infra.enums.TrendsTypeEnum; |
|
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.expectout.vo.ExpectoutCreateReqVO; |
|
|
|
import com.win.module.wms.controller.putawayRecord.vo.PutawayRecordDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.putawayRecord.vo.PutawayRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.putawayRequest.vo.*; |
|
|
|
import com.win.module.wms.convert.putawayJob.PutawayJobDetailConvert; |
|
|
|
import com.win.module.wms.convert.putawayJob.PutawayJobMainConvert; |
|
|
|
import com.win.module.wms.convert.putawayRecord.PutawayRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.putawayRecord.PutawayRecordMainConvert; |
|
|
|
import com.win.module.wms.convert.putawayRequest.PutawayRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.putawayRequest.PutawayRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.putawayJob.PutawayJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.putawayJob.PutawayJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.putawayRequest.PutawayRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.putawayRequest.PutawayRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.putawayJob.PutawayJobDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.putawayJob.PutawayJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.putawayRecord.PutawayRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.putawayRecord.PutawayRecordMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.putawayRequest.PutawayRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.putawayRequest.PutawayRequestMainMapper; |
|
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
import com.win.module.wms.enums.job.JobStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusState; |
|
|
|
import com.win.module.wms.service.customer.CustomerService; |
|
|
|
import com.win.module.wms.service.expectout.ExpectoutService; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.purchase.PurchaseMainService; |
|
|
|
import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
|
import com.win.module.wms.util.JobUtils; |
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
@ -73,8 +91,17 @@ public class PutawayRequestMainServiceImpl implements PutawayRequestMainService |
|
|
|
private CustomerService customerService; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private PutawayJobMainMapper putawayJobMainMapper; |
|
|
|
@Resource |
|
|
|
private PutawayJobDetailMapper putawayJobDetailMapper; |
|
|
|
@Resource |
|
|
|
private PutawayRecordMainMapper putawayRecordMainMapper; |
|
|
|
@Resource |
|
|
|
private PutawayRecordDetailMapper putawayRecordDetailMapper; |
|
|
|
@Resource |
|
|
|
private ExpectoutService expectoutService; |
|
|
|
|
|
|
|
//TODO 主表从仓库代码,到仓库代码暂未赋值
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Long createPutawayRequestMain(PutawayRequestMainCreateReqVO createReqVO) { |
|
|
@ -114,10 +141,12 @@ public class PutawayRequestMainServiceImpl implements PutawayRequestMainService |
|
|
|
putawayRequestMainMapper.deleteById(id); |
|
|
|
} |
|
|
|
|
|
|
|
private void validatePutawayRequestMainExists(Long id) { |
|
|
|
if (putawayRequestMainMapper.selectById(id) == null) { |
|
|
|
private PutawayRequestMainDO validatePutawayRequestMainExists(Long id) { |
|
|
|
PutawayRequestMainDO putawayRequestMainDO = putawayRequestMainMapper.selectById(id); |
|
|
|
if (putawayRequestMainDO == null) { |
|
|
|
throw exception(PUTAWAY_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
return putawayRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -188,6 +217,146 @@ public class PutawayRequestMainServiceImpl implements PutawayRequestMainService |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closePutawayRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
PutawayRequestMainDO mainDO = validatePutawayRequestMainExists(id); |
|
|
|
Long count = putawayJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_CANNOT_CLOSE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "putawayRequest", "关闭了上架申请", TrendsTypeEnum.UPDATE); |
|
|
|
return putawayRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer submitPutawayRequestMain(Long id) { |
|
|
|
PutawayRequestMainDO mainDO = validatePutawayRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_CANNOT_SUBMIT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, putawayRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "putawayRequest", "提交了上架申请", TrendsTypeEnum.UPDATE); |
|
|
|
return putawayRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer agreePutawayRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
PutawayRequestMainDO mainDO = validatePutawayRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_CANNOT_AGREE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, putawayRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "putawayRequest", "审批同意了上架申请", TrendsTypeEnum.UPDATE); |
|
|
|
return putawayRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer handlePutawayRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
PutawayRequestMainDO mainDO = validatePutawayRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_CANNOT_HANDLE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, putawayRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, "putawayRequest", "执行了上架申请", TrendsTypeEnum.UPDATE); |
|
|
|
return putawayRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer abortPutawayRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
PutawayRequestMainDO mainDO = validatePutawayRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.reject(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PUTAWAY_REQUEST_CANNOT_ABORT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "inspectRequest", "审批拒绝了到货校验申请", TrendsTypeEnum.UPDATE); |
|
|
|
return putawayRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成上架任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* @param mainDO 上架主 |
|
|
|
* @param detailDOList 上架子 |
|
|
|
*/ |
|
|
|
private void generateJob(PutawayRequestMainDO mainDO, List<PutawayRequestDetailDO> detailDOList) { |
|
|
|
//跳过任务直接生成记录
|
|
|
|
if("TRUE".equals(mainDO.getDirectCreateRecord())) { |
|
|
|
PutawayRecordMainCreateReqVO putawayRecordMainCreateReqVO = new PutawayRecordMainCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(mainDO, putawayRecordMainCreateReqVO); |
|
|
|
putawayRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.INSPECT_RECORD.getCode()); |
|
|
|
putawayRecordMainCreateReqVO.setNumber(number); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRecord"); |
|
|
|
putawayRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
putawayRecordMainMapper.insert(PutawayRecordMainConvert.INSTANCE.convert(putawayRecordMainCreateReqVO)); |
|
|
|
for(PutawayRequestDetailDO putawayRequestDetailDO : detailDOList) { |
|
|
|
PutawayRecordDetailCreateReqVO putawayRecordDetailCreateReqVO = new PutawayRecordDetailCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(putawayRequestDetailDO, putawayRecordDetailCreateReqVO); |
|
|
|
putawayRecordDetailCreateReqVO.setNumber(number); |
|
|
|
putawayRecordDetailMapper.insert(PutawayRecordDetailConvert.INSTANCE.convert(putawayRecordDetailCreateReqVO)); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
List<ExpectoutCreateReqVO> expectoutCreateReqVOList = new ArrayList<>(); |
|
|
|
PutawayJobMainDO putawayJobMainDO = PutawayJobMainConvert.INSTANCE.convert(mainDO); |
|
|
|
putawayJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.INSPECT_JOB.getCode()); |
|
|
|
putawayJobMainDO.setNumber(number); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectJob"); |
|
|
|
putawayJobMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
putawayJobMainMapper.insert(putawayJobMainDO); |
|
|
|
List<PutawayJobDetailDO> putawayJobDetailDOList = new ArrayList<>(); |
|
|
|
for(PutawayRequestDetailDO putawayRequestDetailDO : detailDOList) { |
|
|
|
PutawayJobDetailDO putawayJobDetailDO = PutawayJobDetailConvert.INSTANCE.convert(putawayRequestDetailDO); |
|
|
|
putawayJobDetailDO.setNumber(number); |
|
|
|
putawayJobDetailDO.setMasterId(putawayJobDetailDO.getId()); |
|
|
|
putawayJobDetailDOList.add(putawayJobDetailDO); |
|
|
|
//预计出
|
|
|
|
ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(putawayJobDetailDO, expectoutCreateReqVO); |
|
|
|
expectoutCreateReqVO.setJobNumber(number); |
|
|
|
expectoutCreateReqVOList.add(expectoutCreateReqVO); |
|
|
|
} |
|
|
|
putawayJobDetailMapper.insertBatch(putawayJobDetailDOList); |
|
|
|
//增加预计出
|
|
|
|
expectoutService.createExpectout(expectoutCreateReqVOList); |
|
|
|
trendsApi.createTrends(putawayJobMainDO.getId(), "putawayJob", "上架申请生成上架任务", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
// 新增校验
|
|
|
|
private PutawayRequestMainDO validatorToCreate(PutawayRequestMainCreateReqVO createReqVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO) { |
|
|
|
PutawayRequestMainDO mainDo = validatorMainMethod(createReqVO, businesstypeDO, requestsettingDO); |
|
|
|