|
|
@ -1,68 +1,68 @@ |
|
|
|
package com.win.module.wms.service.inventorymoveRequest; |
|
|
|
|
|
|
|
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.pojo.PageResult; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
|
import com.win.module.infra.api.trends.TrendsApi; |
|
|
|
import com.win.module.infra.enums.TrendsTypeEnum; |
|
|
|
import com.win.module.system.api.dict.DictDataApi; |
|
|
|
import com.win.module.system.api.dict.dto.DictDataRespDTO; |
|
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.api.user.AdminUserApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO; |
|
|
|
import com.win.module.wms.controller.expectout.vo.ExpectoutCreateReqVO; |
|
|
|
import com.win.module.wms.controller.inventorymoveRecord.vo.InventorymoveRecordDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.inventorymoveRecord.vo.InventorymoveRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.inventorymoveRequest.vo.*; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestDetailUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainBaseVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainUpdateReqVO; |
|
|
|
import com.win.module.wms.convert.deliverJob.DeliverJobMainConvert; |
|
|
|
import com.win.module.wms.convert.inventorymoveJob.InventorymoveJobMainConvert; |
|
|
|
import com.win.module.wms.convert.inventorymoveRecord.InventorymoveRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.inventorymoveRecord.InventorymoveRecordMainConvert; |
|
|
|
import com.win.module.wms.convert.inventorymoveRequest.InventorymoveRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.inventorymoveRequest.InventorymoveRequestMainConvert; |
|
|
|
import com.win.module.wms.convert.productputawayRequest.ProductputawayRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.productputawayRequest.ProductputawayRequestMainConvert; |
|
|
|
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.deliverJob.DeliverJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverJob.DeliverJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.inventorymoveRequest.InventorymoveRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.inventorymoveJob.InventorymoveJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.inventorymoveJob.InventorymoveJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.inventorymoveRequest.InventorymoveRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.inventorymoveRequest.InventorymoveRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayRequest.ProductputawayRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayRequest.ProductputawayRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveJob.InventorymoveJobDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveJob.InventorymoveJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveRecord.InventorymoveRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveRecord.InventorymoveRecordMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveRequest.InventorymoveRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorymoveRequest.InventorymoveRequestMainMapper; |
|
|
|
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.expectin.ExpectinService; |
|
|
|
import com.win.module.wms.service.expectout.ExpectoutService; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.jobsetting.JobsettingService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
|
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; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.validation.Validator; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
@ -90,12 +90,16 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ItembasicService itembasicService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private InventorymoveRecordMainMapper inventorymoveRecordMainMapper; |
|
|
|
@Resource |
|
|
|
private InventorymoveRecordDetailMapper inventorymoveRecordDetailMapper; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
@Resource |
|
|
|
private JobsettingService jobsettingService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private RecordsettingService recordsettingService; |
|
|
|
@Resource |
|
|
|
private RequestsettingService requestsettingService; |
|
|
|
@Resource |
|
|
@ -108,29 +112,31 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
private ExpectoutService expectoutService; |
|
|
|
@Resource |
|
|
|
private ExpectinService expectinService; |
|
|
|
@Resource |
|
|
|
private AdminUserApi userApi; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long createInventorymoveRequestMain(InventorymoveRequestMainCreateReqVO createReqVO) { |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("MoveRequest"); |
|
|
|
// 插入
|
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMain = validatorToCreate(createReqVO,requestsettingDO); |
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(inventorymoveRequestMain.getStatus())) { |
|
|
|
generateJob(inventorymoveRequestMain,inventorymoveRequestDetailMapper.selectList(inventorymoveRequestMain.getId())); |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMain = validatorToCreate(createReqVO); |
|
|
|
if (RequestStatusEnum.HANDLING.getCode().equals(inventorymoveRequestMain.getStatus())) { |
|
|
|
generateJob(inventorymoveRequestMain, inventorymoveRequestDetailMapper.selectList(inventorymoveRequestMain.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "MoveRequest", "增加了库存移动申请", TrendsTypeEnum.CREATE); |
|
|
|
trendsApi.createTrends(inventorymoveRequestMain.getId(), inventorymoveRequestMain.getBusinessType(), "增加了库存移动申请", TrendsTypeEnum.CREATE); |
|
|
|
return inventorymoveRequestMain.getId(); |
|
|
|
} |
|
|
|
private InventorymoveRequestMainDO validatorToCreate(InventorymoveRequestMainCreateReqVO createReqVO, RequestsettingDO requestsettingDO) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("MoveRequest"); |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); |
|
|
|
|
|
|
|
private InventorymoveRequestMainDO validatorToCreate(InventorymoveRequestMainCreateReqVO createReqVO) { |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validateMainMethod(createReqVO); |
|
|
|
List<InventorymoveRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<InventorymoveRequestDetailDO> subDOList = InventorymoveRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for(InventorymoveRequestDetailDO inventorymoveRequestDetailDO: subDOList){ |
|
|
|
validateDetailMethod(inventorymoveRequestDetailDO,businesstypeDO,inventorymoveRequestMainDO); |
|
|
|
for (InventorymoveRequestDetailDO inventorymoveRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(inventorymoveRequestDetailDO, inventorymoveRequestMainDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.INVENTORY_MOVE_REQUEST.getCode()); |
|
|
|
inventorymoveRequestMainDO.setNumber(number); |
|
|
|
inventorymoveRequestMainMapper.insert(inventorymoveRequestMainDO); |
|
|
|
for( InventorymoveRequestDetailDO inventorymoveRequestDetailDO : subDOList){ |
|
|
|
for (InventorymoveRequestDetailDO inventorymoveRequestDetailDO : subDOList) { |
|
|
|
inventorymoveRequestDetailDO.setMasterId(inventorymoveRequestMainDO.getId()); |
|
|
|
inventorymoveRequestDetailDO.setNumber(inventorymoveRequestMainDO.getNumber()); |
|
|
|
} |
|
|
@ -138,37 +144,81 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
return inventorymoveRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
private void validateDetailMethod(InventorymoveRequestDetailDO inventorymoveRequestDetailDO, BusinesstypeDO businesstypeDO, InventorymoveRequestMainDO productputawayRequestMainDO) { |
|
|
|
private void validateDetailMethod(InventorymoveRequestDetailDO inventorymoveRequestDetailDO, InventorymoveRequestMainDO inventorymoveRequestMainDO) { |
|
|
|
inventorymoveRequestDetailDO.setCreateTime(LocalDateTime.now()); |
|
|
|
ItembasicDO itembasic = validteitem(inventorymoveRequestDetailDO); |
|
|
|
inventorymoveRequestDetailDO.setItemDesc1(itembasic.getDesc1()); |
|
|
|
inventorymoveRequestDetailDO.setItemDesc2(itembasic.getDesc2()); |
|
|
|
inventorymoveRequestDetailDO.setItemName(itembasic.getName()); |
|
|
|
inventorymoveRequestDetailDO.setProjectCode(itembasic.getProject()); |
|
|
|
inventorymoveRequestDetailDO.setUom(itembasic.getUom()); |
|
|
|
jobUtils.ifInToLocationType(inventorymoveRequestDetailDO.getFromLocationCode(), businesstypeDO); |
|
|
|
jobUtils.ifOutInventoryStatuses(inventorymoveRequestDetailDO.getFromInventoryStatus(), businesstypeDO); |
|
|
|
validatelocation(inventorymoveRequestMainDO, inventorymoveRequestDetailDO); |
|
|
|
ItembasicDO itembasicDO = validteitembasic(inventorymoveRequestDetailDO); |
|
|
|
//校验库存余额是否存在
|
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
//隔离转合格申请
|
|
|
|
if ("HOLD".equals(inventorymoveRequestDetailDO.getFromInventoryStatus()) && "OK".equals(inventorymoveRequestDetailDO.getToInventoryStatus())) { |
|
|
|
inventoryStatus.add("HOLD"); |
|
|
|
String OkToScrapRequest = "HoldToOkRequest"; |
|
|
|
CreateBusinessTypeAndRequestSetting(inventorymoveRequestMainDO,inventorymoveRequestDetailDO,itembasicDO,OkToScrapRequest); |
|
|
|
} |
|
|
|
//合格转隔离申请
|
|
|
|
if ("OK".equals(inventorymoveRequestDetailDO.getFromInventoryStatus()) && "HOLD".equals(inventorymoveRequestDetailDO.getToInventoryStatus())) { |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
String OkToScrapRequest = "OkToHoldRequest"; |
|
|
|
CreateBusinessTypeAndRequestSetting(inventorymoveRequestMainDO,inventorymoveRequestDetailDO,itembasicDO,OkToScrapRequest); |
|
|
|
} |
|
|
|
//隔离转报废申请
|
|
|
|
if ("HOLD".equals(inventorymoveRequestDetailDO.getFromInventoryStatus()) && "SCRAP".equals(inventorymoveRequestDetailDO.getToInventoryStatus())) { |
|
|
|
inventoryStatus.add("HOLD"); |
|
|
|
String OkToScrapRequest = "HoldToScrapRequest"; |
|
|
|
CreateBusinessTypeAndRequestSetting(inventorymoveRequestMainDO,inventorymoveRequestDetailDO,itembasicDO,OkToScrapRequest); |
|
|
|
} |
|
|
|
//报废转隔离申请
|
|
|
|
if ("SCRAP".equals(inventorymoveRequestDetailDO.getFromInventoryStatus())&& "HOLD".equals(inventorymoveRequestDetailDO.getToInventoryStatus())) { |
|
|
|
inventoryStatus.add("SCRAP"); |
|
|
|
String OkToScrapRequest = "ScrapToHoldRequest"; |
|
|
|
CreateBusinessTypeAndRequestSetting(inventorymoveRequestMainDO,inventorymoveRequestDetailDO,itembasicDO,OkToScrapRequest); |
|
|
|
} |
|
|
|
//合格转报废申请
|
|
|
|
if ("OK".equals(inventorymoveRequestDetailDO.getFromInventoryStatus())&& "SCRAP".equals(inventorymoveRequestDetailDO.getToInventoryStatus())) { |
|
|
|
inventoryStatus.add("SCRAP"); |
|
|
|
String OkToScrapRequest = "OkToScrapRequest"; |
|
|
|
CreateBusinessTypeAndRequestSetting(inventorymoveRequestMainDO,inventorymoveRequestDetailDO,itembasicDO,OkToScrapRequest); |
|
|
|
} |
|
|
|
validtebalance(inventorymoveRequestDetailDO); |
|
|
|
|
|
|
|
inventorymoveRequestDetailDO.setToBatch(inventorymoveRequestDetailDO.getFromBatch()); |
|
|
|
inventorymoveRequestDetailDO.setToContainerNumber(inventorymoveRequestDetailDO.getFromContainerNumber()); |
|
|
|
inventorymoveRequestDetailDO.setToPackingNumber(inventorymoveRequestDetailDO.getFromPackingNumber()); |
|
|
|
} |
|
|
|
private InventorymoveRequestMainDO validateMainMethod(InventorymoveRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO){ |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = InventorymoveRequestMainConvert.INSTANCE.convert(baseVO); |
|
|
|
inventorymoveRequestMainDO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
inventorymoveRequestMainDO.setCreateTime(LocalDateTime.now()); |
|
|
|
inventorymoveRequestMainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
|
|
|
|
//子表校验来源库位基础信息
|
|
|
|
private void CreateBusinessTypeAndRequestSetting(InventorymoveRequestMainDO inventorymoveRequestMainDO, InventorymoveRequestDetailDO inventorymoveRequestDetailDO, ItembasicDO itembasicDO, String businesstypeCode) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType(businesstypeCode); |
|
|
|
inventorymoveRequestMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
if (itembasicDO != null){ |
|
|
|
jobUtils.ifInType(itembasicDO.getType(), businesstypeDO); |
|
|
|
} |
|
|
|
jobUtils.ifInInventoryStatuses(inventorymoveRequestDetailDO.getFromInventoryStatus(), businesstypeDO); |
|
|
|
jobUtils.ifInFromLocationType(inventorymoveRequestDetailDO.getFromLocationCode(), businesstypeDO); |
|
|
|
jobUtils.ifInToLocationType(inventorymoveRequestDetailDO.getToLocationCode(), businesstypeDO); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist(businesstypeCode); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); |
|
|
|
inventorymoveRequestMainDO.setStatus(requestStatusState.getState().getCode());inventorymoveRequestMainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
inventorymoveRequestMainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
inventorymoveRequestMainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
inventorymoveRequestMainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
inventorymoveRequestMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
inventorymoveRequestMainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
inventorymoveRequestMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
inventorymoveRequestMainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
inventorymoveRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
return inventorymoveRequestMainDO; |
|
|
|
|
|
|
|
inventorymoveRequestMainDO.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses()); |
|
|
|
inventorymoveRequestMainDO.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
inventorymoveRequestMainDO.setRequestTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); |
|
|
|
inventorymoveRequestMainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private InventorymoveRequestMainDO validateMainMethod(InventorymoveRequestMainBaseVO baseVO) { |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = InventorymoveRequestMainConvert.INSTANCE.convert(baseVO); |
|
|
|
inventorymoveRequestMainDO.setCreateTime(LocalDateTime.now()); |
|
|
|
return inventorymoveRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateInventorymoveRequestMain(InventorymoveRequestMainUpdateReqVO updateReqVO) { |
|
|
@ -176,22 +226,22 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
// 校验存在
|
|
|
|
validateInventorymoveRequestMainExists(updateReqVO.getId()); |
|
|
|
// 更新
|
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validatorToUpdate(updateReqVO, requestsettingDO); |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validatorToUpdate(updateReqVO); |
|
|
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(inventorymoveRequestMainDO.getStatus())) { |
|
|
|
if (RequestStatusEnum.HANDLING.getCode().equals(inventorymoveRequestMainDO.getStatus())) { |
|
|
|
|
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "MoveRequest", "增加了库存移动申请", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
private InventorymoveRequestMainDO validatorToUpdate(InventorymoveRequestMainUpdateReqVO updateReqVO, RequestsettingDO requestsettingDO) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("MoveRequest"); |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validateMainMethod(updateReqVO,businesstypeDO,requestsettingDO); |
|
|
|
|
|
|
|
private InventorymoveRequestMainDO validatorToUpdate(InventorymoveRequestMainUpdateReqVO updateReqVO) { |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = validateMainMethod(updateReqVO); |
|
|
|
//子表校验
|
|
|
|
List<InventorymoveRequestDetailUpdateReqVO> subList = updateReqVO.getSubList(); |
|
|
|
if(!subList.isEmpty()) { |
|
|
|
if (!subList.isEmpty()) { |
|
|
|
List<InventorymoveRequestDetailDO> subDOList = InventorymoveRequestDetailConvert.INSTANCE.convertList05(subList); |
|
|
|
for (InventorymoveRequestDetailDO inventorymoveRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(inventorymoveRequestDetailDO, businesstypeDO, inventorymoveRequestMainDO); |
|
|
|
validateDetailMethod(inventorymoveRequestDetailDO, inventorymoveRequestMainDO); |
|
|
|
} |
|
|
|
inventorymoveRequestDetailMapper.updateBatch(subDOList); |
|
|
|
} |
|
|
@ -200,7 +250,6 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void deleteInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
@ -209,15 +258,15 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
inventorymoveRequestMainMapper.deleteById(id); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateInventorymoveRequestMainExists(Long id) { |
|
|
|
if (inventorymoveRequestMainMapper.selectById(id) == null) { |
|
|
|
private InventorymoveRequestMainDO validateInventorymoveRequestMainExists(Long id) { |
|
|
|
InventorymoveRequestMainDO inventorymoveRequestMainDO = inventorymoveRequestMainMapper.selectById(id); |
|
|
|
if (inventorymoveRequestMainDO == null) { |
|
|
|
throw exception(INVENTORYMOVE_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} else { |
|
|
|
return inventorymoveRequestMainDO; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DictDataApi dictDataApi; |
|
|
|
|
|
|
|
@Override |
|
|
|
public InventorymoveRequestMainDO getInventorymoveRequestMain(Long id) { |
|
|
|
return inventorymoveRequestMainMapper.selectById(id); |
|
|
@ -243,27 +292,14 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
return inventorymoveRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
private String validateInventorymoveRequestMainImport(InventorymoveRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
/** |
|
|
|
* 主表导入验证 |
|
|
|
* |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateInventorymoveRequestMainImport(InventorymoveRequestMainDO mainDo) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
mainDo.setCreateTime(LocalDateTime.now()); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("MoveRequest"); |
|
|
|
if (requestsettingDO == null) { |
|
|
|
message.append("未查找到制品上架申请的相关申请设置"); |
|
|
|
} else { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
if (businesstypeDO == null) { |
|
|
|
message.append("根据单据设置未查找到制品上架申请的相关业务类型"); |
|
|
|
} else { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
@ -271,89 +307,273 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
} |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
private InventorymoveRequestDetailDO validatelocation(InventorymoveRequestDetailDO detailDo){ |
|
|
|
LocationDO locationDO = locationService.selectLocation(detailDo.getFromLocationCode()); |
|
|
|
if (locationDO != null) { |
|
|
|
detailDo.setFromLocationCode(locationDO.getCode()); |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验来源/目标库位基础信息 |
|
|
|
* |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validatelocation(InventorymoveRequestMainDO mainDO, InventorymoveRequestDetailDO detailDo) { |
|
|
|
LocationDO fromLocationDO = locationService.selectLocation(detailDo.getFromLocationCode()); |
|
|
|
if (fromLocationDO != null) { |
|
|
|
detailDo.setFromLocationCode(fromLocationDO.getCode()); |
|
|
|
mainDO.setFromWarehouseCode(fromLocationDO.getWarehouseCode()); |
|
|
|
mainDO.setFromLocationTypes(fromLocationDO.getType()); |
|
|
|
mainDO.setFromAreaCodes(fromLocationDO.getAreaCode()); |
|
|
|
} |
|
|
|
LocationDO toLocationDO = locationService.selectLocation(detailDo.getToLocationCode()); |
|
|
|
if (toLocationDO != null) { |
|
|
|
detailDo.setToLocationCode(toLocationDO.getCode()); |
|
|
|
mainDO.setToWarehouseCode(toLocationDO.getWarehouseCode()); |
|
|
|
mainDO.setToLocationTypes(fromLocationDO.getType()); |
|
|
|
mainDO.setToAreaCodes(toLocationDO.getAreaCode()); |
|
|
|
} |
|
|
|
return detailDo; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ItembasicDO validteitem(InventorymoveRequestDetailDO detailDo) { |
|
|
|
/** |
|
|
|
* 校验物品基础信息 |
|
|
|
* |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private ItembasicDO validteitembasic(InventorymoveRequestDetailDO detailDo) { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); |
|
|
|
detailDo.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDo.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDo.setItemName(itembasicDO.getName()); |
|
|
|
detailDo.setUom(itembasicDO.getUom()); |
|
|
|
detailDo.setProjectCode(itembasicDO.getProject()); |
|
|
|
return itembasicDO; |
|
|
|
} |
|
|
|
|
|
|
|
private void validtebalance(InventorymoveRequestDetailDO detailDo){ |
|
|
|
/** |
|
|
|
* 校验库存余额是否存在 |
|
|
|
* |
|
|
|
* @param detailDo |
|
|
|
*/ |
|
|
|
private void validtebalance(InventorymoveRequestDetailDO detailDo) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add(detailDo.getFromInventoryStatus()); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getFromLocationCode(), inventoryStatus); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private String validateInventorymoveRequestDetailImport(InventorymoveRequestDetailDO detailDo, InventorymoveRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
/** |
|
|
|
* 导入子表校验 |
|
|
|
* @param mainDO |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateInventorymoveRequestDetailImport(InventorymoveRequestMainDO mainDO, InventorymoveRequestDetailDO detailDo) { |
|
|
|
String messageDetail = new String(); |
|
|
|
BusinesstypeDO businesstypeDO; |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
try{ |
|
|
|
detailDo.setCreateTime(LocalDateTime.now()); |
|
|
|
detailDo = validatelocation(detailDo); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
try { |
|
|
|
validatelocation(mainDO, detailDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
validteitembasic(detailDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
// mainDo.setRequestTime(LocalDateTime.now());
|
|
|
|
// if (businesstypeDO == null) {
|
|
|
|
// message.append("根据单据设置未查找到制品上架申请的相关业务类型");
|
|
|
|
// } else {
|
|
|
|
// mainDo.setBusinessType(businesstypeDO.getCode());
|
|
|
|
// mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
|
|
|
|
// mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes());
|
|
|
|
// mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes());
|
|
|
|
// mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes());
|
|
|
|
// mainDo.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses());
|
|
|
|
// mainDo.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses());
|
|
|
|
// }
|
|
|
|
//隔离转合格申请
|
|
|
|
if ("HOLD".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("HOLD"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_OK_REQUEST.getCode()); |
|
|
|
detailDo.setNumber(number); |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOkRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
validationBusinesstype(detailDo,businesstypeDO,messageDetail); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("HoldToOkRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
mainDO.setRequestTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
} |
|
|
|
try{ |
|
|
|
ItembasicDO itembasic = validteitem(detailDo); |
|
|
|
detailDo.setItemDesc1(itembasic.getDesc1()); |
|
|
|
detailDo.setItemDesc2(itembasic.getDesc2()); |
|
|
|
detailDo.setItemName(itembasic.getName()); |
|
|
|
detailDo.setProjectCode(itembasic.getProject()); |
|
|
|
detailDo.setUom(itembasic.getUom()); |
|
|
|
|
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
//合格转隔离申请
|
|
|
|
if ("OK".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
validationBusinesstype(detailDo,businesstypeDO,messageDetail); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
jobUtils.ifInToLocationType(detailDo.getFromLocationCode(), businesstypeDO); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
try{ |
|
|
|
jobUtils.ifOutInventoryStatuses(detailDo.getFromInventoryStatus(), businesstypeDO); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
validtebalance(detailDo); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
|
|
|
|
//隔离转报废申请
|
|
|
|
if ("HOLD".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("HOLD"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToScrapRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
validationBusinesstype(detailDo,businesstypeDO,messageDetail); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("HoldToScrapRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//报废转隔离申请
|
|
|
|
if ("SCRAP".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("SCRAP"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.SCRAP_TO_HOLD_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ScrapToHoldRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
validationBusinesstype(detailDo,businesstypeDO,messageDetail); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ScrapToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
//合格转报废
|
|
|
|
if ("Ok".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("SCRAP"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_SCRAP_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
|
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToScrapRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
validationBusinesstype(detailDo,businesstypeDO,messageDetail); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToScrapRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
validtebalance(detailDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, detailDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
return messageDetail.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
//根据业务类型进行对应校验
|
|
|
|
private void validationBusinesstype(InventorymoveRequestDetailDO detailDo, BusinesstypeDO businesstypeDO, String messageDetail) { |
|
|
|
try { |
|
|
|
jobUtils.ifInFromLocationType(detailDo.getFromLocationCode(), businesstypeDO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
jobUtils.ifInToLocationType(detailDo.getToLocationCode(), businesstypeDO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
jobUtils.ifOutInventoryStatuses(detailDo.getFromInventoryStatus(), businesstypeDO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入功能 |
|
|
|
* @param datas 导入库存转移申请信息列表 |
|
|
|
* @param mode 导入模式1更新2追加3覆盖 |
|
|
|
* @param fromInventoryStatus |
|
|
|
* @param toInventoryStatus |
|
|
|
* @param updatePart 是否支持更新 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<InventorymoveRequestMainImportErrorVO> importInventorymoveRequestMainList(List<InventorymoveRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
public List<InventorymoveRequestMainImportErrorVO> importInventorymoveRequestMainList(List<InventorymoveRequestMainCreateReqVO> datas, Integer mode, String fromInventoryStatus , String toInventoryStatus ,boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
|
throw exception(INVENTORYMOVE_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
|
} |
|
|
|
List<InventorymoveRequestMainImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("MoveRequest"); |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
//主表的验证
|
|
|
|
InventorymoveRequestMainDO mainDo = InventorymoveRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = validateInventorymoveRequestMainImport(mainDo, businesstypeDO); |
|
|
|
String messageMain = validateInventorymoveRequestMainImport(mainDo); |
|
|
|
//TODO 暂时不考虑在途库
|
|
|
|
// if ("TRUE".equals(businesstypeDO.getUseOnTheWay())) {
|
|
|
|
// mainDo.setUseOnTheWayLocation("FAC_INTRANSIT");
|
|
|
|
// }
|
|
|
|
//子表的验证
|
|
|
|
List<InventorymoveRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<InventorymoveRequestDetailDO> subDOList = InventorymoveRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
boolean flag = true; |
|
|
|
for (InventorymoveRequestDetailDO purchaseDetailDO : subDOList) { |
|
|
|
String messageDetail = validateInventorymoveRequestDetailImport(purchaseDetailDO, mainDo, businesstypeDO); |
|
|
|
for (InventorymoveRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setFromInventoryStatus(fromInventoryStatus); |
|
|
|
detailDO.setToInventoryStatus(toInventoryStatus); |
|
|
|
String messageDetail = validateInventorymoveRequestDetailImport(mainDo, detailDO); |
|
|
|
//校验来源/目标库位基础信息
|
|
|
|
if (!"".equals(messageMain) ||!"".equals(messageDetail) ) { |
|
|
|
InventorymoveRequestMainImportErrorVO importErrorVO = InventorymoveRequestMainConvert.INSTANCE.convert(createReqVO, purchaseDetailDO); |
|
|
|
if (!"".equals(messageMain) || !"".equals(messageDetail)) { |
|
|
|
InventorymoveRequestMainImportErrorVO importErrorVO = InventorymoveRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); |
|
|
|
importErrorVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
@ -363,13 +583,18 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
} |
|
|
|
//写入数据
|
|
|
|
if (flag) { |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.INVENTORY_CHANGE_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(mainDo.getAutoCommit(), mainDo.getAutoAgree(), mainDo.getAutoExecute()); |
|
|
|
mainDo.setStatus(requestStatusState.getState().getCode()); |
|
|
|
mainDo.setRequestTime(LocalDateTime.now()); |
|
|
|
mainDo.setDepartmentCode(userApi.getUser(Long.valueOf(mainDo.getCreator())).getDeptId().toString()); |
|
|
|
inventorymoveRequestMainMapper.insert(mainDo); |
|
|
|
for (InventorymoveRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDo.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
detailDO.setNumber(mainDo.getNumber()); |
|
|
|
detailDO.setToBatch(detailDO.getFromBatch()); |
|
|
|
detailDO.setToPackingNumber(detailDO.getFromPackingNumber()); |
|
|
|
detailDO.setToContainerNumber(detailDO.getFromContainerNumber()); |
|
|
|
} |
|
|
|
inventorymoveRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
@ -378,27 +603,95 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成采购收货任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* @param mainDO 采购收货主 |
|
|
|
* @param detailDOList 采购收货子 |
|
|
|
* 生成库存转移任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* |
|
|
|
* @param mainDO 库存转移申请主 |
|
|
|
* @param detailDOList 库存转移申请子 |
|
|
|
*/ |
|
|
|
private void generateJob(InventorymoveRequestMainDO mainDO, List<InventorymoveRequestDetailDO> detailDOList) { |
|
|
|
String number = ""; |
|
|
|
JobsettingDO jobsettingDO = null; |
|
|
|
RecordsettingDO recordsettingDO = null; |
|
|
|
BusinesstypeDO businesstypeDO = null; |
|
|
|
//跳过任务直接生成记录
|
|
|
|
if ("TRUE".equals(mainDO.getDirectCreateRecord())) { |
|
|
|
InventorymoveRecordMainCreateReqVO inventorymoveRecordMainCreateReqVO = new InventorymoveRecordMainCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(mainDO, inventorymoveRecordMainCreateReqVO); |
|
|
|
inventorymoveRecordMainCreateReqVO.setId(null); |
|
|
|
inventorymoveRecordMainCreateReqVO.setCreator(null); |
|
|
|
inventorymoveRecordMainCreateReqVO.setCreateTime(null); |
|
|
|
inventorymoveRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); |
|
|
|
if("HoldToOkRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_OK_RECORD.getCode()); |
|
|
|
recordsettingDO = recordsettingService.selectRecordsettingExist("HoldToOkRecord"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOkRecord"); |
|
|
|
} else if("OkToHoldRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_RECORD.getCode()); |
|
|
|
recordsettingDO = recordsettingService.selectRecordsettingExist("OkToHoldRecord"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRecord"); |
|
|
|
} else if("HoldToScrapRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_RECORD.getCode()); |
|
|
|
recordsettingDO = recordsettingService.selectRecordsettingExist("HoldToScrapRecord"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToScrapRecord"); |
|
|
|
} else if("ScrapToHoldRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.SCRAP_TO_HOLD_RECORD.getCode()); |
|
|
|
recordsettingDO = recordsettingService.selectRecordsettingExist("ScrapToHoldRecord"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ScrapToHoldRecord"); |
|
|
|
} else if("OkToScrapRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_SCRAP_RECORD.getCode()); |
|
|
|
recordsettingDO = recordsettingService.selectRecordsettingExist("OkToScrapRecord"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToScrapRecord"); |
|
|
|
} |
|
|
|
inventorymoveRecordMainCreateReqVO.setNumber(number); |
|
|
|
inventorymoveRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
inventorymoveRecordMainCreateReqVO.setInterfaceType(recordsettingDO.getInterfaceType()); |
|
|
|
inventorymoveRecordMainMapper.insert(InventorymoveRecordMainConvert.INSTANCE.convert(inventorymoveRecordMainCreateReqVO)); |
|
|
|
for (InventorymoveRequestDetailDO inventorymoveRequestDetailDO : detailDOList) { |
|
|
|
InventorymoveRecordDetailCreateReqVO inventorymoveRecordDetailCreateReqVO = new InventorymoveRecordDetailCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(inventorymoveRequestDetailDO, inventorymoveRecordDetailCreateReqVO); |
|
|
|
inventorymoveRecordDetailCreateReqVO.setId(null); |
|
|
|
inventorymoveRecordDetailCreateReqVO.setCreator(null); |
|
|
|
inventorymoveRecordDetailCreateReqVO.setCreateTime(null); |
|
|
|
inventorymoveRecordDetailCreateReqVO.setNumber(number); |
|
|
|
inventorymoveRecordDetailMapper.insert(InventorymoveRecordDetailConvert.INSTANCE.convert(inventorymoveRecordDetailCreateReqVO)); |
|
|
|
} |
|
|
|
trendsApi.createTrends(InventorymoveRecordMainConvert.INSTANCE.convert(inventorymoveRecordMainCreateReqVO).getId(), recordsettingDO.getCode(), "库存转移申请生成库存转移记录", TrendsTypeEnum.CREATE); |
|
|
|
return; |
|
|
|
} |
|
|
|
InventorymoveJobMainDO inventorymoveJobMainDO = InventorymoveJobMainConvert.INSTANCE.convert(mainDO); |
|
|
|
BeanUtils.copyProperties(mainDO, inventorymoveJobMainDO); |
|
|
|
inventorymoveJobMainDO.setRequestNumber(mainDO.getNumber()); |
|
|
|
inventorymoveJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_JOB.getCode()); |
|
|
|
if("HoldToOkRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_OK_JOB.getCode()); |
|
|
|
jobsettingDO = jobsettingService.selectJobsettingExist("HoldToOkJob"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOkJob"); |
|
|
|
} else if("OkToHoldRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_JOB.getCode()); |
|
|
|
jobsettingDO = jobsettingService.selectJobsettingExist("OkToHoldJob"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldJob"); |
|
|
|
} else if("HoldToScrapRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_JOB.getCode()); |
|
|
|
jobsettingDO = jobsettingService.selectJobsettingExist("HoldToScrapJob"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToScrapJob"); |
|
|
|
} else if("ScrapToHoldRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.SCRAP_TO_HOLD_JOB.getCode()); |
|
|
|
jobsettingDO = jobsettingService.selectJobsettingExist("ScrapToHoldJob"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ScrapToHoldJob"); |
|
|
|
} else if("OkToScrapRequest".equals(mainDO.getBusinessType())){ |
|
|
|
number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_SCRAP_JOB.getCode()); |
|
|
|
jobsettingDO = jobsettingService.selectJobsettingExist("OkToScrapJob"); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToScrapJob"); |
|
|
|
} |
|
|
|
inventorymoveJobMainDO.setNumber(number); |
|
|
|
inventorymoveJobMainDO.setId(null); |
|
|
|
inventorymoveJobMainDO.setRequestTime(mainDO.getRequestTime()); |
|
|
|
inventorymoveJobMainDO.setRequestDueTime(mainDO.getDueTime()); |
|
|
|
inventorymoveJobMainDO.setId(null); |
|
|
|
inventorymoveJobMainDO.setCreator(null); |
|
|
|
inventorymoveJobMainDO.setCreateTime(null); |
|
|
|
inventorymoveJobMainDO.setUpdater(null); |
|
|
|
inventorymoveJobMainDO.setUpdateTime(null); |
|
|
|
inventorymoveJobMainDO.setStatus("1"); |
|
|
|
// 获取任务单据设置
|
|
|
|
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("InventorymoveJob"); |
|
|
|
inventorymoveJobMainDO.setExpiredTime(inventorymoveJobMainDO.getRequestDueTime()); |
|
|
|
inventorymoveJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); |
|
|
|
inventorymoveJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); |
|
|
|
inventorymoveJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); |
|
|
@ -410,33 +703,31 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
inventorymoveJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); |
|
|
|
inventorymoveJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InventorymoveJob"); |
|
|
|
inventorymoveJobMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
inventorymoveJobMainDO.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses()); |
|
|
|
inventorymoveJobMainDO.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
inventorymoveJobMainMapper.insert(inventorymoveJobMainDO); |
|
|
|
List<ExpectoutCreateReqVO> expectpoutCreateReqVOList = new ArrayList<>(); |
|
|
|
List<ExpectinCreateReqVO> expectpinCreateReqVOList = new ArrayList<>(); |
|
|
|
List<InventorymoveJobDetailDO> deliverJobDetailDOList = new ArrayList<>(); |
|
|
|
detailDOList.forEach(item -> { |
|
|
|
// 根据批次策略/下架策略 返回 库存余额DO
|
|
|
|
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),"OK",item.getProjectCode(),item.getQty(),null); |
|
|
|
// 根据 查询出所需数据 解析成 任务子表数据
|
|
|
|
balanceDOListJob.forEach(balanceDOItem -> { |
|
|
|
InventorymoveJobDetailDO inventorymoveJobDetailDO = new InventorymoveJobDetailDO(); |
|
|
|
BeanUtils.copyProperties(item, inventorymoveJobDetailDO); |
|
|
|
inventorymoveJobDetailDO.setId(null); |
|
|
|
inventorymoveJobDetailDO.setCreateTime(null); |
|
|
|
inventorymoveJobDetailDO.setCreateTime(LocalDateTime.now()); |
|
|
|
inventorymoveJobDetailDO.setCreator(null); |
|
|
|
inventorymoveJobDetailDO.setUpdateTime(null); |
|
|
|
inventorymoveJobDetailDO.setUpdater(null); |
|
|
|
if("TRUE".equals(businesstypeDO.getUseOnTheWay())){ |
|
|
|
inventorymoveJobDetailDO.setToLocationCode("FAC_INTRANS"); |
|
|
|
}else { |
|
|
|
inventorymoveJobDetailDO.setToLocationCode(null); |
|
|
|
} |
|
|
|
inventorymoveJobDetailDO.setPackingNumber(balanceDOItem.getPackingNumber()); |
|
|
|
inventorymoveJobDetailDO.setContainerNumber(balanceDOItem.getContainerNumber()); |
|
|
|
inventorymoveJobDetailDO.setBatch(balanceDOItem.getBatch()); |
|
|
|
inventorymoveJobDetailDO.setFromLocationCode(balanceDOItem.getLocationCode()); |
|
|
|
// if ("TRUE".equals(businesstypeDO.getUseOnTheWay())) {
|
|
|
|
// inventorymoveJobDetailDO.setToLocationCode("FAC_INTRANS");
|
|
|
|
// } else {
|
|
|
|
// inventorymoveJobDetailDO.setToLocationCode(null);
|
|
|
|
// }
|
|
|
|
inventorymoveJobDetailDO.setPackingNumber(item.getFromPackingNumber()); |
|
|
|
inventorymoveJobDetailDO.setContainerNumber(item.getFromContainerNumber()); |
|
|
|
inventorymoveJobDetailDO.setBatch(item.getFromBatch()); |
|
|
|
inventorymoveJobDetailDO.setFromLocationCode(item.getFromLocationCode()); |
|
|
|
inventorymoveJobDetailDO.setToLocationCode(item.getToLocationCode()); |
|
|
|
inventorymoveJobDetailDO.setItemCode(item.getItemCode()); |
|
|
|
inventorymoveJobDetailDO.setItemName(item.getItemName()); |
|
|
@ -447,33 +738,142 @@ public class InventorymoveRequestMainServiceImpl implements InventorymoveRequest |
|
|
|
inventorymoveJobDetailDO.setUom(item.getUom()); |
|
|
|
inventorymoveJobDetailDO.setNumber(inventorymoveJobMainDO.getNumber()); |
|
|
|
inventorymoveJobDetailDO.setMasterId(inventorymoveJobMainDO.getId()); |
|
|
|
inventorymoveJobDetailDO.setInventoryStatus(balanceDOItem.getInventoryStatus()); |
|
|
|
inventorymoveJobDetailDO.setInventoryStatus(item.getFromInventoryStatus()); |
|
|
|
deliverJobDetailDOList.add(inventorymoveJobDetailDO); |
|
|
|
//预计出
|
|
|
|
ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(inventorymoveJobDetailDO, expectoutCreateReqVO); |
|
|
|
expectoutCreateReqVO.setJobNumber(number); |
|
|
|
expectoutCreateReqVO.setJobNumber(inventorymoveJobMainDO.getNumber()); |
|
|
|
expectoutCreateReqVO.setBusinessType(inventorymoveJobMainDO.getBusinessType()); |
|
|
|
expectoutCreateReqVO.setLocationCode(inventorymoveJobDetailDO.getFromLocationCode()); |
|
|
|
expectoutCreateReqVO.setBatch(inventorymoveJobDetailDO.getBatch()); |
|
|
|
expectoutCreateReqVO.setQty(inventorymoveJobDetailDO.getQty()); |
|
|
|
expectoutCreateReqVO.setInventoryStatus(balanceDOItem.getInventoryStatus()); |
|
|
|
expectoutCreateReqVO.setInventoryStatus(item.getFromInventoryStatus()); |
|
|
|
expectpoutCreateReqVOList.add(expectoutCreateReqVO); |
|
|
|
//预计入
|
|
|
|
ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(inventorymoveJobDetailDO, expectinCreateReqVO); |
|
|
|
expectinCreateReqVO.setJobNumber(number); |
|
|
|
expectinCreateReqVO.setJobNumber(inventorymoveJobMainDO.getNumber()); |
|
|
|
expectinCreateReqVO.setBusinessType(inventorymoveJobMainDO.getBusinessType()); |
|
|
|
expectinCreateReqVO.setLocationCode(inventorymoveJobDetailDO.getFromLocationCode()); |
|
|
|
expectinCreateReqVO.setLocationCode(inventorymoveJobDetailDO.getToLocationCode()); |
|
|
|
expectinCreateReqVO.setBatch(inventorymoveJobDetailDO.getBatch()); |
|
|
|
expectinCreateReqVO.setQty(inventorymoveJobDetailDO.getQty()); |
|
|
|
expectinCreateReqVO.setInventoryStatus(balanceDOItem.getInventoryStatus()); |
|
|
|
expectinCreateReqVO.setInventoryStatus(item.getToInventoryStatus()); |
|
|
|
expectpinCreateReqVOList.add(expectinCreateReqVO); |
|
|
|
}); |
|
|
|
}); |
|
|
|
inventorymoveJobDetailMapper.insertBatch(deliverJobDetailDOList); |
|
|
|
//增加预计入
|
|
|
|
expectoutService.createExpectout(expectpoutCreateReqVOList); |
|
|
|
expectinService.createExpectin(expectpinCreateReqVOList); |
|
|
|
trendsApi.createTrends(inventorymoveJobMainDO.getId(), "InventorymoveJob", "成品发货申请生成成品发货任务", TrendsTypeEnum.CREATE); |
|
|
|
trendsApi.createTrends(inventorymoveJobMainDO.getId(), jobsettingDO.getCode(), "库存转移申请生成库存转移任务", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
//关闭
|
|
|
|
@Override |
|
|
|
public Integer closeInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_CLOSE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "关闭了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//打开
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer reAddInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.reAdd(); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_RE_ADD); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "打开了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//提交
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer submitInventorymoveRequestMain(Long id) { |
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_SUBMIT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if (RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, inventorymoveRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "提交了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//审批同意
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer agreeInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoAgree()); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_AGREE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if (RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, inventorymoveRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "审批同意了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//执行
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer handleInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_HANDLE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, inventorymoveRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "执行了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
//审批拒绝
|
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public Integer abortInventorymoveRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventorymoveRequestMainDO mainDO = validateInventorymoveRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
if (!flag) { |
|
|
|
throw new ServiceException(INVENTORYMOVE_REQUEST_CANNOT_ABORT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, mainDO.getBusinessType(), "审批拒绝了库存转移申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventorymoveRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<InventorymoveRequestMainDO> getInventorymoveRequestMainList(CustomConditions conditions) { |
|
|
|
return inventorymoveRequestMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
} |
|
|
|