|
|
@ -1,31 +1,20 @@ |
|
|
|
package com.win.module.wms.service.inventoryinitRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
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.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayImportErrorVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestDetailUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportErrorVO; |
|
|
|
import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainImportErrorVO; |
|
|
|
import com.win.module.wms.convert.productputawayRequest.ProductputawayRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.productputawayRequest.ProductputawayRequestMainConvert; |
|
|
|
import com.win.module.wms.convert.purchaseclaimRequest.PurchaseclaimRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestMainConvert; |
|
|
|
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.purchaseclaimRequest.PurchaseclaimRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; |
|
|
|
import com.win.module.wms.controller.inventoryinitRecord.vo.InventoryinitRecordDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.inventoryinitRecord.vo.InventoryinitRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.convert.inventoryinitRecord.InventoryinitRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.inventoryinitRecord.InventoryinitRecordMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusState; |
|
|
|
import com.win.module.wms.util.*; |
|
|
|
import com.win.module.wms.service.requestsetting.*; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
@ -39,12 +28,12 @@ import com.win.module.wms.dal.dataobject.inventoryinitRequest.InventoryinitReque |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itempackaging.ItempackagingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.inventoryinitRecord.*; |
|
|
|
import com.win.module.wms.dal.mysql.inventoryinitRequest.InventoryinitRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.inventoryinitRequest.InventoryinitRequestMainMapper; |
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.validation.Validator; |
|
|
@ -69,6 +58,13 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
@Resource |
|
|
|
private InventoryinitRequestMainMapper inventoryinitRequestMainMapper; |
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
private InventoryinitRecordMainMapper inventoryinitRecordMainMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private InventoryinitRecordDetailMapper inventoryinitRecordDetailMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
@ -109,7 +105,14 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
inventoryinitRequestMainMapper.insert(mainDO); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
for (InventoryinitRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
@ -212,6 +215,14 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
public List<InventoryinitRequestMainDO> getInventoryinitRequestMainList(InventoryinitRequestMainExportReqVO exportReqVO) { |
|
|
|
return inventoryinitRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public List<InventoryinitRequestMainDO> getInventoryinitRequestMainList1(CustomConditions conditions) { |
|
|
|
return inventoryinitRequestMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private String validatePurchasereceiptRequestDetailImport(InventoryinitRequestMainDO mainDo, InventoryinitRequestDetailDO detailDo){ |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
@ -240,6 +251,32 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
return detailDo; |
|
|
|
} |
|
|
|
|
|
|
|
private void generateJob(InventoryinitRequestMainDO mainDO, List<InventoryinitRequestDetailDO> detailDOList) { |
|
|
|
//跳过任务直接生成记录
|
|
|
|
if("TRUE".equals(mainDO.getDirectCreateRecord())){ |
|
|
|
InventoryinitRecordMainCreateReqVO inventoryinitRecordMainCreateReqVO = new InventoryinitRecordMainCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(mainDO, inventoryinitRecordMainCreateReqVO); |
|
|
|
inventoryinitRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_RECORD.getCode()); |
|
|
|
inventoryinitRecordMainCreateReqVO.setNumber(number); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchaseReceiptRecord"); |
|
|
|
inventoryinitRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
inventoryinitRecordMainMapper.insert(InventoryinitRecordMainConvert.INSTANCE.convert(inventoryinitRecordMainCreateReqVO)); |
|
|
|
for(InventoryinitRequestDetailDO inventoryinitRequestDetailDO : detailDOList) { |
|
|
|
InventoryinitRecordDetailCreateReqVO inventoryinitRecordDetailCreateReqVO = new InventoryinitRecordDetailCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(inventoryinitRequestDetailDO, inventoryinitRecordDetailCreateReqVO); |
|
|
|
inventoryinitRecordDetailCreateReqVO.setNumber(number); |
|
|
|
inventoryinitRecordDetailMapper.insert(InventoryinitRecordDetailConvert.INSTANCE.convert(inventoryinitRecordDetailCreateReqVO)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private InventoryinitRequestDetailDO validitempackaging(InventoryinitRequestDetailDO detailDo){ |
|
|
|
ItempackagingDO itempackaging = itempackagingService.selectItemPackagingExist(detailDo.getItemCode()); |
|
|
@ -263,6 +300,14 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
return mainDo; |
|
|
|
} |
|
|
|
|
|
|
|
private InventoryinitRequestMainDO valiteInventoryinitRequestMainExists(Long id) { |
|
|
|
InventoryinitRequestMainDO existInventoryinitRequestMainDO = inventoryinitRequestMainMapper.selectById(id); |
|
|
|
if (existInventoryinitRequestMainDO == null) { |
|
|
|
throw exception(INVENTORYINIT_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
return existInventoryinitRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
private InventoryinitRequestMainDO validaterequestsetting(InventoryinitRequestMainDO mainDo){ |
|
|
|
RequestsettingDO requestsetting = requestsettingService.selectRequestsettingExist("TransferDeliverRequest"); |
|
|
|
mainDo.setAutoAgree(requestsetting.getAutoAgree()); |
|
|
@ -272,14 +317,26 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
return mainDo; |
|
|
|
} |
|
|
|
|
|
|
|
private void validatetime(LocalDateTime durtime){ |
|
|
|
if(LocalDateTime.now().isAfter(durtime)){ |
|
|
|
throw exception(TIME_AFTER,LocalDateTime.now(),durtime); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private String validatePurchasereceiptRequestMainImport(InventoryinitRequestMainDO mainDo) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
|
mainDo.setCreateTime(LocalDateTime.now()); |
|
|
|
mainDo = validaterequestsetting(mainDo); |
|
|
|
mainDo.setRequestTime(LocalDateTime.now()); |
|
|
|
validatetime(mainDo.getDueTime()); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
mainDo = validaterequestsetting(mainDo); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
mainDo = validateBusinesstype(mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
@ -300,8 +357,6 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
} |
|
|
|
List<InventoryinitRequestMainImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
String message = ""; |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
InventoryinitRequestMainDO mainDO = InventoryinitRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = this.validatePurchasereceiptRequestMainImport(mainDO); |
|
|
|
List<InventoryinitRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
@ -323,17 +378,133 @@ public class InventoryinitRequestMainServiceImpl implements InventoryinitRequest |
|
|
|
if (flag) { |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
mainDO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("TransferDeliverRequest"); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
inventoryinitRequestMainMapper.insert(mainDO); |
|
|
|
trendsApi.createTrends(mainDO.getId(), "inventoryinitRequestMain", "导入了采购收货申请", TrendsTypeEnum.CREATE); |
|
|
|
trendsApi.createTrends(mainDO.getId(), "InventoryInitialRequest", "导入了库存初始化申请", TrendsTypeEnum.CREATE); |
|
|
|
for (InventoryinitRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
} |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
inventoryinitRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
}); |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closeInventoryinitRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_CLOSE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "关闭了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer reAddInventoryinitRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.reAdd(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_RE_ADD); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "打开了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer submitInventoryinitRequestMain(Long id) { |
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_SUBMIT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, inventoryinitRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "提交了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer agreeInventoryinitRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_AGREE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, inventoryinitRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "审批同意了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer handleInventoryinitRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_HANDLE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, inventoryinitRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "执行了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer refusedInventoryinitRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
InventoryinitRequestMainDO mainDO = valiteInventoryinitRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(INVENTORYINIT_REQUEST_CANNOT_ABORT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "InventoryInitialRequest", "审批拒绝了库存初始化申请", TrendsTypeEnum.UPDATE); |
|
|
|
return inventoryinitRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|