From 1fd112c6eae4eb2e7019f58e243542e64dd88785 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 11 Mar 2026 09:34:42 +0800 Subject: [PATCH] ✨ feat(mes): 添加盘点结果的创建、更新和删除功能 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java | 9 +++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java | 14 ++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java | 10 ++++++++++ 5 files changed, 143 insertions(+), 35 deletions(-) create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java index 44e1cde..39c8b4b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java @@ -100,6 +100,15 @@ public class MesWmStockTakingTaskLineController { return success(true); } + @GetMapping("/simple-list") + @Operation(summary = "获得盘点任务行精简列表", description = "根据任务编号查询,主要用于前端的下拉选项") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") + public CommonResult> getStockTakingTaskLineSimpleList( + @RequestParam("taskId") Long taskId) { + List list = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(taskId); + return success(buildStockTakingTaskLineRespVOList(list)); + } + // ==================== 拼接 VO ==================== private List buildStockTakingTaskLineRespVOList(List list) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java index 81d6780..4822a59 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java @@ -1,15 +1,13 @@ package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; @@ -26,21 +24,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Map; -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @@ -84,45 +77,74 @@ public class MesWmStockTakingTaskResultController { } @GetMapping("/list") - @Operation(summary = "获得盘点结果列表") - @Parameter(name = "taskId", description = "任务编号", required = true) + @Operation(summary = "获得盘点结果分页列表") @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") - public CommonResult> getStockTakingTaskResultList(@RequestParam("taskId") Long taskId) { - return success(buildStockTakingTaskResultRespVOList(stockTakingTaskResultService.getStockTakingTaskResultList(taskId))); + public CommonResult> getStockTakingTaskResultList(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO) { + PageResult pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO); + return success(new PageResult<>(buildStockTakingTaskResultRespVOList(pageResult.getList()), pageResult.getTotal())); } - @GetMapping("/export-excel") - @Operation(summary = "导出盘点结果 Excel") - @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:export')") - @ApiAccessLog(operateType = EXPORT) - public void exportStockTakingTaskResultExcel(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - PageResult pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO); - ExcelUtils.write(response, "盘点结果.xls", "数据", MesWmStockTakingTaskResultRespVO.class, - buildStockTakingTaskResultRespVOList(pageResult.getList())); + @PostMapping("/create") + @Operation(summary = "创建盘点结果") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + @Transactional(rollbackFor = Exception.class) + public CommonResult createStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO createReqVO) { + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(createReqVO, MesWmStockTakingTaskResultDO.class); + stockTakingTaskResultService.createStockTakingTaskResult(result); + return success(result.getId()); + } + + @PutMapping("/update") + @Operation(summary = "更新盘点结果") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + @Transactional(rollbackFor = Exception.class) + public CommonResult updateStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO updateReqVO) { + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskResultDO.class); + stockTakingTaskResultService.updateStockTakingTaskResult(result); + return success(true); } + @DeleteMapping("/delete") + @Operation(summary = "删除盘点结果") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + @Transactional(rollbackFor = Exception.class) + public CommonResult deleteStockTakingTaskResult(@RequestParam("id") Long id) { + stockTakingTaskResultService.deleteStockTakingTaskResult(id); + return success(true); + } + + // ==================== 拼接 VO ==================== + + private List buildStockTakingTaskResultRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } - Map itemMap = itemService.getItemMap(convertSet(list, MesWmStockTakingTaskResultDO::getItemId)); + // 查询关联数据 + Map itemMap = itemService.getItemMap( + convertSet(list, MesWmStockTakingTaskResultDO::getItemId)); Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); - Map warehouseMap = warehouseService.getWarehouseMap(convertSet(list, MesWmStockTakingTaskResultDO::getWarehouseId)); - Map locationMap = locationService.getWarehouseLocationMap(convertSet(list, MesWmStockTakingTaskResultDO::getLocationId)); - Map areaMap = areaService.getWarehouseAreaMap(convertSet(list, MesWmStockTakingTaskResultDO::getAreaId)); + Map warehouseMap = warehouseService.getWarehouseMap( + convertSet(list, MesWmStockTakingTaskResultDO::getWarehouseId)); + Map locationMap = locationService.getWarehouseLocationMap( + convertSet(list, MesWmStockTakingTaskResultDO::getLocationId)); + Map areaMap = areaService.getWarehouseAreaMap( + convertSet(list, MesWmStockTakingTaskResultDO::getAreaId)); + // 拼接 VO return BeanUtils.toBean(list, MesWmStockTakingTaskResultRespVO.class, vo -> { MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { - vo.setItemCode(item.getCode()); - vo.setItemName(item.getName()); - vo.setSpecification(item.getSpecification()); - MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), unit -> vo.setUnitMeasureName(unit.getName())); + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), + unit -> vo.setUnitMeasureName(unit.getName())); }); - MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); - MapUtils.findAndThen(locationMap, vo.getLocationId(), location -> vo.setLocationName(location.getName())); - MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName())); + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), + warehouse -> vo.setWarehouseName(warehouse.getName())); + MapUtils.findAndThen(locationMap, vo.getLocationId(), + location -> vo.setLocationName(location.getName())); + MapUtils.findAndThen(areaMap, vo.getAreaId(), + area -> vo.setAreaName(area.getName())); }); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java new file mode 100644 index 0000000..368be44 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - MES 盘点结果新增/修改 Request VO") +@Data +public class MesWmStockTakingTaskResultSaveReqVO { + + @Schema(description = "编号", example = "1") + private Long id; + + @Schema(description = "任务 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "任务 ID 不能为空") + private Long taskId; + + @Schema(description = "任务行 ID", example = "1") + private Long lineId; + + @Schema(description = "库存台账 ID", example = "1") + private Long materialStockId; + + @Schema(description = "物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "物料 ID 不能为空") + private Long itemId; + + @Schema(description = "批次 ID", example = "1") + private Long batchId; + + @Schema(description = "批次编码", example = "B202603080001") + private String batchCode; + + @Schema(description = "仓库 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "仓库 ID 不能为空") + private Long warehouseId; + + @Schema(description = "库区 ID", example = "1") + private Long locationId; + + @Schema(description = "库位 ID", example = "1") + private Long areaId; + + @Schema(description = "差异数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.000000") + @NotNull(message = "差异数量不能为空") + private BigDecimal quantity; + + @Schema(description = "备注", example = "备注") + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java index 210abb1..131e53e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java @@ -45,6 +45,20 @@ public interface MesWmStockTakingTaskResultService { void createStockTakingTaskResult(MesWmStockTakingTaskResultDO result); /** + * 更新盘点结果 + * + * @param result 盘点结果 + */ + void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result); + + /** + * 删除盘点结果 + * + * @param id 盘点结果编号 + */ + void deleteStockTakingTaskResult(Long id); + + /** * 根据任务编号删除盘点结果 * * @param taskId 任务编号 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java index c9a9193..9c3dbd5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java @@ -44,6 +44,16 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa } @Override + public void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result) { + stockTakingTaskResultMapper.updateById(result); + } + + @Override + public void deleteStockTakingTaskResult(Long id) { + stockTakingTaskResultMapper.deleteById(id); + } + + @Override public void deleteStockTakingTaskResultByTaskId(Long taskId) { stockTakingTaskResultMapper.deleteByTaskId(taskId); } -- libgit2 0.21.4