From 8130db9f2592b71a02361cf9a9f8caebabe7442f Mon Sep 17 00:00:00 2001 From: zengchenxi Date: Mon, 26 Feb 2024 14:32:39 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=9C=80=E6=B1=82=E3=80=91bom?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/enums/OperateTypeEnum.java | 8 + .../module/heli/enums/ErrorCodeConstants.java | 1 + .../heli/enums/ProcessBomStatusEnum.java | 24 ++ .../processbom/ProcessBomController.java | 242 +++++++++-------- .../processbom/vo/ProcessBomSaveReqVO.java | 125 ++++----- .../dataobject/processbom/ProcessBomDO.java | 27 ++ .../service/processbom/ProcessBomService.java | 133 +++++----- .../processbom/ProcessBomServiceImpl.java | 245 ++++++++++-------- .../src/api/heli/processbom/index.ts | 110 ++++---- .../src/views/heli/processdesign/bom.vue | 12 +- .../views/heli/processdesign/bomDetail.vue | 10 +- 11 files changed, 533 insertions(+), 404 deletions(-) create mode 100644 mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java diff --git a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/enums/OperateTypeEnum.java b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/enums/OperateTypeEnum.java index 0f8a4259..5cc561ad 100644 --- a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/enums/OperateTypeEnum.java +++ b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/enums/OperateTypeEnum.java @@ -72,6 +72,14 @@ public enum OperateTypeEnum { * 发货 * */ DELIVER(14), + /* + * 提交 + * */ + SUBMIT(15), + /* + * 取消提交 + * */ + CANCEL_SUBMIT(16), /** * 其它 * diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 89ac96e5..8f5201ce 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -58,6 +58,7 @@ public interface ErrorCodeConstants { /************工艺设计***********/ ErrorCode PROCESS_DESIGN_NOT_EXISTS = new ErrorCode(1_006_001, "工艺设计不存在"); ErrorCode PROCESS_BOM_NOT_EXISTS = new ErrorCode(1_006_002, "工艺bom不存在"); + ErrorCode PROCESS_BOM_DETAIL_NOT_EXISTS = new ErrorCode(1_006_003, "工艺bom明细不存在"); /************生产计划管理***********/ ErrorCode PLAN_NOT_EXISTS = new ErrorCode(1_007_001, "生产计划不存在"); ErrorCode PLAN_SUB_NOT_EXISTS = new ErrorCode(1_007_002, "生产计划子项目不存在"); 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 new file mode 100644 index 00000000..dec74d8b --- /dev/null +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProcessBomStatusEnum.java @@ -0,0 +1,24 @@ +package com.chanko.yunxi.mes.module.heli.enums; + +import lombok.Getter; + +/** + * 工艺bom状态枚举 + * @author chenxi + * @date 2024-02-26 11:25 + */ +@Getter +public enum ProcessBomStatusEnum { + + SAVE(1, "已保存"), + SUBMIT(2, "已提交"), + TERMINATE(3, "已终止"); + + private int code; + private String description; + + ProcessBomStatusEnum(int code, String description) { + this.code = code; + this.description = description; + } +} 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 38be4ff6..0910de6b 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 @@ -1,106 +1,136 @@ -package com.chanko.yunxi.mes.module.heli.controller.admin.processbom; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -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.pojo.CommonResult.success; - -import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; - -import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; -import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; - -import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; -import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService; - -@Tag(name = "管理后台 - 工艺bom") -@RestController -@RequestMapping("/heli/process-bom") -@Validated -public class ProcessBomController { - - @Resource - private ProcessBomService processBomService; - - @PostMapping("/create") - @Operation(summary = "创建工艺bom") - @PreAuthorize("@ss.hasPermission('heli:process-bom:create')") - public CommonResult createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) { - return success(processBomService.createProcessBom(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新工艺bom") - @PreAuthorize("@ss.hasPermission('heli:process-bom:update')") - public CommonResult updateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO updateReqVO) { - processBomService.updateProcessBom(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除工艺bom") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('heli:process-bom:delete')") - public CommonResult deleteProcessBom(@RequestParam("id") Long id) { - processBomService.deleteProcessBom(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得工艺bom") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") - public CommonResult getProcessBom(@RequestParam("id") Long id) { - ProcessBomDO processBom = processBomService.getProcessBom(id); - return success(BeanUtils.toBean(processBom, ProcessBomRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得工艺bom分页") - @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") - public CommonResult> getProcessBomPage(@Valid ProcessBomPageReqVO pageReqVO) { - PageResult pageResult = processBomService.getProcessBomPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出工艺bom Excel") - @PreAuthorize("@ss.hasPermission('heli:process-bom:export')") - @OperateLog(type = EXPORT) - public void exportProcessBomExcel(@Valid ProcessBomPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = processBomService.getProcessBomPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "工艺bom.xls", "数据", ProcessBomRespVO.class, - BeanUtils.toBean(list, ProcessBomRespVO.class)); - } - - // ==================== 子表(工艺bom明细) ==================== - - @GetMapping("/process-bom-detail/list-by-bom-id") - @Operation(summary = "获得工艺bom明细列表") - @Parameter(name = "bomId", description = "bom id") - @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") - public CommonResult> getProcessBomDetailListByBomId(@RequestParam("bomId") Long bomId) { - return success(processBomService.getProcessBomDetailListByBomId(bomId)); - } - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.controller.admin.processbom; + +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +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.util.object.BeanUtils; +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; +import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; +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.controller.admin.processbom.vo.ProcessBomPageReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomRespVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomSaveReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; +import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; +import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; + +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; +import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Tag(name = "管理后台 - 工艺bom") +@RestController +@RequestMapping("/heli/process-bom") +@Validated +public class ProcessBomController { + + @Resource + private ProcessBomService processBomService; + + @Resource + private OperateLogFrameworkService operateLogFrameworkService; + + @Resource + private HttpServletRequest request; + + @PostMapping("/create") + @Operation(summary = "创建工艺bom") + @PreAuthorize("@ss.hasPermission('heli:process-bom:create')") + public CommonResult createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) { + return success(processBomService.createProcessBom(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工艺bom") + @PreAuthorize("@ss.hasPermission('heli:process-bom:update')") + public CommonResult updateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO updateReqVO) { + processBomService.updateProcessBom(updateReqVO); + return success(true); + } + + @PostMapping("/operate") + @Operation(summary = "操作工艺bom") + @PreAuthorize("@ss.hasPermission('heli:process-bom:update')") + @OperateLog(enable = false) + @Transactional(rollbackFor = Exception.class) + public CommonResult operateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO operateReqVO) { + LocalDateTime startTime = LocalDateTime.now(); + processBomService.operateProcessBom(operateReqVO); + + // 手动记录日志 + operateLogFrameworkService.createOperateLog(request, + startTime, + BusinesTypeEnum.PROCESS_BOM.name(), + operateReqVO.getId(), + OperateTypeEnum.valueOf(operateReqVO.getActive()).getType(), + operateReqVO.getActiveOpinion()); + + return success(operateReqVO.getId()); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工艺bom") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:process-bom:delete')") + public CommonResult deleteProcessBom(@RequestParam("id") Long id) { + processBomService.deleteProcessBom(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工艺bom") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") + public CommonResult getProcessBom(@RequestParam("id") Long id) { + ProcessBomDO processBom = processBomService.getProcessBom(id); + return success(BeanUtils.toBean(processBom, ProcessBomRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得工艺bom分页") + @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") + public CommonResult> getProcessBomPage(@Valid ProcessBomPageReqVO pageReqVO) { + PageResult pageResult = processBomService.getProcessBomPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工艺bom Excel") + @PreAuthorize("@ss.hasPermission('heli:process-bom:export')") + @OperateLog(type = EXPORT) + public void exportProcessBomExcel(@Valid ProcessBomPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = processBomService.getProcessBomPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "工艺bom.xls", "数据", ProcessBomRespVO.class, + BeanUtils.toBean(list, ProcessBomRespVO.class)); + } + + // ==================== 子表(工艺bom明细) ==================== + + @GetMapping("/process-bom-detail/list-by-bom-id") + @Operation(summary = "获得工艺bom明细列表") + @Parameter(name = "bomId", description = "bom id") + @PreAuthorize("@ss.hasPermission('heli:process-bom:query')") + public CommonResult> getProcessBomDetailListByBomId(@RequestParam("bomId") Long bomId) { + return success(processBomService.getProcessBomDetailListByBomId(bomId)); + } + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java index 4229b1b8..f46b7895 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java @@ -1,59 +1,66 @@ -package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; - -@Schema(description = "管理后台 - 工艺bom新增/修改 Request VO") -@Data -public class ProcessBomSaveReqVO { - - @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511") - private Long id; - - @Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "编号,唯一不能为空") - private String code; - - @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403") - @NotNull(message = "生产计划id不能为空") - private Long planId; - - @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32751") - @NotNull(message = "项目id不能为空") - private Long projectId; - - @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12526") - @NotNull(message = "子项目id不能为空") - private Long projectSubId; - - @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @NotEmpty(message = "子项目名称不能为空") - private String projectSubName; - - @Schema(description = "子项目编号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "子项目编号不能为空") - private String projectSubCode; - - @Schema(description = "bom版本号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "bom版本号不能为空") - private Integer version; - - @Schema(description = "bom状态 已保存|已提交 1|2", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "bom状态 已保存|已提交 1|2不能为空") - private Integer bomStatus; - - @Schema(description = "备注", example = "你猜") - private String remark; - - @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "状态,1表示正常,2表示禁用不能为空") - private Integer status; - - @Schema(description = "工艺bom明细列表") - private List processBomDetails; - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; + +@Schema(description = "管理后台 - 工艺bom新增/修改 Request VO") +@Data +public class ProcessBomSaveReqVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511") + private Long id; + + @Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "编号,唯一不能为空") + private String code; + + @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403") + @NotNull(message = "生产计划id不能为空") + private Long planId; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32751") + @NotNull(message = "项目id不能为空") + private Long projectId; + + @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12526") + @NotNull(message = "子项目id不能为空") + private Long projectSubId; + + @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "子项目名称不能为空") + private String projectSubName; + + @Schema(description = "子项目编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "子项目编号不能为空") + private String projectSubCode; + + @Schema(description = "bom版本号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "bom版本号不能为空") + private Integer version; + + @Schema(description = "bom状态 已保存|已提交 1|2", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "bom状态 已保存|已提交 1|2不能为空") + private Integer bomStatus; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态,1表示正常,2表示禁用不能为空") + private Integer status; + + @Schema(description = "工艺bom明细列表") + private List processBomDetails; + + @Schema(description = "操作类型") + @NotBlank(message = "操作类型不能为空") + private String active; + + @Schema(description = "操作意见") + private String activeOpinion; + +} 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 fe100250..030ba032 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 @@ -1,5 +1,7 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom; +import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; +import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -78,4 +80,29 @@ public class ProcessBomDO extends BaseDO { @TableField(exist = false) private String projectName; + + public boolean canSave(){ + return ProcessBomStatusEnum.SAVE.getCode() == this.bomStatus.intValue(); + } + + public boolean canSubmit(){ + return ProcessBomStatusEnum.SAVE.getCode() == this.bomStatus.intValue(); + } + + public boolean canCancel(){ + return ProcessBomStatusEnum.SUBMIT.getCode() == this.bomStatus.intValue(); + } + + public boolean canOperate(OperateTypeEnum operateTypeEnum) { + switch (operateTypeEnum){ + case SAVE: + return canSave(); + case SUBMIT: + return canSubmit(); + case CANCEL_SUBMIT: + return canCancel(); + default: + return false; + } + } } 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 5aeddcf2..fb260d7b 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 @@ -1,66 +1,67 @@ -package com.chanko.yunxi.mes.module.heli.service.processbom; - -import java.util.*; -import javax.validation.*; -import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; - -/** - * 工艺bom Service 接口 - * - * @author 管理员 - */ -public interface ProcessBomService { - - /** - * 创建工艺bom - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createProcessBom(@Valid ProcessBomSaveReqVO createReqVO); - - /** - * 更新工艺bom - * - * @param updateReqVO 更新信息 - */ - void updateProcessBom(@Valid ProcessBomSaveReqVO updateReqVO); - - /** - * 删除工艺bom - * - * @param id 编号 - */ - void deleteProcessBom(Long id); - - /** - * 获得工艺bom - * - * @param id 编号 - * @return 工艺bom - */ - ProcessBomDO getProcessBom(Long id); - - /** - * 获得工艺bom分页 - * - * @param pageReqVO 分页查询 - * @return 工艺bom分页 - */ - PageResult getProcessBomPage(ProcessBomPageReqVO pageReqVO); - - // ==================== 子表(工艺bom明细) ==================== - - /** - * 获得工艺bom明细列表 - * - * @param bomId bom id - * @return 工艺bom明细列表 - */ - List getProcessBomDetailListByBomId(Long bomId); - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.service.processbom; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 工艺bom Service 接口 + * + * @author 管理员 + */ +public interface ProcessBomService { + + /** + * 创建工艺bom + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProcessBom(@Valid ProcessBomSaveReqVO createReqVO); + + /** + * 更新工艺bom + * + * @param updateReqVO 更新信息 + */ + void updateProcessBom(@Valid ProcessBomSaveReqVO updateReqVO); + + /** + * 删除工艺bom + * + * @param id 编号 + */ + void deleteProcessBom(Long id); + + /** + * 获得工艺bom + * + * @param id 编号 + * @return 工艺bom + */ + ProcessBomDO getProcessBom(Long id); + + /** + * 获得工艺bom分页 + * + * @param pageReqVO 分页查询 + * @return 工艺bom分页 + */ + PageResult getProcessBomPage(ProcessBomPageReqVO pageReqVO); + + // ==================== 子表(工艺bom明细) ==================== + + /** + * 获得工艺bom明细列表 + * + * @param bomId bom id + * @return 工艺bom明细列表 + */ + List getProcessBomDetailListByBomId(Long bomId); + + void operateProcessBom(ProcessBomSaveReqVO operateReqVO); +} 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 1542ca8f..a4ba6946 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 @@ -1,112 +1,133 @@ -package com.chanko.yunxi.mes.module.heli.service.processbom; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; -import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; - -import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; -import com.chanko.yunxi.mes.module.heli.dal.mysql.processbomdetail.ProcessBomDetailMapper; - -import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; - -/** - * 工艺bom Service 实现类 - * - * @author 管理员 - */ -@Service -@Validated -public class ProcessBomServiceImpl implements ProcessBomService { - - @Resource - private ProcessBomMapper processBomMapper; - @Resource - private ProcessBomDetailMapper processBomDetailMapper; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long createProcessBom(ProcessBomSaveReqVO createReqVO) { - // 插入 - ProcessBomDO processBom = BeanUtils.toBean(createReqVO, ProcessBomDO.class); - processBomMapper.insert(processBom); - - // 插入子表 - createProcessBomDetailList(processBom.getId(), createReqVO.getProcessBomDetails()); - // 返回 - return processBom.getId(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateProcessBom(ProcessBomSaveReqVO updateReqVO) { - // 校验存在 - validateProcessBomExists(updateReqVO.getId()); - // 更新 - ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class); - processBomMapper.updateById(updateObj); - - // 更新子表 - updateProcessBomDetailList(updateReqVO.getId(), updateReqVO.getProcessBomDetails()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteProcessBom(Long id) { - // 校验存在 - validateProcessBomExists(id); - // 删除 - processBomMapper.deleteById(id); - - // 删除子表 - deleteProcessBomDetailByBomId(id); - } - - private void validateProcessBomExists(Long id) { - if (processBomMapper.selectById(id) == null) { - throw exception(PROCESS_BOM_NOT_EXISTS); - } - } - - @Override - public ProcessBomDO getProcessBom(Long id) { - return processBomMapper.selectById(id); - } - - @Override - public PageResult getProcessBomPage(ProcessBomPageReqVO pageReqVO) { - return processBomMapper.selectPage(pageReqVO); - } - - // ==================== 子表(工艺bom明细) ==================== - - @Override - public List getProcessBomDetailListByBomId(Long bomId) { - return processBomDetailMapper.selectListByBomId(bomId); - } - - private void createProcessBomDetailList(Long bomId, List list) { - list.forEach(o -> o.setBomId(bomId)); - processBomDetailMapper.insertBatch(list); - } - - private void updateProcessBomDetailList(Long bomId, List list) { - deleteProcessBomDetailByBomId(bomId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 - createProcessBomDetailList(bomId, list); - } - - private void deleteProcessBomDetailByBomId(Long bomId) { - processBomDetailMapper.deleteByBomId(bomId); - } - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.service.processbom; + +import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbomdetail.ProcessBomDetailMapper; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; + +/** + * 工艺bom Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class ProcessBomServiceImpl implements ProcessBomService { + + @Resource + private ProcessBomMapper processBomMapper; + @Resource + private ProcessBomDetailMapper processBomDetailMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createProcessBom(ProcessBomSaveReqVO createReqVO) { + // 插入 + ProcessBomDO processBom = BeanUtils.toBean(createReqVO, ProcessBomDO.class); + processBomMapper.insert(processBom); + + // 插入子表 + if(createReqVO.getProcessBomDetails() != null && !createReqVO.getProcessBomDetails().isEmpty()) createProcessBomDetailList(processBom.getId(), createReqVO.getProcessBomDetails()); + // 返回 + return processBom.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateProcessBom(ProcessBomSaveReqVO updateReqVO) { + // 校验存在 + validateProcessBomExists(updateReqVO.getId()); + // 提交的时候 明细不容许为空 + if(OperateTypeEnum.valueOf(updateReqVO.getActive()) == OperateTypeEnum.SUBMIT){ + if(updateReqVO.getProcessBomDetails() == null || updateReqVO.getProcessBomDetails().isEmpty()){ + throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS); + } + } + + // 更新 + ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class); + if(!updateObj.canOperate(OperateTypeEnum.valueOf(updateReqVO.getActive()))){ + throw exception(INVALID_OPERATE); + } + processBomMapper.updateById(updateObj); + + // 更新子表 + updateProcessBomDetailList(updateReqVO.getId(), updateReqVO.getProcessBomDetails()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteProcessBom(Long id) { + // 校验存在 + validateProcessBomExists(id); + // 删除 + processBomMapper.deleteById(id); + + // 删除子表 + deleteProcessBomDetailByBomId(id); + } + + private void validateProcessBomExists(Long id) { + if (processBomMapper.selectById(id) == null) { + throw exception(PROCESS_BOM_NOT_EXISTS); + } + } + + @Override + public ProcessBomDO getProcessBom(Long id) { + return processBomMapper.selectById(id); + } + + @Override + public PageResult getProcessBomPage(ProcessBomPageReqVO pageReqVO) { + return processBomMapper.selectPage(pageReqVO); + } + + // ==================== 子表(工艺bom明细) ==================== + + @Override + public List getProcessBomDetailListByBomId(Long bomId) { + return processBomDetailMapper.selectListByBomId(bomId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void operateProcessBom(ProcessBomSaveReqVO operateReqVO) { + if(operateReqVO.getId() == null){ + createProcessBom(operateReqVO); + }else{ + updateProcessBom(operateReqVO); + } + } + + private void createProcessBomDetailList(Long bomId, List list) { + list.forEach(o -> o.setBomId(bomId)); + processBomDetailMapper.insertBatch(list); + } + + private void updateProcessBomDetailList(Long bomId, List list) { + deleteProcessBomDetailByBomId(bomId); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + createProcessBomDetailList(bomId, list); + } + + private void deleteProcessBomDetailByBomId(Long bomId) { + processBomDetailMapper.deleteByBomId(bomId); + } + +} diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/processbom/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/processbom/index.ts index 9dca800e..298259a5 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/processbom/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/processbom/index.ts @@ -1,52 +1,58 @@ -import request from '@/config/axios' - -export interface ProcessBomVO { - id: number - code: string - planId: number - projectId: number - projectSubId: number - projectSubName: string - projectSubCode: string - version: number - bomStatus: number - remark: string - status: number -} - -// 查询工艺bom分页 -export const getProcessBomPage = async (params) => { - return await request.get({ url: `/heli/process-bom/page`, params }) -} - -// 查询工艺bom详情 -export const getProcessBom = async (id: number) => { - return await request.get({ url: `/heli/process-bom/get?id=` + id }) -} - -// 新增工艺bom -export const createProcessBom = async (data: ProcessBomVO) => { - return await request.post({ url: `/heli/process-bom/create`, data }) -} - -// 修改工艺bom -export const updateProcessBom = async (data: ProcessBomVO) => { - return await request.put({ url: `/heli/process-bom/update`, data }) -} - -// 删除工艺bom -export const deleteProcessBom = async (id: number) => { - return await request.delete({ url: `/heli/process-bom/delete?id=` + id }) -} - -// 导出工艺bom Excel -export const exportProcessBom = async (params) => { - return await request.download({ url: `/heli/process-bom/export-excel`, params }) -} - -// ==================== 子表(工艺bom明细) ==================== - -// 获得工艺bom明细列表 -export const getProcessBomDetailListByBomId = async (bomId) => { - return await request.get({ url: `/heli/process-bom/process-bom-detail/list-by-bom-id?bomId=` + bomId }) -} \ No newline at end of file +import request from '@/config/axios' + +export interface ProcessBomVO { + id: number + code: string + planId: number + projectId: number + projectSubId: number + projectSubName: string + projectSubCode: string + version: number + bomStatus: number + remark: string + status: number + active: string + activeOpinion: string +} + +// 查询工艺bom分页 +export const getProcessBomPage = async (params) => { + return await request.get({ url: `/heli/process-bom/page`, params }) +} + +// 查询工艺bom详情 +export const getProcessBom = async (id: number) => { + return await request.get({ url: `/heli/process-bom/get?id=` + id }) +} + +// 新增工艺bom +export const createProcessBom = async (data: ProcessBomVO) => { + return await request.post({ url: `/heli/process-bom/create`, data }) +} + +// 修改工艺bom +export const updateProcessBom = async (data: ProcessBomVO) => { + return await request.put({ url: `/heli/process-bom/update`, data }) +} + +// 删除工艺bom +export const deleteProcessBom = async (id: number) => { + return await request.delete({ url: `/heli/process-bom/delete?id=` + id }) +} + +// 导出工艺bom Excel +export const exportProcessBom = async (params) => { + return await request.download({ url: `/heli/process-bom/export-excel`, params }) +} + +// ==================== 子表(工艺bom明细) ==================== + +// 获得工艺bom明细列表 +export const getProcessBomDetailListByBomId = async (bomId) => { + return await request.get({ url: `/heli/process-bom/process-bom-detail/list-by-bom-id?bomId=` + bomId }) +} + +export async function operateProcessBom(data: ProcessBomVO) { + return await request.post({ url: `/heli/process-bom/operate`, data }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bom.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bom.vue index 3352834c..303acaf5 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bom.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bom.vue @@ -92,9 +92,9 @@ - - - + + + @@ -105,13 +105,13 @@ :formatter="dateFormatter" width="220" /> - - + + - + -