diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskController.java index e022dc8..91edb07 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskController.java @@ -9,23 +9,10 @@ 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.*; -import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineBatchUpdateReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineRespVO; -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.plan.MesWmStockTakingPlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; -import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; -import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; import cn.iocoder.yudao.module.mes.service.wm.stocktaking.task.MesWmStockTakingTaskService; -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import io.swagger.v3.oas.annotations.Operation; @@ -39,7 +26,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.Map; @@ -59,17 +45,6 @@ public class MesWmStockTakingTaskController { @Resource private MesWmStockTakingPlanService stockTakingPlanService; @Resource - private MesMdItemService itemService; - @Resource - private MesMdUnitMeasureService unitMeasureService; - @Resource - private MesWmWarehouseService warehouseService; - @Resource - private MesWmWarehouseLocationService locationService; - @Resource - private MesWmWarehouseAreaService areaService; - - @Resource private AdminUserApi adminUserApi; @PostMapping("/create") @@ -153,63 +128,24 @@ public class MesWmStockTakingTaskController { return success(true); } - @PutMapping("/line-batch-update") - @Operation(summary = "批量更新盘点任务行") - @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") - public CommonResult updateStockTakingTaskLines(@Valid @RequestBody MesWmStockTakingTaskLineBatchUpdateReqVO reqVO) { - stockTakingTaskService.updateStockTakingTaskLines(reqVO); - return success(true); - } - - @GetMapping("/line-list") - @Operation(summary = "获得盘点任务行列表") - @Parameter(name = "taskId", description = "任务编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") - public CommonResult> getStockTakingTaskLineList(@RequestParam("taskId") Long taskId) { - return success(buildTaskLineRespVOList(stockTakingTaskService.getStockTakingTaskLineList(taskId))); - } + // ==================== 拼接 VO ==================== private List buildTaskRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } - Map userMap = adminUserApi.getUserMap(convertSet(list, MesWmStockTakingTaskDO::getUserId)); - Map planMap = stockTakingPlanService.getStockTakingPlanMap(convertSet(list, MesWmStockTakingTaskDO::getPlanId)); + // 查询关联数据 + Map userMap = adminUserApi.getUserMap( + convertSet(list, MesWmStockTakingTaskDO::getUserId)); + Map planMap = stockTakingPlanService.getStockTakingPlanMap( + convertSet(list, MesWmStockTakingTaskDO::getPlanId)); + // 拼接数据 return BeanUtils.toBean(list, MesWmStockTakingTaskRespVO.class, vo -> { - MapUtils.findAndThen(userMap, vo.getUserId(), user -> vo.setUserNickname(user.getNickname())); - MapUtils.findAndThen(planMap, vo.getPlanId(), plan -> { - vo.setPlanCode(plan.getCode()); - vo.setPlanName(plan.getName()); - }); - }); - } - - private List buildTaskLineRespVOList(List list) { - if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); - } - Map itemMap = itemService.getItemMap(convertSet(list, MesWmStockTakingTaskLineDO::getItemId)); - Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( - convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); - Map warehouseMap = warehouseService.getWarehouseMap(convertSet(list, MesWmStockTakingTaskLineDO::getWarehouseId)); - Map locationMap = locationService.getWarehouseLocationMap(convertSet(list, MesWmStockTakingTaskLineDO::getLocationId)); - Map areaMap = areaService.getWarehouseAreaMap(convertSet(list, MesWmStockTakingTaskLineDO::getAreaId)); - return BeanUtils.toBean(list, MesWmStockTakingTaskLineRespVO.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())); - }); - 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())); - vo.setDifferenceQuantity(defaultQuantity(vo.getTakingQuantity()).subtract(defaultQuantity(vo.getQuantity()))); + MapUtils.findAndThen(userMap, vo.getUserId(), + user -> vo.setUserNickname(user.getNickname())); + MapUtils.findAndThen(planMap, vo.getPlanId(), + plan -> vo.setPlanCode(plan.getCode()).setPlanName(plan.getName())); }); } - private BigDecimal defaultQuantity(BigDecimal quantity) { - return quantity == null ? BigDecimal.ZERO : quantity; - } - } 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 new file mode 100644 index 0000000..beaf2b4 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/MesWmStockTakingTaskLineController.java @@ -0,0 +1,123 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; +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.MesWmStockTakingTaskLineDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.task.MesWmStockTakingTaskLineService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; +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.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; + +@Tag(name = "管理后台 - MES 盘点任务行") +@RestController +@RequestMapping("/mes/wm/stocktaking-task-line") +@Validated +public class MesWmStockTakingTaskLineController { + + @Resource + private MesWmStockTakingTaskLineService stockTakingTaskLineService; + @Resource + private MesMdItemService itemService; + @Resource + private MesMdUnitMeasureService unitMeasureService; + @Resource + private MesWmWarehouseService warehouseService; + @Resource + private MesWmWarehouseLocationService locationService; + @Resource + private MesWmWarehouseAreaService areaService; + + @GetMapping("/page") + @Operation(summary = "获得盘点任务行分页") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") + public CommonResult> getStockTakingTaskLinePage( + @Valid MesWmStockTakingTaskLinePageReqVO pageReqVO) { + PageResult pageResult = stockTakingTaskLineService.getStockTakingTaskLinePage(pageReqVO); + return success(new PageResult<>(buildTaskLineRespVOList(pageResult.getList()), pageResult.getTotal())); + } + + @PostMapping("/create") + @Operation(summary = "创建盘点任务行") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + public CommonResult createStockTakingTaskLine(@Valid @RequestBody MesWmStockTakingTaskLineSaveReqVO createReqVO) { + return success(stockTakingTaskLineService.createStockTakingTaskLine(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新盘点任务行") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + public CommonResult updateStockTakingTaskLine(@Valid @RequestBody MesWmStockTakingTaskLineSaveReqVO updateReqVO) { + stockTakingTaskLineService.updateStockTakingTaskLine(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除盘点任务行") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") + public CommonResult deleteStockTakingTaskLine(@RequestParam("id") Long id) { + stockTakingTaskLineService.deleteStockTakingTaskLine(id); + return success(true); + } + + // ==================== 拼接 VO ==================== + + private List buildTaskLineRespVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + // 查询关联数据 + Map itemMap = itemService.getItemMap(convertSet(list, MesWmStockTakingTaskLineDO::getItemId)); + Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); + Map warehouseMap = warehouseService.getWarehouseMap( + convertSet(list, MesWmStockTakingTaskLineDO::getWarehouseId)); + Map locationMap = locationService.getWarehouseLocationMap( + convertSet(list, MesWmStockTakingTaskLineDO::getLocationId)); + Map areaMap = areaService.getWarehouseAreaMap( + convertSet(list, MesWmStockTakingTaskLineDO::getAreaId)); + // 拼接 VO + return BeanUtils.toBean(list, MesWmStockTakingTaskLineRespVO.class, vo -> { + findAndThen(itemMap, vo.getItemId(), item -> { + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); + findAndThen(unitMeasureMap, item.getUnitMeasureId(), + unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); + }); + findAndThen(warehouseMap, vo.getWarehouseId(), + warehouse -> vo.setWarehouseName(warehouse.getName())); + findAndThen(locationMap, + vo.getLocationId(), location -> vo.setLocationName(location.getName())); + 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/line/MesWmStockTakingTaskLinePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/line/MesWmStockTakingTaskLinePageReqVO.java new file mode 100644 index 0000000..50f3da0 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/line/MesWmStockTakingTaskLinePageReqVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - 盘点任务行分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MesWmStockTakingTaskLinePageReqVO extends PageParam { + + @Schema(description = "盘点任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long taskId; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/line/MesWmStockTakingTaskLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/line/MesWmStockTakingTaskLineSaveReqVO.java new file mode 100644 index 0000000..f343e1b --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/line/MesWmStockTakingTaskLineSaveReqVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 盘点任务行新增/修改 Request VO") +@Data +public class MesWmStockTakingTaskLineSaveReqVO { + + @Schema(description = "编号", example = "1") + private Long id; + + @Schema(description = "盘点任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "盘点任务编号不能为空") + private Long taskId; + + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "物料编号不能为空") + private Long itemId; + + @Schema(description = "批次编号", example = "1") + private Long batchId; + + @Schema(description = "账面数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @NotNull(message = "账面数量不能为空") + private BigDecimal quantity; + + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "仓库编号不能为空") + private Long warehouseId; + + @Schema(description = "库区编号", example = "1") + private Long locationId; + + @Schema(description = "库位编号", example = "1") + private Long areaId; + + @Schema(description = "盘点状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "盘点状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "备注") + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java index cda7a4e..a4a1850 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/stocktaking/task/MesWmStockTakingTaskLineMapper.java @@ -1,7 +1,9 @@ package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; import org.apache.ibatis.annotations.Mapper; @@ -33,4 +35,10 @@ public interface MesWmStockTakingTaskLineMapper extends BaseMapperX selectPage(MesWmStockTakingTaskLinePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MesWmStockTakingTaskLineDO::getTaskId, reqVO.getTaskId()) + .orderByAsc(MesWmStockTakingTaskLineDO::getId)); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskLineStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskLineStatusEnum.java index cdd2a50..b5448a9 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskLineStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingTaskLineStatusEnum.java @@ -13,8 +13,6 @@ import java.util.Arrays; @AllArgsConstructor public enum MesWmStockTakingTaskLineStatusEnum implements ArrayValuable { - // TODO @AI:UNCOUNTED 可以去掉! - UNCOUNTED(0, "未盘点"), NORMAL(1, "正常"), GAIN(2, "盘盈"), LOSS(3, "盘亏"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineService.java new file mode 100644 index 0000000..694dfb1 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineService.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; + +/** + * MES 盘点任务行 Service 接口 + * + * @author 芋道源码 + */ +public interface MesWmStockTakingTaskLineService { + + /** + * 根据盘点方案生成盘点明细行 + * + * @param task 盘点任务 + */ + void generateStockTakingLines(MesWmStockTakingTaskDO task); + + /** + * 分页查询盘点任务行 + * + * @param pageReqVO 分页查询条件 + * @return 盘点任务行分页结果 + */ + PageResult getStockTakingTaskLinePage(MesWmStockTakingTaskLinePageReqVO pageReqVO); + + /** + * 创建盘点任务行 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createStockTakingTaskLine(MesWmStockTakingTaskLineSaveReqVO createReqVO); + + /** + * 更新盘点任务行 + * + * @param updateReqVO 更新信息 + */ + void updateStockTakingTaskLine(MesWmStockTakingTaskLineSaveReqVO updateReqVO); + + /** + * 删除盘点任务行 + * + * @param id 盘点任务行编号 + */ + void deleteStockTakingTaskLine(Long id); + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java new file mode 100644 index 0000000..971c5b1 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java @@ -0,0 +1,181 @@ +package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; +import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanParamMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskLineMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskMapper; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum; +import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * MES 盘点任务行 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class MesWmStockTakingTaskLineServiceImpl implements MesWmStockTakingTaskLineService { + + @Resource + private MesWmStockTakingTaskLineMapper stockTakingTaskLineMapper; + @Resource + private MesWmStockTakingPlanParamMapper stockTakingPlanParamMapper; + @Resource + private MesWmMaterialStockService materialStockService; + + @Resource + private MesWmStockTakingTaskMapper stockTakingTaskMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public void generateStockTakingLines(MesWmStockTakingTaskDO task) { + // 1.1 构建查询条件(包含动态盘点时间校验) + MesWmMaterialStockListReqVO reqVO = buildStockQueryReqVO(task); + // 1.2 查询物料库存 + List stocks = materialStockService.getMaterialStockList(reqVO); + if (CollUtil.isEmpty(stocks)) { + throw exception(WM_STOCK_TAKING_TASK_NO_STOCK); + } + + // 2. 批量生成明细行 + // TODO DONE @AI:使用 CollectionUtils convertList 方法简化代码 + List lines = convertList(stocks, stock -> + MesWmStockTakingTaskLineDO.builder() + .taskId(task.getId()).materialStockId(stock.getId()).itemId(stock.getItemId()) + .batchId(stock.getBatchId()).quantity(defaultQuantity(stock.getQuantityOnhand())) + .warehouseId(stock.getWarehouseId()).locationId(stock.getLocationId()).areaId(stock.getAreaId()) + .status(MesWmStockTakingTaskLineStatusEnum.LOSS.getStatus()).build()); + stockTakingTaskLineMapper.insertBatch(lines); + } + + @Override + public PageResult getStockTakingTaskLinePage(MesWmStockTakingTaskLinePageReqVO pageReqVO) { + return stockTakingTaskLineMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createStockTakingTaskLine(MesWmStockTakingTaskLineSaveReqVO createReqVO) { + // 1. 校验盘点任务存在,并且处于【准备中】状态 + validateTaskExistsAndPrepare(createReqVO.getTaskId()); + + // 2. 创建盘点任务行 + MesWmStockTakingTaskLineDO line = BeanUtils.toBean(createReqVO, MesWmStockTakingTaskLineDO.class); + stockTakingTaskLineMapper.insert(line); + return line.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStockTakingTaskLine(MesWmStockTakingTaskLineSaveReqVO updateReqVO) { + // TODO @AI:补全注释 + // TODO @AI:搞个 validate exists 方法,这样 update 和 delete 可以服用; + MesWmStockTakingTaskLineDO line = stockTakingTaskLineMapper.selectById(updateReqVO.getId()); + if (line == null) { + throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS); + } + validateTaskExistsAndPrepare(updateReqVO.getTaskId()); + + // 更新 + MesWmStockTakingTaskLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskLineDO.class); + stockTakingTaskLineMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteStockTakingTaskLine(Long id) { + // TODO @AI:补全注释 + MesWmStockTakingTaskLineDO line = stockTakingTaskLineMapper.selectById(id); + if (line == null) { + throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS); + } + validateTaskExistsAndPrepare(line.getTaskId()); + + // 2. 删除 + stockTakingTaskLineMapper.deleteById(id); + } + + // TODO @AI:应该在对方的 service 里提供; + private MesWmStockTakingTaskDO validateTaskExistsAndPrepare(Long id) { + MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id); + if (task == null) { + throw exception(WM_STOCK_TAKING_TASK_NOT_EXISTS); + } + if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.PREPARE.getStatus(), task.getStatus())) { + throw exception(WM_STOCK_TAKING_TASK_NOT_PREPARE); + } + return task; + } + + /** + * 构建库存查询条件 + * + * @param task 盘点任务 + * @return 查询条件 VO + */ + private MesWmMaterialStockListReqVO buildStockQueryReqVO(MesWmStockTakingTaskDO task) { + // 1. 从方案参数中提取过滤条件 + List params = stockTakingPlanParamMapper.selectListByPlanId(task.getPlanId()); + Assert.notEmpty(params, "盘点方案参数不能为空"); + + // 2.1 拼接通用参数 + MesWmMaterialStockListReqVO reqVO = new MesWmMaterialStockListReqVO() + .setWarehouseId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.WAREHOUSE.getType())) + .setLocationId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.LOCATION.getType())) + .setAreaId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.AREA.getType())) + .setItemId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.ITEM.getType())) + .setBatchId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.BATCH.getType())); + // 2.2 对于动态盘点,设置时间参数并校验 + if (MesWmStockTakingTypeEnum.DYNAMIC.getType().equals(task.getType())) { + Assert.notNull(task.getStartTime(), "动态盘点开始时间不能为空"); + Assert.notNull(task.getEndTime(), "动态盘点结束时间不能为空"); + reqVO.setStartTime(task.getStartTime()).setEndTime(task.getEndTime()); + } + return reqVO; + } + + /** + * 从参数列表中提取第一个匹配类型的参数 ID + * + * @param params 参数列表 + * @param type 参数类型 + * @return 参数 ID(如果有多个,取第一个) + */ + private Long extractMesWmStockTakingPlanParamValueId(List params, Integer type) { + MesWmStockTakingPlanParamDO param = CollUtil.findOne(params, + item -> Objects.equals(item.getType(), type) && item.getValueId() != null); + return param != null ? param.getValueId() : null; + } + + // TODO @芋艿:在确认下这个逻辑; + private BigDecimal defaultQuantity(BigDecimal quantity) { + return quantity == null ? BigDecimal.ZERO : quantity; + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskService.java index 8a0a5e3..b7ea934 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskService.java @@ -1,19 +1,11 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineBatchUpdateReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; import jakarta.validation.Valid; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; - /** * MES 盘点任务 Service 接口 * @@ -65,13 +57,6 @@ public interface MesWmStockTakingTaskService { void cancelStockTakingTask(Long id); /** - * 批量更新盘点任务行 - * - * @param updateReqVO 更新信息 - */ - void updateStockTakingTaskLines(@Valid MesWmStockTakingTaskLineBatchUpdateReqVO updateReqVO); - - /** * 获得盘点任务 * * @param id 盘点任务编号 @@ -88,24 +73,6 @@ public interface MesWmStockTakingTaskService { MesWmStockTakingTaskDO validateStockTakingTaskExists(Long id); /** - * 获得盘点任务列表 - * - * @param ids 盘点任务编号集合 - * @return 盘点任务列表 - */ - List getStockTakingTaskList(Collection ids); - - /** - * 获得盘点任务 Map - * - * @param ids 盘点任务编号集合 - * @return 盘点任务 Map - */ - default Map getStockTakingTaskMap(Collection ids) { - return convertMap(getStockTakingTaskList(ids), MesWmStockTakingTaskDO::getId); - } - - /** * 分页查询盘点任务 * * @param pageReqVO 分页查询条件 @@ -113,12 +80,4 @@ public interface MesWmStockTakingTaskService { */ PageResult getStockTakingTaskPage(MesWmStockTakingTaskPageReqVO pageReqVO); - /** - * 获得盘点任务行列表 - * - * @param taskId 盘点任务编号 - * @return 盘点任务行列表 - */ - List getStockTakingTaskLineList(Long taskId); - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java index d48c3fe..db15d5d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java @@ -1,29 +1,22 @@ package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockFreezeReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineBatchUpdateReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO; -import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanMapper; -import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanParamMapper; import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskLineMapper; import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskMapper; import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskResultMapper; -import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingPlanParamTypeEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskLineStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum; -import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTypeEnum; import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; +import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -32,11 +25,10 @@ import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -50,20 +42,21 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ @Resource private MesWmStockTakingTaskMapper stockTakingTaskMapper; + // TODO @芋艿:看看怎么清理掉,这块的依赖;应该调用对方的 service @Resource private MesWmStockTakingTaskLineMapper stockTakingTaskLineMapper; + // TODO @芋艿:看看怎么清理掉,这块的依赖;应该调用对方的 service @Resource private MesWmStockTakingTaskResultMapper stockTakingTaskResultMapper; - @Resource - private MesWmStockTakingPlanParamMapper stockTakingPlanParamMapper; - @Resource - private MesWmStockTakingPlanMapper stockTakingPlanMapper; + @Resource private MesWmMaterialStockService materialStockService; @Resource private AdminUserApi adminUserApi; @Resource - private cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService stockTakingPlanService; + private MesWmStockTakingPlanService stockTakingPlanService; + @Resource + private MesWmStockTakingTaskLineService stockTakingTaskLineService; @Override @Transactional(rollbackFor = Exception.class) @@ -73,6 +66,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ // 1.2 校验方案存在 adminUserApi.validateUser(createReqVO.getUserId()); // 1.3 校验方案可用 + // TODO @芋艿:貌似可以 planId 不填写;无 plan 就手动维护; stockTakingPlanService.validateStockTakingPlanEnabled(createReqVO.getPlanId()); // 2. 插入任务 @@ -81,7 +75,8 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ stockTakingTaskMapper.insert(task); // 3. 根据方案生成盘点明细行 - generateStockTakingLines(task); + // TODO @AI:有 plan 的情况下,才类似操作; + stockTakingTaskLineService.generateStockTakingLines(task); return task.getId(); } @@ -95,6 +90,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ // 1.3 校验方案存在 adminUserApi.validateUser(updateReqVO.getUserId()); // 1.4 校验方案可用 + // TODO @芋艿:貌似可以 planId 不填写;无 plan 就手动维护; stockTakingPlanService.validateStockTakingPlanEnabled(updateReqVO.getPlanId()); // 2. 更新任务 @@ -102,8 +98,9 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ stockTakingTaskMapper.updateById(updateObj); // 3. 删除老的明细,重新生成新的 + // TODO @AI:有 plan 的情况下,才类似操作; stockTakingTaskLineMapper.deleteByTaskId(updateReqVO.getId()); - generateStockTakingLines(updateObj); + stockTakingTaskLineService.generateStockTakingLines(updateObj); } @Override @@ -144,79 +141,6 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ } } - /** - * 根据盘点方案生成盘点明细行 - * - * @param task 盘点任务 - */ - private void generateStockTakingLines(MesWmStockTakingTaskDO task) { - // 1.1 构建查询条件(包含动态盘点时间校验) - MesWmMaterialStockListReqVO reqVO = buildStockQueryReqVO(task); - // 1.2 查询物料库存 - List stocks = materialStockService.getMaterialStockList(reqVO); - if (CollUtil.isEmpty(stocks)) { - throw exception(WM_STOCK_TAKING_TASK_NO_STOCK); - } - - // 2. 批量生成明细行 - // TODO DONE @AI:把 stocks 作为参数,传递给 stocktakingTaskLineService,更收敛;(当前直接插入更简洁) - List lines = new ArrayList<>(stocks.size()); - for (MesWmMaterialStockDO stock : stocks) { - MesWmStockTakingTaskLineDO line = MesWmStockTakingTaskLineDO.builder() - .taskId(task.getId()) - .materialStockId(stock.getId()) - .itemId(stock.getItemId()) - .batchId(stock.getBatchId()) - .quantity(defaultQuantity(stock.getQuantityOnhand())) - .warehouseId(stock.getWarehouseId()) - .locationId(stock.getLocationId()) - .areaId(stock.getAreaId()) - .status(MesWmStockTakingTaskLineStatusEnum.LOSS.getStatus()) - .build(); - lines.add(line); - } - stockTakingTaskLineMapper.insertBatch(lines); - } - - /** - * 构建库存查询条件 - * - * @param task 盘点任务 - * @return 查询条件 VO - */ - private MesWmMaterialStockListReqVO buildStockQueryReqVO(MesWmStockTakingTaskDO task) { - // 1. 从方案参数中提取过滤条件 - List params = stockTakingPlanParamMapper.selectListByPlanId(task.getPlanId()); - Assert.notEmpty(params, "盘点方案参数不能为空"); - - // 2.1 拼接通用参数 - MesWmMaterialStockListReqVO reqVO = new MesWmMaterialStockListReqVO() - .setWarehouseId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.WAREHOUSE.getType())) - .setLocationId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.LOCATION.getType())) - .setAreaId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.AREA.getType())) - .setItemId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.ITEM.getType())) - .setBatchId(extractMesWmStockTakingPlanParamValueId(params, MesWmStockTakingPlanParamTypeEnum.BATCH.getType())); - // 2.2 对于动态盘点,设置时间参数并校验 - if (MesWmStockTakingTypeEnum.DYNAMIC.getType().equals(task.getType())) { - Assert.notNull(task.getStartTime(), "动态盘点开始时间不能为空"); - Assert.notNull(task.getEndTime(), "动态盘点结束时间不能为空"); - reqVO.setStartTime(task.getStartTime()).setEndTime(task.getEndTime()); - } - return reqVO; - } - - /** - * 从参数列表中提取第一个匹配类型的参数 ID - * - * @param params 参数列表 - * @param type 参数类型 - * @return 参数 ID(如果有多个,取第一个) - */ - private Long extractMesWmStockTakingPlanParamValueId(List params, Integer type) { - MesWmStockTakingPlanParamDO param = CollUtil.findOne(params, - item -> Objects.equals(item.getType(), type) && item.getValueId() != null); - return param != null ? param.getValueId() : null; - } @Override @Transactional(rollbackFor = Exception.class) @@ -234,8 +158,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ stockTakingTaskResultMapper.deleteByTaskId(id); for (MesWmStockTakingTaskLineDO line : lines) { - if (MesWmStockTakingTaskLineStatusEnum.NORMAL.getStatus().equals(line.getStatus()) - || MesWmStockTakingTaskLineStatusEnum.UNCOUNTED.getStatus().equals(line.getStatus())) { + if (MesWmStockTakingTaskLineStatusEnum.NORMAL.getStatus().equals(line.getStatus())) { continue; } stockTakingTaskResultMapper.insert(MesWmStockTakingTaskResultDO.builder() @@ -277,30 +200,6 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ } @Override - @Transactional(rollbackFor = Exception.class) - public void updateStockTakingTaskLines(MesWmStockTakingTaskLineBatchUpdateReqVO updateReqVO) { - MesWmStockTakingTaskDO task = validateTaskExists(updateReqVO.getTaskId()); - if (!MesWmStockTakingTaskStatusEnum.APPROVING.getStatus().equals(task.getStatus())) { - throw exception(WM_STOCK_TAKING_TASK_NOT_APPROVING); - } - - Set lineIds = convertSet(updateReqVO.getItems(), MesWmStockTakingTaskLineBatchUpdateReqVO.Item::getId); - List lines = stockTakingTaskLineMapper.selectListByTaskIdAndIds(updateReqVO.getTaskId(), lineIds); - if (lines.size() != updateReqVO.getItems().size()) { - throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS); - } - Map lineMap = lines.stream() - .collect(Collectors.toMap(MesWmStockTakingTaskLineDO::getId, item -> item)); - for (MesWmStockTakingTaskLineBatchUpdateReqVO.Item item : updateReqVO.getItems()) { - MesWmStockTakingTaskLineDO line = lineMap.get(item.getId()); - line.setTakingQuantity(item.getTakingQuantity()); - line.setRemark(item.getRemark()); - line.setStatus(resolveLineStatus(line.getQuantity(), item.getTakingQuantity())); - stockTakingTaskLineMapper.updateById(line); - } - } - - @Override public MesWmStockTakingTaskDO getStockTakingTask(Long id) { return stockTakingTaskMapper.selectById(id); } @@ -311,23 +210,10 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ } @Override - public List getStockTakingTaskList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return stockTakingTaskMapper.selectByIds(ids); - } - - @Override public PageResult getStockTakingTaskPage(MesWmStockTakingTaskPageReqVO pageReqVO) { return stockTakingTaskMapper.selectPage(pageReqVO); } - @Override - public List getStockTakingTaskLineList(Long taskId) { - return stockTakingTaskLineMapper.selectListByTaskId(taskId); - } - private void updateFrozen(Long materialStockId, boolean frozen) { MesWmMaterialStockFreezeReqVO reqVO = new MesWmMaterialStockFreezeReqVO(); reqVO.setId(materialStockId); @@ -347,9 +233,6 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ } private Integer resolveLineStatus(BigDecimal quantity, BigDecimal takingQuantity) { - if (takingQuantity == null) { - return MesWmStockTakingTaskLineStatusEnum.UNCOUNTED.getStatus(); - } int compare = takingQuantity.compareTo(defaultQuantity(quantity)); if (compare == 0) { return MesWmStockTakingTaskLineStatusEnum.NORMAL.getStatus(); @@ -376,12 +259,6 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ } } - private void validatePlanExists(Long id) { - if (stockTakingPlanMapper.selectById(id) == null) { - throw exception(WM_STOCK_TAKING_PLAN_NOT_EXISTS); - } - } - private MesWmStockTakingTaskDO validateTaskExists(Long id) { MesWmStockTakingTaskDO task = stockTakingTaskMapper.selectById(id); if (task == null) { @@ -392,7 +269,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ private MesWmStockTakingTaskDO validateTaskExistsAndPrepare(Long id) { MesWmStockTakingTaskDO task = validateTaskExists(id); - if (!MesWmStockTakingTaskStatusEnum.PREPARE.getStatus().equals(task.getStatus())) { + if (ObjUtil.notEqual(MesWmStockTakingTaskStatusEnum.PREPARE.getStatus(), task.getStatus())) { throw exception(WM_STOCK_TAKING_TASK_NOT_PREPARE); } return task;