Commit 1fd112c6eae4eb2e7019f58e243542e64dd88785

Authored by YunaiV
1 parent aea84c59

✨ feat(mes): 添加盘点结果的创建、更新和删除功能

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 { @@ -100,6 +100,15 @@ public class MesWmStockTakingTaskLineController {
100 return success(true); 100 return success(true);
101 } 101 }
102 102
  103 + @GetMapping("/simple-list")
  104 + @Operation(summary = "获得盘点任务行精简列表", description = "根据任务编号查询,主要用于前端的下拉选项")
  105 + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')")
  106 + public CommonResult<List<MesWmStockTakingTaskLineRespVO>> getStockTakingTaskLineSimpleList(
  107 + @RequestParam("taskId") Long taskId) {
  108 + List<MesWmStockTakingTaskLineDO> list = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(taskId);
  109 + return success(buildStockTakingTaskLineRespVOList(list));
  110 + }
  111 +
103 // ==================== 拼接 VO ==================== 112 // ==================== 拼接 VO ====================
104 113
105 private List<MesWmStockTakingTaskLineRespVO> buildStockTakingTaskLineRespVOList(List<MesWmStockTakingTaskLineDO> list) { 114 private List<MesWmStockTakingTaskLineRespVO> buildStockTakingTaskLineRespVOList(List<MesWmStockTakingTaskLineDO> list) {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java
1 package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task; 1 package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task;
2 2
3 import cn.hutool.core.collection.CollUtil; 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; 4 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; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils; 6 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
9 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
10 -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;  
11 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO;
12 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultRespVO; 9 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultRespVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; 11 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
14 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
15 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; 13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO;
@@ -26,21 +24,16 @@ import io.swagger.v3.oas.annotations.Operation; @@ -26,21 +24,16 @@ import io.swagger.v3.oas.annotations.Operation;
26 import io.swagger.v3.oas.annotations.Parameter; 24 import io.swagger.v3.oas.annotations.Parameter;
27 import io.swagger.v3.oas.annotations.tags.Tag; 25 import io.swagger.v3.oas.annotations.tags.Tag;
28 import jakarta.annotation.Resource; 26 import jakarta.annotation.Resource;
29 -import jakarta.servlet.http.HttpServletResponse;  
30 import jakarta.validation.Valid; 27 import jakarta.validation.Valid;
31 import org.springframework.security.access.prepost.PreAuthorize; 28 import org.springframework.security.access.prepost.PreAuthorize;
  29 +import org.springframework.transaction.annotation.Transactional;
32 import org.springframework.validation.annotation.Validated; 30 import org.springframework.validation.annotation.Validated;
33 -import org.springframework.web.bind.annotation.GetMapping;  
34 -import org.springframework.web.bind.annotation.RequestMapping;  
35 -import org.springframework.web.bind.annotation.RequestParam;  
36 -import org.springframework.web.bind.annotation.RestController; 31 +import org.springframework.web.bind.annotation.*;
37 32
38 -import java.io.IOException;  
39 import java.util.Collections; 33 import java.util.Collections;
40 import java.util.List; 34 import java.util.List;
41 import java.util.Map; 35 import java.util.Map;
42 36
43 -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;  
44 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 37 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
45 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 38 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
46 39
@@ -84,45 +77,74 @@ public class MesWmStockTakingTaskResultController { @@ -84,45 +77,74 @@ public class MesWmStockTakingTaskResultController {
84 } 77 }
85 78
86 @GetMapping("/list") 79 @GetMapping("/list")
87 - @Operation(summary = "获得盘点结果列表")  
88 - @Parameter(name = "taskId", description = "任务编号", required = true) 80 + @Operation(summary = "获得盘点结果分页列表")
89 @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") 81 @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')")
90 - public CommonResult<List<MesWmStockTakingTaskResultRespVO>> getStockTakingTaskResultList(@RequestParam("taskId") Long taskId) {  
91 - return success(buildStockTakingTaskResultRespVOList(stockTakingTaskResultService.getStockTakingTaskResultList(taskId))); 82 + public CommonResult<PageResult<MesWmStockTakingTaskResultRespVO>> getStockTakingTaskResultList(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO) {
  83 + PageResult<MesWmStockTakingTaskResultDO> pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO);
  84 + return success(new PageResult<>(buildStockTakingTaskResultRespVOList(pageResult.getList()), pageResult.getTotal()));
92 } 85 }
93 86
94 - @GetMapping("/export-excel")  
95 - @Operation(summary = "导出盘点结果 Excel")  
96 - @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:export')")  
97 - @ApiAccessLog(operateType = EXPORT)  
98 - public void exportStockTakingTaskResultExcel(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO,  
99 - HttpServletResponse response) throws IOException {  
100 - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);  
101 - PageResult<MesWmStockTakingTaskResultDO> pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO);  
102 - ExcelUtils.write(response, "盘点结果.xls", "数据", MesWmStockTakingTaskResultRespVO.class,  
103 - buildStockTakingTaskResultRespVOList(pageResult.getList())); 87 + @PostMapping("/create")
  88 + @Operation(summary = "创建盘点结果")
  89 + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')")
  90 + @Transactional(rollbackFor = Exception.class)
  91 + public CommonResult<Long> createStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO createReqVO) {
  92 + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(createReqVO, MesWmStockTakingTaskResultDO.class);
  93 + stockTakingTaskResultService.createStockTakingTaskResult(result);
  94 + return success(result.getId());
  95 + }
  96 +
  97 + @PutMapping("/update")
  98 + @Operation(summary = "更新盘点结果")
  99 + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')")
  100 + @Transactional(rollbackFor = Exception.class)
  101 + public CommonResult<Boolean> updateStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO updateReqVO) {
  102 + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskResultDO.class);
  103 + stockTakingTaskResultService.updateStockTakingTaskResult(result);
  104 + return success(true);
