Commit b1f836abe335401a1bd5dfa6d393c707b9bb19ef
1 parent
1fd112c6
✨ feat(mes): 更新盘点结果相关逻辑,添加盘点数量字段
- 修改盘点结果请求和响应对象,新增盘点数量字段并设置为必填 - 更新控制器逻辑,简化创建和更新盘点结果的处理 - 添加盘点任务行的创建和更新逻辑,确保数据一致性 - 优化错误处理,增加相关错误码
Showing
13 changed files
with
239 additions
and
118 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskResultController.java
| @@ -71,15 +71,8 @@ public class MesWmStockTakingTaskResultController { | @@ -71,15 +71,8 @@ public class MesWmStockTakingTaskResultController { | ||
| 71 | @GetMapping("/page") | 71 | @GetMapping("/page") |
| 72 | @Operation(summary = "获得盘点结果分页") | 72 | @Operation(summary = "获得盘点结果分页") |
| 73 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") | 73 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") |
| 74 | - public CommonResult<PageResult<MesWmStockTakingTaskResultRespVO>> getStockTakingTaskResultPage(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO) { | ||
| 75 | - PageResult<MesWmStockTakingTaskResultDO> pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO); | ||
| 76 | - return success(new PageResult<>(buildStockTakingTaskResultRespVOList(pageResult.getList()), pageResult.getTotal())); | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - @GetMapping("/list") | ||
| 80 | - @Operation(summary = "获得盘点结果分页列表") | ||
| 81 | - @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") | ||
| 82 | - public CommonResult<PageResult<MesWmStockTakingTaskResultRespVO>> getStockTakingTaskResultList(@Valid MesWmStockTakingTaskResultPageReqVO pageReqVO) { | 74 | + public CommonResult<PageResult<MesWmStockTakingTaskResultRespVO>> getStockTakingTaskResultPage( |
| 75 | + @Valid MesWmStockTakingTaskResultPageReqVO pageReqVO) { | ||
| 83 | PageResult<MesWmStockTakingTaskResultDO> pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO); | 76 | PageResult<MesWmStockTakingTaskResultDO> pageResult = stockTakingTaskResultService.getStockTakingTaskResultPage(pageReqVO); |
| 84 | return success(new PageResult<>(buildStockTakingTaskResultRespVOList(pageResult.getList()), pageResult.getTotal())); | 77 | return success(new PageResult<>(buildStockTakingTaskResultRespVOList(pageResult.getList()), pageResult.getTotal())); |
| 85 | } | 78 | } |
| @@ -89,9 +82,7 @@ public class MesWmStockTakingTaskResultController { | @@ -89,9 +82,7 @@ public class MesWmStockTakingTaskResultController { | ||
| 89 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") | 82 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") |
| 90 | @Transactional(rollbackFor = Exception.class) | 83 | @Transactional(rollbackFor = Exception.class) |
| 91 | public CommonResult<Long> createStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO createReqVO) { | 84 | 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()); | 85 | + return success(stockTakingTaskResultService.createStockTakingTaskResult(createReqVO)); |
| 95 | } | 86 | } |
| 96 | 87 | ||
| 97 | @PutMapping("/update") | 88 | @PutMapping("/update") |
| @@ -99,8 +90,7 @@ public class MesWmStockTakingTaskResultController { | @@ -99,8 +90,7 @@ public class MesWmStockTakingTaskResultController { | ||
| 99 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") | 90 | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") |
| 100 | @Transactional(rollbackFor = Exception.class) | 91 | @Transactional(rollbackFor = Exception.class) |
| 101 | public CommonResult<Boolean> updateStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO updateReqVO) { | 92 | public CommonResult<Boolean> updateStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskResultSaveReqVO updateReqVO) { |
| 102 | - MesWmStockTakingTaskResultDO result = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskResultDO.class); | ||
| 103 | - stockTakingTaskResultService.updateStockTakingTaskResult(result); | 93 | + stockTakingTaskResultService.updateStockTakingTaskResult(updateReqVO); |
| 104 | return success(true); | 94 | return success(true); |
| 105 | } | 95 | } |
| 106 | 96 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/result/MesWmStockTakingTaskResultSaveReqVO.java
| @@ -37,15 +37,17 @@ public class MesWmStockTakingTaskResultSaveReqVO { | @@ -37,15 +37,17 @@ public class MesWmStockTakingTaskResultSaveReqVO { | ||
| 37 | @NotNull(message = "仓库 ID 不能为空") | 37 | @NotNull(message = "仓库 ID 不能为空") |
| 38 | private Long warehouseId; | 38 | private Long warehouseId; |
| 39 | 39 | ||
| 40 | - @Schema(description = "库区 ID", example = "1") | 40 | + @Schema(description = "库区 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 41 | + @NotNull(message = "库区 ID 不能为空") | ||
| 41 | private Long locationId; | 42 | private Long locationId; |
| 42 | 43 | ||
| 43 | - @Schema(description = "库位 ID", example = "1") | 44 | + @Schema(description = "库位 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 45 | + @NotNull(message = "库位 ID 不能为空") | ||
| 44 | private Long areaId; | 46 | private Long areaId; |
| 45 | 47 | ||
| 46 | - @Schema(description = "差异数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.000000") | ||
| 47 | - @NotNull(message = "差异数量不能为空") | ||
| 48 | - private BigDecimal quantity; | 48 | + @Schema(description = "盘点数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.000000") |
| 49 | + @NotNull(message = "盘点数量不能为空") | ||
| 50 | + private BigDecimal takingQuantity; | ||
| 49 | 51 | ||
| 50 | @Schema(description = "备注", example = "备注") | 52 | @Schema(description = "备注", example = "备注") |
| 51 | private String remark; | 53 | private String remark; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/task/MesWmStockTakingTaskLineDO.java
| @@ -61,7 +61,7 @@ public class MesWmStockTakingTaskLineDO extends BaseDO { | @@ -61,7 +61,7 @@ public class MesWmStockTakingTaskLineDO extends BaseDO { | ||
| 61 | private String batchCode; | 61 | private String batchCode; |
| 62 | 62 | ||
| 63 | /** | 63 | /** |
| 64 | - * 账面数量 | 64 | + * 在库数量 |
| 65 | */ | 65 | */ |
| 66 | private BigDecimal quantity; | 66 | private BigDecimal quantity; |
| 67 | /** | 67 | /** |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/task/MesWmStockTakingTaskResultDO.java
| @@ -85,9 +85,13 @@ public class MesWmStockTakingTaskResultDO extends BaseDO { | @@ -85,9 +85,13 @@ public class MesWmStockTakingTaskResultDO extends BaseDO { | ||
| 85 | private Long areaId; | 85 | private Long areaId; |
| 86 | 86 | ||
| 87 | /** | 87 | /** |
| 88 | - * 差异数量 | 88 | + * 在库数量 |
| 89 | */ | 89 | */ |
| 90 | private BigDecimal quantity; | 90 | private BigDecimal quantity; |
| 91 | + /** | ||
| 92 | + * 盘点数量 | ||
| 93 | + */ | ||
| 94 | + private BigDecimal takingQuantity; | ||
| 91 | 95 | ||
| 92 | /** | 96 | /** |
| 93 | * 备注 | 97 | * 备注 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java
| @@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStock | @@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStock | ||
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | -import java.util.Set; | ||
| 12 | 11 | ||
| 13 | /** | 12 | /** |
| 14 | * MES 盘点任务行 Mapper | 13 | * MES 盘点任务行 Mapper |
| @@ -24,13 +23,6 @@ public interface MesWmStockTakingTaskLineMapper extends BaseMapperX<MesWmStockTa | @@ -24,13 +23,6 @@ public interface MesWmStockTakingTaskLineMapper extends BaseMapperX<MesWmStockTa | ||
| 24 | .orderByAsc(MesWmStockTakingTaskLineDO::getId)); | 23 | .orderByAsc(MesWmStockTakingTaskLineDO::getId)); |
| 25 | } | 24 | } |
| 26 | 25 | ||
| 27 | - default List<MesWmStockTakingTaskLineDO> selectListByTaskIdAndIds(Long taskId, Set<Long> ids) { | ||
| 28 | - return selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>() | ||
| 29 | - .eq(MesWmStockTakingTaskLineDO::getTaskId, taskId) | ||
| 30 | - .inIfPresent(MesWmStockTakingTaskLineDO::getId, ids) | ||
| 31 | - .orderByAsc(MesWmStockTakingTaskLineDO::getId)); | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | default void deleteByTaskId(Long taskId) { | 26 | default void deleteByTaskId(Long taskId) { |
| 35 | delete(MesWmStockTakingTaskLineDO::getTaskId, taskId); | 27 | delete(MesWmStockTakingTaskLineDO::getTaskId, taskId); |
| 36 | } | 28 | } |
| @@ -41,4 +33,11 @@ public interface MesWmStockTakingTaskLineMapper extends BaseMapperX<MesWmStockTa | @@ -41,4 +33,11 @@ public interface MesWmStockTakingTaskLineMapper extends BaseMapperX<MesWmStockTa | ||
| 41 | .orderByAsc(MesWmStockTakingTaskLineDO::getId)); | 33 | .orderByAsc(MesWmStockTakingTaskLineDO::getId)); |
| 42 | } | 34 | } |
| 43 | 35 | ||
| 36 | + default MesWmStockTakingTaskLineDO selectByTaskIdAndItemIdAndAreaId(Long taskId, Long itemId, Long areaId) { | ||
| 37 | + return selectOne(new LambdaQueryWrapperX<MesWmStockTakingTaskLineDO>() | ||
| 38 | + .eq(MesWmStockTakingTaskLineDO::getTaskId, taskId) | ||
| 39 | + .eq(MesWmStockTakingTaskLineDO::getItemId, itemId) | ||
| 40 | + .eqIfPresent(MesWmStockTakingTaskLineDO::getAreaId, areaId)); | ||
| 41 | + } | ||
| 42 | + | ||
| 44 | } | 43 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskResultMapper.java
| @@ -7,8 +7,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.resul | @@ -7,8 +7,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.resul | ||
| 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; | 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; |
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | -import java.util.List; | ||
| 11 | - | ||
| 12 | /** | 10 | /** |
| 13 | * MES 盘点结果 Mapper | 11 | * MES 盘点结果 Mapper |
| 14 | * | 12 | * |
| @@ -27,12 +25,6 @@ public interface MesWmStockTakingTaskResultMapper extends BaseMapperX<MesWmStock | @@ -27,12 +25,6 @@ public interface MesWmStockTakingTaskResultMapper extends BaseMapperX<MesWmStock | ||
| 27 | .orderByDesc(MesWmStockTakingTaskResultDO::getId)); | 25 | .orderByDesc(MesWmStockTakingTaskResultDO::getId)); |
| 28 | } | 26 | } |
| 29 | 27 | ||
| 30 | - default List<MesWmStockTakingTaskResultDO> selectListByTaskId(Long taskId) { | ||
| 31 | - return selectList(new LambdaQueryWrapperX<MesWmStockTakingTaskResultDO>() | ||
| 32 | - .eq(MesWmStockTakingTaskResultDO::getTaskId, taskId) | ||
| 33 | - .orderByAsc(MesWmStockTakingTaskResultDO::getId)); | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | default void deleteByTaskId(Long taskId) { | 28 | default void deleteByTaskId(Long taskId) { |
| 37 | delete(MesWmStockTakingTaskResultDO::getTaskId, taskId); | 29 | delete(MesWmStockTakingTaskResultDO::getTaskId, taskId); |
| 38 | } | 30 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| @@ -485,6 +485,8 @@ public interface ErrorCodeConstants { | @@ -485,6 +485,8 @@ public interface ErrorCodeConstants { | ||
| 485 | ErrorCode WM_STOCK_TAKING_TASK_NO_LINE = new ErrorCode(1_040_714_116, "盘点任务至少需要一条任务行"); | 485 | ErrorCode WM_STOCK_TAKING_TASK_NO_LINE = new ErrorCode(1_040_714_116, "盘点任务至少需要一条任务行"); |
| 486 | ErrorCode WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS = new ErrorCode(1_040_714_117, "盘点任务行不存在"); | 486 | ErrorCode WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS = new ErrorCode(1_040_714_117, "盘点任务行不存在"); |
| 487 | ErrorCode WM_STOCK_TAKING_TASK_DYNAMIC_TIME_REQUIRED = new ErrorCode(1_040_714_118, "动态盘点必须选择开始时间和结束时间"); | 487 | ErrorCode WM_STOCK_TAKING_TASK_DYNAMIC_TIME_REQUIRED = new ErrorCode(1_040_714_118, "动态盘点必须选择开始时间和结束时间"); |
| 488 | + ErrorCode WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS = new ErrorCode(1_040_714_119, "盘点结果不存在"); | ||
| 489 | + ErrorCode WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN = new ErrorCode(1_040_714_120, "该盘点清单行已有盘点记录,不能重复盘点"); | ||
| 488 | 490 | ||
| 489 | // ========== MES 仓库管理-销售出库单(1-040-714-000) ========== | 491 | // ========== MES 仓库管理-销售出库单(1-040-714-000) ========== |
| 490 | ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, "销售出库单不存在"); | 492 | ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, "销售出库单不存在"); |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineService.java
| @@ -3,9 +3,11 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; | @@ -3,9 +3,11 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; | 4 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; |
| 5 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; | 5 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; |
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO; | ||
| 6 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; | 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; |
| 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; | 8 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; |
| 8 | 9 | ||
| 10 | +import java.math.BigDecimal; | ||
| 9 | import java.util.List; | 11 | import java.util.List; |
| 10 | 12 | ||
| 11 | /** | 13 | /** |
| @@ -76,4 +78,40 @@ public interface MesWmStockTakingTaskLineService { | @@ -76,4 +78,40 @@ public interface MesWmStockTakingTaskLineService { | ||
| 76 | */ | 78 | */ |
| 77 | void deleteStockTakingTaskLineByTaskId(Long taskId); | 79 | void deleteStockTakingTaskLineByTaskId(Long taskId); |
| 78 | 80 | ||
| 81 | + /** | ||
| 82 | + * 从盘点结果创建盘点任务行 | ||
| 83 | + * | ||
| 84 | + * 注意:当盘点结果没有对应的盘点清单行时,会自动创建一个新的盘点任务行 | ||
| 85 | + * | ||
| 86 | + * @param createReqVO 盘点结果创建信息 | ||
| 87 | + * @return 盘点任务行编号 | ||
| 88 | + */ | ||
| 89 | + Long createStockTakingTaskLine(MesWmStockTakingTaskResultSaveReqVO createReqVO); | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * 根据 taskId + itemId + areaId 查询盘点任务行 | ||
| 93 | + * | ||
| 94 | + * @param taskId 盘点任务编号 | ||
| 95 | + * @param itemId 物料编号 | ||
| 96 | + * @param areaId 库位编号 | ||
| 97 | + * @return 盘点任务行 | ||
| 98 | + */ | ||
| 99 | + MesWmStockTakingTaskLineDO getStockTakingTaskLine(Long taskId, Long itemId, Long areaId); | ||
| 100 | + | ||
| 101 | + /** | ||
| 102 | + * 校验盘点任务行存在 | ||
| 103 | + * | ||
| 104 | + * @param id 盘点任务行编号 | ||
| 105 | + * @return 盘点任务行 | ||
| 106 | + */ | ||
| 107 | + MesWmStockTakingTaskLineDO validateStockTakingTaskLineExists(Long id); | ||
| 108 | + | ||
| 109 | + /** | ||
| 110 | + * 更新盘点任务行的盘点数量 | ||
| 111 | + * | ||
| 112 | + * @param id 盘点任务行编号 | ||
| 113 | + * @param takingQuantity 盘点数量(增量) | ||
| 114 | + */ | ||
| 115 | + void updateStockTakingTaskLineTakingQuantity(Long id, BigDecimal takingQuantity); | ||
| 116 | + | ||
| 79 | } | 117 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java
| @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 7 | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; | 7 | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; |
| 8 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; | 8 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; |
| 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; | 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; |
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO; | ||
| 10 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; | 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; |
| 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; |
| 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; |
| @@ -121,13 +122,8 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask | @@ -121,13 +122,8 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask | ||
| 121 | stockTakingTaskLineMapper.deleteById(id); | 122 | stockTakingTaskLineMapper.deleteById(id); |
| 122 | } | 123 | } |
| 123 | 124 | ||
| 124 | - /** | ||
| 125 | - * 校验盘点任务行是否存在 | ||
| 126 | - * | ||
| 127 | - * @param id 盘点任务行编号 | ||
| 128 | - * @return 盘点任务行 | ||
| 129 | - */ | ||
| 130 | - private MesWmStockTakingTaskLineDO validateStockTakingTaskLineExists(Long id) { | 125 | + @Override |
| 126 | + public MesWmStockTakingTaskLineDO validateStockTakingTaskLineExists(Long id) { | ||
| 131 | MesWmStockTakingTaskLineDO line = stockTakingTaskLineMapper.selectById(id); | 127 | MesWmStockTakingTaskLineDO line = stockTakingTaskLineMapper.selectById(id); |
| 132 | if (line == null) { | 128 | if (line == null) { |
| 133 | throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS); | 129 | throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS); |
| @@ -172,6 +168,53 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask | @@ -172,6 +168,53 @@ public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTask | ||
| 172 | stockTakingTaskLineMapper.deleteByTaskId(taskId); | 168 | stockTakingTaskLineMapper.deleteByTaskId(taskId); |
| 173 | } | 169 | } |
| 174 | 170 | ||
| 171 | + @Override | ||
| 172 | + public MesWmStockTakingTaskLineDO getStockTakingTaskLine(Long taskId, Long itemId, Long areaId) { | ||
| 173 | + return stockTakingTaskLineMapper.selectByTaskIdAndItemIdAndAreaId(taskId, itemId, areaId); | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + @Override | ||
| 177 | + public void updateStockTakingTaskLineTakingQuantity(Long id, BigDecimal takingQuantity) { | ||
| 178 | + // 1. 校验盘点任务行存在 | ||
| 179 | + MesWmStockTakingTaskLineDO line = validateStockTakingTaskLineExists(id); | ||
| 180 | + // 2. 更新盘点数量和状态 | ||
| 181 | + line.setTakingQuantity(takingQuantity) | ||
| 182 | + .setStatus(calculateLineStatus(line.getQuantity(), takingQuantity)); | ||
| 183 | + stockTakingTaskLineMapper.updateById(line); | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + @Override | ||
| 187 | + public Long createStockTakingTaskLine(MesWmStockTakingTaskResultSaveReqVO createReqVO) { | ||
| 188 | + MesWmStockTakingTaskLineDO line = new MesWmStockTakingTaskLineDO() | ||
| 189 | + .setTaskId(createReqVO.getTaskId()).setItemId(createReqVO.getItemId()).setBatchId(createReqVO.getBatchId()) | ||
| 190 | + .setWarehouseId(createReqVO.getWarehouseId()).setLocationId(createReqVO.getLocationId()).setAreaId(createReqVO.getAreaId()) | ||
| 191 | + .setQuantity(BigDecimal.ZERO) // 账面数量默认为 0 | ||
| 192 | + .setTakingQuantity(createReqVO.getTakingQuantity()) // 盘点数量 | ||
| 193 | + .setStatus(calculateLineStatus(BigDecimal.ZERO, createReqVO.getTakingQuantity())); // 计算盈亏状态 | ||
| 194 | + stockTakingTaskLineMapper.insert(line); | ||
| 195 | + return line.getId(); | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + /** | ||
| 199 | + * 计算盘点任务行状态 | ||
| 200 | + * | ||
| 201 | + * @param quantity 账面数量 | ||
| 202 | + * @param takingQuantity 盘点数量 | ||
| 203 | + * @return 状态 | ||
| 204 | + */ | ||
| 205 | + private Integer calculateLineStatus(BigDecimal quantity, BigDecimal takingQuantity) { | ||
| 206 | + Assert.notNull(takingQuantity, "盘点数量不能为空"); | ||
| 207 | + Assert.notNull(quantity, "账面数量不能为空"); | ||
| 208 | + int compareResult = takingQuantity.compareTo(quantity); | ||
| 209 | + if (compareResult > 0) { | ||
| 210 | + return MesWmStockTakingTaskLineStatusEnum.GAIN.getStatus(); // 盘盈 | ||
| 211 | + } | ||
| 212 | + if (compareResult < 0) { | ||
| 213 | + return MesWmStockTakingTaskLineStatusEnum.LOSS.getStatus(); // 盘亏 | ||
| 214 | + } | ||
| 215 | + return MesWmStockTakingTaskLineStatusEnum.NORMAL.getStatus(); // 正常 | ||
| 216 | + } | ||
| 217 | + | ||
| 175 | /** | 218 | /** |
| 176 | * 从参数列表中提取第一个匹配类型的参数 ID | 219 | * 从参数列表中提取第一个匹配类型的参数 ID |
| 177 | * | 220 | * |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultService.java
| @@ -2,10 +2,9 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; | @@ -2,10 +2,9 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; | 4 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; |
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO; | ||
| 5 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; | 6 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; |
| 6 | 7 | ||
| 7 | -import java.util.List; | ||
| 8 | - | ||
| 9 | /** | 8 | /** |
| 10 | * MES 盘点结果 Service 接口 | 9 | * MES 盘点结果 Service 接口 |
| 11 | * | 10 | * |
| @@ -30,26 +29,19 @@ public interface MesWmStockTakingTaskResultService { | @@ -30,26 +29,19 @@ public interface MesWmStockTakingTaskResultService { | ||
| 30 | MesWmStockTakingTaskResultDO getStockTakingTaskResult(Long id); | 29 | MesWmStockTakingTaskResultDO getStockTakingTaskResult(Long id); |
| 31 | 30 | ||
| 32 | /** | 31 | /** |
| 33 | - * 获得盘点结果列表 | ||
| 34 | - * | ||
| 35 | - * @param taskId 盘点任务编号 | ||
| 36 | - * @return 盘点结果列表 | ||
| 37 | - */ | ||
| 38 | - List<MesWmStockTakingTaskResultDO> getStockTakingTaskResultList(Long taskId); | ||
| 39 | - | ||
| 40 | - /** | ||
| 41 | * 创建盘点结果 | 32 | * 创建盘点结果 |
| 42 | * | 33 | * |
| 43 | * @param result 盘点结果 | 34 | * @param result 盘点结果 |
| 35 | + * @return 盘点结果编号 | ||
| 44 | */ | 36 | */ |
| 45 | - void createStockTakingTaskResult(MesWmStockTakingTaskResultDO result); | 37 | + Long createStockTakingTaskResult(MesWmStockTakingTaskResultSaveReqVO result); |
| 46 | 38 | ||
| 47 | /** | 39 | /** |
| 48 | * 更新盘点结果 | 40 | * 更新盘点结果 |
| 49 | * | 41 | * |
| 50 | * @param result 盘点结果 | 42 | * @param result 盘点结果 |
| 51 | */ | 43 | */ |
| 52 | - void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result); | 44 | + void updateStockTakingTaskResult(MesWmStockTakingTaskResultSaveReqVO result); |
| 53 | 45 | ||
| 54 | /** | 46 | /** |
| 55 | * 删除盘点结果 | 47 | * 删除盘点结果 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
| 1 | package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; | 1 | package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.ObjUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 4 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; | 6 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO; |
| 7 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; | ||
| 5 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; | 9 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; |
| 6 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskResultMapper; | 10 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskResultMapper; |
| 7 | import jakarta.annotation.Resource; | 11 | import jakarta.annotation.Resource; |
| 8 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 13 | +import org.springframework.transaction.annotation.Transactional; | ||
| 9 | import org.springframework.validation.annotation.Validated; | 14 | import org.springframework.validation.annotation.Validated; |
| 10 | 15 | ||
| 11 | -import java.util.List; | 16 | +import java.math.BigDecimal; |
| 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_TASK_LINE_ALREADY_TAKEN; | ||
| 20 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS; | ||
| 12 | 21 | ||
| 13 | /** | 22 | /** |
| 14 | * MES 盘点结果 Service 实现类 | 23 | * MES 盘点结果 Service 实现类 |
| @@ -22,6 +31,11 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | @@ -22,6 +31,11 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | ||
| 22 | @Resource | 31 | @Resource |
| 23 | private MesWmStockTakingTaskResultMapper stockTakingTaskResultMapper; | 32 | private MesWmStockTakingTaskResultMapper stockTakingTaskResultMapper; |
| 24 | 33 | ||
| 34 | + @Resource | ||
| 35 | + private MesWmStockTakingTaskLineService stockTakingTaskLineService; | ||
| 36 | + @Resource | ||
| 37 | + private MesWmStockTakingTaskService stockTakingTaskService; | ||
| 38 | + | ||
| 25 | @Override | 39 | @Override |
| 26 | public PageResult<MesWmStockTakingTaskResultDO> getStockTakingTaskResultPage( | 40 | public PageResult<MesWmStockTakingTaskResultDO> getStockTakingTaskResultPage( |
| 27 | MesWmStockTakingTaskResultPageReqVO pageReqVO) { | 41 | MesWmStockTakingTaskResultPageReqVO pageReqVO) { |
| @@ -34,23 +48,77 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | @@ -34,23 +48,77 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | ||
| 34 | } | 48 | } |
| 35 | 49 | ||
| 36 | @Override | 50 | @Override |
| 37 | - public List<MesWmStockTakingTaskResultDO> getStockTakingTaskResultList(Long taskId) { | ||
| 38 | - return stockTakingTaskResultMapper.selectListByTaskId(taskId); | ||
| 39 | - } | 51 | + @Transactional(rollbackFor = Exception.class) |
| 52 | + public Long createStockTakingTaskResult(MesWmStockTakingTaskResultSaveReqVO createReqVO) { | ||
| 53 | + // 1. 校验任务处于盘点中状态 | ||
| 54 | + stockTakingTaskService.validateStockTakingTaskExistsAndApproving(createReqVO.getTaskId()); | ||
| 40 | 55 | ||
| 41 | - @Override | ||
| 42 | - public void createStockTakingTaskResult(MesWmStockTakingTaskResultDO result) { | 56 | + // 2. 确定 lineId 和账面数量 |
| 57 | + Long lineId = createReqVO.getLineId(); | ||
| 58 | + MesWmStockTakingTaskLineDO existingLine = null; | ||
| 59 | + if (lineId == null) { | ||
| 60 | + // 2.1 基于 taskId + itemId + areaId 查询已存在的 line | ||
| 61 | + existingLine = stockTakingTaskLineService.getStockTakingTaskLine( | ||
| 62 | + createReqVO.getTaskId(), createReqVO.getItemId(), createReqVO.getAreaId()); | ||
| 63 | + if (existingLine != null) { | ||
| 64 | + lineId = existingLine.getId(); | ||
| 65 | + } else { | ||
| 66 | + // 2.2 创建新的 line(注意:当盘点结果没有对应的盘点清单行时,会自动创建一个新的盘点任务行) | ||
| 67 | + lineId = stockTakingTaskLineService.createStockTakingTaskLine(createReqVO); | ||
| 68 | + } | ||
| 69 | + } else { | ||
| 70 | + // 2.3 如果传递了 lineId,从 line 中获取 quantity | ||
| 71 | + existingLine = stockTakingTaskLineService.validateStockTakingTaskLineExists(lineId); | ||
| 72 | + } | ||
| 73 | + if (existingLine != null | ||
| 74 | + && existingLine.getTakingQuantity() != null | ||
| 75 | + && existingLine.getTakingQuantity().compareTo(BigDecimal.ZERO) > 0) { | ||
| 76 | + throw exception(WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN); | ||
| 77 | + } | ||
| 78 | + BigDecimal quantity = existingLine != null ? existingLine.getQuantity() : BigDecimal.ZERO; // 账面数量 | ||
| 79 | + | ||
| 80 | + // 3. 插入 result 记录 | ||
| 81 | + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(createReqVO, MesWmStockTakingTaskResultDO.class) | ||
| 82 | + .setLineId(lineId).setQuantity(ObjUtil.defaultIfNull(quantity, createReqVO.getTakingQuantity())); | ||
| 43 | stockTakingTaskResultMapper.insert(result); | 83 | stockTakingTaskResultMapper.insert(result); |
| 84 | + | ||
| 85 | + // 4. 更新 line 的盘点数量和状态 | ||
| 86 | + stockTakingTaskLineService.updateStockTakingTaskLineTakingQuantity(lineId, createReqVO.getTakingQuantity()); | ||
| 87 | + return result.getId(); | ||
| 44 | } | 88 | } |
| 45 | 89 | ||
| 46 | @Override | 90 | @Override |
| 47 | - public void updateStockTakingTaskResult(MesWmStockTakingTaskResultDO result) { | 91 | + @Transactional(rollbackFor = Exception.class) |
| 92 | + public void updateStockTakingTaskResult(MesWmStockTakingTaskResultSaveReqVO updateReqVO) { | ||
| 93 | + updateReqVO.setLineId(null); // lineId 不能修改,避免误操作 | ||
| 94 | + // 1.1 校验记录存在 | ||
| 95 | + MesWmStockTakingTaskResultDO oldResult = validateStockTakingTaskResultExists(updateReqVO.getId()); | ||
| 96 | + // 1.2 校验任务处于盘点中状态 | ||
| 97 | + stockTakingTaskService.validateStockTakingTaskExistsAndApproving(oldResult.getTaskId()); | ||
| 98 | + | ||
| 99 | + // 2. 更新 result 记录 | ||
| 100 | + MesWmStockTakingTaskResultDO result = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskResultDO.class); | ||
| 48 | stockTakingTaskResultMapper.updateById(result); | 101 | stockTakingTaskResultMapper.updateById(result); |
| 102 | + | ||
| 103 | + // 3. 关联更新 line 的盘点数量(覆盖式更新) | ||
| 104 | + stockTakingTaskLineService.updateStockTakingTaskLineTakingQuantity( | ||
| 105 | + oldResult.getLineId(), updateReqVO.getTakingQuantity()); | ||
| 49 | } | 106 | } |
| 50 | 107 | ||
| 51 | @Override | 108 | @Override |
| 109 | + @Transactional(rollbackFor = Exception.class) | ||
| 52 | public void deleteStockTakingTaskResult(Long id) { | 110 | public void deleteStockTakingTaskResult(Long id) { |
| 111 | + // 1.1 校验 result 是否存在 | ||
| 112 | + MesWmStockTakingTaskResultDO result = validateStockTakingTaskResultExists(id); | ||
| 113 | + // 1.2 校验 task 是否处于 APPROVING 状态 | ||
| 114 | + stockTakingTaskService.validateStockTakingTaskExistsAndApproving(result.getTaskId()); | ||
| 115 | + | ||
| 116 | + // 2. 删除 result 记录 | ||
| 53 | stockTakingTaskResultMapper.deleteById(id); | 117 | stockTakingTaskResultMapper.deleteById(id); |
| 118 | + | ||
| 119 | + // 3. 更新对应 line 的盘点数量和状态 | ||
| 120 | + stockTakingTaskLineService.updateStockTakingTaskLineTakingQuantity( | ||
| 121 | + result.getLineId(), result.getTakingQuantity().negate()); | ||
| 54 | } | 122 | } |
| 55 | 123 | ||
| 56 | @Override | 124 | @Override |
| @@ -58,4 +126,18 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | @@ -58,4 +126,18 @@ public class MesWmStockTakingTaskResultServiceImpl implements MesWmStockTakingTa | ||
| 58 | stockTakingTaskResultMapper.deleteByTaskId(taskId); | 126 | stockTakingTaskResultMapper.deleteByTaskId(taskId); |
| 59 | } | 127 | } |
| 60 | 128 | ||
| 129 | + /** | ||
| 130 | + * 校验盘点结果是否存在 | ||
| 131 | + * | ||
| 132 | + * @param id 盘点结果编号 | ||
| 133 | + * @return 盘点结果 | ||
| 134 | + */ | ||
| 135 | + private MesWmStockTakingTaskResultDO validateStockTakingTaskResultExists(Long id) { | ||
| 136 | + MesWmStockTakingTaskResultDO result = stockTakingTaskResultMapper.selectById(id); | ||
| 137 | + if (result == null) { | ||
| 138 | + throw exception(WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS); | ||
| 139 | + } | ||
| 140 | + return result; | ||
| 141 | + } | ||
| 142 | + | ||
| 61 | } | 143 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskService.java
| @@ -81,6 +81,14 @@ public interface MesWmStockTakingTaskService { | @@ -81,6 +81,14 @@ public interface MesWmStockTakingTaskService { | ||
| 81 | MesWmStockTakingTaskDO validateStockTakingTaskExistsAndPrepare(Long id); | 81 | MesWmStockTakingTaskDO validateStockTakingTaskExistsAndPrepare(Long id); |
| 82 | 82 | ||
| 83 | /** | 83 | /** |
| 84 | + * 校验盘点任务存在,并且处于【盘点中】状态 | ||
| 85 | + * | ||
| 86 | + * @param id 盘点任务编号 | ||
| 87 | + * @return 盘点任务 | ||
| 88 | + */ | ||
| 89 | + MesWmStockTakingTaskDO validateStockTakingTaskExistsAndApproving(Long id); | ||
| 90 | + | ||
| 91 | + /** | ||
| 84 | * 分页查询盘点任务 | 92 | * 分页查询盘点任务 |
| 85 | * | 93 | * |
| 86 | * @param pageReqVO 分页查询条件 | 94 | * @param pageReqVO 分页查询条件 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
| @@ -9,9 +9,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWm | @@ -9,9 +9,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWm | ||
| 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO; | 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO; |
| 10 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; | 10 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; |
| 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; | 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; |
| 12 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; | ||
| 13 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskMapper; | 12 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskMapper; |
| 14 | -import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum; | ||
| 15 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum; | 13 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum; |
| 16 | import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; | 14 | import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; |
| 17 | import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; | 15 | import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; |
| @@ -23,7 +21,6 @@ import org.springframework.transaction.annotation.Transactional; | @@ -23,7 +21,6 @@ import org.springframework.transaction.annotation.Transactional; | ||
| 23 | import org.springframework.validation.annotation.Validated; | 21 | import org.springframework.validation.annotation.Validated; |
| 24 | 22 | ||
| 25 | import java.math.BigDecimal; | 23 | import java.math.BigDecimal; |
| 26 | -import java.time.LocalDateTime; | ||
| 27 | import java.util.List; | 24 | import java.util.List; |
| 28 | 25 | ||
| 29 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 26 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| @@ -141,50 +138,20 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | @@ -141,50 +138,20 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | ||
| 141 | } | 138 | } |
| 142 | } | 139 | } |
| 143 | 140 | ||
| 144 | - | ||
| 145 | @Override | 141 | @Override |
| 146 | @Transactional(rollbackFor = Exception.class) | 142 | @Transactional(rollbackFor = Exception.class) |
| 147 | public void finishStockTakingTask(Long id) { | 143 | public void finishStockTakingTask(Long id) { |
| 148 | - // 1.1 校验任务存在且为审批中状态 | ||
| 149 | - MesWmStockTakingTaskDO task = validateStockTakingTaskExistsInternal(id); | ||
| 150 | - // 1.2 校验任务状态 | ||
| 151 | - if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus(), task.getStatus())) { | ||
| 152 | - throw exception(WM_STOCK_TAKING_TASK_NOT_APPROVING); | ||
| 153 | - } | ||
| 154 | - // 1.3 获取盘点任务行 | ||
| 155 | - List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id); | ||
| 156 | - if (CollUtil.isEmpty(lines)) { | ||
| 157 | - throw exception(WM_STOCK_TAKING_TASK_NO_LINE); | ||
| 158 | - } | ||
| 159 | - | ||
| 160 | - // 2. 生成盘点结果(仅保存差异数据) | ||
| 161 | - stockTakingTaskResultService.deleteStockTakingTaskResultByTaskId(id); | ||
| 162 | - for (MesWmStockTakingTaskLineDO line : lines) { | ||
| 163 | - if (MesWmStockTakingTaskLineStatusEnum.NORMAL.getStatus().equals(line.getStatus())) { | ||
| 164 | - continue; | ||
| 165 | - } | ||
| 166 | - stockTakingTaskResultService.createStockTakingTaskResult(MesWmStockTakingTaskResultDO.builder() | ||
| 167 | - .taskId(id) | ||
| 168 | - .lineId(line.getId()) | ||
| 169 | - .materialStockId(line.getMaterialStockId()) | ||
| 170 | - .itemId(line.getItemId()) | ||
| 171 | - .batchId(line.getBatchId()) | ||
| 172 | - .batchCode(line.getBatchCode()) | ||
| 173 | - .warehouseId(line.getWarehouseId()) | ||
| 174 | - .locationId(line.getLocationId()) | ||
| 175 | - .areaId(line.getAreaId()) | ||
| 176 | - .quantity(calculateStockTakingDifferenceQuantity(line)) | ||
| 177 | - .remark(line.getRemark()) | ||
| 178 | - .build()); | ||
| 179 | - } | 144 | + // 1. 校验任务存在且为审批中状态 |
| 145 | + MesWmStockTakingTaskDO task = validateStockTakingTaskExistsAndApproving(id); | ||
| 180 | 146 | ||
| 181 | - // 3. 更新任务状态为已完成 | ||
| 182 | - task.setEndTime(LocalDateTime.now()); | ||
| 183 | - task.setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus()); | ||
| 184 | - stockTakingTaskMapper.updateById(task); | 147 | + // 2. 更新任务状态为已完成 |
| 148 | + stockTakingTaskMapper.updateById(new MesWmStockTakingTaskDO().setId(id) | ||
| 149 | + .setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus())); | ||
| 185 | 150 | ||
| 186 | - // 4. 解冻库存 | 151 | + // 3. 解冻库存 |
| 152 | + // TODO @芋艿:后续跟进下! | ||
| 187 | if (Boolean.TRUE.equals(task.getFrozenFlag())) { | 153 | if (Boolean.TRUE.equals(task.getFrozenFlag())) { |
| 154 | + List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id); | ||
| 188 | unfreezeStockTakingTaskStocks(lines); | 155 | unfreezeStockTakingTaskStocks(lines); |
| 189 | } | 156 | } |
| 190 | } | 157 | } |
| @@ -192,7 +159,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | @@ -192,7 +159,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | ||
| 192 | @Override | 159 | @Override |
| 193 | @Transactional(rollbackFor = Exception.class) | 160 | @Transactional(rollbackFor = Exception.class) |
| 194 | public void cancelStockTakingTask(Long id) { | 161 | public void cancelStockTakingTask(Long id) { |
| 195 | - MesWmStockTakingTaskDO task = validateStockTakingTaskExistsInternal(id); | 162 | + MesWmStockTakingTaskDO task = validateStockTakingTaskExists(id); |
| 196 | if (MesWmStockTakingTaskStatusEnum.FINISHED.getStatus().equals(task.getStatus()) | 163 | if (MesWmStockTakingTaskStatusEnum.FINISHED.getStatus().equals(task.getStatus()) |
| 197 | || MesWmStockTakingTaskStatusEnum.CANCELED.getStatus().equals(task.getStatus())) { | 164 | || MesWmStockTakingTaskStatusEnum.CANCELED.getStatus().equals(task.getStatus())) { |
| 198 | throw exception(WM_STOCK_TAKING_TASK_CANNOT_CANCEL); | 165 | throw exception(WM_STOCK_TAKING_TASK_CANNOT_CANCEL); |
| @@ -211,15 +178,16 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | @@ -211,15 +178,16 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | ||
| 211 | 178 | ||
| 212 | @Override | 179 | @Override |
| 213 | public MesWmStockTakingTaskDO validateStockTakingTaskExists(Long id) { | 180 | public MesWmStockTakingTaskDO validateStockTakingTaskExists(Long id) { |
| 214 | - return validateStockTakingTaskExistsInternal(id); | ||
| 215 | - } | ||
| 216 | - | ||
| 217 | - @Override | ||
| 218 | - public MesWmStockTakingTaskDO validateStockTakingTaskExistsAndPrepare(Long id) { | ||
| 219 | MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id); | 181 | MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id); |
| 220 | if (task == null) { | 182 | if (task == null) { |
| 221 | throw exception(WM_STOCK_TAKING_TASK_NOT_EXISTS); | 183 | throw exception(WM_STOCK_TAKING_TASK_NOT_EXISTS); |
| 222 | } | 184 | } |
| 185 | + return task; | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + @Override | ||
| 189 | + public MesWmStockTakingTaskDO validateStockTakingTaskExistsAndPrepare(Long id) { | ||
| 190 | + MesWmStockTakingTaskDO task = validateStockTakingTaskExists(id); | ||
| 223 | if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.PREPARE.getStatus(), task.getStatus())) { | 191 | if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.PREPARE.getStatus(), task.getStatus())) { |
| 224 | throw exception(WM_STOCK_TAKING_TASK_NOT_PREPARE); | 192 | throw exception(WM_STOCK_TAKING_TASK_NOT_PREPARE); |
| 225 | } | 193 | } |
| @@ -227,6 +195,15 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | @@ -227,6 +195,15 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | ||
| 227 | } | 195 | } |
| 228 | 196 | ||
| 229 | @Override | 197 | @Override |
| 198 | + public MesWmStockTakingTaskDO validateStockTakingTaskExistsAndApproving(Long id) { | ||
| 199 | + MesWmStockTakingTaskDO task = validateStockTakingTaskExists(id); | ||
| 200 | + if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus(), task.getStatus())) { | ||
| 201 | + throw exception(WM_STOCK_TAKING_TASK_NOT_APPROVING); | ||
| 202 | + } | ||
| 203 | + return task; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + @Override | ||
| 230 | public PageResult<MesWmStockTakingTaskDO> getStockTakingTaskPage(MesWmStockTakingTaskPageReqVO pageReqVO) { | 207 | public PageResult<MesWmStockTakingTaskDO> getStockTakingTaskPage(MesWmStockTakingTaskPageReqVO pageReqVO) { |
| 231 | return stockTakingTaskMapper.selectPage(pageReqVO); | 208 | return stockTakingTaskMapper.selectPage(pageReqVO); |
| 232 | } | 209 | } |
| @@ -267,12 +244,4 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | @@ -267,12 +244,4 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ | ||
| 267 | } | 244 | } |
| 268 | } | 245 | } |
| 269 | 246 | ||
| 270 | - private MesWmStockTakingTaskDO validateStockTakingTaskExistsInternal(Long id) { | ||
| 271 | - MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id); | ||
| 272 | - if (task == null) { | ||
| 273 | - throw exception(WM_STOCK_TAKING_TASK_NOT_EXISTS); | ||
| 274 | - } | ||
| 275 | - return task; | ||
| 276 | - } | ||
| 277 | - | ||
| 278 | } | 247 | } |