From 947a1c10482a00acdc09d5f4d1d23153d0fb7e9c Mon Sep 17 00:00:00 2001 From: z Date: Tue, 12 Aug 2025 17:55:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=91=E6=9C=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../heli/enums/ProcessBomStatusEnum.java | 1 + .../materialplan/MaterialPlanController.java | 2 +- .../admin/plantask/PlanTaskController.java | 36 +++- .../processbom/ProcessBomController.java | 6 +- .../ProcessDesignController.java | 1 + .../projectorder/ProjectOrderController.java | 23 +++ .../vo/ProjectOrderCostRespVO.java | 62 ++++--- .../dataobject/processbom/ProcessBomDO.java | 3 + .../mysql/plantaskbom/PlanTaskBomMapper.java | 2 +- .../processbom/ProcessBomDetailMapper.java | 12 +- .../processdesign/ProcessDesignMapper.java | 33 +++- .../projectorder/ProjectOrderMapper.java | 2 + .../PurchaseOrderMakeDetailMapper.java | 3 +- .../heli/manager/CrossOrderManager.java | 2 +- .../materialplan/MaterialPlanService.java | 2 +- .../materialplan/MaterialPlanServiceImpl.java | 35 +++- .../MaterialPlanBoomServiceImpl.java | 2 +- .../service/processbom/ProcessBomService.java | 4 +- .../processbom/ProcessBomServiceImpl.java | 165 ++++++++++++++++-- .../ProcessDesignServiceImpl.java | 39 +++++ .../taskdispatch/TaskDispatchServiceImpl.java | 39 ++++- .../src/api/heli/saleordercost/index.ts | 5 + .../views/heli/processdesign/bomDetail.vue | 24 ++- .../views/heli/processdesign/bomShenhe.vue | 8 +- .../src/views/heli/processdesign/overview.vue | 84 ++++----- .../src/views/heli/saleordercost/index.vue | 30 ++-- 26 files changed, 491 insertions(+), 134 deletions(-) diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java index 9c5e3dc..9b362a6 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java @@ -9,6 +9,7 @@ import lombok.Getter; */ @Getter public enum ProcessBomStatusEnum { + Unedited(0, "未编辑"), SAVE(1, "已保存"), SUBMIT(2, "已提交"), diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/materialplan/MaterialPlanController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/materialplan/MaterialPlanController.java index 58e027e..6fe280a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/materialplan/MaterialPlanController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/materialplan/MaterialPlanController.java @@ -134,7 +134,7 @@ public class MaterialPlanController { @Operation(summary = "提交") @PreAuthorize("@ss.hasPermission('heli:process-bom:create')") public CommonResult submit(@Valid @RequestBody List list) { - return success(materialPlanService.submit(list)); + return materialPlanService.submit(list); } @GetMapping("/withdraw") @Operation(summary = "撤回") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/PlanTaskController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/PlanTaskController.java index 770901c..ca8cbce 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/PlanTaskController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/PlanTaskController.java @@ -1,8 +1,17 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.plantask; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chanko.yunxi.mes.framework.common.exception.ErrorCode; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; +import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -17,11 +26,14 @@ import javax.servlet.http.*; import java.time.LocalDateTime; import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; @@ -47,7 +59,10 @@ public class PlanTaskController { @Resource private HttpServletRequest request; - + @Resource + private ProcessBomDetailMapper processBomDetailMapper; + @Resource + private ProcessBomMapper processBomMapper; @PostMapping("/create") @Operation(summary = "创建生产计划任务") @PreAuthorize("@ss.hasPermission('heli:plan-task:create')") @@ -59,6 +74,25 @@ public class PlanTaskController { @Operation(summary = "更新生产计划任务") @PreAuthorize("@ss.hasPermission('heli:plan-task:update')") public CommonResult updatePlanTask(@Valid @RequestBody PlanTaskSaveReqVO updateReqVO) { + if (!"CANCEL_SUBMIT".equals(updateReqVO.getActive())){ + Integer planTaskBomStatus = planTaskService.getPlanTaskBomStatus(updateReqVO.getId()); + if (planTaskBomStatus ==1) return CommonResult.error(400,"BOM版本号已变更,请先刷新BOM"); + if (ObjectUtil.isNotEmpty(updateReqVO.getBomDetails())){ + List collect = updateReqVO.getBomDetails().stream().filter(o -> o.getId() != null).map(PlanTaskBomDO::getBomDetailId).distinct().collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty( collect)){ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProcessBomDetailDO::getId,collect); + List list = processBomDetailMapper.selectList(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + List collect1 = list.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ProcessBomDO::getId,collect1); + queryWrapper.ne(ProcessBomDO::getBomStatus,7); + if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作,请确认!"); + } + } + } + } LocalDateTime startTime = LocalDateTime.now(); planTaskService.updatePlanTask(updateReqVO); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/ProcessBomController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/ProcessBomController.java index 1c1e0a0..3323118 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/ProcessBomController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/ProcessBomController.java @@ -246,8 +246,8 @@ public class ProcessBomController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('heli:process-bom:delete')") public CommonResult deleteProcessBomDetail(@RequestParam("id") Long id) { - processBomService.deleteProcessBomDetailNew(id); - return success(true); + + return processBomService.deleteProcessBomDetailNew(id); } @GetMapping("/getStandardPage") @Operation(summary = "获得标准件物料需求计划") @@ -260,7 +260,7 @@ public class ProcessBomController { @Operation(summary = "提交") @PreAuthorize("@ss.hasPermission('heli:process-bom:create')") public CommonResult submit(@Valid @RequestBody List list) { - return success(processBomService.submit(list)); + return processBomService.submit(list); } @GetMapping("/withdraw") @Operation(summary = "撤回") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java index 328add0..a54ff0d 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java @@ -125,6 +125,7 @@ public class ProcessDesignController { public void exportProcessDesignExcels(@Valid ProcessDesignPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = processDesignService.getExportExcel(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "设计进度一览.xlsx", "数据", ExportExcelPageReqVO.class, diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java index 2ad3f10..4d48cd4 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java @@ -45,7 +45,9 @@ import javax.validation.Valid; import java.io.IOException; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; @@ -120,6 +122,13 @@ public class ProjectOrderController { } } } + Set nameSimSet = new HashSet<>(); + for (ProjectOrderSubDO projectOrderSub : operateReqVO.getProjectOrderSubs()) { + String nameSim = projectOrderSub.getNameSim(); + if (!nameSimSet.add(nameSim)) { + return CommonResult.error(400,"该项目下子项目简码不能重复,请确认!"); + } + } projectOrderService.operateProjectOrder(operateReqVO); // 手动记录日志 @@ -277,5 +286,19 @@ public class ProjectOrderController { PageResult pageResult = projectOrderService.getProjectOrderSubPage(pageReqVO); return success(BeanUtils.toBean(pageResult, ProjectOrderSubRespVO.class)); } + @GetMapping("/exportCost") + @Operation(summary = "导出项目成本归集 Excel") + @PreAuthorize("@ss.hasPermission('heli:project-order:export')") + @OperateLog(type = EXPORT) + public void exportCost(@Valid ProjectOrderCostPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { +// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + CommonResult> projectOrderCostPage = getProjectOrderCostPage(pageReqVO); + + List list = projectOrderCostPage.getData().getList(); + // 导出 Excel + ExcelUtils.write(response, "项目成本归集.xlsx", "数据", ProjectOrderCostRespVO.class, + BeanUtils.toBean(list, ProjectOrderCostRespVO.class)); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/vo/ProjectOrderCostRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/vo/ProjectOrderCostRespVO.java index b9e309d..6160132 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/vo/ProjectOrderCostRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/vo/ProjectOrderCostRespVO.java @@ -18,62 +18,70 @@ import java.util.Set; public class ProjectOrderCostRespVO { @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "17481") - @ExcelProperty("自增字段,唯一") +// @ExcelProperty("自增字段,唯一") private Long id; @Schema(description = "项目编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("项目编号,唯一") + @ExcelProperty("项目编号") private String code; - - @Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214") - @ExcelProperty("客户") - private String customerName; - @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @ExcelProperty("项目名称") private String projectName; + @Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214") + @ExcelProperty("客户全称") + private String customerName; + + + @Schema(description = "子项目ID") - @ExcelProperty("子项目ID") +// @ExcelProperty("子项目ID") private Long projectSubId; @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @ExcelProperty("子项目名称") private String projectSubName; - + @ExcelProperty(value = "性质", converter = DictConvert.class) + @DictFormat("heli_project_property") + private Integer property; + @Schema(description = "设备型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("设备型号") + private String deviceModel; @Schema(description = "标准件成本") @ExcelProperty("标准件成本") private BigDecimal biaoZhunJianCost; - - @Schema(description = "原材料成本") - @ExcelProperty("原材料成本") - private BigDecimal yuanCaiLiaoCost; - - @Schema(description = "副资材成本") - @ExcelProperty("副资材成本") - private BigDecimal fuZiCaiCost; + @ExcelProperty("材料成本") + private BigDecimal cailiaoCost; @Schema(description = "外协加工费用") - @ExcelProperty("外协加工费用") + @ExcelProperty("外协加工费") private BigDecimal waixeiCost; - - @Schema(description = "内部加工成本") - @ExcelProperty("内部加工成本") + @Schema(description = "内部工时费") + @ExcelProperty("内部工时费") private BigDecimal neibuCost; @Schema(description = "装配工时费") @ExcelProperty("装配工时费") private BigDecimal zpCost; @Schema(description = "运费成本") - @ExcelProperty("运费成本") + @ExcelProperty("运费") private BigDecimal yunFeiCost; @Schema(description = "合计成本") @ExcelProperty("合计成本") private BigDecimal sumCost; - @ExcelProperty("其他成本") - private BigDecimal cailiaoCost; - @Schema(description = "设备型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") - @ExcelProperty("设备型号") - private String deviceModel; + + @Schema(description = "原材料成本") +// @ExcelProperty("原材料成本") + private BigDecimal yuanCaiLiaoCost; + + @Schema(description = "副资材成本") +// @ExcelProperty("副资材成本") + private BigDecimal fuZiCaiCost; + + + + + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDO.java index 071e44c..d3d620b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDO.java @@ -163,6 +163,8 @@ public class ProcessBomDO extends BaseDO { boolean b = true; if(this.bomStatus.intValue()==7){ b = (7==this.bomStatus.intValue()); + }else if (this.bomStatus.intValue()==0){ + b = (0==this.bomStatus.intValue()); }else{ b = ProcessBomStatusEnum.SAVE.getCode() == this.bomStatus.intValue(); } @@ -184,6 +186,7 @@ public class ProcessBomDO extends BaseDO { public boolean canOperate(OperateTypeEnum operateTypeEnum) { switch (operateTypeEnum){ + case SAVE: return canSave(); case SUBMIT: diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantaskbom/PlanTaskBomMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantaskbom/PlanTaskBomMapper.java index fffe93b..7d7807c 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantaskbom/PlanTaskBomMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantaskbom/PlanTaskBomMapper.java @@ -48,7 +48,7 @@ public interface PlanTaskBomMapper extends BaseMapperX { .leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, PlanTaskBomDO::getOwner) .disableSubLogicDel() .disableLogicDel() - .in(PlanTaskBomDO::getDeleted,Arrays.asList(0,1)) + .in(PlanTaskBomDO::getDeleted,Arrays.asList(0)) ; if(reqVO.getSortByBlueprintNo() != null && reqVO.getSortByBlueprintNo()){ query.orderByAsc(ProcessBomDetailDO::getBlueprintNo); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java index e63e3a0..d989893 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java @@ -146,17 +146,17 @@ public interface ProcessBomDetailMapper extends BaseMapperX query.selectAll(ProcessBomDetailDO.class) .eq(ProcessBomDetailDO::getType, 2) .eq(ProcessBomDetailDO::getBomId,bomId) - .isNull(ProcessBomDetailDO::getMaterialId) - .disableLogicDel() - .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); + .isNull(ProcessBomDetailDO::getMaterialId); +// .disableLogicDel() +// .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); return selectList(query); } default List selectAllList(Long bomId){ MPJLambdaWrapper query = new MPJLambdaWrapper<>(); query.selectAll(ProcessBomDetailDO.class) - .eq(ProcessBomDetailDO::getBomId,bomId) - .disableLogicDel() - .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); + .eq(ProcessBomDetailDO::getBomId,bomId); +// .disableLogicDel() +// .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); return selectList(query); } default int deleteByBomId(Long bomId) { diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java index 01a8884..08652d1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java @@ -180,6 +180,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " + "WHEN 'BLUEPRINT_2D' THEN u4.nickname " + "WHEN 'BLUEPRINT_3D' THEN u5.nickname " + + "WHEN 'CASTING_DRAWING' THEN u6.nickname " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " + "ELSE '' " + // 默认值 "END as userName") @@ -188,6 +190,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN b.start_blank_date " + "WHEN 'BLUEPRINT_2D' THEN b.start_two_dim_Date " + "WHEN 'BLUEPRINT_3D' THEN b.start_three_dim_date " + + "WHEN 'CASTING_DRAWING' THEN a.cast_start_date " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN a.craft_start_date " + "ELSE '' " + "END as startDate" ) @@ -196,6 +200,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN b.blank_date " + "WHEN 'BLUEPRINT_2D' THEN b.two_dim_date " + "WHEN 'BLUEPRINT_3D' THEN b.three_dim_date " + + "WHEN 'CASTING_DRAWING' THEN a.cast_end_date " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN a.craft_end_date " + "ELSE '' " + "END as endDate" ) @@ -209,6 +215,7 @@ public interface ProcessDesignMapper extends BaseMapperX { .leftJoin("system_users u3 on u3.id = b.blank_owner") .leftJoin("system_users u4 on u4.id = b.two_dim_owner") .leftJoin("system_users u5 on u5.id = b.three_dim_owner") + .leftJoin("system_users u6 on u6.id = a.cast_owner") .disableSubLogicDel(); query.orderByDesc(ProcessDesignDO::getCreateTime); query @@ -216,17 +223,21 @@ public interface ProcessDesignMapper extends BaseMapperX { .like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName()) .like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName()) .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName()) - .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList()) +// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList()) + .like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType()) + ; if(!StringUtils.isEmpty(reqVO.getOwnerName())){ - query.and(QueryWrapper -> QueryWrapper.apply("u2.nickname = {0} and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name()) + query.and(QueryWrapper -> QueryWrapper.apply("u2.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name()) .or() .apply("u3.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name()) .or() .apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name()) .or() - .apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name())); + .apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name())) + .or() + .apply("u6.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.CASTING_DRAWING.name()); } return selectPage(reqVO, query); } @@ -242,6 +253,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " + "WHEN 'BLUEPRINT_2D' THEN u4.nickname " + "WHEN 'BLUEPRINT_3D' THEN u5.nickname " + + "WHEN 'CASTING_DRAWING' THEN u6.nickname " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " + "ELSE '' " + // 默认值 "END as userName") @@ -250,6 +263,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN DATE_FORMAT(b.start_blank_date, '%y-%m-%d') " + "WHEN 'BLUEPRINT_2D' THEN DATE_FORMAT(b.start_two_dim_Date, '%y-%m-%d') " + "WHEN 'BLUEPRINT_3D' THEN DATE_FORMAT(b.start_three_dim_date, '%y-%m-%d') " + + "WHEN 'CASTING_DRAWING' THEN DATE_FORMAT(a.cast_start_date, '%y-%m-%d') " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN DATE_FORMAT(a.craft_start_date, '%y-%m-%d') " + "ELSE '' " + "END as startDates" ) @@ -258,6 +273,8 @@ public interface ProcessDesignMapper extends BaseMapperX { "WHEN 'BLUEPRINT_WORKBLANK' THEN DATE_FORMAT(b.blank_date, '%y-%m-%d') " + "WHEN 'BLUEPRINT_2D' THEN DATE_FORMAT(b.two_dim_date, '%y-%m-%d') " + "WHEN 'BLUEPRINT_3D' THEN DATE_FORMAT(b.three_dim_date, '%y-%m-%d') " + + "WHEN 'CASTING_DRAWING' THEN DATE_FORMAT(a.cast_end_date, '%y-%m-%d') " + + "WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN DATE_FORMAT(a.craft_end_date, '%y-%m-%d') " + "ELSE '' " + "END as endDates" ) @@ -271,6 +288,8 @@ public interface ProcessDesignMapper extends BaseMapperX { .leftJoin("system_users u3 on u3.id = b.blank_owner") .leftJoin("system_users u4 on u4.id = b.two_dim_owner") .leftJoin("system_users u5 on u5.id = b.three_dim_owner") + .leftJoin("system_users u6 on u6.id = a.cast_owner") + .disableSubLogicDel(); query.orderByDesc(ProcessDesignDO::getCreateTime); query @@ -278,7 +297,9 @@ public interface ProcessDesignMapper extends BaseMapperX { .like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName()) .like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName()) .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName()) - .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList()) +// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList()) + .like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType()) + ; if(!StringUtils.isEmpty(reqVO.getOwnerName())){ @@ -288,7 +309,9 @@ public interface ProcessDesignMapper extends BaseMapperX { .or() .apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name()) .or() - .apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name())); + .apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name())) + .or() + .apply("u6.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.CASTING_DRAWING.name()); } System.out.println(query.getSqlSelect()); // 查看实际执行的 SQL return selectPage(reqVO, query); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderMapper.java index 50c2ad5..0d50bd0 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderMapper.java @@ -54,6 +54,8 @@ public interface ProjectOrderMapper extends BaseMapperX { .like(!StringUtils.isEmpty(reqVO.getProjectSubName()),"a.name",reqVO.getProjectSubName()) .eq(ProjectOrderDO::getOrderStatus,32) .in(ProjectOrderDO::getIsSnapshot,0) + .eq(ProjectOrderSubDO::getDeleted,0) + .groupBy(ProjectOrderSubDO::getId) .orderByDesc(ProjectOrderDO::getCreateTime); ; return selectPage(reqVO, query); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java index 4943606..8fee731 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java @@ -40,13 +40,14 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) { MPJLambdaWrapper query = new MPJLambdaWrapper<>(); query.selectAll(PurchaseOrderMakeDetailDO.class) - .select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit","m.name as matName") + .select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit","IFNULL(m.name,m1.name) as matName") // .select("pom.purchase_no as purchaseNo") .leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId) .leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId) .leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId) .leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId) .leftJoin(PurchaseOrderNoDetailDO.class,"no",PurchaseOrderNoDetailDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId) + .leftJoin(MaterialDO.class,"m1",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId) .leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId) .disableSubLogicDel() .eq(PurchaseOrderMakeDO::getGoodsType,1) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java index 18452f3..197a024 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java @@ -446,7 +446,7 @@ public class CrossOrderManager { .setProjectId(projectId) .setProjectSubId(projectSubId) .setVersion(0) - .setBomStatus(ProcessBomStatusEnum.SAVE.getCode()) + .setBomStatus(ProcessBomStatusEnum.Unedited.getCode()) .setStatus(ValidStatusEnum.VALID.getCode()) .setActive(OperateTypeEnum.CREATE.name()); processBomService.operateProcessBom(bomSaveReqVO); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanService.java index 035067a..696dcca 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanService.java @@ -65,7 +65,7 @@ public interface MaterialPlanService { PageResult getPartPage(MaterialPlanPageReqVO pageReqVO); - Boolean submit(List list); + CommonResult submit(List list); CommonResult withdraw(String code); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanServiceImpl.java index 909c8e4..0014f9f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplan/MaterialPlanServiceImpl.java @@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.Attentionto import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; @@ -20,6 +21,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMap import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper; @@ -29,6 +31,7 @@ import com.chanko.yunxi.mes.module.system.api.user.AdminUserApi; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper; import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; +import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; @@ -40,6 +43,8 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; + import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; @@ -90,6 +95,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService { private TaskDispatchMapper taskDispatchMapper; @Resource private MaterialMapper materialMapper; + @Resource + private ProcessBomMapper processBomMapper; @Override public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) { // 插入 @@ -270,7 +277,25 @@ public class MaterialPlanServiceImpl implements MaterialPlanService { @Override @Transactional - public Boolean submit(List list) { + public CommonResult submit(List list) { + List ids = list.stream().map(TaskDispatchDetailDO::getDispatchId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.in(TaskDispatchDO::getId,ids); + List taskDispatchDOS = taskDispatchMapper.selectList(queryWrapper1); + if (ObjectUtil.isNotEmpty(taskDispatchDOS)){ + List collects = taskDispatchDOS.stream().map(TaskDispatchDO::getBomDetailId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper bomDetailDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + bomDetailDOLambdaQueryWrapper.in(ProcessBomDetailDO::getId,collects); + List processBomDetailDOS = processBomDetailMapper.selectList(bomDetailDOLambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(processBomDetailDOS)){ + List collect = processBomDetailDOS.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessBomDO::getId,collect); + queryWrapper.ne(ProcessBomDO::getBomStatus,7); + if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作,请确认!"); + } + } + TaskDispatchDetailDO detailDO = list.get(0); MaterialPlanDO planDO = new MaterialPlanDO(); SerialNumberDO serialNumberDO = new SerialNumberDO(); @@ -374,7 +399,7 @@ public class MaterialPlanServiceImpl implements MaterialPlanService { } } - return true; + return CommonResult.success(true); } @Override @@ -452,9 +477,9 @@ public class MaterialPlanServiceImpl implements MaterialPlanService { // boomDO.setIsPurYard(5); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(MaterialPlanBoomDO::getId,pageReqVO.getId()) - .set(MaterialPlanBoomDO::getIsPurYard,5) - .set(MaterialPlanBoomDO::getMaterialId,null) - .set(MaterialPlanBoomDO::getMatRest,0); + .set(MaterialPlanBoomDO::getIsPurYard,5); +// .set(MaterialPlanBoomDO::getMaterialId,null) +// .set(MaterialPlanBoomDO::getMatRest,0); materialPlanBoomMapper.update(wrapper); break; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplanboom/MaterialPlanBoomServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplanboom/MaterialPlanBoomServiceImpl.java index b450a33..cb1a1c7 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplanboom/MaterialPlanBoomServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/materialplanboom/MaterialPlanBoomServiceImpl.java @@ -134,7 +134,7 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService { makeDetailDO.setProjectMaterialPlanId(dp.getProjectMaterialPlanId()); makeDetailDO.setProjectMaterialPlanBoomId(dp.getId()); makeDetailDO.setName(dp.getProjectName()); - + makeDetailDO.setMaterialId(dp.getMaterialId()); ProjectOrderSubDO subDO = new ProjectOrderSubDO(); if (hashMap.get(dp.getProjectPlanSubId()) != null) { subDO = hashMap.get(dp.getProjectPlanSubId()); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomService.java index 7724b16..5fc20e7 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomService.java @@ -92,12 +92,12 @@ public interface ProcessBomService { HashMap getUnitDictData(); void deleteProcessBomDetail(Long id); - void deleteProcessBomDetailNew(Long id); + CommonResult deleteProcessBomDetailNew(Long id); ProcessBomDetailDO selectProcessBomDetail(Long id); void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO); PageResult getStandardPage(ProcessBomPageReqVO pageReqVO); - Boolean submit(List list); + CommonResult submit(List list); CommonResult withdraw(String code); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java index 9512d69..5908ae2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java @@ -37,6 +37,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.P import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper; @@ -46,6 +47,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMappe import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper; @@ -53,6 +55,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.shenhe.ShenheMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskreport.TaskReportMapper; import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum; @@ -141,6 +144,8 @@ public class ProcessBomServiceImpl implements ProcessBomService { @Resource private TaskDispatchDetailMapper taskDispatchDetailMapper; @Resource + private TaskDispatchMapper taskDispatchMapper; + @Resource private TaskReportMapper taskReportMapper; @Resource private BgMasterLineMapper bgMasterLineMapper; @@ -148,6 +153,8 @@ public class ProcessBomServiceImpl implements ProcessBomService { private StorageMapper storageMapper; @Resource private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper; + @Resource + private PlanTaskBomMapper planTaskBomMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createProcessBom(ProcessBomSaveReqVO createReqVO) { @@ -287,11 +294,10 @@ public class ProcessBomServiceImpl implements ProcessBomService { if (o.getType().equals("是")){ standard = true; type = "1"; -// materialDO = materialService.getMaterialId(o.getMaterialCode()); -// if (materialDO == null) { -// throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在"); -// } - + materialDO = materialService.getMaterialId(o.getMaterialCode()); + if (ObjectUtil.isEmpty(materialDO)) { + throw new RuntimeException("零件编码:"+o.getMaterialCode() + "不存在,请确认"); + } } else if (o.getType().equals("否")){ type = "2"; @@ -340,9 +346,13 @@ public class ProcessBomServiceImpl implements ProcessBomService { throw new RuntimeException("物料名称不能为空!"); } processBomDetailDO.setMaterialName(o.getMaterialName()); + if (type.equals("1")) { -// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID -// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码 + if (ObjectUtil.isNotEmpty(materialDO)){ + processBomDetailDO.setMaterialId(materialDO.getId());//物料ID + processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码 + } + // processBomDetailDO.setMaterialName(materialDO.getName());//物料名称 @@ -440,7 +450,13 @@ public class ProcessBomServiceImpl implements ProcessBomService { throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS); } } - // 更新 + if(operateTypeEnum == OperateTypeEnum.AUDIT) { + ProcessBomDO processBomDO = processBomMapper.selectById(updateReqVO.getId()); + if (ObjectUtil.isNotEmpty(processBomDO)){ + if (processBomDO.getBomStatus()==1) throw exception(new ErrorCode(1_009_9999,"Bom状态为已保存,不允许审核")); + } + } + // 更新 ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class); List processBomDetails = updateReqVO.getProcessBomDetails(); //不论怎么样,都要校验这次的数据它图号是否唯一、非标准件的名称是否重复,规格是否为空 @@ -460,6 +476,17 @@ public class ProcessBomServiceImpl implements ProcessBomService { } }); for (ProcessBomDetailDO processBomDetail : processBomDetails) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanTaskBomDO::getBomDetailId, processBomDetail.getId()); + List planTaskBomDOS = planTaskBomMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(planTaskBomDOS)){ + List collect = planTaskBomDOS.stream().map(PlanTaskBomDO::getTaskId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper planTaskDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + planTaskDOLambdaQueryWrapper.in(PlanTaskDO::getId, collect); + planTaskDOLambdaQueryWrapper.eq(PlanTaskDO::getStatus, 2); + if (planTaskMapper.selectCount(planTaskDOLambdaQueryWrapper) > 0) throw exception(new ErrorCode(1_007_9999,"该生产任务单状态已提交,请先取消再修改BOM")); + + } //标准件不管材质,非标准件材质必填 if (processBomDetail.getType().equals("2")){ if (processBomDetail.getCompositionId() == null) { @@ -509,7 +536,76 @@ public class ProcessBomServiceImpl implements ProcessBomService { } }); } - if (CollUtil.isNotEmpty(processBomDetails)&&operateTypeEnum == OperateTypeEnum.SAVE){ + if (CollUtil.isNotEmpty(processBomDetails)){ + if(operateTypeEnum == OperateTypeEnum.SAVE||operateTypeEnum == OperateTypeEnum.SUBMIT) { + List processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId()); + if (CollUtil.isNotEmpty(processBomDetailDOS)) { + for (ProcessBomDetailDO vo : processBomDetails) { + if (vo.getId()!=null){ + for (ProcessBomDetailDO po : processBomDetailDOS) { + if (vo.getId().equals(po.getId())) { + if (!vo.getMaterialName().equals(po.getMaterialName())) { + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId()); + if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改零件名称")); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId()); + queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" ); + List list = taskDispatchMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + List collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskDispatchDetailDO::getDispatchId, collect); + List detailDOS = taskDispatchDetailMapper.selectList(wrapper); + List collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper taskReportDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + taskReportDOLambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1); + if (taskReportMapper.selectCount(taskReportDOLambdaQueryWrapper)>0) throw exception(new ErrorCode(1_007_9988,"物料"+po.getMaterialName()+"已报工,不允许修改零件名称")); + } + } + if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) { + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId()); + if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改图号")); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId()); + queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" ); + List list = taskDispatchMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + List collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskDispatchDetailDO::getDispatchId, collect); + List detailDOS = taskDispatchDetailMapper.selectList(wrapper); + List collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper taskReportDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + taskReportDOLambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1); + if (taskReportMapper.selectCount(taskReportDOLambdaQueryWrapper)>0) throw exception(new ErrorCode(1_007_9988,"物料"+po.getMaterialName()+"已报工,不允许修改图号")); + } + vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); + } + if (!vo.getAmount().equals(po.getAmount())) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId()); + queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" ); + List list = taskDispatchMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + List collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskDispatchDetailDO::getDispatchId, collect); + wrapper.eq(TaskDispatchDetailDO::getProcedureStatus, 2); + if (taskDispatchDetailMapper.selectCount(wrapper)>0) throw exception(new ErrorCode(1_007_9998,"该零件"+po.getMaterialName()+"工序已报工完成,不允许修改")); + } + vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); + } + } + } + } + } + } + } + } + + if (CollUtil.isNotEmpty(processBomDetails)&&operateTypeEnum == OperateTypeEnum.SAVE){ updateObj.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); List processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId()); //如果列表不为空,就代表之前有过,查出本轮新增的和遍历之前的 @@ -547,6 +643,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { // } } if (!vo.getMaterialName().equals(po.getMaterialName())) { + vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); // if(vo.getMemo()!=null){ // vo.setMemo(vo.getMemo()+"→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName()); @@ -574,6 +671,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { } if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) { + vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); // if(vo.getMemo()!=null) { // vo.setMemo(vo.getMemo() + "→图号由" + po.getBlueprintNo() + "变为" + vo.getBlueprintNo()); @@ -1080,9 +1178,45 @@ public class ProcessBomServiceImpl implements ProcessBomService { } @Override @Transactional(rollbackFor = Exception.class) - public void deleteProcessBomDetailNew(Long id){ + public CommonResult deleteProcessBomDetailNew(Long id){ + LambdaQueryWrapper boomDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + boomDOLambdaQueryWrapper.eq(MaterialPlanBoomDO::getBoomDetailId, id); + if (materialPlanBoomMapper.selectCount(boomDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该零件已做物料需求计划,不允许删除"); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TaskDispatchDO::getBomDetailId, id); + List list = taskDispatchMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + List collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskDispatchDetailDO::getDispatchId, collect); + List detailDOS = taskDispatchDetailMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(detailDOS)){ + List collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1); + List list1 = taskReportMapper.selectList(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(list1)) return CommonResult.error(400,"该零件已报工,不允许删除"); + } + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanTaskBomDO::getBomDetailId, id); + List planTaskBomDOS = planTaskBomMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(planTaskBomDOS)){ + List collect = planTaskBomDOS.stream().map(PlanTaskBomDO::getTaskId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper planTaskDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); + planTaskDOLambdaQueryWrapper.in(PlanTaskDO::getId, collect); + planTaskDOLambdaQueryWrapper.eq(PlanTaskDO::getStatus, 2); + if (planTaskMapper.selectCount(planTaskDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该生产任务单状态已提交,请先取消再修改BOM"); + } + ProcessBomDetailDO processBomDetailDO = selectProcessBomDetail(id); processBomDetailDO.setDeleted(true); + ProcessBomDO processBomDO = processBomMapper.selectById(processBomDetailDO.getBomId()); + if (ObjectUtil.isNotEmpty(processBomDO)){ + processBomDO.setBomStatus(1); + processBomMapper.updateById(processBomDO); + } + List processBomDetailListByBomIdbyid = getProcessBomDetailListByBomId(processBomDetailDO.getBomId()); Integer bomOperateCount = processBomDetailListByBomIdbyid.get(0).getBomOperateCount(); processBomDetailDO.setMemo("删除数据"); @@ -1092,6 +1226,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { processBomDetailDO.setBomEditStatus(BomEditStatusEnum.DELETE.getStatus()); updateProcessBomDetail(processBomDetailDO); processBomDetailMapper.deleteById(id); + return CommonResult.success(true); } @Override public ProcessBomDetailDO selectProcessBomDetail(Long id){ @@ -1109,7 +1244,12 @@ public class ProcessBomServiceImpl implements ProcessBomService { } @Override - public Boolean submit(List list) { + public CommonResult submit(List list) { + List collect = list.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessBomDO::getId,collect); + queryWrapper.ne(ProcessBomDO::getBomStatus,7); + if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作,请确认!"); ProcessBomDetailDO detailDO = list.get(0); MaterialPlanDO planDO = new MaterialPlanDO(); SerialNumberDO serialNumberDO = new SerialNumberDO(); @@ -1143,6 +1283,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { boomDO.setMatName(processBomDetailDO.getMaterialName()); boomDO.setDuEmpId(processBomDetailDO.getDuEmpId()); boomDO.setProjectPlanSubId(processBomDetailDO.getProjectSubId()); + boomDO.setMaterialId(processBomDetailDO.getMaterialId()); boomDO.setMplanStatus(0); materialPlanBoomDOList.add(boomDO); processBomDetailDO.setMplanDate(processBomDetailDO.getBoomArriveDate()); @@ -1218,7 +1359,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { // } } } - return true; + return CommonResult.success(true); } @Override diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java index ab245cc..2122f23 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java @@ -27,14 +27,17 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignPro import com.chanko.yunxi.mes.module.heli.enums.ProcessDesignTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.WarningEnum; import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO; +import lombok.var; import org.apache.commons.lang3.time.DateUtils; import org.springframework.security.access.method.P; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import org.yaml.snakeyaml.events.Event; import javax.annotation.Resource; import java.math.BigDecimal; +import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDate; @@ -564,6 +567,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { @Override public PageResult getProcessDesignPages(ProcessDesignPageReqVO pageReqVO) { + if (ObjectUtil.isNotEmpty(pageReqVO.getProcessDesignType())){ + if ("0".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("CASTING_DRAWING"); + }else if ("1".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_FOUNDRY_TECHNOLOGY"); + }else if ("2".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_2D"); + }else if ("3".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_3D"); + }else if ("4".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_WORKBLANK"); + } + + } PageResult processDesignDOPageResult = processDesignMapper.getProcessDesignPages(pageReqVO); List list = processDesignDOPageResult.getList(); for (ProcessDesignDO processDesignDO : list) { @@ -584,6 +601,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); + queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime); + queryWrapper.ne(ProcessDesignProgressDO::getEndTime,""); queryWrapper.last("limit 1"); ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper); if (ObjectUtil.isNotEmpty(processDesignProgressDO)){ @@ -607,6 +626,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { @Override public PageResult getExportExcel(ProcessDesignPageReqVO pageReqVO) { + if (ObjectUtil.isNotEmpty(pageReqVO.getProcessDesignType())){ + if ("0".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("CASTING_DRAWING"); + }else if ("1".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_FOUNDRY_TECHNOLOGY"); + }else if ("2".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_2D"); + }else if ("3".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_3D"); + }else if ("4".equals(pageReqVO.getProcessDesignType())){ + pageReqVO.setProcessDesignType("BLUEPRINT_WORKBLANK"); + } + + } PageResult processDesignDOPageResult = processDesignMapper.getExportExcel(pageReqVO); List list = processDesignDOPageResult.getList(); SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @@ -628,6 +661,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); + queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime); + queryWrapper.ne(ProcessDesignProgressDO::getEndTime,""); queryWrapper.last("limit 1"); ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper); if (ObjectUtil.isNotEmpty(processDesignProgressDO)){ @@ -644,6 +679,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { processDesignDO.setProcessDesignType("3D"); }else if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ processDesignDO.setProcessDesignType("2D"); + }else if ("BLUEPRINT_FOUNDRY_TECHNOLOGY".equals(processDesignDO.getProcessDesignType())){ + processDesignDO.setProcessDesignType("工艺"); + }else if ("CASTING_DRAWING".equals(processDesignDO.getProcessDesignType())){ + processDesignDO.setProcessDesignType("铸件"); } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java index 2996e41..35d1ff9 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java @@ -18,6 +18,8 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipMan import com.chanko.yunxi.mes.module.heli.dal.dataobject.fpuserdetail.FpUserDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; @@ -32,6 +34,8 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufact import com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail.FpUserDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.procedure.ProcedureMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; @@ -115,6 +119,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { private ProcessBomMapper processBomMapper; @Resource private PlanSubMapper planSubMapper; + @Resource + private PlanTaskBomMapper planTaskBomMapper; + @Resource + private PlanTaskMapper planTaskMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) { @@ -181,10 +189,25 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId()); if (ObjectUtil.isNotEmpty(processBomDO)){ if (processBomDO.getBomStatus()!=7){ - throw exception(new ErrorCode(400,"BOM没有审核,请先审核BOM")); + throw exception(new ErrorCode(400,"BOM不是审核状态不允许操作,请确认!")); } } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanTaskBomDO::getBomDetailId,bomDetailDO.getId()); + PlanTaskBomDO planTaskBomDO = planTaskBomMapper.selectOne(wrapper); + if (ObjectUtil.isNotEmpty(planTaskBomDO)){ + PlanTaskDO planTaskDO = planTaskMapper.selectById(planTaskBomDO.getTaskId()); + if (ObjectUtil.isNotEmpty(planTaskDO)){ + if (planTaskDO.getStatus()!=2){ + throw exception(new ErrorCode(400,"该计划"+planTaskDO.getTaskNo()+"没有提交,请确认!")); + } + } + } + }else { + throw exception(new ErrorCode(400,"BOM零件已删除,不允许派工")); + } + } // 更新 TaskDispatchDO updateObj = BeanUtils.toBean(updateReqVO, TaskDispatchDO.class); @@ -196,7 +219,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { .filter(o -> o.getId() != null) .collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(list)){ - TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId()); +// TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId()); for (TaskDispatchDetailDO dispatchDetailDO : list) { TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId()); if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){ @@ -680,7 +703,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { .last("LIMIT 1 "); }}); TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId()); - + if ("PRODUCTION".equals( taskDispatchDO.getDispatchType())) { + ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId()); + if (ObjectUtil.isNotEmpty(bomDetailDO)){ + ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId()); + if (ObjectUtil.isNotEmpty(processBomDO)){ + if (processBomDO.getBomStatus()!=7){ + throw exception(new ErrorCode(400,"BOM不是审核状态不允许操作,请确认!")); + } + } + } + } //校验,如果为完成,添加逻辑:1、生产结束 增加管控 - 如果报工数量 != 派工数量 提示:报工数量num1 != 派工数量num2,不允许结束! if(operate == TaskReportOperateEnum.FINISH ){ diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/saleordercost/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/saleordercost/index.ts index 84bdc6a..02c8e67 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/saleordercost/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/saleordercost/index.ts @@ -51,3 +51,8 @@ export const getListcl = async (id: number,projectSubId: number) => { export const getListZp = async (id: number,projectSubId: number) => { return await request.get({ url: `/heli/task-dispatch/getListZp?id=`+id+`&projectSubId=`+projectSubId }) } + +// 导出任务报工 Excel +export const exportCost = async (params) => { + return await request.download({ url: `/heli/project-order/exportCost`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue index bcf7021..6287499 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue @@ -325,16 +325,16 @@
操作日志 取 消 保 存 提 交 取消提交 审核 @@ -604,7 +604,7 @@ const resetForm = () => { projectSubName: undefined, projectSubCode: undefined, version: undefined, - bomStatus: 1, + bomStatus:1, remark: undefined, property:undefined, status: 1, @@ -760,9 +760,19 @@ const onAddItem = () => { } const onDeleteItem = async (index) => { - let deletedItems = formData.value.processBomDetails.splice(index, 1); - let id = deletedItems[0].id; - if (id) await ProcessBomApi.deleteProcessBomDetail(id) + // let deletedItems = formData.value.processBomDetails.splice(index, 1); + // let id = deletedItems[0].id; + // if (id) await ProcessBomApi.deleteProcessBomDetail(id) + // 获取要删除的项 + const itemToDelete = formData.value.processBomDetails[index]; + +// 如果有 id,先调用接口删除数据库数据 + if (itemToDelete?.id) { + await ProcessBomApi.deleteProcessBomDetail(itemToDelete.id); + } + +// 无论是否有 id,都从数组中移除该项 + formData.value.processBomDetails.splice(index, 1); } const printfClick = () =>{ if(formData.value.code == null || formData.value.code == ''){ diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomShenhe.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomShenhe.vue index c8e6205..dabe0cf 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomShenhe.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomShenhe.vue @@ -43,8 +43,8 @@ - - + +