Commit c96bd6335cb5d19f8f1035372d2275a156608203
1 parent
b486001c
✨ feat(mes): 添加盘点方案参数相关功能和数据结构
新增盘点方案参数的 CRUD 接口及相关枚举,支持在管理后台进行参数的创建、更新和删除操作。同时,更新了前端组件以支持参数的动态选择和展示,提升用户体验。
Showing
28 changed files
with
1327 additions
and
0 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 8 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 9 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.*; | ||
| 11 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamRespVO; | ||
| 12 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; | ||
| 13 | +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanParamService; | ||
| 14 | +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; | ||
| 15 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 16 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 17 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 18 | +import jakarta.annotation.Resource; | ||
| 19 | +import jakarta.servlet.http.HttpServletResponse; | ||
| 20 | +import jakarta.validation.Valid; | ||
| 21 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 22 | +import org.springframework.validation.annotation.Validated; | ||
| 23 | +import org.springframework.web.bind.annotation.*; | ||
| 24 | + | ||
| 25 | +import java.io.IOException; | ||
| 26 | +import java.util.Collection; | ||
| 27 | +import java.util.Collections; | ||
| 28 | +import java.util.List; | ||
| 29 | +import java.util.Map; | ||
| 30 | + | ||
| 31 | +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; | ||
| 32 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 33 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 34 | + | ||
| 35 | +@Tag(name = "管理后台 - MES 盘点方案") | ||
| 36 | +@RestController | ||
| 37 | +@RequestMapping("/mes/wm/stocktaking-plan") | ||
| 38 | +@Validated | ||
| 39 | +public class MesWmStockTakingPlanController { | ||
| 40 | + | ||
| 41 | + @Resource | ||
| 42 | + private MesWmStockTakingPlanService stockTakingPlanService; | ||
| 43 | + @Resource | ||
| 44 | + private MesWmStockTakingPlanParamService stockTakingPlanParamService; | ||
| 45 | + | ||
| 46 | + @PostMapping("/create") | ||
| 47 | + @Operation(summary = "创建盘点方案") | ||
| 48 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:create')") | ||
| 49 | + public CommonResult<Long> createStockTakingPlan(@Valid @RequestBody MesWmStockTakingPlanSaveReqVO createReqVO) { | ||
| 50 | + return success(stockTakingPlanService.createStockTakingPlan(createReqVO)); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + @PutMapping("/update") | ||
| 54 | + @Operation(summary = "修改盘点方案") | ||
| 55 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") | ||
| 56 | + public CommonResult<Boolean> updateStockTakingPlan(@Valid @RequestBody MesWmStockTakingPlanSaveReqVO updateReqVO) { | ||
| 57 | + stockTakingPlanService.updateStockTakingPlan(updateReqVO); | ||
| 58 | + return success(true); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + @DeleteMapping("/delete") | ||
| 62 | + @Operation(summary = "删除盘点方案") | ||
| 63 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 64 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:delete')") | ||
| 65 | + public CommonResult<Boolean> deleteStockTakingPlan(@RequestParam("id") Long id) { | ||
| 66 | + stockTakingPlanService.deleteStockTakingPlan(id); | ||
| 67 | + return success(true); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @GetMapping("/get") | ||
| 71 | + @Operation(summary = "获得盘点方案") | ||
| 72 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 73 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") | ||
| 74 | + public CommonResult<MesWmStockTakingPlanRespVO> getStockTakingPlan(@RequestParam("id") Long id) { | ||
| 75 | + MesWmStockTakingPlanDO plan = stockTakingPlanService.getStockTakingPlan(id); | ||
| 76 | + if (plan == null) { | ||
| 77 | + return success(null); | ||
| 78 | + } | ||
| 79 | + return success(buildRespVOList(Collections.singletonList(plan), true).get(0)); | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + @GetMapping("/page") | ||
| 83 | + @Operation(summary = "获得盘点方案分页") | ||
| 84 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") | ||
| 85 | + public CommonResult<PageResult<MesWmStockTakingPlanRespVO>> getStockTakingPlanPage(@Valid MesWmStockTakingPlanPageReqVO pageReqVO) { | ||
| 86 | + PageResult<MesWmStockTakingPlanDO> pageResult = stockTakingPlanService.getStockTakingPlanPage(pageReqVO); | ||
| 87 | + return success(new PageResult<>(buildRespVOList(pageResult.getList(), false), pageResult.getTotal())); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + @GetMapping("/export-excel") | ||
| 91 | + @Operation(summary = "导出盘点方案 Excel") | ||
| 92 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:export')") | ||
| 93 | + @ApiAccessLog(operateType = EXPORT) | ||
| 94 | + public void exportStockTakingPlanExcel(@Valid MesWmStockTakingPlanPageReqVO pageReqVO, | ||
| 95 | + HttpServletResponse response) throws IOException { | ||
| 96 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 97 | + PageResult<MesWmStockTakingPlanDO> pageResult = stockTakingPlanService.getStockTakingPlanPage(pageReqVO); | ||
| 98 | + ExcelUtils.write(response, "盘点方案.xls", "数据", MesWmStockTakingPlanRespVO.class, | ||
| 99 | + buildRespVOList(pageResult.getList(), false)); | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + // TODO @AI:去掉 confirmStockTakingPlan 方法;改成 updateStatus 这种接口; | ||
| 103 | + @PutMapping("/confirm") | ||
| 104 | + @Operation(summary = "确认盘点方案") | ||
| 105 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 106 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") | ||
| 107 | + public CommonResult<Boolean> confirmStockTakingPlan(@RequestParam("id") Long id) { | ||
| 108 | + stockTakingPlanService.confirmStockTakingPlan(id); | ||
| 109 | + return success(true); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + // TODO @AI:去掉 generateStockTakingTask 方法 | ||
| 113 | + @PostMapping("/generate-task") | ||
| 114 | + @Operation(summary = "根据盘点方案生成盘点任务") | ||
| 115 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-task:create')") | ||
| 116 | + public CommonResult<Long> generateStockTakingTask(@Valid @RequestBody MesWmStockTakingPlanGenerateReqVO reqVO) { | ||
| 117 | + return success(stockTakingPlanService.generateStockTakingTask(reqVO)); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + private List<MesWmStockTakingPlanRespVO> buildRespVOList(List<MesWmStockTakingPlanDO> list, boolean includeParams) { | ||
| 121 | + if (CollUtil.isEmpty(list)) { | ||
| 122 | + return Collections.emptyList(); | ||
| 123 | + } | ||
| 124 | + final Map<Long, List<MesWmStockTakingPlanParamRespVO>> finalParamMap; | ||
| 125 | + if (includeParams) { | ||
| 126 | + Collection<Long> planIds = convertSet(list, MesWmStockTakingPlanDO::getId); | ||
| 127 | + Map<Long, List<MesWmStockTakingPlanParamRespVO>> paramMap = new java.util.HashMap<>(); | ||
| 128 | + stockTakingPlanParamService.getStockTakingPlanParamMap(planIds) | ||
| 129 | + .forEach((planId, params) -> paramMap.put(planId, | ||
| 130 | + BeanUtils.toBean(params, MesWmStockTakingPlanParamRespVO.class))); | ||
| 131 | + finalParamMap = paramMap; | ||
| 132 | + } else { | ||
| 133 | + finalParamMap = Collections.emptyMap(); | ||
| 134 | + } | ||
| 135 | + return BeanUtils.toBean(list, MesWmStockTakingPlanRespVO.class, | ||
| 136 | + vo -> vo.setParams(finalParamMap.getOrDefault(vo.getId(), Collections.emptyList()))); | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamRespVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanParamService; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 11 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 12 | +import jakarta.annotation.Resource; | ||
| 13 | +import jakarta.validation.Valid; | ||
| 14 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 15 | +import org.springframework.validation.annotation.Validated; | ||
| 16 | +import org.springframework.web.bind.annotation.*; | ||
| 17 | + | ||
| 18 | +import java.util.List; | ||
| 19 | + | ||
| 20 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 21 | + | ||
| 22 | +@Tag(name = "管理后台 - MES 盘点方案参数") | ||
| 23 | +@RestController | ||
| 24 | +@RequestMapping("/mes/wm/stocktaking-plan-param") | ||
| 25 | +@Validated | ||
| 26 | +public class MesWmStockTakingPlanParamController { | ||
| 27 | + | ||
| 28 | + @Resource | ||
| 29 | + private MesWmStockTakingPlanParamService stockTakingPlanParamService; | ||
| 30 | + | ||
| 31 | + @PostMapping("/create") | ||
| 32 | + @Operation(summary = "创建盘点方案参数") | ||
| 33 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") | ||
| 34 | + public CommonResult<Long> createStockTakingPlanParam(@Valid @RequestBody MesWmStockTakingPlanParamSaveReqVO createReqVO) { | ||
| 35 | + return success(stockTakingPlanParamService.createStockTakingPlanParam(createReqVO)); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + @PutMapping("/update") | ||
| 39 | + @Operation(summary = "修改盘点方案参数") | ||
| 40 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") | ||
| 41 | + public CommonResult<Boolean> updateStockTakingPlanParam(@Valid @RequestBody MesWmStockTakingPlanParamSaveReqVO updateReqVO) { | ||
| 42 | + stockTakingPlanParamService.updateStockTakingPlanParam(updateReqVO); | ||
| 43 | + return success(true); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + @DeleteMapping("/delete") | ||
| 47 | + @Operation(summary = "删除盘点方案参数") | ||
| 48 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 49 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") | ||
| 50 | + public CommonResult<Boolean> deleteStockTakingPlanParam(@RequestParam("id") Long id) { | ||
| 51 | + stockTakingPlanParamService.deleteStockTakingPlanParam(id); | ||
| 52 | + return success(true); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @GetMapping("/get") | ||
| 56 | + @Operation(summary = "获得盘点方案参数") | ||
| 57 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 58 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") | ||
| 59 | + public CommonResult<MesWmStockTakingPlanParamRespVO> getStockTakingPlanParam(@RequestParam("id") Long id) { | ||
| 60 | + MesWmStockTakingPlanParamDO param = stockTakingPlanParamService.getStockTakingPlanParam(id); | ||
| 61 | + return success(param == null ? null : BeanUtils.toBean(param, MesWmStockTakingPlanParamRespVO.class)); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + // TODO @AI:不需要这个接口;前端只需要分页接口; | ||
| 65 | + @GetMapping("/list") | ||
| 66 | + @Operation(summary = "获得盘点方案参数列表") | ||
| 67 | + @Parameter(name = "planId", description = "方案编号", required = true) | ||
| 68 | + @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") | ||
| 69 | + public CommonResult<List<MesWmStockTakingPlanParamRespVO>> getStockTakingPlanParamList(@RequestParam("planId") Long planId) { | ||
| 70 | + return success(BeanUtils.toBean(stockTakingPlanParamService.getStockTakingPlanParamList(planId), | ||
| 71 | + MesWmStockTakingPlanParamRespVO.class)); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanGenerateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamSaveReqVO; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import jakarta.validation.constraints.NotEmpty; | ||
| 6 | +import jakarta.validation.constraints.NotNull; | ||
| 7 | +import lombok.Data; | ||
| 8 | + | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - MES 盘点方案生成任务 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class MesWmStockTakingPlanGenerateReqVO { | ||
| 15 | + | ||
| 16 | + @Schema(description = "方案编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + @NotNull(message = "方案编号不能为空") | ||
| 18 | + private Long planId; | ||
| 19 | + | ||
| 20 | + @Schema(description = "任务编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ST202603080001") | ||
| 21 | + @NotEmpty(message = "任务编码不能为空") | ||
| 22 | + private String code; | ||
| 23 | + | ||
| 24 | + @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "原料仓月度盘点任务") | ||
| 25 | + @NotEmpty(message = "任务名称不能为空") | ||
| 26 | + private String name; | ||
| 27 | + | ||
| 28 | + @Schema(description = "盘点日期") | ||
| 29 | + private LocalDateTime takingDate; | ||
| 30 | + | ||
| 31 | + @Schema(description = "盘点人 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 32 | + @NotNull(message = "盘点人不能为空") | ||
| 33 | + private Long userId; | ||
| 34 | + | ||
| 35 | + @Schema(description = "备注", example = "备注") | ||
| 36 | + private String remark; | ||
| 37 | + | ||
| 38 | + @Schema(description = "方案参数列表,为空时使用方案自身参数") | ||
| 39 | + private List<MesWmStockTakingPlanParamSaveReqVO> params; | ||
| 40 | + | ||
| 41 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | + | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | + | ||
| 11 | +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 12 | + | ||
| 13 | +@Schema(description = "管理后台 - MES 盘点方案分页 Request VO") | ||
| 14 | +@Data | ||
| 15 | +@EqualsAndHashCode(callSuper = true) | ||
| 16 | +public class MesWmStockTakingPlanPageReqVO extends PageParam { | ||
| 17 | + | ||
| 18 | + @Schema(description = "方案编码", example = "STP202603080001") | ||
| 19 | + private String code; | ||
| 20 | + | ||
| 21 | + @Schema(description = "方案名称", example = "原料仓月度盘点方案") | ||
| 22 | + private String name; | ||
| 23 | + | ||
| 24 | + @Schema(description = "盘点类型", example = "1") | ||
| 25 | + private Integer type; | ||
| 26 | + | ||
| 27 | + @Schema(description = "状态", example = "0") | ||
| 28 | + private Integer status; | ||
| 29 | + | ||
| 30 | + @Schema(description = "是否启用", example = "true") | ||
| 31 | + private Boolean enableFlag; | ||
| 32 | + | ||
| 33 | + @Schema(description = "计划开始时间范围") | ||
| 34 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 35 | + private LocalDateTime[] startTime; | ||
| 36 | + | ||
| 37 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; | ||
| 4 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamRespVO; | ||
| 6 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 7 | +import lombok.Data; | ||
| 8 | + | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - MES 盘点方案 Response VO") | ||
| 13 | +@Data | ||
| 14 | +@ExcelIgnoreUnannotated | ||
| 15 | +public class MesWmStockTakingPlanRespVO { | ||
| 16 | + | ||
| 17 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 18 | + @ExcelProperty("编号") | ||
| 19 | + private Long id; | ||
| 20 | + | ||
| 21 | + @Schema(description = "方案编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "STP202603080001") | ||
| 22 | + @ExcelProperty("方案编码") | ||
| 23 | + private String code; | ||
| 24 | + | ||
| 25 | + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "原料仓月度盘点方案") | ||
| 26 | + @ExcelProperty("方案名称") | ||
| 27 | + private String name; | ||
| 28 | + | ||
| 29 | + @Schema(description = "盘点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 30 | + @ExcelProperty("盘点类型") | ||
| 31 | + private Integer type; | ||
| 32 | + | ||
| 33 | + @Schema(description = "计划开始时间") | ||
| 34 | + @ExcelProperty("计划开始时间") | ||
| 35 | + private LocalDateTime startTime; | ||
| 36 | + | ||
| 37 | + @Schema(description = "计划结束时间") | ||
| 38 | + @ExcelProperty("计划结束时间") | ||
| 39 | + private LocalDateTime endTime; | ||
| 40 | + | ||
| 41 | + @Schema(description = "是否盲盘", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") | ||
| 42 | + @ExcelProperty("是否盲盘") | ||
| 43 | + private Boolean blindFlag; | ||
| 44 | + | ||
| 45 | + @Schema(description = "是否冻结库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") | ||
| 46 | + @ExcelProperty("是否冻结库存") | ||
| 47 | + private Boolean frozenFlag; | ||
| 48 | + | ||
| 49 | + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||
| 50 | + @ExcelProperty("是否启用") | ||
| 51 | + private Boolean enableFlag; | ||
| 52 | + | ||
| 53 | + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") | ||
| 54 | + @ExcelProperty("状态") | ||
| 55 | + private Integer status; | ||
| 56 | + | ||
| 57 | + @Schema(description = "备注", example = "备注") | ||
| 58 | + @ExcelProperty("备注") | ||
| 59 | + private String remark; | ||
| 60 | + | ||
| 61 | + @Schema(description = "方案参数列表") | ||
| 62 | + private List<MesWmStockTakingPlanParamRespVO> params; | ||
| 63 | + | ||
| 64 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 65 | + @ExcelProperty("创建时间") | ||
| 66 | + private LocalDateTime createTime; | ||
| 67 | + | ||
| 68 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotEmpty; | ||
| 5 | +import jakarta.validation.constraints.NotNull; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - MES 盘点方案新增/修改 Request VO") | ||
| 11 | +@Data | ||
| 12 | +public class MesWmStockTakingPlanSaveReqVO { | ||
| 13 | + | ||
| 14 | + @Schema(description = "编号", example = "1024") | ||
| 15 | + private Long id; | ||
| 16 | + | ||
| 17 | + @Schema(description = "方案编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "STP202603080001") | ||
| 18 | + @NotEmpty(message = "方案编码不能为空") | ||
| 19 | + private String code; | ||
| 20 | + | ||
| 21 | + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "原料仓月度盘点方案") | ||
| 22 | + @NotEmpty(message = "方案名称不能为空") | ||
| 23 | + private String name; | ||
| 24 | + | ||
| 25 | + @Schema(description = "盘点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 26 | + @NotNull(message = "盘点类型不能为空") | ||
| 27 | + private Integer type; | ||
| 28 | + | ||
| 29 | + @Schema(description = "计划开始时间") | ||
| 30 | + private LocalDateTime startTime; | ||
| 31 | + | ||
| 32 | + @Schema(description = "计划结束时间") | ||
| 33 | + private LocalDateTime endTime; | ||
| 34 | + | ||
| 35 | + @Schema(description = "是否盲盘", example = "false") | ||
| 36 | + @NotNull(message = "是否盲盘不能为空") | ||
| 37 | + private Boolean blindFlag; | ||
| 38 | + | ||
| 39 | + @Schema(description = "是否冻结库存", example = "false") | ||
| 40 | + @NotNull(message = "是否冻结库存不能为空") | ||
| 41 | + private Boolean frozenFlag; | ||
| 42 | + | ||
| 43 | + @Schema(description = "是否启用", example = "true") | ||
| 44 | + @NotNull(message = "是否启用不能为空") | ||
| 45 | + private Boolean enableFlag; | ||
| 46 | + | ||
| 47 | + @Schema(description = "备注", example = "备注") | ||
| 48 | + private String remark; | ||
| 49 | + | ||
| 50 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/param/MesWmStockTakingPlanParamRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +@Schema(description = "管理后台 - MES 盘点方案参数 Response VO") | ||
| 7 | +@Data | ||
| 8 | +public class MesWmStockTakingPlanParamRespVO { | ||
| 9 | + | ||
| 10 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 11 | + private Long id; | ||
| 12 | + | ||
| 13 | + @Schema(description = "方案 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 14 | + private Long planId; | ||
| 15 | + | ||
| 16 | + @Schema(description = "参数类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "102") | ||
| 17 | + private Integer type; | ||
| 18 | + | ||
| 19 | + @Schema(description = "参数值 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + private Long valueId; | ||
| 21 | + | ||
| 22 | + @Schema(description = "参数值编码", example = "WH001") | ||
| 23 | + private String valueCode; | ||
| 24 | + | ||
| 25 | + @Schema(description = "参数值名称", example = "原料仓") | ||
| 26 | + private String valueName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "备注", example = "备注") | ||
| 29 | + private String remark; | ||
| 30 | + | ||
| 31 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/param/MesWmStockTakingPlanParamSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotNull; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +@Schema(description = "管理后台 - MES 盘点方案参数新增/修改 Request VO") | ||
| 8 | +@Data | ||
| 9 | +public class MesWmStockTakingPlanParamSaveReqVO { | ||
| 10 | + | ||
| 11 | + @Schema(description = "编号", example = "1024") | ||
| 12 | + private Long id; | ||
| 13 | + | ||
| 14 | + @Schema(description = "方案 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 15 | + @NotNull(message = "方案 ID 不能为空") | ||
| 16 | + private Long planId; | ||
| 17 | + | ||
| 18 | + @Schema(description = "参数类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "102") | ||
| 19 | + @NotNull(message = "参数类型不能为空") | ||
| 20 | + private Integer type; | ||
| 21 | + | ||
| 22 | + @Schema(description = "参数值 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 23 | + @NotNull(message = "参数值 ID 不能为空") | ||
| 24 | + private Long valueId; | ||
| 25 | + | ||
| 26 | + @Schema(description = "参数值编码", example = "WH001") | ||
| 27 | + private String valueCode; | ||
| 28 | + | ||
| 29 | + @Schema(description = "参数值名称", example = "原料仓") | ||
| 30 | + private String valueName; | ||
| 31 | + | ||
| 32 | + @Schema(description = "备注", example = "备注") | ||
| 33 | + private String remark; | ||
| 34 | + | ||
| 35 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/plan/MesWmStockTakingPlanDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanStatusEnum; | ||
| 5 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 9 | +import lombok.*; | ||
| 10 | + | ||
| 11 | +import java.time.LocalDateTime; | ||
| 12 | + | ||
| 13 | +// TODO @AI:缺少注释; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * MES 盘点方案 DO | ||
| 17 | + */ | ||
| 18 | +@TableName("mes_wm_stock_taking_plan") | ||
| 19 | +@KeySequence("mes_wm_stock_taking_plan_seq") | ||
| 20 | +@Data | ||
| 21 | +@EqualsAndHashCode(callSuper = true) | ||
| 22 | +@ToString(callSuper = true) | ||
| 23 | +@Builder | ||
| 24 | +@NoArgsConstructor | ||
| 25 | +@AllArgsConstructor | ||
| 26 | +public class MesWmStockTakingPlanDO extends BaseDO { | ||
| 27 | + | ||
| 28 | + @TableId | ||
| 29 | + private Long id; | ||
| 30 | + | ||
| 31 | + private String code; | ||
| 32 | + | ||
| 33 | + private String name; | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 枚举 {@link MesWmStockTakingTypeEnum} | ||
| 37 | + */ | ||
| 38 | + private Integer type; | ||
| 39 | + | ||
| 40 | + private LocalDateTime startTime; | ||
| 41 | + | ||
| 42 | + private LocalDateTime endTime; | ||
| 43 | + | ||
| 44 | + private Boolean blindFlag; | ||
| 45 | + | ||
| 46 | + private Boolean frozenFlag; | ||
| 47 | + | ||
| 48 | + // TODO @AI:这个 enableFlag 改成 status,对应 CommonStatus; | ||
| 49 | + private Boolean enableFlag; | ||
| 50 | + | ||
| 51 | + // TODO @AI:这个字段没用,可以删除掉; | ||
| 52 | + /** | ||
| 53 | + * 枚举 {@link MesWmStockTakingPlanStatusEnum} | ||
| 54 | + */ | ||
| 55 | + private Integer status; | ||
| 56 | + | ||
| 57 | + private String remark; | ||
| 58 | + | ||
| 59 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/plan/MesWmStockTakingPlanParamDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 8 | +import lombok.*; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * MES 盘点方案参数 DO | ||
| 12 | + */ | ||
| 13 | +@TableName("mes_wm_stock_taking_plan_param") | ||
| 14 | +@KeySequence("mes_wm_stock_taking_plan_param_seq") | ||
| 15 | +@Data | ||
| 16 | +@EqualsAndHashCode(callSuper = true) | ||
| 17 | +@ToString(callSuper = true) | ||
| 18 | +@Builder | ||
| 19 | +@NoArgsConstructor | ||
| 20 | +@AllArgsConstructor | ||
| 21 | +public class MesWmStockTakingPlanParamDO extends BaseDO { | ||
| 22 | + | ||
| 23 | + @TableId | ||
| 24 | + private Long id; | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 盘点方案编号 | ||
| 28 | + * | ||
| 29 | + * 关联 {@link MesWmStockTakingPlanDO#getId()} | ||
| 30 | + */ | ||
| 31 | + private Long planId; | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * 枚举 {@link MesWmStockTakingPlanParamTypeEnum} | ||
| 35 | + */ | ||
| 36 | + private Integer type; | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 参数值编号,例如仓库、库区、库位、物料、批次的主键 ID | ||
| 40 | + */ | ||
| 41 | + private Long valueId; | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * 参数值编码,例如仓库编码、库区编码、库位编码、物料编码、批次编码 | ||
| 45 | + */ | ||
| 46 | + private String valueCode; | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 参数值名称,例如仓库名称、库区名称、库位名称、物料名称、批次名称 | ||
| 50 | + */ | ||
| 51 | + private String valueName; | ||
| 52 | + | ||
| 53 | + private String remark; | ||
| 54 | + | ||
| 55 | + private Long tenantId; | ||
| 56 | + | ||
| 57 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
| @@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper; | @@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 11 | import java.math.BigDecimal; | 11 | import java.math.BigDecimal; |
| 12 | import java.util.Collection; | 12 | import java.util.Collection; |
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | +import java.util.Set; | ||
| 14 | 15 | ||
| 15 | /** | 16 | /** |
| 16 | * MES 库存台账 Mapper | 17 | * MES 库存台账 Mapper |
| @@ -64,4 +65,17 @@ public interface MesWmMaterialStockMapper extends BaseMapperX<MesWmMaterialStock | @@ -64,4 +65,17 @@ public interface MesWmMaterialStockMapper extends BaseMapperX<MesWmMaterialStock | ||
| 64 | .eqIfPresent(MesWmMaterialStockDO::getBatchId, batchId)); | 65 | .eqIfPresent(MesWmMaterialStockDO::getBatchId, batchId)); |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 68 | + default List<MesWmMaterialStockDO> selectListForStockTaking(Set<Long> warehouseIds, Set<Long> locationIds, | ||
| 69 | + Set<Long> areaIds, Set<Long> itemIds, | ||
| 70 | + Set<Long> batchIds) { | ||
| 71 | + return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>() | ||
| 72 | + .inIfPresent(MesWmMaterialStockDO::getWarehouseId, warehouseIds) | ||
| 73 | + .inIfPresent(MesWmMaterialStockDO::getLocationId, locationIds) | ||
| 74 | + .inIfPresent(MesWmMaterialStockDO::getAreaId, areaIds) | ||
| 75 | + .inIfPresent(MesWmMaterialStockDO::getItemId, itemIds) | ||
| 76 | + .inIfPresent(MesWmMaterialStockDO::getBatchId, batchIds) | ||
| 77 | + .ne(MesWmMaterialStockDO::getQuantityOnhand, BigDecimal.ZERO) | ||
| 78 | + .orderByAsc(MesWmMaterialStockDO::getId)); | ||
| 79 | + } | ||
| 80 | + | ||
| 67 | } | 81 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/plan/MesWmStockTakingPlanMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * MES 盘点方案 Mapper | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface MesWmStockTakingPlanMapper extends BaseMapperX<MesWmStockTakingPlanDO> { | ||
| 17 | + | ||
| 18 | + default MesWmStockTakingPlanDO selectByCode(String code) { | ||
| 19 | + return selectOne(MesWmStockTakingPlanDO::getCode, code); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + default PageResult<MesWmStockTakingPlanDO> selectPage(MesWmStockTakingPlanPageReqVO reqVO) { | ||
| 23 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmStockTakingPlanDO>() | ||
| 24 | + .likeIfPresent(MesWmStockTakingPlanDO::getCode, reqVO.getCode()) | ||
| 25 | + .likeIfPresent(MesWmStockTakingPlanDO::getName, reqVO.getName()) | ||
| 26 | + .eqIfPresent(MesWmStockTakingPlanDO::getType, reqVO.getType()) | ||
| 27 | + .eqIfPresent(MesWmStockTakingPlanDO::getStatus, reqVO.getStatus()) | ||
| 28 | + .eqIfPresent(MesWmStockTakingPlanDO::getEnableFlag, reqVO.getEnableFlag()) | ||
| 29 | + .betweenIfPresent(MesWmStockTakingPlanDO::getStartTime, reqVO.getStartTime()) | ||
| 30 | + .orderByDesc(MesWmStockTakingPlanDO::getId)); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + default List<MesWmStockTakingPlanDO> selectListByStatus(Integer status) { | ||
| 34 | + return selectList(new LambdaQueryWrapperX<MesWmStockTakingPlanDO>() | ||
| 35 | + .eqIfPresent(MesWmStockTakingPlanDO::getStatus, status) | ||
| 36 | + .eq(MesWmStockTakingPlanDO::getEnableFlag, true) | ||
| 37 | + .orderByDesc(MesWmStockTakingPlanDO::getId)); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/plan/MesWmStockTakingPlanParamMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 5 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | + | ||
| 8 | +import java.util.Collection; | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * MES 盘点方案参数 Mapper | ||
| 13 | + */ | ||
| 14 | +@Mapper | ||
| 15 | +public interface MesWmStockTakingPlanParamMapper extends BaseMapperX<MesWmStockTakingPlanParamDO> { | ||
| 16 | + | ||
| 17 | + default List<MesWmStockTakingPlanParamDO> selectListByPlanId(Long planId) { | ||
| 18 | + return selectList(MesWmStockTakingPlanParamDO::getPlanId, planId); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + default List<MesWmStockTakingPlanParamDO> selectListByPlanIds(Collection<Long> planIds) { | ||
| 22 | + return selectList(MesWmStockTakingPlanParamDO::getPlanId, planIds); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + default void deleteByPlanId(Long planId) { | ||
| 26 | + delete(MesWmStockTakingPlanParamDO::getPlanId, planId); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + default List<MesWmStockTakingPlanParamDO> selectListByPlanIdAndType(Long planId, Integer type) { | ||
| 30 | + return selectList(new LambdaQueryWrapperX<MesWmStockTakingPlanParamDO>() | ||
| 31 | + .eq(MesWmStockTakingPlanParamDO::getPlanId, planId) | ||
| 32 | + .eq(MesWmStockTakingPlanParamDO::getType, type) | ||
| 33 | + .orderByAsc(MesWmStockTakingPlanParamDO::getId)); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 5 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.MesWmStockTakingTaskLineDO; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | + | ||
| 8 | +import java.util.Collection; | ||
| 9 | +import java.util.List; | ||
| 10 | +import java.util.Set; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * MES 盘点任务行 Mapper | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface MesWmStockTakingTaskLineMapper extends BaseMapperX<MesWmStockTakingTaskLineDO> { | ||
| 17 | + | ||
| 18 | + default List<MesWmStockTakingTaskLineDO> selectListByTaskId(Long taskId) { | ||
| 19 | + return selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>() | ||
| 20 | + .eq(MesWmStockTakingTaskLineDO::getTaskId, taskId) | ||
| 21 | + .orderByAsc(MesWmStockTakingTaskLineDO::getId)); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + default List<MesWmStockTakingTaskLineDO> selectListByTaskIds(Collection<Long> taskIds) { | ||
| 25 | + return selectList(MesWmStockTakingTaskLineDO::getTaskId, taskIds); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + default List<MesWmStockTakingTaskLineDO> selectListByIds(Collection<Long> ids) { | ||
| 29 | + return selectByIds(ids); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + default List<MesWmStockTakingTaskLineDO> selectListByTaskIdAndIds(Long taskId, Set<Long> ids) { | ||
| 33 | + return selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>() | ||
| 34 | + .eq(MesWmStockTakingTaskLineDO::getTaskId, taskId) | ||
| 35 | + .inIfPresent(MesWmStockTakingTaskLineDO::getId, ids) | ||
| 36 | + .orderByAsc(MesWmStockTakingTaskLineDO::getId)); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + default void deleteByTaskId(Long taskId) { | ||
| 40 | + delete(MesWmStockTakingTaskLineDO::getTaskId, taskId); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.vo.task.MesWmStockTakingTaskPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.MesWmStockTakingTaskDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * MES 盘点任务 Mapper | ||
| 12 | + */ | ||
| 13 | +@Mapper | ||
| 14 | +public interface MesWmStockTakingTaskMapper extends BaseMapperX<MesWmStockTakingTaskDO> { | ||
| 15 | + | ||
| 16 | + default MesWmStockTakingTaskDO selectByCode(String code) { | ||
| 17 | + return selectOne(MesWmStockTakingTaskDO::getCode, code); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + default PageResult<MesWmStockTakingTaskDO> selectPage(MesWmStockTakingTaskPageReqVO reqVO) { | ||
| 21 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmStockTakingTaskDO>() | ||
| 22 | + .likeIfPresent(MesWmStockTakingTaskDO::getCode, reqVO.getCode()) | ||
| 23 | + .likeIfPresent(MesWmStockTakingTaskDO::getName, reqVO.getName()) | ||
| 24 | + .eqIfPresent(MesWmStockTakingTaskDO::getType, reqVO.getType()) | ||
| 25 | + .eqIfPresent(MesWmStockTakingTaskDO::getStatus, reqVO.getStatus()) | ||
| 26 | + .eqIfPresent(MesWmStockTakingTaskDO::getUserId, reqVO.getUserId()) | ||
| 27 | + .eqIfPresent(MesWmStockTakingTaskDO::getPlanId, reqVO.getPlanId()) | ||
| 28 | + .betweenIfPresent(MesWmStockTakingTaskDO::getTakingDate, reqVO.getTakingDate()) | ||
| 29 | + .orderByDesc(MesWmStockTakingTaskDO::getId)); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskResultMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.vo.result.MesWmStockTakingTaskResultPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.MesWmStockTakingTaskResultDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * MES 盘点结果 Mapper | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface MesWmStockTakingTaskResultMapper extends BaseMapperX<MesWmStockTakingTaskResultDO> { | ||
| 17 | + | ||
| 18 | + default PageResult<MesWmStockTakingTaskResultDO> selectPage(MesWmStockTakingTaskResultPageReqVO reqVO) { | ||
| 19 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmStockTakingTaskResultDO>() | ||
| 20 | + .eqIfPresent(MesWmStockTakingTaskResultDO::getTaskId, reqVO.getTaskId()) | ||
| 21 | + .eqIfPresent(MesWmStockTakingTaskResultDO::getItemId, reqVO.getItemId()) | ||
| 22 | + .eqIfPresent(MesWmStockTakingTaskResultDO::getWarehouseId, reqVO.getWarehouseId()) | ||
| 23 | + .eqIfPresent(MesWmStockTakingTaskResultDO::getLocationId, reqVO.getLocationId()) | ||
| 24 | + .eqIfPresent(MesWmStockTakingTaskResultDO::getAreaId, reqVO.getAreaId()) | ||
| 25 | + .orderByDesc(MesWmStockTakingTaskResultDO::getId)); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + default List<MesWmStockTakingTaskResultDO> selectListByTaskId(Long taskId) { | ||
| 29 | + return selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskResultDO>() | ||
| 30 | + .eq(MesWmStockTakingTaskResultDO::getTaskId, taskId) | ||
| 31 | + .orderByAsc(MesWmStockTakingTaskResultDO::getId)); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + default void deleteByTaskId(Long taskId) { | ||
| 35 | + delete(MesWmStockTakingTaskResultDO::getTaskId, taskId); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| @@ -469,6 +469,21 @@ public interface ErrorCodeConstants { | @@ -469,6 +469,21 @@ public interface ErrorCodeConstants { | ||
| 469 | ErrorCode WM_RETURN_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, "销售退货单行不存在"); | 469 | ErrorCode WM_RETURN_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, "销售退货单行不存在"); |
| 470 | ErrorCode WM_RETURN_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, "销售退货单明细不存在"); | 470 | ErrorCode WM_RETURN_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, "销售退货单明细不存在"); |
| 471 | 471 | ||
| 472 | + // ========== MES 仓库管理-盘点方案/任务/结果(1-040-714-100) ========== | ||
| 473 | + ErrorCode WM_STOCK_TAKING_PLAN_NOT_EXISTS = new ErrorCode(1_040_714_100, "盘点方案不存在"); | ||
| 474 | + ErrorCode WM_STOCK_TAKING_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_714_101, "盘点方案编码已存在"); | ||
| 475 | + ErrorCode WM_STOCK_TAKING_PLAN_NOT_PREPARE = new ErrorCode(1_040_714_102, "只有草稿状态的盘点方案才允许此操作"); | ||
| 476 | + ErrorCode WM_STOCK_TAKING_PLAN_NOT_CONFIRMED = new ErrorCode(1_040_714_103, "只有已确认状态的盘点方案才允许生成任务"); | ||
| 477 | + ErrorCode WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS = new ErrorCode(1_040_714_104, "盘点方案参数不存在"); | ||
| 478 | + ErrorCode WM_STOCK_TAKING_TASK_NOT_EXISTS = new ErrorCode(1_040_714_110, "盘点任务不存在"); | ||
| 479 | + ErrorCode WM_STOCK_TAKING_TASK_CODE_DUPLICATE = new ErrorCode(1_040_714_111, "盘点任务编码已存在"); | ||
| 480 | + ErrorCode WM_STOCK_TAKING_TASK_NOT_PREPARE = new ErrorCode(1_040_714_112, "只有草稿状态的盘点任务才允许此操作"); | ||
| 481 | + ErrorCode WM_STOCK_TAKING_TASK_NOT_IN_PROGRESS = new ErrorCode(1_040_714_113, "只有盘点中状态的任务才允许此操作"); | ||
| 482 | + ErrorCode WM_STOCK_TAKING_TASK_CANNOT_CANCEL = new ErrorCode(1_040_714_114, "已完成或已取消的盘点任务不允许取消"); | ||
| 483 | + ErrorCode WM_STOCK_TAKING_TASK_NO_STOCK = new ErrorCode(1_040_714_115, "未找到符合条件的库存数据"); | ||
| 484 | + ErrorCode WM_STOCK_TAKING_TASK_NO_LINE = new ErrorCode(1_040_714_116, "盘点任务至少需要一条任务行"); | ||
| 485 | + ErrorCode WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS = new ErrorCode(1_040_714_117, "盘点任务行不存在"); | ||
| 486 | + | ||
| 472 | // ========== MES 仓库管理-销售出库单(1-040-714-000) ========== | 487 | // ========== MES 仓库管理-销售出库单(1-040-714-000) ========== |
| 473 | ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, "销售出库单不存在"); | 488 | ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, "销售出库单不存在"); |
| 474 | ErrorCode WM_PRODUCT_SALES_CODE_DUPLICATE = new ErrorCode(1_040_714_001, "销售出库单号已存在"); | 489 | ErrorCode WM_PRODUCT_SALES_CODE_DUPLICATE = new ErrorCode(1_040_714_001, "销售出库单号已存在"); |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.enums.wm; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | ||
| 4 | +import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; | ||
| 5 | +import lombok.AllArgsConstructor; | ||
| 6 | +import lombok.Getter; | ||
| 7 | + | ||
| 8 | +import java.util.Arrays; | ||
| 9 | + | ||
| 10 | +// TODO @AI:缺少注释;type + name 这种; | ||
| 11 | +/** | ||
| 12 | + * MES 盘点方案参数类型枚举 | ||
| 13 | + */ | ||
| 14 | +@Getter | ||
| 15 | +@AllArgsConstructor | ||
| 16 | +public enum MesWmStockTakingPlanParamTypeEnum implements ArrayValuable<Integer> { | ||
| 17 | + | ||
| 18 | + WAREHOUSE(MesBizTypeConstants.WM_WAREHOUSE, "仓库"), | ||
| 19 | + LOCATION(MesBizTypeConstants.WM_LOCATION, "库区"), | ||
| 20 | + AREA(MesBizTypeConstants.WM_AREA, "库位"), | ||
| 21 | + ITEM(MesBizTypeConstants.MD_ITEM, "物料"), | ||
| 22 | + BATCH(MesBizTypeConstants.WM_BATCH, "批次"); | ||
| 23 | + | ||
| 24 | + public static final Integer[] ARRAYS = Arrays.stream(values()) | ||
| 25 | + .map(MesWmStockTakingPlanParamTypeEnum::getType).toArray(Integer[]::new); | ||
| 26 | + | ||
| 27 | + private final Integer type; | ||
| 28 | + private final String name; | ||
| 29 | + | ||
| 30 | + @Override | ||
| 31 | + public Integer[] array() { | ||
| 32 | + return ARRAYS; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.enums.wm; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | ||
| 4 | +import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; | ||
| 5 | +import lombok.AllArgsConstructor; | ||
| 6 | +import lombok.Getter; | ||
| 7 | + | ||
| 8 | +import java.util.Arrays; | ||
| 9 | + | ||
| 10 | +// TODO @AI:缺少注释;status + name 这种; | ||
| 11 | +/** | ||
| 12 | + * MES 盘点方案状态枚举 | ||
| 13 | + */ | ||
| 14 | +@Getter | ||
| 15 | +@AllArgsConstructor | ||
| 16 | +public enum MesWmStockTakingPlanStatusEnum implements ArrayValuable<Integer> { | ||
| 17 | + | ||
| 18 | + PREPARE(MesOrderStatusConstants.PREPARE, "草稿"), | ||
| 19 | + CONFIRMED(MesOrderStatusConstants.CONFIRMED, "已确认"); | ||
| 20 | + | ||
| 21 | + public static final Integer[] ARRAYS = Arrays.stream(values()) | ||
| 22 | + .map(MesWmStockTakingPlanStatusEnum::getStatus).toArray(Integer[]::new); | ||
| 23 | + | ||
| 24 | + private final Integer status; | ||
| 25 | + private final String name; | ||
| 26 | + | ||
| 27 | + @Override | ||
| 28 | + public Integer[] array() { | ||
| 29 | + return ARRAYS; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskLineStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.enums.wm; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | ||
| 4 | +import lombok.AllArgsConstructor; | ||
| 5 | +import lombok.Getter; | ||
| 6 | + | ||
| 7 | +import java.util.Arrays; | ||
| 8 | + | ||
| 9 | +// TODO @AI:缺少注释;status + name 这种; | ||
| 10 | +/** | ||
| 11 | + * MES 盘点任务行状态枚举 | ||
| 12 | + */ | ||
| 13 | +@Getter | ||
| 14 | +@AllArgsConstructor | ||
| 15 | +public enum MesWmStockTakingTaskLineStatusEnum implements ArrayValuable<Integer> { | ||
| 16 | + | ||
| 17 | + UNCOUNTED(0, "未盘点"), | ||
| 18 | + NORMAL(1, "正常"), | ||
| 19 | + GAIN(2, "盘盈"), | ||
| 20 | + LOSS(3, "盘亏"); | ||
| 21 | + | ||
| 22 | + public static final Integer[] ARRAYS = Arrays.stream(values()) | ||
| 23 | + .map(MesWmStockTakingTaskLineStatusEnum::getStatus).toArray(Integer[]::new); | ||
| 24 | + | ||
| 25 | + private final Integer status; | ||
| 26 | + private final String name; | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public Integer[] array() { | ||
| 30 | + return ARRAYS; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.enums.wm; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | ||
| 4 | +import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; | ||
| 5 | +import lombok.AllArgsConstructor; | ||
| 6 | +import lombok.Getter; | ||
| 7 | + | ||
| 8 | +import java.util.Arrays; | ||
| 9 | + | ||
| 10 | +// TODO @AI:缺少注释;status + name 这种; | ||
| 11 | +/** | ||
| 12 | + * MES 盘点任务状态枚举 | ||
| 13 | + */ | ||
| 14 | +@Getter | ||
| 15 | +@AllArgsConstructor | ||
| 16 | +public enum MesWmStockTakingTaskStatusEnum implements ArrayValuable<Integer> { | ||
| 17 | + | ||
| 18 | + PREPARE(MesOrderStatusConstants.PREPARE, "草稿"), | ||
| 19 | + IN_PROGRESS(MesOrderStatusConstants.CONFIRMED, "盘点中"), | ||
| 20 | + FINISHED(MesOrderStatusConstants.FINISHED, "已完成"), | ||
| 21 | + CANCELED(MesOrderStatusConstants.CANCELLED, "已取消"); | ||
| 22 | + | ||
| 23 | + public static final Integer[] ARRAYS = Arrays.stream(values()) | ||
| 24 | + .map(MesWmStockTakingTaskStatusEnum::getStatus).toArray(Integer[]::new); | ||
| 25 | + | ||
| 26 | + private final Integer status; | ||
| 27 | + private final String name; | ||
| 28 | + | ||
| 29 | + @Override | ||
| 30 | + public Integer[] array() { | ||
| 31 | + return ARRAYS; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.enums.wm; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | ||
| 4 | +import lombok.AllArgsConstructor; | ||
| 5 | +import lombok.Getter; | ||
| 6 | + | ||
| 7 | +import java.util.Arrays; | ||
| 8 | + | ||
| 9 | +// TODO @AI:缺少注释;type + name 这种; | ||
| 10 | +/** | ||
| 11 | + * MES 盘点类型枚举 | ||
| 12 | + */ | ||
| 13 | +@Getter | ||
| 14 | +@AllArgsConstructor | ||
| 15 | +public enum MesWmStockTakingTypeEnum implements ArrayValuable<Integer> { | ||
| 16 | + | ||
| 17 | + // TODO @AI:只有 2 种:动态盘点、静态盘点;按照这个顺序枚举; | ||
| 18 | + OPEN(1, "开放盘点"), | ||
| 19 | + CYCLE(2, "循环盘点"), | ||
| 20 | + DYNAMIC(3, "动态盘点"); | ||
| 21 | + | ||
| 22 | + public static final Integer[] ARRAYS = Arrays.stream(values()) | ||
| 23 | + .map(MesWmStockTakingTypeEnum::getType).toArray(Integer[]::new); | ||
| 24 | + | ||
| 25 | + private final Integer type; | ||
| 26 | + private final String name; | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public Integer[] array() { | ||
| 30 | + return ARRAYS; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockService.java
| @@ -11,6 +11,7 @@ import java.time.LocalDateTime; | @@ -11,6 +11,7 @@ import java.time.LocalDateTime; | ||
| 11 | import java.util.Collection; | 11 | import java.util.Collection; |
| 12 | import java.util.List; | 12 | import java.util.List; |
| 13 | import java.util.Map; | 13 | import java.util.Map; |
| 14 | +import java.util.Set; | ||
| 14 | 15 | ||
| 15 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | 16 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| 16 | 17 | ||
| @@ -82,6 +83,11 @@ public interface MesWmMaterialStockService { | @@ -82,6 +83,11 @@ public interface MesWmMaterialStockService { | ||
| 82 | */ | 83 | */ |
| 83 | List<MesWmMaterialStockDO> getMaterialStockList(Collection<Long> ids); | 84 | List<MesWmMaterialStockDO> getMaterialStockList(Collection<Long> ids); |
| 84 | 85 | ||
| 86 | + // TODO @芋艿:不确定性;感觉就是一个查询接口,参数比较多; | ||
| 87 | + List<MesWmMaterialStockDO> getMaterialStockListForStockTaking(Set<Long> warehouseIds, Set<Long> locationIds, | ||
| 88 | + Set<Long> areaIds, Set<Long> itemIds, | ||
| 89 | + Set<Long> batchIds); | ||
| 90 | + | ||
| 85 | default Map<Long, MesWmMaterialStockDO> getMaterialStockMap(Collection<Long> ids) { | 91 | default Map<Long, MesWmMaterialStockDO> getMaterialStockMap(Collection<Long> ids) { |
| 86 | return convertMap(getMaterialStockList(ids), MesWmMaterialStockDO::getId); | 92 | return convertMap(getMaterialStockList(ids), MesWmMaterialStockDO::getId); |
| 87 | } | 93 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockServiceImpl.java
| @@ -107,6 +107,13 @@ public class MesWmMaterialStockServiceImpl implements MesWmMaterialStockService | @@ -107,6 +107,13 @@ public class MesWmMaterialStockServiceImpl implements MesWmMaterialStockService | ||
| 107 | return materialStockMapper.selectListByIds(ids); | 107 | return materialStockMapper.selectListByIds(ids); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | + @Override | ||
| 111 | + public List<MesWmMaterialStockDO> getMaterialStockListForStockTaking(Set<Long> warehouseIds, Set<Long> locationIds, | ||
| 112 | + Set<Long> areaIds, Set<Long> itemIds, | ||
| 113 | + Set<Long> batchIds) { | ||
| 114 | + return materialStockMapper.selectListForStockTaking(warehouseIds, locationIds, areaIds, itemIds, batchIds); | ||
| 115 | + } | ||
| 116 | + | ||
| 110 | // TODO DONE @AI:increaseStock 方法命名合理,语义清晰 | 117 | // TODO DONE @AI:increaseStock 方法命名合理,语义清晰 |
| 111 | @Override | 118 | @Override |
| 112 | public void increaseStock(Long itemId, Long warehouseId, Long locationId, Long areaId, | 119 | public void increaseStock(Long itemId, Long warehouseId, Long locationId, Long areaId, |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamSaveReqVO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; | ||
| 5 | +import jakarta.validation.Valid; | ||
| 6 | + | ||
| 7 | +import java.util.Collection; | ||
| 8 | +import java.util.List; | ||
| 9 | +import java.util.Map; | ||
| 10 | + | ||
| 11 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap; | ||
| 12 | + | ||
| 13 | +// TODO @AI:必要的注释 | ||
| 14 | +/** | ||
| 15 | + * MES 盘点方案参数 Service 接口 | ||
| 16 | + */ | ||
| 17 | +public interface MesWmStockTakingPlanParamService { | ||
| 18 | + | ||
| 19 | + Long createStockTakingPlanParam(@Valid MesWmStockTakingPlanParamSaveReqVO createReqVO); | ||
| 20 | + | ||
| 21 | + void updateStockTakingPlanParam(@Valid MesWmStockTakingPlanParamSaveReqVO updateReqVO); | ||
| 22 | + | ||
| 23 | + void deleteStockTakingPlanParam(Long id); | ||
| 24 | + | ||
| 25 | + MesWmStockTakingPlanParamDO getStockTakingPlanParam(Long id); | ||
| 26 | + | ||
| 27 | + List<MesWmStockTakingPlanParamDO> getStockTakingPlanParamList(Long planId); | ||
| 28 | + | ||
| 29 | + default Map<Long, List<MesWmStockTakingPlanParamDO>> getStockTakingPlanParamMap(Collection<Long> planIds) { | ||
| 30 | + return convertMultiMap(getStockTakingPlanParamList(planIds), MesWmStockTakingPlanParamDO::getPlanId); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + List<MesWmStockTakingPlanParamDO> getStockTakingPlanParamList(Collection<Long> planIds); | ||
| 34 | + | ||
| 35 | + void deleteStockTakingPlanParamByPlanId(Long planId); | ||
| 36 | + | ||
| 37 | + MesWmStockTakingPlanParamDO validateStockTakingPlanParamExists(Long id); | ||
| 38 | + | ||
| 39 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanParamMapper; | ||
| 9 | +import jakarta.annotation.Resource; | ||
| 10 | +import org.springframework.context.annotation.Lazy; | ||
| 11 | +import org.springframework.stereotype.Service; | ||
| 12 | +import org.springframework.validation.annotation.Validated; | ||
| 13 | + | ||
| 14 | +import java.util.Collection; | ||
| 15 | +import java.util.Collections; | ||
| 16 | +import java.util.List; | ||
| 17 | + | ||
| 18 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 19 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS; | ||
| 20 | + | ||
| 21 | +// TODO @AI:必要的注释 | ||
| 22 | +/** | ||
| 23 | + * MES 盘点方案参数 Service 实现类 | ||
| 24 | + */ | ||
| 25 | +@Service | ||
| 26 | +@Validated | ||
| 27 | +public class MesWmStockTakingPlanParamServiceImpl implements MesWmStockTakingPlanParamService { | ||
| 28 | + | ||
| 29 | + @Resource | ||
| 30 | + private MesWmStockTakingPlanParamMapper stockTakingPlanParamMapper; | ||
| 31 | + @Resource | ||
| 32 | + @Lazy | ||
| 33 | + private MesWmStockTakingPlanService stockTakingPlanService; | ||
| 34 | + | ||
| 35 | + @Override | ||
| 36 | + public Long createStockTakingPlanParam(MesWmStockTakingPlanParamSaveReqVO createReqVO) { | ||
| 37 | + MesWmStockTakingPlanDO plan = stockTakingPlanService.validateStockTakingPlanEditable(createReqVO.getPlanId()); | ||
| 38 | + | ||
| 39 | + MesWmStockTakingPlanParamDO param = BeanUtils.toBean(createReqVO, MesWmStockTakingPlanParamDO.class); | ||
| 40 | + param.setPlanId(plan.getId()); | ||
| 41 | + stockTakingPlanParamMapper.insert(param); | ||
| 42 | + return param.getId(); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + public void updateStockTakingPlanParam(MesWmStockTakingPlanParamSaveReqVO updateReqVO) { | ||
| 47 | + MesWmStockTakingPlanParamDO param = validateStockTakingPlanParamExists(updateReqVO.getId()); | ||
| 48 | + stockTakingPlanService.validateStockTakingPlanEditable(param.getPlanId()); | ||
| 49 | + | ||
| 50 | + MesWmStockTakingPlanParamDO updateObj = BeanUtils.toBean(updateReqVO, MesWmStockTakingPlanParamDO.class); | ||
| 51 | + updateObj.setPlanId(param.getPlanId()); | ||
| 52 | + stockTakingPlanParamMapper.updateById(updateObj); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @Override | ||
| 56 | + public void deleteStockTakingPlanParam(Long id) { | ||
| 57 | + MesWmStockTakingPlanParamDO param = validateStockTakingPlanParamExists(id); | ||
| 58 | + stockTakingPlanService.validateStockTakingPlanEditable(param.getPlanId()); | ||
| 59 | + stockTakingPlanParamMapper.deleteById(id); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + @Override | ||
| 63 | + public MesWmStockTakingPlanParamDO getStockTakingPlanParam(Long id) { | ||
| 64 | + return stockTakingPlanParamMapper.selectById(id); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @Override | ||
| 68 | + public List<MesWmStockTakingPlanParamDO> getStockTakingPlanParamList(Long planId) { | ||
| 69 | + return stockTakingPlanParamMapper.selectListByPlanId(planId); | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + @Override | ||
| 73 | + public List<MesWmStockTakingPlanParamDO> getStockTakingPlanParamList(Collection<Long> planIds) { | ||
| 74 | + if (CollUtil.isEmpty(planIds)) { | ||
| 75 | + return Collections.emptyList(); | ||
| 76 | + } | ||
| 77 | + return stockTakingPlanParamMapper.selectListByPlanIds(planIds); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + @Override | ||
| 81 | + public void deleteStockTakingPlanParamByPlanId(Long planId) { | ||
| 82 | + stockTakingPlanParamMapper.deleteByPlanId(planId); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + @Override | ||
| 86 | + public MesWmStockTakingPlanParamDO validateStockTakingPlanParamExists(Long id) { | ||
| 87 | + MesWmStockTakingPlanParamDO param = stockTakingPlanParamMapper.selectById(id); | ||
| 88 | + if (param == null) { | ||
| 89 | + throw exception(WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS); | ||
| 90 | + } | ||
| 91 | + return param; | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanGenerateReqVO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; | ||
| 8 | +import jakarta.validation.Valid; | ||
| 9 | + | ||
| 10 | +import java.util.Collection; | ||
| 11 | +import java.util.List; | ||
| 12 | +import java.util.Map; | ||
| 13 | + | ||
| 14 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | ||
| 15 | + | ||
| 16 | +// TODO @AI:必要的注释 | ||
| 17 | +/** | ||
| 18 | + * MES 盘点方案 Service 接口 | ||
| 19 | + */ | ||
| 20 | +public interface MesWmStockTakingPlanService { | ||
| 21 | + | ||
| 22 | + Long createStockTakingPlan(@Valid MesWmStockTakingPlanSaveReqVO createReqVO); | ||
| 23 | + | ||
| 24 | + void updateStockTakingPlan(@Valid MesWmStockTakingPlanSaveReqVO updateReqVO); | ||
| 25 | + | ||
| 26 | + void deleteStockTakingPlan(Long id); | ||
| 27 | + | ||
| 28 | + void confirmStockTakingPlan(Long id); | ||
| 29 | + | ||
| 30 | + Long generateStockTakingTask(@Valid MesWmStockTakingPlanGenerateReqVO reqVO); | ||
| 31 | + | ||
| 32 | + MesWmStockTakingPlanDO getStockTakingPlan(Long id); | ||
| 33 | + | ||
| 34 | + MesWmStockTakingPlanDO validateStockTakingPlanExists(Long id); | ||
| 35 | + | ||
| 36 | + MesWmStockTakingPlanDO validateStockTakingPlanEditable(Long id); | ||
| 37 | + | ||
| 38 | + List<MesWmStockTakingPlanDO> getStockTakingPlanList(Collection<Long> ids); | ||
| 39 | + | ||
| 40 | + default Map<Long, MesWmStockTakingPlanDO> getStockTakingPlanMap(Collection<Long> ids) { | ||
| 41 | + return convertMap(getStockTakingPlanList(ids), MesWmStockTakingPlanDO::getId); | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + PageResult<MesWmStockTakingPlanDO> getStockTakingPlanPage(MesWmStockTakingPlanPageReqVO pageReqVO); | ||
| 45 | + | ||
| 46 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanGenerateReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanPageReqVO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param.MesWmStockTakingPlanParamSaveReqVO; | ||
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanSaveReqVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.vo.task.MesWmStockTakingTaskSaveReqVO; | ||
| 11 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; | ||
| 12 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanMapper; | ||
| 13 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanStatusEnum; | ||
| 14 | +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.MesWmStockTakingTaskService; | ||
| 15 | +import jakarta.annotation.Resource; | ||
| 16 | +import org.springframework.stereotype.Service; | ||
| 17 | +import org.springframework.transaction.annotation.Transactional; | ||
| 18 | +import org.springframework.validation.annotation.Validated; | ||
| 19 | + | ||
| 20 | +import java.util.Collection; | ||
| 21 | +import java.util.Collections; | ||
| 22 | +import java.util.List; | ||
| 23 | +import java.util.Objects; | ||
| 24 | + | ||
| 25 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 26 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; | ||
| 27 | + | ||
| 28 | +// TODO @AI:必要的注释 | ||
| 29 | +@Service | ||
| 30 | +@Validated | ||
| 31 | +public class MesWmStockTakingPlanServiceImpl implements MesWmStockTakingPlanService { | ||
| 32 | + | ||
| 33 | + @Resource | ||
| 34 | + private MesWmStockTakingPlanMapper stockTakingPlanMapper; | ||
| 35 | + @Resource | ||
| 36 | + private MesWmStockTakingPlanParamService stockTakingPlanParamService; | ||
| 37 | + @Resource | ||
| 38 | + private MesWmStockTakingTaskService stockTakingTaskService; | ||
| 39 | + | ||
| 40 | + @Override | ||
| 41 | + @Transactional(rollbackFor = Exception.class) | ||
| 42 | + public Long createStockTakingPlan(MesWmStockTakingPlanSaveReqVO createReqVO) { | ||
| 43 | + validatePlanCodeUnique(null, createReqVO.getCode()); | ||
| 44 | + | ||
| 45 | + MesWmStockTakingPlanDO plan = BeanUtils.toBean(createReqVO, MesWmStockTakingPlanDO.class); | ||
| 46 | + plan.setStatus(MesWmStockTakingPlanStatusEnum.PREPARE.getStatus()); | ||
| 47 | + stockTakingPlanMapper.insert(plan); | ||
| 48 | + return plan.getId(); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + // TODO @AI:开启后,就不允许编辑、删除了; | ||
| 52 | + @Override | ||
| 53 | + @Transactional(rollbackFor = Exception.class) | ||
| 54 | + public void updateStockTakingPlan(MesWmStockTakingPlanSaveReqVO updateReqVO) { | ||
| 55 | + validatePlanExistsAndPrepare(updateReqVO.getId()); | ||
| 56 | + validatePlanCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | ||
| 57 | + | ||
| 58 | + MesWmStockTakingPlanDO updateObj = BeanUtils.toBean(updateReqVO, MesWmStockTakingPlanDO.class); | ||
| 59 | + stockTakingPlanMapper.updateById(updateObj); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + // TODO @AI:开启后,就不允许编辑、删除了; | ||
| 63 | + @Override | ||
| 64 | + @Transactional(rollbackFor = Exception.class) | ||
| 65 | + public void deleteStockTakingPlan(Long id) { | ||
| 66 | + validatePlanExistsAndPrepare(id); | ||
| 67 | + stockTakingPlanParamService.deleteStockTakingPlanParamByPlanId(id); | ||
| 68 | + stockTakingPlanMapper.deleteById(id); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @Override | ||
| 72 | + public void confirmStockTakingPlan(Long id) { | ||
| 73 | + MesWmStockTakingPlanDO plan = validatePlanExistsAndPrepare(id); | ||
| 74 | + plan.setStatus(MesWmStockTakingPlanStatusEnum.CONFIRMED.getStatus()); | ||
| 75 | + stockTakingPlanMapper.updateById(plan); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + // TODO @AI:这个方法不需要了呀; | ||
| 79 | + @Override | ||
| 80 | + public Long generateStockTakingTask(MesWmStockTakingPlanGenerateReqVO reqVO) { | ||
| 81 | + MesWmStockTakingPlanDO plan = validatePlanExistsAndConfirmed(reqVO.getPlanId()); | ||
| 82 | + MesWmStockTakingTaskSaveReqVO taskSaveReqVO = new MesWmStockTakingTaskSaveReqVO(); | ||
| 83 | + taskSaveReqVO.setCode(reqVO.getCode()); | ||
| 84 | + taskSaveReqVO.setName(reqVO.getName()); | ||
| 85 | + taskSaveReqVO.setTakingDate(reqVO.getTakingDate()); | ||
| 86 | + taskSaveReqVO.setType(plan.getType()); | ||
| 87 | + taskSaveReqVO.setUserId(reqVO.getUserId()); | ||
| 88 | + taskSaveReqVO.setPlanId(plan.getId()); | ||
| 89 | + taskSaveReqVO.setBlindFlag(plan.getBlindFlag()); | ||
| 90 | + taskSaveReqVO.setFrozenFlag(plan.getFrozenFlag()); | ||
| 91 | + taskSaveReqVO.setRemark(reqVO.getRemark()); | ||
| 92 | + | ||
| 93 | + List<MesWmStockTakingPlanParamSaveReqVO> params = reqVO.getParams(); | ||
| 94 | + if (CollUtil.isEmpty(params)) { | ||
| 95 | + params = BeanUtils.toBean(stockTakingPlanParamService.getStockTakingPlanParamList(plan.getId()), MesWmStockTakingPlanParamSaveReqVO.class); | ||
| 96 | + } | ||
| 97 | + return stockTakingTaskService.createStockTakingTaskByPlan(reqVO, taskSaveReqVO, params); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @Override | ||
| 101 | + public MesWmStockTakingPlanDO getStockTakingPlan(Long id) { | ||
| 102 | + return stockTakingPlanMapper.selectById(id); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + @Override | ||
| 106 | + public MesWmStockTakingPlanDO validateStockTakingPlanExists(Long id) { | ||
| 107 | + MesWmStockTakingPlanDO plan = stockTakingPlanMapper.selectById(id); | ||
| 108 | + if (plan == null) { | ||
| 109 | + throw exception(WM_STOCK_TAKING_PLAN_NOT_EXISTS); | ||
| 110 | + } | ||
| 111 | + return plan; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + @Override | ||
| 115 | + public MesWmStockTakingPlanDO validateStockTakingPlanEditable(Long id) { | ||
| 116 | + return validatePlanExistsAndPrepare(id); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + @Override | ||
| 120 | + public List<MesWmStockTakingPlanDO> getStockTakingPlanList(Collection<Long> ids) { | ||
| 121 | + if (CollUtil.isEmpty(ids)) { | ||
| 122 | + return Collections.emptyList(); | ||
| 123 | + } | ||
| 124 | + return stockTakingPlanMapper.selectByIds(ids); | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + @Override | ||
| 128 | + public PageResult<MesWmStockTakingPlanDO> getStockTakingPlanPage(MesWmStockTakingPlanPageReqVO pageReqVO) { | ||
| 129 | + return stockTakingPlanMapper.selectPage(pageReqVO); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + | ||
| 133 | + private void validatePlanCodeUnique(Long id, String code) { | ||
| 134 | + MesWmStockTakingPlanDO plan = stockTakingPlanMapper.selectByCode(code); | ||
| 135 | + if (plan == null) { | ||
| 136 | + return; | ||
| 137 | + } | ||
| 138 | + if (id == null || !Objects.equals(plan.getId(), id)) { | ||
| 139 | + throw exception(WM_STOCK_TAKING_PLAN_CODE_DUPLICATE); | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + private MesWmStockTakingPlanDO validatePlanExistsAndPrepare(Long id) { | ||
| 144 | + MesWmStockTakingPlanDO plan = validateStockTakingPlanExists(id); | ||
| 145 | + if (!MesWmStockTakingPlanStatusEnum.PREPARE.getStatus().equals(plan.getStatus())) { | ||
| 146 | + throw exception(WM_STOCK_TAKING_PLAN_NOT_PREPARE); | ||
| 147 | + } | ||
| 148 | + return plan; | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + private MesWmStockTakingPlanDO validatePlanExistsAndConfirmed(Long id) { | ||
| 152 | + MesWmStockTakingPlanDO plan = validateStockTakingPlanExists(id); | ||
| 153 | + if (!MesWmStockTakingPlanStatusEnum.CONFIRMED.getStatus().equals(plan.getStatus())) { | ||
| 154 | + throw exception(WM_STOCK_TAKING_PLAN_NOT_CONFIRMED); | ||
| 155 | + } | ||
| 156 | + return plan; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | +} |