104 } 105 }
105 106
  107 + @DeleteMapping("/delete")
  108 + @Operation(summary = "删除盘点结果")
  109 + @Parameter(name = "id", description = "编号", required = true)
  110 + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')")
  111 + @Transactional(rollbackFor = Exception.class)
  112 + public CommonResult<Boolean> deleteStockTakingTaskResult(@RequestParam("id") Long id) {
  113 + stockTakingTaskResultService.deleteStockTakingTaskResult(id);
  114 + return success(true);
  115 + }
  116 +
  117 + // ==================== 拼接 VO ====================
  118 +
  119 +
106 private List<MesWmStockTakingTaskResultRespVO> buildStockTakingTaskResultRespVOList(List<MesWmStockTakingTaskResultDO> list) { 120 private List<MesWmStockTakingTaskResultRespVO> buildStockTakingTaskResultRespVOList(List<MesWmStockTakingTaskResultDO> list) {
107 if (CollUtil.isEmpty(list)) { 121 if (CollUtil.isEmpty(list)) {
108 return Collections.emptyList(); 122 return Collections.emptyList();
109 } 123 }
110 - Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(convertSet(list, MesWmStockTakingTaskResultDO::getItemId)); 124 + // 查询关联数据
  125 + Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
  126 + convertSet(list, MesWmStockTakingTaskResultDO::getItemId));
111 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( 127 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
112 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); 128 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
113 - Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(convertSet(list, MesWmStockTakingTaskResultDO::getWarehouseId));  
114 - Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap(convertSet(list, MesWmStockTakingTaskResultDO::getLocationId));  
115 - Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap(convertSet(list, MesWmStockTakingTaskResultDO::getAreaId)); 129 + Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
  130 + convertSet(list, MesWmStockTakingTaskResultDO::getWarehouseId));
  131 + Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap(
  132 + convertSet(list, MesWmStockTakingTaskResultDO::getLocationId));
  133 + Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap(
  134 + convertSet(list, MesWmStockTakingTaskResultDO::getAreaId));
  135 + // 拼接 VO
