|
|
@ -5,6 +5,8 @@ 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.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.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.inventorychangeRequest.vo.*; |
|
|
@ -20,6 +22,7 @@ import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.inventorychangeRequest.InventorychangeRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventorychangeRequest.InventorychangeRequestMainMapper; |
|
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.itempackaging.ItempackagingService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
@ -27,7 +30,6 @@ import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
|
import com.win.module.wms.service.shift.ShiftService; |
|
|
|
import com.win.module.wms.util.JobUtils; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
@ -36,8 +38,7 @@ 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.INVENTORYCHANGE_REQUEST_MAIN_NOT_EXISTS; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* 库存修改申请主 Service 实现类 |
|
|
@ -64,25 +65,33 @@ public class InventorychangeRequestMainServiceImpl implements InventorychangeReq |
|
|
|
private LocationService locationService; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private RequestsettingService requestsettingService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long createInventorychangeRequestMain(InventorychangeRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
InventorychangeRequestMainDO inventorychangeRequestMain = InventorychangeRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
inventorychangeRequestMainMapper.insert(inventorychangeRequestMain); |
|
|
|
// 返回
|
|
|
|
return inventorychangeRequestMain.getId(); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("InventorychangeRequest"); |
|
|
|
InventorychangeRequestMainDO inventorychangeRequestMainDO = validatorToCreate(createReqVO); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(inventorychangeRequestMainDO.getStatus())) { |
|
|
|
|
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "DeliverPlan", "增加了发货计划", TrendsTypeEnum.CREATE); |
|
|
|
return inventorychangeRequestMainDO.getId(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateInventorychangeRequestMain(InventorychangeRequestMainUpdateReqVO updateReqVO) { |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("DeliverPlan"); |
|
|
|
// 校验存在
|
|
|
|
validateInventorychangeRequestMainExists(updateReqVO.getId()); |
|
|
|
// 更新
|
|
|
|
InventorychangeRequestMainDO updateObj = InventorychangeRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
inventorychangeRequestMainMapper.updateById(updateObj); |
|
|
|
InventorychangeRequestMainDO inventorychangeRequestMainDO = validatorToUpdate(updateReqVO); |
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(inventorychangeRequestMainDO.getStatus())) { |
|
|
|
|
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "DeliverPlan", "修改了发货计划", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -131,312 +140,448 @@ public class InventorychangeRequestMainServiceImpl implements InventorychangeReq |
|
|
|
} |
|
|
|
List<InventorychangeRequestMainImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
String messageMain = ""; |
|
|
|
//主表的验证
|
|
|
|
|
|
|
|
|
|
|
|
//子表的验证
|
|
|
|
BusinesstypeDO businesstypeDO = new BusinesstypeDO(); |
|
|
|
InventorychangeRequestMainDO mainDo = InventorychangeRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = validateInventorychangeRequestMainImport(mainDo, businesstypeDO); |
|
|
|
List<InventorychangeRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<InventorychangeRequestDetailDO> subDOList = InventorychangeRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for (InventorychangeRequestDetailDO purchaseDetailDO : subDOList) { |
|
|
|
String messageDetail = ""; |
|
|
|
//校验来源库位基础信息
|
|
|
|
try { |
|
|
|
LocationDO locationDO = locationService.selectLocation(purchaseDetailDO.getLocationCode()); |
|
|
|
if (locationDO != null) { |
|
|
|
purchaseDetailDO.setLocationCode(locationDO.getCode()); |
|
|
|
purchaseDetailDO.setAreaCode(locationDO.getAreaCode()); |
|
|
|
purchaseDetailDO.setLocationGroupCode(locationDO.getLocationGroupCode()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
// 是否有错误数据
|
|
|
|
boolean flag = true; |
|
|
|
for (InventorychangeRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = validateInventorychangeRequestDetailImport(detailDO, mainDo, businesstypeDO); |
|
|
|
if (!messageMain.isEmpty() || messageDetail.isEmpty()) { |
|
|
|
InventorychangeRequestMainImportErrorVO importErrorVO = InventorychangeRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); |
|
|
|
importErrorVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
|
errorList.add(importErrorVO); |
|
|
|
flag = false; |
|
|
|
} |
|
|
|
// 校验物品基础信息
|
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(purchaseDetailDO.getItemCode()); |
|
|
|
if (itembasicDO.getUom() != purchaseDetailDO.getUom()) { |
|
|
|
messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + purchaseDetailDO.getUom() + ","; |
|
|
|
} else { |
|
|
|
purchaseDetailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
purchaseDetailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
purchaseDetailDO.setItemName(itembasicDO.getName()); |
|
|
|
purchaseDetailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
} |
|
|
|
purchaseDetailDO.setProjectCode(itembasicDO.getCode()); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
//写入数据
|
|
|
|
if (flag) { |
|
|
|
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InventoryChangeRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOk"); |
|
|
|
jobUtils.selectItembasicExist(purchaseDetailDO.getItemCode(), businesstypeDO); |
|
|
|
jobUtils.ifOutInventoryStatuses(purchaseDetailDO.getFromInventoryStatus(), businesstypeDO); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.INVENTORY_CHANGE_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
inventorychangeRequestMainMapper.insert(mainDo); |
|
|
|
for (InventorychangeRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setNumber(mainDo.getNumber()); |
|
|
|
detailDO.setMasterId(mainDo.getId()); |
|
|
|
} |
|
|
|
inventorychangeRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
}); |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
//隔离转合格申请
|
|
|
|
if ("Hold".equals(purchaseDetailDO.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(purchaseDetailDO.getItemCode(), purchaseDetailDO.getFromPackingNumber() |
|
|
|
, purchaseDetailDO.getFromBatch(), purchaseDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
purchaseDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
purchaseDetailDO.setToInventoryStatus("OK"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToScrapRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("HoldToScrapRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
|
|
* 主表校验导入,并赋值一些参数 |
|
|
|
* |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateInventorychangeRequestMainImport(InventorychangeRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
String messageMain = ""; |
|
|
|
//主表的验证
|
|
|
|
return messageMain; |
|
|
|
} |
|
|
|
|
|
|
|
//合格转隔离申请
|
|
|
|
if ("OK".equals(purchaseDetailDO.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(purchaseDetailDO.getItemCode(), purchaseDetailDO.getFromPackingNumber() |
|
|
|
, purchaseDetailDO.getFromBatch(), purchaseDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
purchaseDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
purchaseDetailDO.setToInventoryStatus("Hold"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
purchaseDetailDO.setToPackingNumber(null); |
|
|
|
purchaseDetailDO.setToBatch(null); |
|
|
|
purchaseDetailDO.setToContainerNumber(null); |
|
|
|
} |
|
|
|
/** |
|
|
|
* 子表校验导入,并赋值一些参数 |
|
|
|
* |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateInventorychangeRequestDetailImport(InventorychangeRequestDetailDO detailDo, InventorychangeRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
String messageDetail = ""; |
|
|
|
//校验来源库位基础信息
|
|
|
|
try { |
|
|
|
LocationDO locationDO = locationService.selectLocation(detailDo.getLocationCode()); |
|
|
|
if (locationDO != null) { |
|
|
|
detailDo.setLocationCode(locationDO.getCode()); |
|
|
|
detailDo.setAreaCode(locationDO.getAreaCode()); |
|
|
|
detailDo.setLocationGroupCode(locationDO.getLocationGroupCode()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
// 校验物品基础信息
|
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); |
|
|
|
if (itembasicDO.getUom() != detailDo.getUom()) { |
|
|
|
messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + detailDo.getUom() + ","; |
|
|
|
} else { |
|
|
|
detailDo.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDo.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDo.setItemName(itembasicDO.getName()); |
|
|
|
detailDo.setProjectCode(itembasicDO.getProject()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
// 校验业务类型
|
|
|
|
try { |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOk"); |
|
|
|
jobUtils.selectItembasicExist(detailDo.getItemCode(), businesstypeDO); |
|
|
|
jobUtils.ifOutInventoryStatuses(detailDo.getFromInventoryStatus(), businesstypeDO); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
//隔离转报废申请
|
|
|
|
if ("Hold".equals(purchaseDetailDO.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(purchaseDetailDO.getItemCode(), purchaseDetailDO.getFromPackingNumber() |
|
|
|
, purchaseDetailDO.getFromBatch(), purchaseDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
purchaseDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
purchaseDetailDO.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
purchaseDetailDO.setFromPackingNumber(null); |
|
|
|
purchaseDetailDO.setFromBatch(null); |
|
|
|
purchaseDetailDO.setFromContainerNumber(null); |
|
|
|
//隔离转合格申请
|
|
|
|
if ("Hold".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
detailDo.setFromQty(balanceDO.getQty()); |
|
|
|
detailDo.setToQty(balanceDO.getQty()); |
|
|
|
detailDo.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
detailDo.setToInventoryStatus("OK"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_REQUEST.getCode()); |
|
|
|
detailDo.setNumber(number); |
|
|
|
|
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToScrapRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
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(purchaseDetailDO.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(purchaseDetailDO.getItemCode(), purchaseDetailDO.getFromPackingNumber() |
|
|
|
, purchaseDetailDO.getFromBatch(), purchaseDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
purchaseDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
purchaseDetailDO.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.SCRAP_TO_HOLD_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ScrapToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ScrapToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
purchaseDetailDO.setFromPackingNumber(null); |
|
|
|
purchaseDetailDO.setFromBatch(null); |
|
|
|
purchaseDetailDO.setFromContainerNumber(null); |
|
|
|
//合格转隔离申请
|
|
|
|
if ("OK".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
detailDo.setFromQty(balanceDO.getQty()); |
|
|
|
detailDo.setToQty(balanceDO.getQty()); |
|
|
|
detailDo.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
detailDo.setToInventoryStatus("Hold"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
|
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
//合格转报废
|
|
|
|
if ("Ok".equals(purchaseDetailDO.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(purchaseDetailDO.getItemCode(), purchaseDetailDO.getFromPackingNumber() |
|
|
|
, purchaseDetailDO.getFromBatch(), purchaseDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
purchaseDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
purchaseDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
purchaseDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
purchaseDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
purchaseDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
purchaseDetailDO.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_SCRAP_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToScrapRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToScrapRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
purchaseDetailDO.setFromPackingNumber(null); |
|
|
|
purchaseDetailDO.setFromBatch(null); |
|
|
|
purchaseDetailDO.setFromContainerNumber(null); |
|
|
|
detailDo.setToPackingNumber(null); |
|
|
|
detailDo.setToBatch(null); |
|
|
|
detailDo.setToContainerNumber(null); |
|
|
|
} |
|
|
|
|
|
|
|
//隔离转报废申请
|
|
|
|
if ("Hold".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
detailDo.setFromQty(balanceDO.getQty()); |
|
|
|
detailDo.setToQty(balanceDO.getQty()); |
|
|
|
detailDo.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
detailDo.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_HOLD_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
|
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
detailDo.setFromPackingNumber(null); |
|
|
|
detailDo.setFromBatch(null); |
|
|
|
detailDo.setFromContainerNumber(null); |
|
|
|
} |
|
|
|
|
|
|
|
InventorychangeRequestDetailCreateReqVO purchaseDetailCreateReqVO = InventorychangeRequestDetailConvert.INSTANCE.convert1(purchaseDetailDO); |
|
|
|
InventorychangeRequestMainImportErrorVO importVO = InventorychangeRequestDetailConvert.INSTANCE.convert(createReqVO, purchaseDetailCreateReqVO); |
|
|
|
//进行子表的错误统计
|
|
|
|
//主表没有错误 写入库里
|
|
|
|
if (!messageMain.equals("") || !messageDetail.equals("")) { |
|
|
|
importVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
|
|
|
|
importVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
|
errorList.add(importVO); |
|
|
|
} else { |
|
|
|
purchaseDetailDO.setNumber(createReqVO.getNumber()); |
|
|
|
purchaseDetailDO.setMasterId(createReqVO.getId()); |
|
|
|
//报废转隔离申请
|
|
|
|
if ("Scrap".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
detailDo.setFromQty(balanceDO.getQty()); |
|
|
|
detailDo.setToQty(balanceDO.getQty()); |
|
|
|
detailDo.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
detailDo.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.SCRAP_TO_HOLD_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
|
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ScrapToHoldRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ScrapToHoldRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
if (errorList.isEmpty()) { |
|
|
|
if (mode != 3) { |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
|
|
|
|
InventorychangeRequestMainDO createObj = InventorychangeRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
inventorychangeRequestMainMapper.insert(createObj); |
|
|
|
inventorychangeRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} else if (mode != 2) { |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
detailDo.setFromPackingNumber(null); |
|
|
|
detailDo.setFromBatch(null); |
|
|
|
detailDo.setFromContainerNumber(null); |
|
|
|
} |
|
|
|
|
|
|
|
InventorychangeRequestMainDO createObj = InventorychangeRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
inventorychangeRequestMainMapper.updateById(createObj); |
|
|
|
inventorychangeRequestDetailMapper.updateBatch(subDOList); |
|
|
|
//合格转报废
|
|
|
|
if ("Ok".equals(detailDo.getFromInventoryStatus())) { |
|
|
|
// 校验库存余额是否存在
|
|
|
|
try { |
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getFromPackingNumber() |
|
|
|
, detailDo.getFromBatch(), detailDo.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
detailDo.setFromQty(balanceDO.getQty()); |
|
|
|
detailDo.setToQty(balanceDO.getQty()); |
|
|
|
detailDo.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
detailDo.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
detailDo.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
detailDo.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
}); |
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
if (!errorList.isEmpty() && !updatePart) { |
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
detailDo.setToInventoryStatus("Scrap"); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OK_TO_SCRAP_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
|
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OkToScrapRequest"); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("OkToScrapRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
|
|
|
|
detailDo.setFromPackingNumber(null); |
|
|
|
detailDo.setFromBatch(null); |
|
|
|
detailDo.setFromContainerNumber(null); |
|
|
|
} |
|
|
|
return errorList; |
|
|
|
return messageDetail; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//新增方法(主和子)
|
|
|
|
private InventorychangeRequestMainDO validatorToCreate(InventorychangeRequestMainCreateReqVO createReqVO) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("DeliverPlan"); |
|
|
|
InventorychangeRequestMainDO inventorychangeRequestMainDO = validateMainMethod(createReqVO, businesstypeDO); |
|
|
|
//子表校验
|
|
|
|
List<InventorychangeRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<InventorychangeRequestDetailDO> subDOList = InventorychangeRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for (InventorychangeRequestDetailDO inventorychangeRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(inventorychangeRequestDetailDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.HOLD_TO_SCRAP_REQUEST.getCode()); |
|
|
|
inventorychangeRequestMainDO.setNumber(number); |
|
|
|
inventorychangeRequestMainMapper.insert(inventorychangeRequestMainDO); |
|
|
|
for (InventorychangeRequestDetailDO inventorychangeRequestDetailDO : subDOList) { |
|
|
|
inventorychangeRequestDetailDO.setNumber(inventorychangeRequestMainDO.getNumber()); |
|
|
|
inventorychangeRequestDetailDO.setMasterId(inventorychangeRequestMainDO.getId()); |
|
|
|
} |
|
|
|
inventorychangeRequestDetailMapper.insertBatch(subDOList); |
|
|
|
return inventorychangeRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
//修改方法(主和子)
|
|
|
|
private InventorychangeRequestMainDO validatorToUpdate(InventorychangeRequestMainUpdateReqVO updateReqVO) { |
|
|
|
BusinesstypeDO businesstypeDO = new BusinesstypeDO(); |
|
|
|
InventorychangeRequestMainDO deliverPlanMainDO = validateMainMethod(updateReqVO, businesstypeDO); |
|
|
|
//子表校验
|
|
|
|
List<InventorychangeRequestDetailUpdateReqVO> subList = updateReqVO.getSubList(); |
|
|
|
List<InventorychangeRequestDetailDO> subDOList = InventorychangeRequestDetailConvert.INSTANCE.convertList05(subList); |
|
|
|
for (InventorychangeRequestDetailDO inventorychangeRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(inventorychangeRequestDetailDO); |
|
|
|
} |
|
|
|
inventorychangeRequestMainMapper.updateById(deliverPlanMainDO); |
|
|
|
inventorychangeRequestDetailMapper.updateBatch(subDOList); |
|
|
|
return deliverPlanMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//校验主表公共方法(适用于新增/修改)
|
|
|
|
private InventorychangeRequestMainDO validateMainMethod(InventorychangeRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO) { |
|
|
|
InventorychangeRequestMainDO InventorychangeRequestMainDO = InventorychangeRequestMainConvert.INSTANCE.convert(baseVO); |
|
|
|
return InventorychangeRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
//校验子表公共方法(适用于新增/修改)
|
|
|
|
private void validateDetailMethod(InventorychangeRequestDetailDO inventorychangeRequestDetailDO) { |
|
|
|
LocationDO locationDO = this.validatorLocation(inventorychangeRequestDetailDO.getLocationCode()); |
|
|
|
if (locationDO != null) { |
|
|
|
inventorychangeRequestDetailDO.setLocationCode(locationDO.getCode()); |
|
|
|
inventorychangeRequestDetailDO.setAreaCode(locationDO.getAreaCode()); |
|
|
|
inventorychangeRequestDetailDO.setLocationGroupCode(locationDO.getLocationGroupCode()); |
|
|
|
} |
|
|
|
|
|
|
|
ItembasicDO itembasicDO = this.validatorItembasic(inventorychangeRequestDetailDO.getItemCode()); |
|
|
|
if (!inventorychangeRequestDetailDO.getUom().equals(itembasicDO.getUom())) { |
|
|
|
throw exception(UOM_ERROR, inventorychangeRequestDetailDO.getUom()); |
|
|
|
} else { |
|
|
|
inventorychangeRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
inventorychangeRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
inventorychangeRequestDetailDO.setItemName(itembasicDO.getName()); |
|
|
|
inventorychangeRequestDetailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
} |
|
|
|
//校验库存余额是否存在
|
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
//隔离转合格申请
|
|
|
|
if ("Hold".equals(inventorychangeRequestDetailDO.getFromInventoryStatus())) { |
|
|
|
|
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
} |
|
|
|
//合格转隔离申请
|
|
|
|
if ("HOKold".equals(inventorychangeRequestDetailDO.getFromInventoryStatus())) { |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
} |
|
|
|
//隔离转报废申请
|
|
|
|
if ("Hold".equals(inventorychangeRequestDetailDO.getFromInventoryStatus())) { |
|
|
|
inventoryStatus.add("Hold"); |
|
|
|
} |
|
|
|
//报废转隔离申请
|
|
|
|
if ("Scrap".equals(inventorychangeRequestDetailDO.getFromInventoryStatus())) { |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
} |
|
|
|
//合格转报废申请
|
|
|
|
if ("Ok".equals(inventorychangeRequestDetailDO.getFromInventoryStatus())) { |
|
|
|
inventoryStatus.add("Scrap"); |
|
|
|
} |
|
|
|
List<BalanceDO> balanceDOList = this.validatorLocationReturnManagementAccuracy(inventorychangeRequestDetailDO.getItemCode(), inventorychangeRequestDetailDO.getFromPackingNumber() |
|
|
|
, inventorychangeRequestDetailDO.getFromBatch(), inventorychangeRequestDetailDO.getLocationCode(), inventoryStatus); |
|
|
|
if (balanceDOList != null) { |
|
|
|
BalanceDO balanceDO = balanceDOList.get(0); |
|
|
|
inventorychangeRequestDetailDO.setFromQty(balanceDO.getQty()); |
|
|
|
inventorychangeRequestDetailDO.setToQty(balanceDO.getQty()); |
|
|
|
inventorychangeRequestDetailDO.setQty(balanceDO.getQty()); |
|
|
|
|
|
|
|
inventorychangeRequestDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
inventorychangeRequestDetailDO.setFromProduceDate(balanceDO.getProduceDate()); |
|
|
|
inventorychangeRequestDetailDO.setFromExpireDate(balanceDO.getExpireDate()); |
|
|
|
inventorychangeRequestDetailDO.setToArrivdAte(balanceDO.getArriveDate()); |
|
|
|
inventorychangeRequestDetailDO.setToProduceDate(balanceDO.getProduceDate()); |
|
|
|
inventorychangeRequestDetailDO.setToExpireDate(balanceDO.getExpireDate()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//子表校验来源库位基础信息
|
|
|
|
private LocationDO validatorLocation(String locationCode) { |
|
|
|
LocationDO locationDO = locationService.selectLocation(locationCode); |
|
|
|
return locationDO; |
|
|
|
} |
|
|
|
|
|
|
|
//子表校验物品基础信息
|
|
|
|
private ItembasicDO validatorItembasic(String itemCode) { |
|
|
|
return itembasicService.selectItembasic(itemCode); |
|
|
|
} |
|
|
|
|
|
|
|
//子表校验业务类型
|
|
|
|
private void validatorItembasic(String itemCode, String fromInventoryStatus) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("HoldToOk"); |
|
|
|
jobUtils.selectItembasicExist(itemCode, businesstypeDO); |
|
|
|
jobUtils.ifOutInventoryStatuses(fromInventoryStatus, businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
private List<BalanceDO> validatorLocationReturnManagementAccuracy(String itemCode, String fromPackingNumber, String fromBatch, String locationCode, List<String> inventoryStatus) { |
|
|
|
List<BalanceDO> balanceDOList = jobUtils.selectlocationReturnManagementAccuracy(itemCode, fromPackingNumber |
|
|
|
, fromBatch, locationCode, inventoryStatus); |
|
|
|
return balanceDOList; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|