|
|
@ -1,20 +1,23 @@ |
|
|
|
package com.win.module.wms.service.countRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
import com.win.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.countRequest.vo.*; |
|
|
|
import com.win.module.wms.convert.countRequest.CountRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.countRequest.CountRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.countPlan.CountPlanDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.countRequest.CountRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.countRequest.CountRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.countJob.CountJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.countRequest.CountRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
@ -27,18 +30,17 @@ 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.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 java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.COUNT_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 实现类 |
|
|
@ -68,37 +70,70 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
private RequestsettingService requestsettingService; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private CountJobMainMapper countJobMainMapper; |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Long createCountRequestMain(CountRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
CountRequestMainDO countRequestMain = CountRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
countRequestMainMapper.insert(countRequestMain); |
|
|
|
CountRequestMainDO mainDO = CountRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
countPlanMainService.selectCountPlanExist(mainDO.getPlanNumber()); |
|
|
|
List<CountRequestDetailDO> subDOList = CountRequestDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); |
|
|
|
for (CountRequestDetailDO detailDO : subDOList) { |
|
|
|
this.validateCountRequestDetailCreate(detailDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CountRequest"); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CountRequest"); |
|
|
|
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()); |
|
|
|
countRequestMainMapper.insert(mainDO); |
|
|
|
for (CountRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
} |
|
|
|
countRequestDetailMapper.insertBatch(subDOList); |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "countRequestMain", "增加了盘点申请", TrendsTypeEnum.CREATE); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
// 返回
|
|
|
|
return countRequestMain.getId(); |
|
|
|
return mainDO.getId(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateCountRequestMain(CountRequestMainUpdateReqVO updateReqVO) { |
|
|
|
@Transactional |
|
|
|
public int updateCountRequestMain(CountRequestMainUpdateReqVO updateReqVO) { |
|
|
|
// 校验存在
|
|
|
|
validateCountRequestMainExists(updateReqVO.getId()); |
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(updateReqVO.getId()); |
|
|
|
if(!mainDO.getStatus().equals(RequestStatusEnum.NEW.getCode())) { |
|
|
|
throw exception(COUNT_REQUEST_STATUS_NOT_NEW); |
|
|
|
} |
|
|
|
// 更新
|
|
|
|
CountRequestMainDO updateObj = CountRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
countRequestMainMapper.updateById(updateObj); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void deleteCountRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
validateCountRequestMainExists(id); |
|
|
|
// 删除
|
|
|
|
countRequestMainMapper.deleteById(id); |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(updateReqVO.getId(), "countRequestMain", mainDO.toString(), TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(updateObj); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateCountRequestMainExists(Long id) { |
|
|
|
if (countRequestMainMapper.selectById(id) == null) { |
|
|
|
private CountRequestMainDO validateCountRequestMainExists(Long id) { |
|
|
|
CountRequestMainDO mainDO = countRequestMainMapper.selectById(id); |
|
|
|
if (mainDO == null) { |
|
|
|
throw exception(COUNT_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
return mainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -106,11 +141,6 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
return countRequestMainMapper.selectById(id); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CountRequestMainDO> getCountRequestMainList(Collection<Long> ids) { |
|
|
|
return countRequestMainMapper.selectBatchIds(ids); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageResult<CountRequestMainDO> getCountRequestMainPage(CountRequestMainPageReqVO pageReqVO) { |
|
|
|
return countRequestMainMapper.selectPage(pageReqVO); |
|
|
@ -121,11 +151,18 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
return countRequestMainMapper.selectSenior(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CountRequestMainDO> getCountRequestMainList(CustomConditions conditions) { |
|
|
|
return countRequestMainMapper.selectList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CountRequestMainDO> getCountRequestMainList(CountRequestMainExportReqVO exportReqVO) { |
|
|
|
return countRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public List<CountRequestMainImportErrorVO> importCountRequestMainList(List<CountRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
@ -183,6 +220,95 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
} |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closeCountRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(id); |
|
|
|
Long count = countJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_CANNOT_CLOSE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "countRequest", "关闭了盘点申请", TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer submitCountRequestMain(Long id) { |
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_CANNOT_SUBMIT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, countRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "countRequest", "提交了盘点申请", TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer agreeCountRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_CANNOT_AGREE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, countRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "countRequest", "审批同意了盘点申请", TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer handleCountRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_CANNOT_HANDLE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, countRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, "countRequest", "执行了盘点申请", TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer abortCountRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CountRequestMainDO mainDO = validateCountRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(COUNT_REQUEST_CANNOT_ABORT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "countRequest", "审批拒绝了盘点申请", TrendsTypeEnum.UPDATE); |
|
|
|
return countRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成盘点任务,不要改动事务传播方式,否则会有事务问题 |
|
|
|
* @param mainDO 采购收货主 |
|
|
@ -191,16 +317,16 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
private void generateJob(CountRequestMainDO mainDO, List<CountRequestDetailDO> detailDOList) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验导入,并赋值一些参数,未完全实现 |
|
|
|
* @param mainDo |
|
|
|
* @param mainDO |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateCountRequestMainImport(CountRequestMainDO mainDo) { |
|
|
|
private String validateCountRequestMainImport(CountRequestMainDO mainDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
try { |
|
|
|
CountPlanDetailDO countPlanDetailDO = countPlanMainService.selectCountPlanExist(mainDo.getPlanNumber()); |
|
|
|
//mainDo.setWarehouseCode(countPlanDetailDO.getW)
|
|
|
|
countPlanMainService.selectCountPlanExist(mainDO.getPlanNumber()); |
|
|
|
} catch (ServiceException e) { |
|
|
|
message.append(e.getMessage()).append(","); |
|
|
|
} |
|
|
@ -224,7 +350,7 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); |
|
|
|
if (!Objects.equals(itembasicDO.getUom(), detailDO.getUom())) { |
|
|
|
message.append("计量单位").append("错误,应该是").append(","); |
|
|
|
message.append("计量单位").append(detailDO.getUom()).append("错误,应该是").append(itembasicDO.getUom()).append(","); |
|
|
|
} else { |
|
|
|
detailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
@ -245,4 +371,28 @@ public class CountRequestMainServiceImpl implements CountRequestMainService { |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验导入,并赋值一些参数,未完全实现 |
|
|
|
* @param detailDO |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validateCountRequestDetailCreate(CountRequestDetailDO detailDO) { |
|
|
|
//校验库位基础信息
|
|
|
|
locationService.selectLocation(detailDO.getLocationCode()); |
|
|
|
// 校验物品基础信息
|
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); |
|
|
|
if (!Objects.equals(itembasicDO.getUom(), detailDO.getUom())) { |
|
|
|
throw new UtilException("计量单位" + detailDO.getUom() + "错误,应该是" + itembasicDO.getUom()); |
|
|
|
} else { |
|
|
|
detailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDO.setItemName(itembasicDO.getName()); |
|
|
|
detailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
} |
|
|
|
// 校验业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CountRequest"); |
|
|
|
jobUtils.ifInToLocationType(detailDO.getLocationCode(), businesstypeDO); |
|
|
|
jobUtils.ifOutInventoryStatuses(detailDO.getInventoryStatus(), businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|