116 return BeanUtils.toBean(list, MesWmStockTakingTaskResultRespVO.class, vo -> { 136 return BeanUtils.toBean(list, MesWmStockTakingTaskResultRespVO.class, vo -> {
117 MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { 137 MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
118 - vo.setItemCode(item.getCode());  
119 - vo.setItemName(item.getName());  
120 - vo.setSpecification(item.getSpecification());  
121 - MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), unit -> vo.setUnitMeasureName(unit.getName())); 138 + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification());
  139 + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
  140 + unit -> vo.setUnitMeasureName(unit.getName()));
122 }); 141 });
123 - MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName()));  
124 - MapUtils.findAndThen(locationMap, vo.getLocationId(), location -> vo.setLocationName(location.getName()));  
125 - MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName())); 142 + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(),
  143 + warehouse -> vo.setWarehouseName(warehouse.getName()));
  144 + MapUtils.findAndThen(locationMap, vo.getLocationId(),
  145 + location -> vo.setLocationName(location.getName()));
  146 + MapUtils.findAndThen(areaMap, vo.getAreaId(),
  147 + area -> vo.setAreaName(area.getName()));
126 }); 148 });
127 } 149 }
128 150
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Data;
  6 +
  7 +import java.math.BigDecimal;
  8 +
  9 +@Schema(description = "管理后台 - MES 盘点结果新增/修改 Request VO")
  10 +@Data
  11 +public class MesWmStockTakingTaskResultSaveReqVO {
  12 +
  13 + @Schema(description = "编号", example = "1")
  14 + private Long id;
  15 +
  16 + @Schema(description = "任务 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "任务 ID 不能为空")
  18 + private Long taskId;
  19 +
  20 + @Schema(description = "任务行 ID", example = "1")
  21 + private Long lineId;
  22 +
  23 + @Schema(description = "库存台账 ID", example = "1")
  24 + private Long materialStockId;
  25 +
  26 + @Schema(description = "物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  27 + @NotNull(message = "物料 ID 不能为空")
  28 + private Long itemId;
  29 +
  30 + @Schema(description = "批次 ID", example = "1")
  31 + private Long batchId;
  32 +
  33 + @Schema(description = "批次编码", example = "B202603080001")
  34 + private String batchCode;
  35 +
  36 + @Schema(description = "仓库 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  37 + @NotNull(message = "仓库 ID 不能为空")
  38 + private Long warehouseId;
  39 +
  40 + @Schema(description = "库区 ID", example = "1")
  41 + private Long locationId;
  42 +
  43 + @Schema(description = "库位 ID", example = "1")
  44 + private Long areaId;
  45 +
  46 + @Schema(description = "差异数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.000000")
  47 + @NotNull(message = "差异数量不能为空")
  48 + private BigDecimal quantity;
  49 +
  50 + @Schema(description = "备注", example = "备注")
  51 + private String remark;
  52 +
  53 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java
@@ -45,6 +45,20 @@ public interface MesWmStockTakingTaskResultService { @@ -45,6 +45,20 @@ public interface MesWmStockTakingTaskResultService {
45 void createStockTakingTaskResult(MesWmStockTakingTaskResultDO result); 45 void createStockTakingTaskResult(MesWmStockTakingTaskResultDO result);
46 46
47 /** 47 /**
  48 + * 更新盘点结果
  49 + *
  50 + * @param result 盘点结果
  51 + */
  52 + void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result);
  53 +
  54 + /**
  55 + * 删除盘点结果
  56 + *
  57 + * @param id 盘点结果编号
  58 + */
  59 + void deleteStockTakingTaskResult(Long id);
  60 +
  61 + /**
48 * 根据任务编号删除盘点结果 62 * 根据任务编号删除盘点结果
49 * 63 *
50 * @param taskId 任务编号 64 * @param taskId 任务编号
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 @@ -44,6 +44,16 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa
44 } 44 }
45 45
46 @Override 46 @Override
  47 + public void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result) {
  48 + stockTakingTaskResultMapper.updateById(result);
  49 + }
  50 +
  51 + @Override
  52 + public void deleteStockTakingTaskResult(Long id) {
  53 + stockTakingTaskResultMapper.deleteById(id);
  54 + }
  55 +
  56 + @Override
47 public void deleteStockTakingTaskResultByTaskId(Long taskId) { 57 public void deleteStockTakingTaskResultByTaskId(Long taskId) {
48 stockTakingTaskResultMapper.deleteByTaskId(taskId); 58 stockTakingTaskResultMapper.deleteByTaskId(taskId);
49 } 59 }