From feb735d3374c56595459b675472d03f23dba0b7b Mon Sep 17 00:00:00 2001 From: chenfang Date: Mon, 4 Dec 2023 16:56:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E5=93=81=E5=8F=91=E8=B4=A7=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeliverRequestMainController.java | 79 +++-- .../vo/DeliverRequestMainExcelVO.java | 9 +- .../DeliverRequestDetailDO.java | 3 - .../deliverRequest/DeliverRequestMainDO.java | 1 - .../DeliverRequestDetailMapper.java | 4 +- .../DeliverRequestMainService.java | 43 ++- .../DeliverRequestMainServiceImpl.java | 288 +++++++++++------- 7 files changed, 288 insertions(+), 139 deletions(-) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/DeliverRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/DeliverRequestMainController.java index 3de3f719..9c5f3e08 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/DeliverRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/DeliverRequestMainController.java @@ -137,7 +137,7 @@ public class DeliverRequestMainController { } @PostMapping("/export-excel-senior") - @Operation(summary = "导出发货计划主 Excel") + @Operation(summary = "导出发货申请主 Excel") @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:export')") @OperateLog(type = EXPORT) public void exportPurchasereceiptRequestMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { @@ -185,7 +185,7 @@ public class DeliverRequestMainController { @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) - @PreAuthorize("@ss.hasPermission('wms:inspect-request-main:import')") + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:import')") public CommonResult> importExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode, @@ -205,16 +205,16 @@ public class DeliverRequestMainController { private List getExcelVo(List list, Map mapDropDown) { String[] transferMode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRANSFER_MODE); - mapDropDown.put(5, transferMode); + mapDropDown.put(6, transferMode); String[] locationType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE); - mapDropDown.put(9, locationType); - mapDropDown.put(22, locationType); + mapDropDown.put(10, locationType); + mapDropDown.put(23, locationType); String[] requestStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.REQUEST_STATUS); - mapDropDown.put(19, requestStatus); + mapDropDown.put(20, requestStatus); String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS); - mapDropDown.put(32, inventoryStatus); + mapDropDown.put(33, inventoryStatus); String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); - mapDropDown.put(43, uom); + mapDropDown.put(44, uom); List resultList = new ArrayList<>(); // 导出 for(DeliverRequestMainDO mainDO : list) { @@ -229,16 +229,57 @@ public class DeliverRequestMainController { return resultList; } - @GetMapping("/page111") - public HashMap demo(){ - String batch = "BatchType\":\"1\", \"BatchFormat\":\"yyyyMMdd\", \"BatchDirection\":\"0\""; - HashMap batchRuleMap = new HashMap<>(); - String result = batch.replace("\"", ""); - String[] split = result.split(","); - for (String s : split) { - String[] split1 = s.split(":"); - batchRuleMap.put(split1[0],split1[1]); - } - return batchRuleMap; + @PutMapping("/close") + @Operation(summary = "关闭发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:close')") + public CommonResult closeDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.closeDeliverRequestMain(id); + return success(count > 0); + } + + @PutMapping("/reAdd") + @Operation(summary = "重新添加发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:reAdd')") + public CommonResult reAddDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.reAddDeliverRequestMain(id); + return success(count > 0); + } + + @PutMapping("/submit") + @Operation(summary = "提交发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:submit')") + public CommonResult submitDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.submitDeliverRequestMain(id); + return success(count > 0); + } + + @PutMapping("/agree") + @Operation(summary = "审批通过发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:agree')") + public CommonResult agreeDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.agreeDeliverRequestMain(id); + return success(count > 0); + } + + @PutMapping("/handle") + @Operation(summary = "处理发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:handle')") + public CommonResult handleDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.handleDeliverRequestMain(id); + return success(count > 0); + } + + @PutMapping("/refused") + @Operation(summary = "审批拒绝发货申请申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:deliver-request-main:refused')") + public CommonResult abortDeliverRequestMain(@RequestParam("id") Long id) { + Integer count = deliverRequestMainService.abortDeliverRequestMain(id); + return success(count > 0); } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/vo/DeliverRequestMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/vo/DeliverRequestMainExcelVO.java index 0fef6388..1de867f4 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/vo/DeliverRequestMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/deliverRequest/vo/DeliverRequestMainExcelVO.java @@ -23,6 +23,9 @@ import com.win.framework.excel.core.convert.DictConvert; @Data public class DeliverRequestMainExcelVO { + @ExcelProperty("单据号") + private String number; + @ExcelProperty("发货计划单号") private String deliverPlanNumber; @@ -42,8 +45,7 @@ public class DeliverRequestMainExcelVO { @DictFormat("transfer_mode") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 private String transferMode; - @ExcelProperty(value = "车牌号", converter = DictConvert.class) - @DictFormat("vehicle_plate_number") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @ExcelProperty("车牌号") private String vehiclePlateNumber; @ExcelProperty("从仓库代码") @@ -59,9 +61,6 @@ public class DeliverRequestMainExcelVO { @ExcelProperty("从库区代码范围") private String fromAreaCodes; - @ExcelProperty("单据号") - private String number; - @ExcelProperty("业务类型") private String businessType; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestDetailDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestDetailDO.java index caf820ee..26c7b8eb 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestDetailDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestDetailDO.java @@ -43,7 +43,6 @@ public class DeliverRequestDetailDO extends BaseDO { /** * 包装号 */ - @NotBlank private String packingNumber; /** * 器具号 @@ -52,14 +51,12 @@ public class DeliverRequestDetailDO extends BaseDO { /** * 批次 */ - @NotBlank private String batch; /** * 库存状态 * * 枚举 {@link TODO inventory_status 对应的类} */ - @NotBlank private String inventoryStatus; /** * 到货主代码 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestMainDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestMainDO.java index aae3c99c..c646d879 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestMainDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/deliverRequest/DeliverRequestMainDO.java @@ -64,7 +64,6 @@ public class DeliverRequestMainDO extends BaseDO { /** * 从仓库代码 */ - @NotBlank private String fromWarehouseCode; /** * 到仓库代码 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java index c439743d..c357c06a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java @@ -22,7 +22,7 @@ public interface DeliverRequestDetailMapper extends BaseMapperX selectPage(DeliverRequestDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(DeliverRequestDetailDO::getMasterId, reqVO.getMasterId()) + .eqIfPresent(DeliverRequestDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(DeliverRequestDetailDO::getSoNumber, reqVO.getSoNumber()) .eqIfPresent(DeliverRequestDetailDO::getSoLine, reqVO.getSoLine()) .eqIfPresent(DeliverRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) @@ -54,7 +54,7 @@ public interface DeliverRequestDetailMapper extends BaseMapperX selectList(DeliverRequestDetailExportReqVO reqVO) { return selectList(new LambdaQueryWrapperX() - .eq(DeliverRequestDetailDO::getMasterId, reqVO.getMasterId()) + .eqIfPresent(DeliverRequestDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(DeliverRequestDetailDO::getSoNumber, reqVO.getSoNumber()) .eqIfPresent(DeliverRequestDetailDO::getSoLine, reqVO.getSoLine()) .eqIfPresent(DeliverRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainService.java index 227ce945..3fd823e9 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainService.java @@ -90,13 +90,54 @@ public interface DeliverRequestMainService { */ List getDeliverPlanMainList(CustomConditions conditions); - + /** + * 导入 + * @param datas + * @param mode + * @param updatePart + * @return + */ public List importDeliverRequestList(List datas, Integer mode, boolean updatePart); + /** + * 关闭 + * @param id + * @return + */ public Integer closeDeliverRequestMain(Long id); + + /** + * 重新添加 + * @param id + * @return + */ public Integer reAddDeliverRequestMain(Long id); + + /** + * 提交 + * @param id + * @return + */ public Integer submitDeliverRequestMain(Long id); + + /** + * 审批通过 + * @param id + * @return + */ public Integer agreeDeliverRequestMain(Long id); + + /** + * 执行 + * @param id + * @return + */ public Integer handleDeliverRequestMain(Long id); + + /** + * 审批驳回 + * @param id + * @return + */ public Integer abortDeliverRequestMain(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainServiceImpl.java index f1d580f2..877a942d 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverRequest/DeliverRequestMainServiceImpl.java @@ -1,6 +1,7 @@ package com.win.module.wms.service.deliverRequest; 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.util.validation.ValidationUtils; @@ -20,6 +21,8 @@ import com.win.module.wms.convert.deliverJob.DeliverJobMainConvert; 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.customerdock.CustomerdockDO; +import com.win.module.wms.dal.dataobject.deliverPlan.DeliverPlanDetailDO; +import com.win.module.wms.dal.dataobject.deliverPlan.DeliverPlanMainDO; import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestDetailDO; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestMainDO; @@ -40,6 +43,8 @@ import com.win.module.wms.enums.request.RequestStatusEnum; import com.win.module.wms.enums.request.RequestStatusState; import com.win.module.wms.service.customer.*; import com.win.module.wms.service.customerdock.*; +import com.win.module.wms.service.deliverPlan.DeliverPlanDetailService; +import com.win.module.wms.service.deliverPlan.DeliverPlanMainService; import com.win.module.wms.service.expectout.ExpectoutService; import com.win.module.wms.service.itembasic.ItembasicService; import com.win.module.wms.service.jobsetting.JobsettingService; @@ -53,6 +58,7 @@ import javax.validation.Validator; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import com.win.framework.common.pojo.PageResult; @@ -97,9 +103,16 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService @Resource private DictDataApi dictDataApi; + @Resource private CustomerService customerService; + @Resource + private DeliverPlanMainService deliverPlanMainService; + + @Resource + private DeliverPlanDetailService deliverPlanDetailService; + @Resource private CustomerdockService customerdockService; @@ -197,7 +210,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService public PageResult getDeliverRequestMainSenior(CustomConditions conditions) { return deliverRequestMainMapper.selectSenior(conditions); } - + @Override public List getDeliverRequestMainList(DeliverRequestMainExportReqVO exportReqVO) { return deliverRequestMainMapper.selectList(exportReqVO); @@ -208,7 +221,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.selectSeniorList(conditions); } -// @Override + //关闭 @Override public Integer closeDeliverRequestMain(Long id) { // 校验存在存在下级单据 @@ -227,6 +240,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } + //打开 @Override @Transactional public Integer reAddDeliverRequestMain(Long id) { @@ -246,7 +260,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } -// @Override + //提交 @Transactional @Override public Integer submitDeliverRequestMain(Long id) { @@ -265,7 +279,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } -// @Override + //审批同意 @Transactional @Override public Integer agreeDeliverRequestMain(Long id) { @@ -285,7 +299,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } -// @Override + //执行 @Transactional @Override public Integer handleDeliverRequestMain(Long id) { @@ -303,7 +317,7 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } -// @Override + //审批拒绝 @Transactional @Override public Integer abortDeliverRequestMain(Long id) { @@ -319,100 +333,21 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainMapper.updateById(mainDO); } - /** - * 生成采购收货任务,不要改动事务传播方式,否则会有事务问题 - * @param mainDO 采购收货主 - * @param detailDOList 采购收货子 - */ - private void generateJob(DeliverRequestMainDO mainDO, List detailDOList) { - DeliverJobMainDO deliverJobMainDO = DeliverJobMainConvert.INSTANCE.convert(mainDO); - BeanUtils.copyProperties(mainDO, deliverJobMainDO); - deliverJobMainDO.setRequestNumber(mainDO.getNumber()); - deliverJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); - String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_JOB.getCode()); - deliverJobMainDO.setNumber(number); - deliverJobMainDO.setId(null); - deliverJobMainDO.setRequestTime(mainDO.getRequestTime()); - deliverJobMainDO.setRequestDueTime(mainDO.getDueTime()); - deliverJobMainDO.setCreator(null); - deliverJobMainDO.setCreateTime(null); - deliverJobMainDO.setUpdater(null); - deliverJobMainDO.setUpdateTime(null); - // 获取任务单据设置 - JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("DeliverJob"); - deliverJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); - deliverJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); - deliverJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); - deliverJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); - deliverJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); - deliverJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); - deliverJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); - deliverJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); - deliverJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); - deliverJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); - //增加业务类型 - BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("DeliverJob"); - deliverJobMainDO.setBusinessType(businesstypeDO.getCode()); - deliverJobMainMapper.insert(deliverJobMainDO); - List expectpoutCreateReqVOList = new ArrayList<>(); - List deliverJobDetailDOList = new ArrayList<>(); - detailDOList.forEach(item -> { - // 根据批次策略/下架策略 返回 库存余额DO - List balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),"OK",item.getProjectCode(),item.getQty(),mainDO.getFromLocationTypes()); - // 根据 查询出所需数据 解析成 任务子表数据 - balanceDOListJob.forEach(balanceDOItem -> { - DeliverJobDetailDO deliverJobDetailDo = new DeliverJobDetailDO(); - BeanUtils.copyProperties(item, deliverJobDetailDo); - deliverJobDetailDo.setId(null); - deliverJobDetailDo.setCreateTime(null); - deliverJobDetailDo.setCreator(null); - deliverJobDetailDo.setUpdateTime(null); - deliverJobDetailDo.setUpdater(null); - deliverJobDetailDo.setProjectCode(item.getProjectCode()); - deliverJobDetailDo.setPackingNumber(balanceDOItem.getPackingNumber()); - deliverJobDetailDo.setContainerNumber(balanceDOItem.getContainerNumber()); - deliverJobDetailDo.setBatch(balanceDOItem.getBatch()); - deliverJobDetailDo.setFromLocationCode(balanceDOItem.getLocationCode()); - deliverJobDetailDo.setToLocationCode(item.getToLocationCode()); - deliverJobDetailDo.setItemCode(item.getItemCode()); - deliverJobDetailDo.setItemName(item.getItemName()); - deliverJobDetailDo.setItemDesc1(item.getItemDesc1()); - deliverJobDetailDo.setItemDesc2(item.getItemDesc2()); - deliverJobDetailDo.setProjectCode(item.getProjectCode()); - deliverJobDetailDo.setQty(item.getQty()); - deliverJobDetailDo.setUom(item.getUom()); - deliverJobDetailDo.setNumber(deliverJobMainDO.getNumber()); - deliverJobDetailDo.setMasterId(deliverJobMainDO.getId()); - deliverJobDetailDo.setInventoryStatus(item.getInventoryStatus()); - deliverJobDetailDOList.add(deliverJobDetailDo); - //预计出 - ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); - BeanUtils.copyProperties(deliverJobDetailDo, expectoutCreateReqVO); - expectoutCreateReqVO.setJobNumber(number); - expectoutCreateReqVO.setBusinessType(deliverJobMainDO.getBusinessType()); - expectoutCreateReqVO.setLocationCode(deliverJobDetailDo.getFromLocationCode()); - expectoutCreateReqVO.setBatch(deliverJobDetailDo.getBatch()); - expectoutCreateReqVO.setOwnerCode(deliverJobDetailDo.getOwnerCode()); - expectoutCreateReqVO.setQty(deliverJobDetailDo.getQty()); - expectoutCreateReqVO.setInventoryStatus("OK"); - expectpoutCreateReqVOList.add(expectoutCreateReqVO); - }); - }); - deliverJobDetailMapper.insertBatch(deliverJobDetailDOList); - //增加预计入 - expectoutService.createExpectout(expectpoutCreateReqVOList); - trendsApi.createTrends(deliverJobMainDO.getId(), "DeliverJob", "成品发货申请生成成品发货任务", TrendsTypeEnum.CREATE); - } - + //导入校验主表方法集合 private String validateDeliverRequestMainImport(DeliverRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { StringBuilder message = new StringBuilder(); try{ - validatorcustomercode(mainDo.getCustomerCode()); + validatorDeliverPlanExist(mainDo.getDeliverPlanNumber()); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } + try{ + validatorCustomercode(mainDo.getCustomerCode()); } catch (Exception ex) { message.append(ex.getMessage()).append(","); } try{ - CustomerdockDO customerdockDO = validatorcustomerDockCode(mainDo.getCustomerCode(),mainDo.getCustomerDockCode()); + CustomerdockDO customerdockDO = validatorCustomerDockCode(mainDo.getCustomerCode(),mainDo.getCustomerDockCode()); if(customerdockDO == null){ message.append("未查找到客户" + mainDo.getCustomerCode() + "与" + "客户月台" + mainDo.getCustomerDockCode() + "相关的数据"); }else { @@ -449,15 +384,20 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService } return message.toString(); } - - private String validateIssueRequestDetailImport(DeliverRequestDetailDO detailDo) { + //导入校验子表方法集合 + private String validateIssueRequestDetailImport(DeliverRequestMainDO mainDo, DeliverRequestDetailDO detailDo,BusinesstypeDO businesstypeDO) { StringBuilder message = new StringBuilder(); try { - ItembasicDO itembasicDO = validatoritemcode(detailDo.getItemCode()); + ItembasicDO itembasicDO = validatorItemcode(detailDo.getItemCode()); detailDo.setItemDesc1(itembasicDO.getDesc1()); detailDo.setItemDesc2(itembasicDO.getDesc2()); detailDo.setItemName(itembasicDO.getName()); detailDo.setProjectCode(itembasicDO.getProject()); + if("TRUE".equals(businesstypeDO.getUseOnTheWay())){ + detailDo.setToLocationCode("CUST"); + }else { + detailDo.setToLocationCode(null); + } try{ Isuom(itembasicDO.getUom(),detailDo.getUom()); }catch (Exception ex) { @@ -479,6 +419,11 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService // }catch (Exception ex) { // message.append(ex.getMessage()).append(","); // } + try { + validatorIfPlanQtyBigThanShipedQty(mainDo.getDeliverPlanNumber(),detailDo.getItemCode()); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } try { ValidationUtils.validate(validator, detailDo); } catch (Exception ex) { @@ -487,6 +432,8 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return message.toString(); } + + //导入 @Override @Transactional public List importDeliverRequestList(List datas, Integer mode, boolean updatePart){ @@ -503,13 +450,14 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService // 是否有错误数据 boolean flag = true; for (DeliverRequestDetailDO detailDO : subDOList) { - String messageDetail = validateIssueRequestDetailImport(detailDO); + String messageDetail = validateIssueRequestDetailImport(mainDo,detailDO,businesstypeDO); if (!messageMain.isEmpty() || !messageDetail.isEmpty()) { DeliverRequestImportErrorVO importErrorVO = DeliverRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); importErrorVO.setImportStatus("失败"); messageMain = messageMain + messageDetail; importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); errorList.add(importErrorVO); + messageMain = ""; flag = false; } } @@ -529,12 +477,14 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return errorList; } + //新增时校验主子表方法 private DeliverRequestMainDO validatorToCreate(DeliverRequestMainCreateReqVO createReqVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO) { DeliverRequestMainDO deliverRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); List subList = createReqVO.getSubList(); List subDOList = DeliverRequestDetailConvert.INSTANCE.convertList03(subList); for (DeliverRequestDetailDO deliverRequestDetailDO : subDOList) { - validateDetailMethod(deliverRequestDetailDO); + validatorIfPlanQtyBigThanShipedQty(deliverRequestMainDO.getDeliverPlanNumber(),deliverRequestDetailDO.getItemCode()); + validateDetailMethod(deliverRequestDetailDO,businesstypeDO); } String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_REQUEST.getCode()); deliverRequestMainDO.setNumber(number); @@ -548,10 +498,11 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService return deliverRequestMainDO; } + //主表校验方法 private DeliverRequestMainDO validateMainMethod(DeliverRequestMainBaseVO baseVO ,BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO){ DeliverRequestMainDO deliverRequestMainDO = DeliverRequestMainConvert.INSTANCE.convert(baseVO); - validatorcustomercode(deliverRequestMainDO.getCustomerCode()); - CustomerdockDO customerdockDO = validatorcustomerDockCode(deliverRequestMainDO.getCustomerCode(),deliverRequestMainDO.getCustomerDockCode()); + validatorCustomercode(deliverRequestMainDO.getCustomerCode()); + CustomerdockDO customerdockDO = validatorCustomerDockCode(deliverRequestMainDO.getCustomerCode(),deliverRequestMainDO.getCustomerDockCode()); if(customerdockDO == null){ deliverRequestMainDO.setToWarehouseCode(null); }else { @@ -569,42 +520,161 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService deliverRequestMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes()); deliverRequestMainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); deliverRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); + deliverRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); return deliverRequestMainDO; } - private DeliverRequestDetailDO validateDetailMethod(DeliverRequestDetailDO deliverRequestDetailDO) { - ItembasicDO itembasicDO = validatoritemcode(deliverRequestDetailDO.getItemCode()); + //子表校验方法 + private DeliverRequestDetailDO validateDetailMethod(DeliverRequestDetailDO deliverRequestDetailDO,BusinesstypeDO businesstypeDO) { + ItembasicDO itembasicDO = validatorItemcode(deliverRequestDetailDO.getItemCode()); deliverRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); deliverRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); deliverRequestDetailDO.setItemName(itembasicDO.getName()); deliverRequestDetailDO.setProjectCode(itembasicDO.getProject()); - Isuom(itembasicDO.getUom(),deliverRequestDetailDO.getUom()); - SaleDetailDO saleDetailDO =validatorSale(deliverRequestDetailDO.getSoNumber(),deliverRequestDetailDO.getSoLine(),deliverRequestDetailDO.getItemCode()); + if ("TRUE".equals(businesstypeDO.getUseOnTheWay())) { + deliverRequestDetailDO.setToLocationCode("CUST"); + } else { + deliverRequestDetailDO.setToLocationCode(null); + } + Isuom(itembasicDO.getUom(), deliverRequestDetailDO.getUom()); //TODO 后续销售订单开发后再解除注释 +// SaleDetailDO saleDetailDO =validatorSale(deliverRequestDetailDO.getSoNumber(),deliverRequestDetailDO.getSoLine(),deliverRequestDetailDO.getItemCode()); // if(saleDetailDO!=null) { // Isqty(saleDetailDO.getShippedQty(), deliverRequestDetailDO.getQty(), saleDetailDO.getOrderQty(), deliverRequestDetailDO.getSoNumber(), deliverRequestDetailDO.getSoLine(), deliverRequestDetailDO.getItemCode()); // } return deliverRequestDetailDO; } - private void validatorcustomercode(String code){ + /** + * 生成采购收货任务,不要改动事务传播方式,否则会有事务问题 + * @param mainDO 采购收货主 + * @param detailDOList 采购收货子 + */ + private void generateJob(DeliverRequestMainDO mainDO, List detailDOList) { + DeliverJobMainDO deliverJobMainDO = DeliverJobMainConvert.INSTANCE.convert(mainDO); + BeanUtils.copyProperties(mainDO, deliverJobMainDO); + deliverJobMainDO.setRequestNumber(mainDO.getNumber()); + deliverJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); + String number = serialNumberApi.generateCode(RuleCodeEnum.DELIVER_JOB.getCode()); + deliverJobMainDO.setNumber(number); + deliverJobMainDO.setId(null); + deliverJobMainDO.setRequestTime(mainDO.getRequestTime()); + deliverJobMainDO.setRequestDueTime(mainDO.getDueTime()); + deliverJobMainDO.setCreator(null); + deliverJobMainDO.setCreateTime(null); + deliverJobMainDO.setUpdater(null); + deliverJobMainDO.setUpdateTime(null); + deliverJobMainDO.setStatus("1"); + // 获取任务单据设置 + JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("DeliverJob"); + deliverJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); + deliverJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); + deliverJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); + deliverJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); + deliverJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); + deliverJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); + deliverJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); + deliverJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); + deliverJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); + deliverJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); + //增加业务类型 + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("DeliverJob"); + deliverJobMainDO.setBusinessType(businesstypeDO.getCode()); + deliverJobMainDO.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses()); + deliverJobMainDO.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses()); + deliverJobMainMapper.insert(deliverJobMainDO); + List expectpoutCreateReqVOList = new ArrayList<>(); + List deliverJobDetailDOList = new ArrayList<>(); + detailDOList.forEach(item -> { + // 根据批次策略/下架策略 返回 库存余额DO + List balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),"OK",item.getProjectCode(),item.getQty(),null); + // 根据 查询出所需数据 解析成 任务子表数据 + balanceDOListJob.forEach(balanceDOItem -> { + DeliverJobDetailDO deliverJobDetailDo = new DeliverJobDetailDO(); + BeanUtils.copyProperties(item, deliverJobDetailDo); + deliverJobDetailDo.setId(null); + deliverJobDetailDo.setCreateTime(null); + deliverJobDetailDo.setCreator(null); + deliverJobDetailDo.setUpdateTime(null); + deliverJobDetailDo.setUpdater(null); + if("TRUE".equals(businesstypeDO.getUseOnTheWay())){ + deliverJobDetailDo.setToLocationCode("FAC_INTRANS"); + }else { + deliverJobDetailDo.setToLocationCode(null); + } + deliverJobDetailDo.setPackingNumber(balanceDOItem.getPackingNumber()); + deliverJobDetailDo.setContainerNumber(balanceDOItem.getContainerNumber()); + deliverJobDetailDo.setBatch(balanceDOItem.getBatch()); + deliverJobDetailDo.setFromLocationCode(balanceDOItem.getLocationCode()); + deliverJobDetailDo.setToLocationCode(item.getToLocationCode()); + deliverJobDetailDo.setItemCode(item.getItemCode()); + deliverJobDetailDo.setItemName(item.getItemName()); + deliverJobDetailDo.setItemDesc1(item.getItemDesc1()); + deliverJobDetailDo.setItemDesc2(item.getItemDesc2()); + deliverJobDetailDo.setProjectCode(item.getProjectCode()); + deliverJobDetailDo.setQty(item.getQty()); + deliverJobDetailDo.setUom(item.getUom()); + deliverJobDetailDo.setNumber(deliverJobMainDO.getNumber()); + deliverJobDetailDo.setMasterId(deliverJobMainDO.getId()); + deliverJobDetailDo.setInventoryStatus(balanceDOItem.getInventoryStatus()); + deliverJobDetailDOList.add(deliverJobDetailDo); + //预计出 + ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); + BeanUtils.copyProperties(deliverJobDetailDo, expectoutCreateReqVO); + expectoutCreateReqVO.setJobNumber(number); + expectoutCreateReqVO.setBusinessType(deliverJobMainDO.getBusinessType()); + expectoutCreateReqVO.setLocationCode(deliverJobDetailDo.getFromLocationCode()); + expectoutCreateReqVO.setBatch(deliverJobDetailDo.getBatch()); + expectoutCreateReqVO.setOwnerCode(deliverJobDetailDo.getOwnerCode()); + expectoutCreateReqVO.setQty(deliverJobDetailDo.getQty()); + expectoutCreateReqVO.setInventoryStatus(balanceDOItem.getInventoryStatus()); + expectpoutCreateReqVOList.add(expectoutCreateReqVO); + }); + }); + deliverJobDetailMapper.insertBatch(deliverJobDetailDOList); + //增加预计入 + expectoutService.createExpectout(expectpoutCreateReqVOList); + trendsApi.createTrends(deliverJobMainDO.getId(), "DeliverJob", "成品发货申请生成成品发货任务", TrendsTypeEnum.CREATE); + } + + //校验发货计划是否存在 + private DeliverPlanMainDO validatorDeliverPlanExist(String code){ + return deliverPlanMainService.selectDeliverPlanExist(code); + } + + //校验客户是否存在 + private void validatorCustomercode(String code){ customerService.selectCustomerExist(code); } - private CustomerdockDO validatorcustomerDockCode(String customerCode,String customerDockCode){ + //校验客户月台是否存在 + private CustomerdockDO validatorCustomerDockCode(String customerCode,String customerDockCode){ return customerdockService.getCustomerdockByCustomerCode(customerCode,customerDockCode); } - private ItembasicDO validatoritemcode(String code){ + //校验物品代码是否存在 + private ItembasicDO validatorItemcode(String code){ ItembasicDO itembasicDO = itembasicService.selectItembasic(code); return itembasicDO; } + //校验发货计划数量是否大于已发货数量 + private void validatorIfPlanQtyBigThanShipedQty(String number,String itemCode){ + DeliverPlanDetailDO deliverPlanDetailDO = deliverPlanDetailService.selectDeliverPlanDetail(number, itemCode); + BigDecimal planQty = deliverPlanDetailDO.getPlanQty(); + BigDecimal shippedQty = deliverPlanDetailDO.getShippedQty(); + if(shippedQty.compareTo(planQty) == 1){ + throw new UtilException("发货计划" + deliverPlanDetailDO.getNumber() + "的已发货数量" + shippedQty + "大于" + "计划数量" + planQty + ",超出了" + shippedQty.subtract(planQty)); + } + } + + //校验销售订单明细 private SaleDetailDO validatorSale(String SoNumber,String SoLine,String ItemCode ){ SaleDetailDO saleDetailDO =deliverJobMainService.saleDetailExist(SoNumber,SoLine,ItemCode ); return saleDetailDO; } + //校验单位是否正确 private String Isuom(String uom1, String uom2) { DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(uom1); String value = dictDataRespDTO.getLabel(); @@ -613,10 +683,12 @@ public class DeliverRequestMainServiceImpl implements DeliverRequestMainService if(value2.equals(value)){ return "ture"; }else { - throw exception(UOM_ERROR, value2); + throw exception(UOM_ERROR, value); } } + //TODO 后续销售订单开发后再解除注释 + //校验发货数量与未发货数量 // private String Isqty(BigDecimal shippedqty, BigDecimal detailqty, BigDecimal orderqty, String sonumber, String soline, String itemcode) { // BigDecimal resultqty = orderqty.subtract(shippedqty); // if(resultqty.compareTo(detailqty) > 0)