diff --git a/script/todo.md b/script/todo.md new file mode 100644 index 0000000000..1a6477dd76 --- /dev/null +++ b/script/todo.md @@ -0,0 +1,4 @@ + +## 待完成 +1. 获取当前某工序所有工人列表 +2. \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/ItemRequisitionController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/ItemRequisitionController.java index addcfd5485..bb787987f1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/ItemRequisitionController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/ItemRequisitionController.java @@ -1,5 +1,9 @@ package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; +import cn.iocoder.yudao.module.mes.service.plan.PlanService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; @@ -24,6 +28,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO; @@ -38,6 +43,8 @@ public class ItemRequisitionController { @Resource private ItemRequisitionService itemRequisitionService; + @Resource + private PlanService planService; @PostMapping("/create") @Operation(summary = "创建生产领料") @@ -76,10 +83,21 @@ public class ItemRequisitionController { @Operation(summary = "获得生产领料分页") @PreAuthorize("@ss.hasPermission('mes:item-requisition:query')") public CommonResult> getItemRequisitionPage(@Valid ItemRequisitionPageReqVO pageReqVO) { + PageResult pageResult = itemRequisitionService.getItemRequisitionPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ItemRequisitionRespVO.class)); + return success(new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal())); + } + private List buildVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + Map map = planService.getPlanMap( + convertSet(list, ItemRequisitionDO::getPlanId)); + return BeanUtils.toBean(list, ItemRequisitionRespVO.class, item -> { + MapUtils.findAndThen(map, item.getPlanId(), + plan -> item.setPlanCode(plan.getCode())); + }); } - @GetMapping("/export-excel") @Operation(summary = "导出生产领料 Excel") @PreAuthorize("@ss.hasPermission('mes:item-requisition:export')") @@ -88,9 +106,10 @@ public class ItemRequisitionController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = itemRequisitionService.getItemRequisitionPage(pageReqVO).getList(); + List list1 = buildVOList(list); // 导出 Excel ExcelUtils.write(response, "生产领料.xls", "数据", ItemRequisitionRespVO.class, - BeanUtils.toBean(list, ItemRequisitionRespVO.class)); + list1); } // ==================== 子表(领料明细) ==================== @@ -99,8 +118,9 @@ public class ItemRequisitionController { @Operation(summary = "获得领料明细列表") @Parameter(name = "itemRequisitionId", description = "领料单ID") @PreAuthorize("@ss.hasPermission('mes:item-requisition:query')") - public CommonResult> getItemRequisitionDetailListByItemRequisitionId(@RequestParam("itemRequisitionId") Long itemRequisitionId) { - return success(itemRequisitionService.getItemRequisitionDetailListByItemRequisitionId(itemRequisitionId)); + public CommonResult> getItemRequisitionDetailListByItemRequisitionId(@RequestParam("itemRequisitionId") Long itemRequisitionId) { + Listlist = itemRequisitionService.getItemRequisitionDetailListByItemRequisitionId(itemRequisitionId); + return success(itemRequisitionService.buildDetailVOList(list)); } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionDetailRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionDetailRespVO.java new file mode 100644 index 0000000000..a474680568 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionDetailRespVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.math.BigDecimal; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 领料明细 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ItemRequisitionDetailRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28224") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8370") + private Long productId; + @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "8370") + @ExcelProperty("产品") + private String productName; + @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1117") + private String unitName; + @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1117") + @ExcelProperty("单位ID") + private Long unitId; + + @Schema(description = "领料单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18973") + @ExcelProperty("领料单ID") + private Long itemRequisitionId; + + @Schema(description = "数量") + @ExcelProperty("数量") + private BigDecimal number; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionPageReqVO.java index be27ded28d..150cdf1c72 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionPageReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionPageReqVO.java @@ -48,4 +48,6 @@ public class ItemRequisitionPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + @Schema(description = "领料人ID",example = "15546") + private Long workerId; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionRespVO.java index a36da059bd..9095d93fa9 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionRespVO.java @@ -23,12 +23,12 @@ public class ItemRequisitionRespVO { @ExcelProperty("编码") private String code; - @Schema(description = "下料时间") - @ExcelProperty("下料时间") + @Schema(description = "计划下料时间") + @ExcelProperty("计划下料时间") private LocalDateTime requisitionDate; - @Schema(description = "领料时间") - @ExcelProperty("领料时间") + @Schema(description = "实际下料时间") + @ExcelProperty("实际下料时间") private LocalDateTime deliveryDate; @Schema(description = "状态", example = "2") @@ -40,8 +40,10 @@ public class ItemRequisitionRespVO { private String processInstanceId; @Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546") - @ExcelProperty("计划ID") private Long planId; + @Schema(description = "计划", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546") + @ExcelProperty("计划") + private String planCode; @Schema(description = "备注", example = "随便") @ExcelProperty("备注") @@ -55,4 +57,6 @@ public class ItemRequisitionRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "领料人ID",example = "15546") + private Long workerId; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionSaveReqVO.java index 547bff2357..88a05f8947 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionSaveReqVO.java @@ -15,11 +15,10 @@ import javax.validation.constraints.NotNull; @Data public class ItemRequisitionSaveReqVO { - @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5100") + @Schema(description = "ID", example = "5100") private Long id; - @Schema(description = "编码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "编码不能为空") + @Schema(description = "编码") private String code; @Schema(description = "下料时间") @@ -34,17 +33,18 @@ public class ItemRequisitionSaveReqVO { @Schema(description = "流程实例的编号", example = "1634") private String processInstanceId; - @Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546") - @NotNull(message = "计划ID不能为空") + @Schema(description = "计划ID",example = "15546") private Long planId; @Schema(description = "备注", example = "随便") private String remark; - @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否启用") private Boolean isEnable; @Schema(description = "领料明细列表") private List itemRequisitionDetails; + @Schema(description = "领料人ID",example = "15546") + private Long workerId; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionStatusEnum.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionStatusEnum.java new file mode 100644 index 0000000000..ebb5d84e1c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/itemrequisition/vo/ItemRequisitionStatusEnum.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ItemRequisitionStatusEnum { + + 草稿(1), + 下达(2), + 下料(3), + 完成(4); + + private final int value; + + // 一个可选的方法,用于根据整数值获取对应的枚举实例 + public static ItemRequisitionStatusEnum fromValue(int value) { + for (ItemRequisitionStatusEnum status : ItemRequisitionStatusEnum.values()) { + if (status.getValue() == value) { + return status; + } + } + throw new IllegalArgumentException("Unknown value: " + value); + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java index 24d343818e..74209e6e55 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java @@ -1,5 +1,10 @@ package cn.iocoder.yudao.module.mes.controller.admin.plan; +import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.mysql.plan.PlanMapper; +import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemAnalysisService; +import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService; +import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; @@ -38,6 +43,9 @@ public class PlanController { @Resource private PlanService planService; + @Resource + private PlanMapper planMapper; + @PostMapping("/create") @Operation(summary = "创建生产计划") @@ -100,4 +108,39 @@ public class PlanController { else return error(500, "insert error"); } + + @Resource + private ItemAnalysisService analysisService; + @PutMapping("/paigong") + @Operation(summary = "计划派工") + @PreAuthorize("@ss.hasPermission('mes:plan:update')") + public CommonResult updatePlan(@Valid @RequestBody ItemRequisitionSaveReqVO saveReqVO) { + System.out.println(saveReqVO); + PlanDO planDO = planMapper.selectById(saveReqVO.getPlanId()); + List list = analysisService.getItemAnalysis(planDO); + planService.arrangePlan(saveReqVO, planDO, list); + return success(true); + } + + @PutMapping("/updateStatus") + @Operation(summary = "更新生产计划状态") + @PreAuthorize("@ss.hasPermission('mes:plan:update')") + public CommonResult updatePlanStatus(@Valid @RequestBody PlanStatusUpdateVO statusUpdateVO) { + System.out.println(statusUpdateVO); + PlanDO planDO = planMapper.selectById(statusUpdateVO.getId()); + //开工 + if("start".equals(statusUpdateVO.getCode())){ + planDO.setStatus(PlanStatusEnum.开工.getValue()); + } + //暂停 + else if("pause".equals(statusUpdateVO.getCode())){ + planDO.setStatus(PlanStatusEnum.暂停.getValue()); + } + //完工 + else if("end".equals(statusUpdateVO.getCode())){ + planDO.setStatus(PlanStatusEnum.完工.getValue()); + } + planMapper.updateById(planDO); + return success(true); + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanStatusUpdateVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanStatusUpdateVO.java new file mode 100644 index 0000000000..6c95ad47e1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanStatusUpdateVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mes.controller.admin.plan.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import javax.validation.constraints.NotNull; + +@Data +@AllArgsConstructor +public class PlanStatusUpdateVO { + @Schema(description = "计划id", example = "21176") + @NotNull(message = "计划id") + private Long id; + + @Schema(description = "更新类型") + @NotNull(message = "更新类型") + private String code; + + @Schema(description = "更新状态", example = "21176") + @NotNull(message = "更新状态") + private int status; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/itemrequisition/ItemRequisitionDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/itemrequisition/ItemRequisitionDO.java index b25c7e02f4..5042d46b85 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/itemrequisition/ItemRequisitionDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/itemrequisition/ItemRequisitionDO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDate; @@ -62,4 +63,6 @@ public class ItemRequisitionDO extends BaseDO { */ private Boolean isEnable; + private Long workerId; + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/itemrequisition/ItemRequisitionMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/itemrequisition/ItemRequisitionMapper.java index 8fd1685a7e..d8aef22e75 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/itemrequisition/ItemRequisitionMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/itemrequisition/ItemRequisitionMapper.java @@ -26,6 +26,7 @@ public interface ItemRequisitionMapper extends BaseMapperX { .eqIfPresent(ItemRequisitionDO::getStatus, reqVO.getStatus()) .eqIfPresent(ItemRequisitionDO::getProcessInstanceId, reqVO.getProcessInstanceId()) .eqIfPresent(ItemRequisitionDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(ItemRequisitionDO::getWorkerId, reqVO.getWorkerId()) .eqIfPresent(ItemRequisitionDO::getRemark, reqVO.getRemark()) .eqIfPresent(ItemRequisitionDO::getIsEnable, reqVO.getIsEnable()) .betweenIfPresent(ItemRequisitionDO::getCreateTime, reqVO.getCreateTime()) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemAnalysisServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemAnalysisServiceImpl.java index 91c9e4656a..bad1f50b9c 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemAnalysisServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemAnalysisServiceImpl.java @@ -106,10 +106,12 @@ public class ItemAnalysisServiceImpl implements ItemAnalysisService { if(productId ==null || number==null )return list; List bomDetailDOList = bomService.getBomDetailListByProductId(productId, number); + for (BomDetailDO bomDetail : bomDetailDOList) { Long itemId = bomDetail.getProductId(); ItemRequisitionAndStock temp = new ItemRequisitionAndStock() .setItemId(itemId) + .setUnitId(bomDetail.getUnitId()) .setNumber(bomDetail.getUsageNumber()); BigDecimal stockCount = erpStockService.getStockCount(itemId); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionService.java index 3359c6e1cf..e683cf948d 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionService.java @@ -63,5 +63,5 @@ public interface ItemRequisitionService { * @return 领料明细列表 */ List getItemRequisitionDetailListByItemRequisitionId(Long itemRequisitionId); - + List buildDetailVOList(List list); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionServiceImpl.java index 5a31013fd6..47ceed3111 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/itemrequisition/ItemRequisitionServiceImpl.java @@ -1,6 +1,16 @@ package cn.iocoder.yudao.module.mes.service.itemrequisition; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductService; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; +import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.BomDetailRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO; +import cn.iocoder.yudao.module.mes.service.plan.PlanService; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -19,6 +29,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionDeta import javax.annotation.Resource; 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.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_NO_EXISTS; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; @@ -37,6 +48,12 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService { private ItemRequisitionDetailMapper itemRequisitionDetailMapper; @Resource private MesNoRedisDAO noRedisDAO; + @Resource + private ErpProductService productService; + @Resource + private ErpProductUnitService productUnitService; + + @Override @Transactional(rollbackFor = Exception.class) public Long createItemRequisition(ItemRequisitionSaveReqVO createReqVO) { @@ -105,7 +122,23 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService { public List getItemRequisitionDetailListByItemRequisitionId(Long itemRequisitionId) { return itemRequisitionDetailMapper.selectListByItemRequisitionId(itemRequisitionId); } - + @Override + public List buildDetailVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + Map map = productService.getProductMap( + convertSet(list, ItemRequisitionDetailDO::getProductId)); + Map unitMap = productUnitService.getProductUnitMap( + convertSet(list, ItemRequisitionDetailDO::getUnitId)); + + return BeanUtils.toBean(list, ItemRequisitionDetailRespVO.class, item -> { + MapUtils.findAndThen(map, item.getProductId(), + product -> item.setProductName(product.getName())); + MapUtils.findAndThen(unitMap, item.getUnitId(), + unit -> item.setUnitName(unit.getName())); + }); + } private void createItemRequisitionDetailList(Long itemRequisitionId, List list) { list.forEach(o -> o.setItemRequisitionId(itemRequisitionId)); itemRequisitionDetailMapper.insertBatch(list); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java index 4a330106f2..3522b601b4 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java @@ -1,11 +1,18 @@ package cn.iocoder.yudao.module.mes.service.plan; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; +import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock; import javax.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; /** * 生产计划 Service 接口 @@ -55,4 +62,11 @@ public interface PlanService { PlanDO selectLastOne(); List buildVOList(List list); Boolean saveBatchPlan(List planDOList); + + Boolean arrangePlan(ItemRequisitionSaveReqVO saveReqVO, PlanDO planDO ,List list); + + List getPlanList(Collection ids); + default Map getPlanMap(Collection ids) { + return convertMap(getPlanList(ids), PlanDO::getId); + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java index b90c369551..122a662b3b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java @@ -4,13 +4,19 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; +import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionStatusEnum; +import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO; +import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService; +import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock; import cn.iocoder.yudao.module.mes.service.task.TaskService; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.*; @@ -129,4 +135,35 @@ public class PlanServiceImpl implements PlanService { public Boolean saveBatchPlan(List planDOList){ return planMapper.insertBatch(planDOList); } + + @Resource + private ItemRequisitionService itemRequisitionService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean arrangePlan(ItemRequisitionSaveReqVO saveReqVO,PlanDO planDO ,List list){ + + List itemRequisitionDetails = new ArrayList<>(); + for (ItemRequisitionAndStock item : list) { + ItemRequisitionDetailDO detailDO = new ItemRequisitionDetailDO() + .setProductId(item.getItemId()) + .setUnitId(item.getUnitId()) + .setNumber(item.getNumber()) + .setIsEnable(true); + itemRequisitionDetails.add(detailDO); + } + saveReqVO.setItemRequisitionDetails(itemRequisitionDetails); + saveReqVO.setStatus(ItemRequisitionStatusEnum.下达.getValue()); + itemRequisitionService.createItemRequisition(saveReqVO); + //更新计划状态 + planDO.setStatus(PlanStatusEnum.派工.getValue()); + planDO.setIsEnable(true); + planMapper.updateById(planDO); + return true; + } + + @Override + public List getPlanList(Collection ids) { + return planMapper.selectBatchIds(ids); + } } \ No newline at end of file