|
|
@ -4,37 +4,61 @@ import cn.hutool.core.collection.CollUtil; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
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.expectin.vo.ExpectinCreateReqVO; |
|
|
|
import com.win.module.wms.controller.expectout.vo.ExpectoutCreateReqVO; |
|
|
|
import com.win.module.wms.controller.repleinshRequest.vo.*; |
|
|
|
import com.win.module.wms.convert.repleinshRequest.RepleinshRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.repleinshRequest.RepleinshRequestMainConvert; |
|
|
|
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.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.repleinshJob.RepleinshJobDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.repleinshJob.RepleinshJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.repleinshRequest.RepleinshRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.repleinshRequest.RepleinshRequestMainMapper; |
|
|
|
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.businesstype.BusinesstypeService; |
|
|
|
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.itempackaging.ItempackagingService; |
|
|
|
import com.win.module.wms.service.jobsetting.JobsettingService; |
|
|
|
import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
|
import com.win.module.wms.service.shift.ShiftService; |
|
|
|
import com.win.module.wms.service.supplieritem.SupplieritemService; |
|
|
|
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.transaction.interceptor.TransactionAspectSupport; |
|
|
|
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.PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.REPLEINSH_REQUEST_MAIN_NOT_EXISTS; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* 补料申请主 Service 实现类 |
|
|
@ -44,6 +68,22 @@ import static com.win.module.wms.enums.ErrorCodeConstants.REPLEINSH_REQUEST_MAIN |
|
|
|
@Service |
|
|
|
@Validated |
|
|
|
public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainService { |
|
|
|
@Resource |
|
|
|
private ExpectoutService expectoutService; |
|
|
|
@Resource |
|
|
|
private ExpectinService expectinService; |
|
|
|
@Resource |
|
|
|
private RepleinshJobDetailMapper repleinshJobDetailMapper; |
|
|
|
@Resource |
|
|
|
private JobsettingService jobsettingService; |
|
|
|
@Resource |
|
|
|
private RepleinshJobMainMapper repleinshJobMainMapper; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private Validator validator; |
|
|
|
@Resource |
|
|
|
private RepleinshRequestMainMapper repleinshRequestMainMapper; |
|
|
|
@Resource |
|
|
@ -65,12 +105,39 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Long createRepleinshRequestMain(RepleinshRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
RepleinshRequestMainDO repleinshRequestMain = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
repleinshRequestMainMapper.insert(repleinshRequestMain); |
|
|
|
// 返回
|
|
|
|
return repleinshRequestMain.getId(); |
|
|
|
RepleinshRequestMainDO mainDO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
// 主表暂无校验
|
|
|
|
// this.validateRepleinshRequestMainCreate(mainDO);
|
|
|
|
List<RepleinshRequestDetailDO> subDOList = RepleinshRequestDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); |
|
|
|
for (RepleinshRequestDetailDO detailDO : subDOList) { |
|
|
|
this.validateRepleinshRequestDetailCreate(mainDO, detailDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("RepleinmentRequest"); |
|
|
|
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()); |
|
|
|
repleinshRequestMainMapper.insert(mainDO); |
|
|
|
for (RepleinshRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
detailDO.setInventoryStatus("OK"); // 默认合格
|
|
|
|
} |
|
|
|
repleinshRequestDetailMapper.insertBatch(subDOList); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
trendsApi.createTrends(mainDO.getId(), "repleinshRequestMain", "增加了补料申请", TrendsTypeEnum.CREATE); |
|
|
|
return mainDO.getId(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -79,12 +146,18 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateRepleinshRequestMain(RepleinshRequestMainUpdateReqVO updateReqVO) { |
|
|
|
@Transactional |
|
|
|
public Integer updateRepleinshRequestMain(RepleinshRequestMainUpdateReqVO updateReqVO) { |
|
|
|
// 校验存在
|
|
|
|
validateRepleinshRequestMainExists(updateReqVO.getId()); |
|
|
|
RepleinshRequestMainDO repleinshRequestMainDO = validateRepleinshRequestMainExists(updateReqVO.getId()); |
|
|
|
if(!repleinshRequestMainDO.getStatus().equals(RequestStatusEnum.NEW.getCode())) { |
|
|
|
throw exception(REPLEINSH_REQUEST_STATUS_NOT_NEW); |
|
|
|
} |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(updateReqVO.getId(), "repleinshRequestMain", "修改了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
// 更新
|
|
|
|
RepleinshRequestMainDO updateObj = RepleinshRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
repleinshRequestMainMapper.updateById(updateObj); |
|
|
|
return repleinshRequestMainMapper.updateById(updateObj); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -95,10 +168,12 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ |
|
|
|
repleinshRequestMainMapper.deleteById(id); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateRepleinshRequestMainExists(Long id) { |
|
|
|
if (repleinshRequestMainMapper.selectById(id) == null) { |
|
|
|
private RepleinshRequestMainDO validateRepleinshRequestMainExists(Long id) { |
|
|
|
RepleinshRequestMainDO repleinshRequestMainDO = repleinshRequestMainMapper.selectById(id); |
|
|
|
if (repleinshRequestMainDO == null) { |
|
|
|
throw exception(REPLEINSH_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
return repleinshRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -121,106 +196,70 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ |
|
|
|
return repleinshRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验创建 |
|
|
|
* @param mainDo |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validateRepleinshRequestDetailCreate(RepleinshRequestMainDO mainDo, RepleinshRequestDetailDO detailDo) { |
|
|
|
ItembasicDO itembasicDO = this.validateItem(detailDo); |
|
|
|
if(!itembasicDO.getUom().equals(itembasicDO.getUom())) { |
|
|
|
throw exception(ITEMBASIC_UOM_EXCEPTION, itembasicDO.getUom(), itembasicDO.getUom()); |
|
|
|
} |
|
|
|
this.validateBusinesstype(itembasicDO.getType(),itembasicDO.getCode(),detailDo.getToLocationCode(), mainDo,detailDo); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public List<RepleinshRequestMainImportErrorVO> importRepleinshRequestMainList(List<RepleinshRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
|
throw exception(REPLEINSH_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
|
} |
|
|
|
List<RepleinshRequestMainImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
String messageMain = ""; |
|
|
|
//主表的验证
|
|
|
|
//校验供应商基础信息
|
|
|
|
// try {
|
|
|
|
// ShiftDO shiftDO = shiftService.selectShiftExist(createReqVO.getSupplierCode());
|
|
|
|
// BeanUtils.copyProperties(createReqVO, shiftDO);
|
|
|
|
// } catch (ServiceException ex) {
|
|
|
|
// messageMain += ex.getMessage() + ",";
|
|
|
|
// }
|
|
|
|
//子表的验证
|
|
|
|
RepleinshRequestMainDO mainDO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = validateRepleinshRequestMainImport(mainDO); |
|
|
|
List<RepleinshRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<RepleinshRequestDetailDO> subDOList = RepleinshRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for (RepleinshRequestDetailDO purchaseDetailDO : subDOList) { |
|
|
|
String messageDetail = ""; |
|
|
|
// 校验物品基础信息
|
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(purchaseDetailDO.getItemCode()); |
|
|
|
purchaseDetailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
purchaseDetailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
purchaseDetailDO.setItemName(itembasicDO.getName()); |
|
|
|
purchaseDetailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
if (itembasicDO.getUom() != purchaseDetailDO.getUom()) { |
|
|
|
messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + purchaseDetailDO.getUom() + ","; |
|
|
|
// 是否有错误数据
|
|
|
|
boolean flag = true; |
|
|
|
for (RepleinshRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = this.validateRepleinshRequestDetailImport(mainDO, detailDO); |
|
|
|
if(!messageMain.isEmpty() || !messageDetail.isEmpty()) { |
|
|
|
RepleinshRequestMainImportErrorVO importErrorVO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); |
|
|
|
importErrorVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
|
errorList.add(importErrorVO); |
|
|
|
flag = false; |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
// 校验业务类型相关属性
|
|
|
|
try { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRequest"); |
|
|
|
jobUtils.selectItembasicExist(purchaseDetailDO.getItemCode(), businesstypeDO); |
|
|
|
businesstypeService.selectBusinesstypeExist(purchaseDetailDO.getToLocationCode()); |
|
|
|
if (businesstypeDO != null) { |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
} |
|
|
|
createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
createReqVO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
createReqVO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
createReqVO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
RepleinshRequestDetailCreateReqVO purchaseDetailCreateReqVO = RepleinshRequestDetailConvert.INSTANCE.convert1(purchaseDetailDO); |
|
|
|
RepleinshRequestMainImportErrorVO importVO = RepleinshRequestDetailConvert.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()); |
|
|
|
purchaseDetailDO.setInventoryStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.INVENTORY_STATUS, "新增")); |
|
|
|
} |
|
|
|
} |
|
|
|
if (errorList.isEmpty()) { |
|
|
|
// 判断如果不存在,在进行插入
|
|
|
|
if (mode != 3) { |
|
|
|
createReqVO.setNumber(""); |
|
|
|
createReqVO.setStatus(null); |
|
|
|
createReqVO.setFomWarehouseCode(null); |
|
|
|
createReqVO.setToWarehouseCode(null); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
RepleinshRequestMainDO createObj = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
repleinshRequestMainMapper.insert(createObj); |
|
|
|
repleinshRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} else if (mode != 2) { |
|
|
|
createReqVO.setNumber(""); |
|
|
|
createReqVO.setStatus(null); |
|
|
|
createReqVO.setFomWarehouseCode(null); |
|
|
|
createReqVO.setToWarehouseCode(null); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
RepleinshRequestMainDO createObj = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
repleinshRequestMainMapper.updateById(createObj); |
|
|
|
repleinshRequestDetailMapper.updateBatch(subDOList); |
|
|
|
//写入数据
|
|
|
|
if(flag) { |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("RepleinmentRequest"); |
|
|
|
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()); |
|
|
|
repleinshRequestMainMapper.insert(mainDO); |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(mainDO.getId(), "repleinshRequestMain", "导入了补料申请", TrendsTypeEnum.CREATE); |
|
|
|
for (RepleinshRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
detailDO.setInventoryStatus("OK"); // 默认合格
|
|
|
|
} |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
repleinshRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
}); |
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
@ -230,4 +269,328 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<RepleinshRequestMainDO> getRepleinshRequestMainList(CustomConditions conditions) { |
|
|
|
return repleinshRequestMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closeRepleinshRequestMain(Long id) { |
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "关闭了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer reAddRepleinshRequestMain(Long id) { |
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.reAdd(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "打开了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer submitRepleinshRequestMain(Long id) { |
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "提交了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer refusedRepleinshRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "驳回了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer agreeRepleinshRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "审批通过了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer handleRepleinshRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); |
|
|
|
// 校验存在存在下级单据
|
|
|
|
Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, "repleinshRequest", "执行了补料申请", TrendsTypeEnum.UPDATE); |
|
|
|
return repleinshRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入校验主 |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateRepleinshRequestMainImport (RepleinshRequestMainDO mainDo) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入校验子 |
|
|
|
* @param mainDo |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateRepleinshRequestDetailImport(RepleinshRequestMainDO mainDo,RepleinshRequestDetailDO detailDo) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, detailDo); |
|
|
|
} catch (Exception e) { |
|
|
|
message.append(e.getMessage()).append(","); |
|
|
|
} |
|
|
|
ItembasicDO itembasicDO = null; |
|
|
|
try { |
|
|
|
itembasicDO = this.validateItem(detailDo); |
|
|
|
} catch (Exception e) { |
|
|
|
message.append(e.getMessage()).append(","); |
|
|
|
} |
|
|
|
if(!detailDo.getUom().equals(itembasicDO.getUom())) { |
|
|
|
message.append("计量单位【").append(detailDo.getUom()).append("】错误,应该是【").append(itembasicDO.getUom()).append("】").append(","); |
|
|
|
} |
|
|
|
try { |
|
|
|
this.validateBusinesstype(itembasicDO.getType(),itembasicDO.getCode(),detailDo.getToLocationCode(), mainDo,detailDo); |
|
|
|
} catch (Exception e) { |
|
|
|
message.append(e.getMessage()).append(","); |
|
|
|
} |
|
|
|
// 校验零件库位关系
|
|
|
|
// try {
|
|
|
|
// jobUtils.getItemCodeLocationCode(itembasicDO.getCode(),detailDo.getToLocationCode());
|
|
|
|
// } catch (Exception e) {
|
|
|
|
// message.append(e.getMessage()).append(",");
|
|
|
|
// }
|
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验物品信息并赋值 |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private ItembasicDO validateItem(RepleinshRequestDetailDO detailDo) { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); |
|
|
|
detailDo.setItemName(itembasicDO.getName()); |
|
|
|
detailDo.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDo.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDo.setProjectCode(itembasicDO.getProject()); |
|
|
|
return itembasicDO; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验业务类型并赋值 |
|
|
|
* @param itemType |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validateBusinesstype(String itemType,String itemCode,String locationCode, RepleinshRequestMainDO mainDo,RepleinshRequestDetailDO detailDo) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRequest"); |
|
|
|
jobUtils.ifInType(itemType, businesstypeDO); |
|
|
|
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
detailDo.setInventoryStatus(businesstypeDO.getInInventoryStatuses()); |
|
|
|
//校验物品类型
|
|
|
|
jobUtils.selectItembasicExist(itemCode,businesstypeDO); |
|
|
|
//校验到库位
|
|
|
|
jobUtils.ifInFromLocationType(locationCode,businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成任务 OR 记录 |
|
|
|
* @param mainDO |
|
|
|
* @param detailDO |
|
|
|
*/ |
|
|
|
private void generateJob(RepleinshRequestMainDO mainDO, List<RepleinshRequestDetailDO> detailDO) { |
|
|
|
//跳过任务直接生成记录
|
|
|
|
if("TRUE".equals(mainDO.getDirectCreateRecord())) { |
|
|
|
// TODO: 发料申请 跳过任务直接生成记录 未做!!
|
|
|
|
} |
|
|
|
// 任务主表信息
|
|
|
|
RepleinshJobMainDO repleinshJobMainDO = new RepleinshJobMainDO(); |
|
|
|
repleinshJobMainDO.setRequestNumber(mainDO.getNumber()); |
|
|
|
repleinshJobMainDO.setFromWarehouseCode(mainDO.getFomWarehouseCode()); |
|
|
|
repleinshJobMainDO.setToWarehouseCode(mainDO.getToWarehouseCode()); |
|
|
|
repleinshJobMainDO.setRequestTime(mainDO.getRequestTime()); |
|
|
|
repleinshJobMainDO.setRequestDueTime(mainDO.getDueTime()); |
|
|
|
repleinshJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
repleinshJobMainDO.setDepartmentCode(mainDO.getDepartmentCode()); |
|
|
|
repleinshJobMainDO.setFromLocationTypes(mainDO.getFromLocationTypes()); |
|
|
|
repleinshJobMainDO.setToLocationTypes(mainDO.getToLocationTypes()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_JOB.getCode()); |
|
|
|
repleinshJobMainDO.setNumber(number); |
|
|
|
repleinshJobMainDO.setBusinessType(mainDO.getBusinessType()); |
|
|
|
repleinshJobMainDO.setCreateTime(LocalDateTime.now()); |
|
|
|
repleinshJobMainDO.setFromAreaCodes(mainDO.getFromAreaCodes()); |
|
|
|
repleinshJobMainDO.setToAreaCodes(mainDO.getToAreaCodes()); |
|
|
|
repleinshJobMainDO.setId(null); |
|
|
|
repleinshJobMainDO.setCreateTime(null); |
|
|
|
repleinshJobMainDO.setCreator(null); |
|
|
|
repleinshJobMainDO.setUpdateTime(null); |
|
|
|
repleinshJobMainDO.setUpdater(null); |
|
|
|
// 获取任务单据设置
|
|
|
|
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("RepleinmentJob"); |
|
|
|
repleinshJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); |
|
|
|
repleinshJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); |
|
|
|
repleinshJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); |
|
|
|
repleinshJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); |
|
|
|
repleinshJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); |
|
|
|
repleinshJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); |
|
|
|
repleinshJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); |
|
|
|
repleinshJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); |
|
|
|
repleinshJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); |
|
|
|
repleinshJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); |
|
|
|
repleinshJobMainMapper.insert(repleinshJobMainDO); |
|
|
|
|
|
|
|
List<RepleinshJobDetailDO> repleinshJobDetailDOList = new ArrayList<>(); |
|
|
|
List<ExpectinCreateReqVO> expectinCreateReqVOList = new ArrayList<>(); |
|
|
|
List<ExpectoutCreateReqVO> expectoutCreateReqVOList = new ArrayList<>(); |
|
|
|
// 根据发料申请子表数据进行分析
|
|
|
|
detailDO.forEach(item -> { |
|
|
|
// 根据批次策略/下架策略 返回 库存余额DO
|
|
|
|
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),item.getInventoryStatus(),item.getProjectCode(),item.getQty()); |
|
|
|
// 根据 查询出所需数据 解析成 任务子表数据
|
|
|
|
balanceDOListJob.forEach(balanceDOItem -> { |
|
|
|
RepleinshJobDetailDO repleinshJobDetailDO = new RepleinshJobDetailDO(); |
|
|
|
repleinshJobDetailDO.setId(null); |
|
|
|
repleinshJobDetailDO.setCreateTime(null); |
|
|
|
repleinshJobDetailDO.setCreator(null); |
|
|
|
repleinshJobDetailDO.setUpdateTime(null); |
|
|
|
repleinshJobDetailDO.setUpdater(null); |
|
|
|
repleinshJobDetailDO.setPackingNumber(balanceDOItem.getPackingNumber()); |
|
|
|
repleinshJobDetailDO.setContainerNumber(balanceDOItem.getContainerNumber()); |
|
|
|
repleinshJobDetailDO.setBatch(balanceDOItem.getBatch()); |
|
|
|
repleinshJobDetailDO.setFromLocationCode(balanceDOItem.getLocationCode()); |
|
|
|
repleinshJobDetailDO.setToLocationCode(item.getToLocationCode()); |
|
|
|
repleinshJobDetailDO.setItemCode(item.getItemCode()); |
|
|
|
repleinshJobDetailDO.setItemName(item.getItemName()); |
|
|
|
repleinshJobDetailDO.setItemDesc1(item.getItemDesc1()); |
|
|
|
repleinshJobDetailDO.setItemDesc2(item.getItemDesc2()); |
|
|
|
repleinshJobDetailDO.setProjectCode(item.getProjectCode()); |
|
|
|
repleinshJobDetailDO.setQty(item.getQty()); |
|
|
|
repleinshJobDetailDO.setUom(item.getUom()); |
|
|
|
repleinshJobDetailDO.setToOwnerCode(item.getToOwnerCode()); |
|
|
|
repleinshJobDetailDO.setFromOwnerCode(item.getFromOwnerCode()); |
|
|
|
repleinshJobDetailDO.setNumber(repleinshJobMainDO.getNumber()); |
|
|
|
repleinshJobDetailDO.setMasterId(repleinshJobMainDO.getId()); |
|
|
|
repleinshJobDetailDO.setInventoryStatus(item.getInventoryStatus()); |
|
|
|
repleinshJobDetailDOList.add(repleinshJobDetailDO); |
|
|
|
//预计入
|
|
|
|
ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(repleinshJobDetailDO, expectinCreateReqVO); |
|
|
|
expectinCreateReqVO.setJobNumber(number); |
|
|
|
expectinCreateReqVO.setBusinessType(repleinshJobMainDO.getBusinessType()); |
|
|
|
expectinCreateReqVO.setLocationCode(repleinshJobDetailDO.getFromLocationCode()); |
|
|
|
expectinCreateReqVO.setOwnerCode(repleinshJobDetailDO.getFromOwnerCode()); |
|
|
|
expectinCreateReqVOList.add(expectinCreateReqVO); |
|
|
|
//预计出
|
|
|
|
ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(repleinshJobDetailDO, expectoutCreateReqVO); |
|
|
|
expectoutCreateReqVO.setJobNumber(number); |
|
|
|
expectoutCreateReqVO.setBusinessType(repleinshJobMainDO.getBusinessType()); |
|
|
|
expectoutCreateReqVO.setLocationCode(repleinshJobDetailDO.getFromLocationCode()); |
|
|
|
expectoutCreateReqVO.setOwnerCode(repleinshJobDetailDO.getFromOwnerCode()); |
|
|
|
expectoutCreateReqVOList.add(expectoutCreateReqVO); |
|
|
|
}); |
|
|
|
}); |
|
|
|
repleinshJobDetailMapper.insertBatch(repleinshJobDetailDOList); |
|
|
|
//增加预计入
|
|
|
|
expectinService.createExpectin(expectinCreateReqVOList); |
|
|
|
//增加预计出
|
|
|
|
expectoutService.createExpectout(expectoutCreateReqVOList); |
|
|
|
trendsApi.createTrends(repleinshJobMainDO.getId(), "repleinshJob", "补料申请生成补料任务", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|