diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/RepleinshJobMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/RepleinshJobMainController.java index 9bcc88f2..9a41201a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/RepleinshJobMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/RepleinshJobMainController.java @@ -1,10 +1,12 @@ package com.win.module.wms.controller.repleinshJob; import com.win.framework.common.pojo.CustomConditions; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.convert.repleinshJob.RepleinshJobDetailConvert; import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobDetailDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.repleinshJob.RepleinshJobDetailService; import jodd.util.StringUtil; import org.springframework.web.bind.annotation.*; @@ -110,23 +112,105 @@ public class RepleinshJobMainController { return success(RepleinshJobMainConvert.INSTANCE.convertPage(pageResult)); } + private List getExcelVo(List list, Map mapDropDown) { + String[] locationType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE); + mapDropDown.put(14, locationType); + mapDropDown.put(15, locationType); + String[] areaType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE); + mapDropDown.put(23, areaType); + mapDropDown.put(24, areaType); + String[] trueFalse = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(25, trueFalse); + mapDropDown.put(26, trueFalse); + mapDropDown.put(27, trueFalse); + mapDropDown.put(28, trueFalse); + mapDropDown.put(29, trueFalse); + mapDropDown.put(30, trueFalse); + mapDropDown.put(31, trueFalse); + mapDropDown.put(32, trueFalse); + mapDropDown.put(33, trueFalse); + mapDropDown.put(34, trueFalse); + mapDropDown.put(35, trueFalse); + mapDropDown.put(36, trueFalse); + String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS); + mapDropDown.put(40, inventoryStatus); + String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); + mapDropDown.put(49, uom); + List resultList = new ArrayList<>(); + // 导出 + for(RepleinshJobMainDO mainDO : list) { + List subList = repleinshJobDetailService.selectList(mainDO.getId()); + for(RepleinshJobDetailDO detailDO : subList) { + RepleinshJobMainExcelVO vo = RepleinshJobMainConvert.INSTANCE.convert(mainDO, detailDO); + AdminUserRespDTO user = userApi.getUser(Long.valueOf(mainDO.getCreator())); + vo.setCreator(user.getNickname()); + vo.setUpdater(user.getNickname()); + resultList.add(vo); + } + } + return resultList; + } + @GetMapping("/export-excel") - @Operation(summary = "导出补料任务主 Excel") + @Operation(summary = "导出补料任务 Excel") @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:export')") @OperateLog(type = EXPORT) public void exportRepleinshJobMainExcel(@Valid RepleinshJobMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = repleinshJobMainService.getRepleinshJobMainList(exportReqVO); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); // 导出 Excel - List datas = RepleinshJobMainConvert.INSTANCE.convertList02(list); - for(RepleinshJobMainExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } - ExcelUtils.write(response, "补料任务主.xls", "数据", RepleinshJobMainExcelVO.class, datas); + ExcelUtils.write(response, "补料任务.xlsx", "补料任务", RepleinshJobMainExcelVO.class, resultList, mapDropDown); } + @PostMapping("/export-excel-senior") + @Operation(summary = "导出补料任务 Excel") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:export')") + @OperateLog(type = EXPORT) + public void exportRepleinshJobMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { + List list = repleinshJobMainService.getRepleinshJobMainList(conditions); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); + // 导出 Excel + ExcelUtils.write(response, "发料任务.xlsx", "发料任务", RepleinshJobMainExcelVO.class, resultList, mapDropDown); + } + + @PutMapping(value = "/accept") + @Operation(summary = "承接任务") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:accept')") + public CommonResult acceptRepleinshJobMain(@RequestParam("id") Long id) { + int result = repleinshJobMainService.acceptRepleinshJobMain(id); + return success(result > 0); + } + + @PutMapping(value = "/abandon") + @Operation(summary = "放弃任务") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:abandon')") + public CommonResult abandonRepleinshJobMain(@RequestParam("id") Long id) { + int result = repleinshJobMainService.abandonRepleinshJobMain(id); + return success(result > 0); + } + + @PutMapping(value = "/close") + @Operation(summary = "关闭任务") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:close')") + public CommonResult closeRepleinshJobMain(@RequestParam("id") Long id) { + int result = repleinshJobMainService.closeRepleinshJobMain(id); + return success(result > 0); + } + + @PutMapping("/execute") + @Operation(summary = "执行任务") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-job-main:execute')") + public CommonResult executeRepleinshJobMain(@Valid @RequestBody RepleinshJobMainUpdateReqVO updateReqVO) { + Integer count = repleinshJobMainService.executeRepleinshJobMain(updateReqVO); + return success(count > 0); + } + + @GetMapping("/getRepleinshJobById") @Operation(summary = "APP获得补料任务主子表明细列表") @Parameter(name = "id", description = "编号", required = true, example = "1024") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailPageReqVO.java index 31b22114..bda108c8 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailPageReqVO.java @@ -75,4 +75,8 @@ public class RepleinshJobDetailPageReqVO extends PageParam { @Schema(description = "到货主代码") private String toOwnerCode; + @Schema(description = "主表ID") + private String masterId; + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailUpdateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailUpdateReqVO.java index 5488446c..743d9040 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailUpdateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobDetailUpdateReqVO.java @@ -3,10 +3,14 @@ package com.win.module.wms.controller.repleinshJob.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import java.util.List; +import java.util.Map; + @Schema(description = "管理后台 - 补料任务子更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class RepleinshJobDetailUpdateReqVO extends RepleinshJobDetailBaseVO { - + @Schema(description = "子表记录数据") + private List> recordLst; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainExcelVO.java index 3b03205c..3c167048 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainExcelVO.java @@ -1,5 +1,7 @@ package com.win.module.wms.controller.repleinshJob.vo; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.job.JobStatusConverter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -33,8 +35,7 @@ public class RepleinshJobMainExcelVO { @ExcelProperty("要求截止时间") private LocalDateTime requestDueTime; - @ExcelProperty(value = "状态", converter = DictConvert.class) - @DictFormat("job_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @ExcelProperty(value = "状态", converter = JobStatusConverter.class) private String status; @ExcelProperty("过期时间") @@ -46,10 +47,6 @@ public class RepleinshJobMainExcelVO { @ExcelProperty("最后更新者Id") private String updater; - @ExcelProperty(value = "状态", converter = DictConvert.class) - @DictFormat("job_stage_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - private String jobStageStatus; - @ExcelProperty("优先级") private Integer priority; @@ -72,11 +69,11 @@ public class RepleinshJobMainExcelVO { private LocalDateTime completeTime; @ExcelProperty(value = "从库位类型范围", converter = DictConvert.class) - @DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.LOCATION_TYPE) private String fromLocationTypes; @ExcelProperty(value = "到库位类型范围", converter = DictConvert.class) - @DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.LOCATION_TYPE) private String toLocationTypes; @ExcelProperty("单据号") @@ -100,50 +97,99 @@ public class RepleinshJobMainExcelVO { @ExcelProperty("到仓库代码") private String toWarehouseCode; - @ExcelProperty("从库区代码范围") + @ExcelProperty(value = "从库区代码范围", converter = DictConvert.class) + @DictFormat(DictTypeConstants.AREA_TYPE) private String fromAreaCodes; - @ExcelProperty("到库区代码范围") + @ExcelProperty(value = "到库区代码范围", converter = DictConvert.class) + @DictFormat(DictTypeConstants.AREA_TYPE) private String toAreaCodes; @ExcelProperty(value = "自动完成", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String autoComplete; @ExcelProperty(value = "允许修改库位", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowModifyLocation; @ExcelProperty(value = "允许修改数量", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowModifyQty; @ExcelProperty(value = "允许大于推荐数量", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowBiggerQty; @ExcelProperty(value = "允许小于推荐数量", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowSmallerQty; @ExcelProperty(value = "允许修改库存状态", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowModifyInventoryStatus; @ExcelProperty(value = "允许连续扫描", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowContinuousScanning; @ExcelProperty(value = "允许部分完成", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowPartialComplete; + @ExcelProperty(value = "允许修改箱码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String allowModifyPackingNumber; + @ExcelProperty(value = "允许修改批次", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRUE_FALSE) private String allowModifyBatch; - @ExcelProperty(value = "允许修改箱码", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - private String allowModifyPackingNumber; + @ExcelProperty("包装号") + private String packingNumber; + + @ExcelProperty("器具号") + private String containerNumber; + + @ExcelProperty("批次") + private String batch; + + @ExcelProperty(value = "库存状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.INVENTORY_STATUS) + private String inventoryStatus; + + @ExcelProperty("从库位代码") + private String fromLocationCode; + + @ExcelProperty("到库位代码") + private String toLocationCode; + + @ExcelProperty("物品代码") + private String itemCode; + + @ExcelProperty("物品名称") + private String itemName; + + @ExcelProperty("物品描述1") + private String itemDesc1; + + @ExcelProperty("物品描述2") + private String itemDesc2; + + @ExcelProperty("项目代码") + private String projectCode; + + @ExcelProperty("数量") + private String qty; + + @ExcelProperty(value = "计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String uom; + + @ExcelProperty("从货主代码") + private String fromOwnerCode; + + @ExcelProperty("到货主代码") + private String toOwnerCode; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainUpdateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainUpdateReqVO.java index da8a8352..59f0629e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainUpdateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshJob/vo/RepleinshJobMainUpdateReqVO.java @@ -1,12 +1,17 @@ package com.win.module.wms.controller.repleinshJob.vo; +import com.win.module.wms.controller.issueJob.vo.IssueJobDetailUpdateReqVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import javax.validation.Valid; +import java.util.List; + @Schema(description = "管理后台 - 补料任务主更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class RepleinshJobMainUpdateReqVO extends RepleinshJobMainBaseVO { - + @Schema(description = "子表数据") + private List<@Valid RepleinshJobDetailUpdateReqVO> subList; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshJob/RepleinshJobMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshJob/RepleinshJobMainConvert.java index ac61146b..d77e2e66 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshJob/RepleinshJobMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshJob/RepleinshJobMainConvert.java @@ -8,7 +8,10 @@ import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainCreateReqVO import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainExcelVO; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainRespVO; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainUpdateReqVO; +import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobDetailDO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; @@ -34,4 +37,13 @@ public interface RepleinshJobMainConvert { List convertList02(List list); + @Mappings({ + @Mapping(source = "mainDO.number", target = "number"), + @Mapping(source = "mainDO.remark", target = "remark"), + @Mapping(source = "mainDO.createTime", target = "createTime"), + @Mapping(source = "mainDO.creator", target = "creator"), + @Mapping(source = "mainDO.updateTime", target = "updateTime"), + @Mapping(source = "mainDO.updater", target = "updater"), + }) + RepleinshJobMainExcelVO convert(RepleinshJobMainDO mainDO, RepleinshJobDetailDO detailDO); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRecord/RepleinshRecordDetailDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRecord/RepleinshRecordDetailDO.java index 2883a352..a0f0f186 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRecord/RepleinshRecordDetailDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRecord/RepleinshRecordDetailDO.java @@ -148,5 +148,9 @@ public class RepleinshRecordDetailDO extends BaseDO { * 到批次 */ private String toBatch; + /** + * 供应商代码 + */ + private String supplierCode; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobDetailMapper.java index cf4f14bf..d6d72a73 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobDetailMapper.java @@ -9,6 +9,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobDetailExportReqVO; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobDetailPageReqVO; +import com.win.module.wms.dal.dataobject.issueJob.IssueJobDetailDO; import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobDetailDO; import org.apache.ibatis.annotations.Mapper; @@ -22,6 +23,7 @@ public interface RepleinshJobDetailMapper extends BaseMapperX selectPage(RepleinshJobDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RepleinshJobDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(RepleinshJobDetailDO::getPackingNumber, reqVO.getPackingNumber()) .eqIfPresent(RepleinshJobDetailDO::getContainerNumber, reqVO.getContainerNumber()) .eqIfPresent(RepleinshJobDetailDO::getBatch, reqVO.getBatch()) @@ -71,4 +73,10 @@ public interface RepleinshJobDetailMapper extends BaseMapperX selectList(Long masterId) { + return selectList(new LambdaQueryWrapperX() + .eq(RepleinshJobDetailDO::getMasterId, masterId)); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java index 69822438..b3ee383c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java @@ -125,4 +125,7 @@ public interface RepleinshJobMainMapper extends BaseMapperX } + default List selectSeniorList(CustomConditions conditions) { + return selectList(QueryWrapperUtils.structure(conditions)); + } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueJob/IssueJobMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueJob/IssueJobMainServiceImpl.java index 185a738e..35cda686 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueJob/IssueJobMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueJob/IssueJobMainServiceImpl.java @@ -42,6 +42,7 @@ import com.win.module.wms.service.expectin.ExpectinService; import com.win.module.wms.service.expectout.ExpectoutService; import com.win.module.wms.service.jobsetting.JobsettingService; import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.recordsetting.RecordsettingService; import com.win.module.wms.service.supplieritem.SupplieritemService; import com.win.module.wms.service.transaction.TransactionService; import com.win.module.wms.util.JobUtils; @@ -75,6 +76,8 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class IssueJobMainServiceImpl implements IssueJobMainService { + @Resource + private RecordsettingService recordsettingService; @Resource private SupplieritemService supplieritemService; @Resource @@ -245,14 +248,22 @@ public class IssueJobMainServiceImpl implements IssueJobMainService { String number = serialNumberApi.generateCode(RuleCodeEnum.INSPECT_RECORD.getCode()); issueRecordMainDO.setNumber(number); issueRecordMainDO.setJobNumber(issueJobMainDO.getNumber()); - issueRecordMainDO.setId(null); issueRecordMainDO.setWorkshopCode(issueJobMainDO.getWorkShopCode()); + issueRecordMainDO.setExecuteTime(LocalDateTime.now()); + issueRecordMainDO.setActiveDate(LocalDateTime.now()); + issueRecordMainDO.setAvailable("TRUE"); + issueRecordMainDO.setDueTime(issueJobMainDO.getRequestDueTime()); + issueRecordMainDO.setId(null); issueRecordMainDO.setCreator(null); issueRecordMainDO.setCreateTime(null); issueRecordMainDO.setUpdater(null); issueRecordMainDO.setUpdateTime(null); + // 接口类型 + issueRecordMainDO.setInterfaceType(recordsettingService.selectRecordsettingExist("IssueRecord").getInterfaceType()); //增加业务类型 - BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueJob"); + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRecord"); + issueRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); + issueRecordMainDO.setInTransactionType(businesstypeDO.getInTransactionType()); issueRecordMainDO.setBusinessType(businesstypeDO.getCode()); issueRecordMainMapper.insert(issueRecordMainDO); // 获取参数中的sublist @@ -300,7 +311,7 @@ public class IssueJobMainServiceImpl implements IssueJobMainService { TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); BeanUtils.copyProperties(issueRecordDetailDO, transactionCreateReqVO); TransactiontypeDO transactiontypeDO = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); - transactionCreateReqVO.setWorker(issueRecordDetailDO.getCreator()); + transactionCreateReqVO.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); transactionCreateReqVO.setInventoryAction(transactiontypeDO.getInventoryAction()); transactionCreateReqVO.setTransactionType(transactiontypeDO.getCode()); transactionCreateReqVO.setBusinessType(issueRecordMainDO.getBusinessType()); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailService.java index 0480296e..893a71d2 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailService.java @@ -79,4 +79,5 @@ public interface RepleinshJobDetailService { */ List getRepleinshJobDetailList(RepleinshJobDetailExportReqVO exportReqVO); + List selectList(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailServiceImpl.java index 885d8d23..b7eefd94 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobDetailServiceImpl.java @@ -83,4 +83,9 @@ public class RepleinshJobDetailServiceImpl implements RepleinshJobDetailService return repleinshJobDetailMapper.selectList(exportReqVO); } + @Override + public List selectList(Long masterId) { + return repleinshJobDetailMapper.selectList(masterId); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainService.java index 83050635..2236ac0f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainService.java @@ -96,4 +96,14 @@ public interface RepleinshJobMainService { * @return */ Map getCountByStatus(@Nullable Collection types); + + List getRepleinshJobMainList(CustomConditions conditions); + + Integer acceptRepleinshJobMain(Long id); + + Integer abandonRepleinshJobMain(Long id); + + Integer executeRepleinshJobMain(RepleinshJobMainUpdateReqVO updateReqVO); + + Integer closeRepleinshJobMain(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainServiceImpl.java index 58ab5f35..a52f8c80 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshJob/RepleinshJobMainServiceImpl.java @@ -1,15 +1,41 @@ package com.win.module.wms.service.repleinshJob; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.CustomConditions; -import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainCreateReqVO; -import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainExportReqVO; -import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainPageReqVO; -import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainUpdateReqVO; +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.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.repleinshJob.vo.*; +import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.location.LocationDO; +import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobDetailDO; +import com.win.module.wms.dal.dataobject.repleinshRecord.RepleinshRecordDetailDO; +import com.win.module.wms.dal.dataobject.repleinshRecord.RepleinshRecordMainDO; +import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.mysql.repleinshRecord.RepleinshRecordDetailMapper; +import com.win.module.wms.dal.mysql.repleinshRecord.RepleinshRecordMainMapper; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.job.JobStatusState; +import com.win.module.wms.service.expectin.ExpectinService; +import com.win.module.wms.service.expectout.ExpectoutService; +import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.recordsetting.RecordsettingService; +import com.win.module.wms.service.transaction.TransactionService; +import com.win.module.wms.util.JobUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +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.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; @@ -19,6 +45,7 @@ import com.win.module.wms.convert.repleinshJob.RepleinshJobMainConvert; import com.win.module.wms.dal.mysql.repleinshJob.RepleinshJobMainMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.module.wms.enums.ErrorCodeConstants.*; /** @@ -30,6 +57,30 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class RepleinshJobMainServiceImpl implements RepleinshJobMainService { + @Resource + private ExpectinService expectinService; + @Resource + private ExpectoutService expectoutService; + @Resource + private TransactionService transactionService; + @Resource + private RepleinshRecordDetailMapper repleinshRecordDetailMapper; + @Resource + private LocationService locationService; + @Resource + private RecordsettingService recordsettingService; + @Resource + private RepleinshRecordMainMapper repleinshRecordMainMapper; + @Resource + private JobUtils jobUtils; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private RepleinshJobDetailService repleinshJobDetailService; + @Resource + private TrendsApi trendsApi; + @Resource + private AdminUserApi userApi; @Resource private RepleinshJobMainMapper repleinshJobMainMapper; @@ -59,10 +110,12 @@ public class RepleinshJobMainServiceImpl implements RepleinshJobMainService { repleinshJobMainMapper.deleteById(id); } - private void validateRepleinshJobMainExists(Long id) { - if (repleinshJobMainMapper.selectById(id) == null) { + private RepleinshJobMainDO validateRepleinshJobMainExists(Long id) { + RepleinshJobMainDO repleinshJobMainDO = repleinshJobMainMapper.selectById(id); + if (repleinshJobMainDO == null) { throw exception(REPLEINSH_JOB_MAIN_NOT_EXISTS); } + return repleinshJobMainDO; } @Override public PageResult getRepleinshJobMainSenior(CustomConditions conditions) { @@ -109,4 +162,175 @@ public class RepleinshJobMainServiceImpl implements RepleinshJobMainService { map.put("count", l.intValue()); return map; } + + @Override + public List getRepleinshJobMainList(CustomConditions conditions) { + return repleinshJobMainMapper.selectSeniorList(conditions); + } + + @Override + @Transactional + public Integer acceptRepleinshJobMain(Long id) { + RepleinshJobMainDO repleinshJobMainDO = this.validateRepleinshJobMainExists(id); + JobStatusState jobStatusState = new JobStatusState(repleinshJobMainDO.getStatus()); + if(!jobStatusState.accept()) { + throw exception(REPLEINSH_JOB_MAIN_STATUS_ERROR); + } + Long userId = getLoginUserId(); + AdminUserRespDTO userRespDTO = userApi.getUser(userId); + repleinshJobMainDO.setStatus(jobStatusState.getState().getCode()); + repleinshJobMainDO.setAcceptUserId(String.valueOf(userId)); + repleinshJobMainDO.setAcceptUserName(userRespDTO.getNickname()); + repleinshJobMainDO.setAcceptTime(LocalDateTime.now()); + trendsApi.createTrends(id, "repleinshJob", "承接了补料任务", TrendsTypeEnum.UPDATE); + return repleinshJobMainMapper.updateById(repleinshJobMainDO); + } + + @Override + @Transactional + public Integer abandonRepleinshJobMain(Long id) { + RepleinshJobMainDO repleinshJobMainDO = this.validateRepleinshJobMainExists(id); + JobStatusState jobStatusState = new JobStatusState(repleinshJobMainDO.getStatus()); + if(!jobStatusState.cancelAccept()) { + throw exception(REPLEINSH_JOB_MAIN_STATUS_ERROR); + } + repleinshJobMainDO.setStatus(jobStatusState.getState().getCode()); + repleinshJobMainDO.setAcceptUserId(null); + repleinshJobMainDO.setAcceptUserName(null); + repleinshJobMainDO.setAcceptTime(null); + trendsApi.createTrends(id, "repleinshJob", "取消了补料任务", TrendsTypeEnum.UPDATE); + return repleinshJobMainMapper.updateById(repleinshJobMainDO); + } + + @Override + @Transactional + public Integer closeRepleinshJobMain(Long id) { + RepleinshJobMainDO repleinshJobMainDO = this.validateRepleinshJobMainExists(id); + JobStatusState jobStatusState = new JobStatusState(repleinshJobMainDO.getStatus()); + if(!jobStatusState.close()) { + throw exception(REPLEINSH_JOB_MAIN_STATUS_ERROR); + } + repleinshJobMainDO.setStatus(jobStatusState.getState().getCode()); + trendsApi.createTrends(id, "repleinshJob", "关闭了补料任务", TrendsTypeEnum.UPDATE); + return repleinshJobMainMapper.updateById(repleinshJobMainDO); + } + + @Override + @Transactional + public Integer executeRepleinshJobMain(RepleinshJobMainUpdateReqVO repleinshJobMainUpdateReqVO) { + //查询数据 + RepleinshJobMainDO repleinshJobMainDO = this.validateRepleinshJobMainExists(repleinshJobMainUpdateReqVO.getId()); + List subList = repleinshJobDetailService.selectList(repleinshJobMainDO.getId()); + JobStatusState jobStatusState = new JobStatusState(repleinshJobMainDO.getStatus()); + boolean flag = jobStatusState.execute(); + if(!flag) { + throw new ServiceException(REPLEINSH_JOB_MAIN_STATUS_ERROR); + } + //更新完成信息 + Long userId = getLoginUserId(); + AdminUserRespDTO userRespDTO = userApi.getUser(userId); + repleinshJobMainDO.setStatus(jobStatusState.getState().getCode()); + repleinshJobMainDO.setCompleteTime(LocalDateTime.now()); + repleinshJobMainDO.setCompleteUserId(String.valueOf(userRespDTO.getId())); + repleinshJobMainDO.setCompleteUserName(userRespDTO.getNickname()); + //更新任务表状态 + int result = repleinshJobMainMapper.updateById(repleinshJobMainDO); + //创建 发料记录 主表 + RepleinshRecordMainDO repleinshRecordMainDO = new RepleinshRecordMainDO(); + BeanUtils.copyProperties(repleinshJobMainDO, repleinshRecordMainDO); + String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_RECORD.getCode()); + repleinshRecordMainDO.setNumber(number); + repleinshRecordMainDO.setJobNumber(repleinshJobMainDO.getNumber()); + repleinshRecordMainDO.setExecuteTime(LocalDateTime.now()); + repleinshRecordMainDO.setActiveDate(LocalDateTime.now()); + repleinshRecordMainDO.setAvailable("TRUE"); + repleinshRecordMainDO.setDueTime(repleinshJobMainDO.getRequestDueTime()); + repleinshRecordMainDO.setId(null); + repleinshRecordMainDO.setCreator(null); + repleinshRecordMainDO.setCreateTime(null); + repleinshRecordMainDO.setUpdater(null); + repleinshRecordMainDO.setUpdateTime(null); + // 接口类型 + repleinshRecordMainDO.setInterfaceType(recordsettingService.selectRecordsettingExist("RepleinmentRecord").getInterfaceType()); + //增加业务类型 + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRecord"); + repleinshRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); + repleinshRecordMainDO.setInTransactionType(businesstypeDO.getInTransactionType()); + repleinshRecordMainDO.setBusinessType(businesstypeDO.getCode()); + repleinshRecordMainMapper.insert(repleinshRecordMainDO); + // 获取参数中的sublist + List repleinshJobDetailUpdateReqVOList = repleinshJobMainUpdateReqVO.getSubList(); + //发料记录子 + List repleinshRecordDetailDOList = new ArrayList<>(); + //库存事务 + List transactionCreateReqVOList = new ArrayList<>(); + subList.forEach(subListItem -> { + // 获取参数中recordLst + repleinshJobDetailUpdateReqVOList.forEach(DetailUpdateItem -> { + // 匹配任务子表与参数中子表 + if (DetailUpdateItem.getId().equals(subListItem.getId())) { + List> recordLst = DetailUpdateItem.getRecordLst(); + recordLst.forEach(recordLstItem -> { + RepleinshRecordDetailDO repleinshRecordDetailDO = new RepleinshRecordDetailDO(); + BeanUtils.copyProperties(subListItem, repleinshRecordDetailDO); + repleinshRecordDetailDO.setId(null); + repleinshRecordDetailDO.setNumber(number); + repleinshRecordDetailDO.setMasterId(repleinshRecordMainDO.getId()); + repleinshRecordDetailDO.setCreator(null); + repleinshRecordDetailDO.setCreateTime(null); + repleinshRecordDetailDO.setUpdater(null); + repleinshRecordDetailDO.setUpdateTime(null); + // 根据recordLst 进行赋值子表部分数据 + repleinshRecordDetailDO.setQty(new BigDecimal(recordLstItem.get("handleQty").toString())); + repleinshRecordDetailDO.setToPackingNumber(recordLstItem.get("toPackingNumber").toString()); + repleinshRecordDetailDO.setToContainerNumber(recordLstItem.get("toContainerNumber").toString()); + repleinshRecordDetailDO.setToBatch(recordLstItem.get("toBatch").toString()); + repleinshRecordDetailDO.setToLocationCode(recordLstItem.get("toLocationCode").toString()); + repleinshRecordDetailDO.setInventoryStatus(recordLstItem.get("toInventoryStatus").toString()); + repleinshRecordDetailDO.setSupplierCode(recordLstItem.get("supplierCode").toString()); + // 根据 to库位 查询 库位组 库区 + LocationDO locationDO = locationService.selectLocation(recordLstItem.get("toLocationCode").toString()); + repleinshRecordDetailDO.setToLocationGroupCode(locationDO.getLocationGroupCode()); + repleinshRecordDetailDO.setToAreaCode(locationDO.getAreaCode()); + // 根据 from库位 查询 库位组 库区 + LocationDO locationDOFrom = locationService.selectLocation(subListItem.getFromLocationCode()); + repleinshRecordDetailDO.setFromLocationGroupCode(locationDOFrom.getLocationGroupCode()); + repleinshRecordDetailDO.setFromAreaCode(locationDOFrom.getAreaCode()); + repleinshRecordDetailDOList.add(repleinshRecordDetailDO); + //添加库存事务list + TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); + BeanUtils.copyProperties(repleinshRecordDetailDO, transactionCreateReqVO); + TransactiontypeDO transactiontypeDO = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); + transactionCreateReqVO.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); + transactionCreateReqVO.setInventoryAction(transactiontypeDO.getInventoryAction()); + transactionCreateReqVO.setTransactionType(transactiontypeDO.getCode()); + transactionCreateReqVO.setBusinessType(repleinshRecordMainDO.getBusinessType()); + transactionCreateReqVO.setOwnerCode(repleinshRecordDetailDO.getFromOwnerCode()); + transactionCreateReqVO.setRecordNumber(number); + transactionCreateReqVO.setId(null); + transactionCreateReqVO.setPackingNumber(repleinshRecordDetailDO.getToPackingNumber()); + transactionCreateReqVO.setBatch(repleinshRecordDetailDO.getToBatch()); + transactionCreateReqVO.setContainerNumber(repleinshRecordDetailDO.getToContainerNumber()); + transactionCreateReqVO.setAmount(BigDecimal.ZERO); + transactionCreateReqVO.setLocationCode(recordLstItem.get("toLocationCode").toString()); + transactionCreateReqVOList.add(transactionCreateReqVO); + }); + } + }); + }); + if(!repleinshRecordDetailDOList.isEmpty()) { + repleinshRecordDetailMapper.insertBatch(repleinshRecordDetailDOList); + } + //增加库存事务 + transactionService.createTransaction(transactionCreateReqVOList); + //移除预计入 + expectinService.deleteExpectinByJobNumber(repleinshRecordMainDO.getNumber()); + //移除预计出 + expectoutService.deleteExpectoutByJobNumber(repleinshRecordMainDO.getNumber()); + //变更记录 + trendsApi.createTrends(repleinshRecordMainDO.getId(), "repleinshJob", "执行了补料任务", TrendsTypeEnum.UPDATE); + return result; + } + + }