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 e0cbf1c8..14817680 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 @@ -57,6 +57,7 @@ public interface ErrorCodeConstants { ErrorCode DELIVER_AMOUNT_OVERFLOW = new ErrorCode(1_005_003, "超额发货"); /************工艺设计***********/ ErrorCode PROCESS_DESIGN_NOT_EXISTS = new ErrorCode(1_006_001, "工艺设计不存在"); + ErrorCode PROCESS_BOM_NOT_EXISTS = new ErrorCode(1_006_002, "工艺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-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 new file mode 100644 index 00000000..38be4ff6 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/ProcessBomController.java @@ -0,0 +1,106 @@ +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 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomPageReqVO.java new file mode 100644 index 00000000..04df645c --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomPageReqVO.java @@ -0,0 +1,52 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工艺bom分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProcessBomPageReqVO extends PageParam { + + @Schema(description = "编号,唯一") + private String code; + + @Schema(description = "生产计划id", example = "19403") + private Long planId; + + @Schema(description = "项目id", example = "32751") + private Long projectId; + + @Schema(description = "子项目id", example = "12526") + private Long projectSubId; + + @Schema(description = "子项目名称", example = "张三") + private String projectSubName; + + @Schema(description = "子项目编号") + private String projectSubCode; + + @Schema(description = "bom版本号") + private Integer version; + + @Schema(description = "bom状态 已保存|已提交 1|2", example = "2") + private Integer bomStatus; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", example = "2") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomRespVO.java new file mode 100644 index 00000000..e1f8a525 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomRespVO.java @@ -0,0 +1,67 @@ +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 java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat; +import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 工艺bom Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProcessBomRespVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511") + @ExcelProperty("自增字段,唯一") + private Long id; + + @Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("编号,唯一") + private String code; + + @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403") + @ExcelProperty("生产计划id") + private Long planId; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32751") + @ExcelProperty("项目id") + private Long projectId; + + @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12526") + @ExcelProperty("子项目id") + private Long projectSubId; + + @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("子项目名称") + private String projectSubName; + + @Schema(description = "子项目编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("子项目编号") + private String projectSubCode; + + @Schema(description = "bom版本号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("bom版本号") + private Integer version; + + @Schema(description = "bom状态 已保存|已提交 1|2", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty(value = "bom状态 已保存|已提交 1|2", converter = DictConvert.class) + @DictFormat("heli_bom_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer bomStatus; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("状态,1表示正常,2表示禁用") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file 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 new file mode 100644 index 00000000..4229b1b8 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java @@ -0,0 +1,59 @@ +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 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 new file mode 100644 index 00000000..d1c92d59 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDO.java @@ -0,0 +1,73 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工艺bom DO + * + * @author 管理员 + */ +@TableName("pro_process_bom") +@KeySequence("pro_process_bom_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProcessBomDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * 编号,唯一 + */ + private String code; + /** + * 生产计划id + */ + private Long planId; + /** + * 项目id + */ + private Long projectId; + /** + * 子项目id + */ + private Long projectSubId; + /** + * 子项目名称 + */ + private String projectSubName; + /** + * 子项目编号 + */ + private String projectSubCode; + /** + * bom版本号 + */ + private Integer version; + /** + * bom状态 已保存|已提交 1|2 + * + * 枚举 {@link TODO heli_bom_status 对应的类} + */ + private Integer bomStatus; + /** + * 备注 + */ + private String remark; + /** + * 状态,1表示正常,2表示禁用 + */ + private Integer status; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDetailDO.java new file mode 100644 index 00000000..ddb5016d --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processbom/ProcessBomDetailDO.java @@ -0,0 +1,81 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工艺bom明细 DO + * + * @author 管理员 + */ +@TableName("pro_process_bom_detail") +@KeySequence("pro_process_bom_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProcessBomDetailDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * bom id + */ + private Long bomId; + /** + * 零件类型 1 标准件|2 其它 + * + * 枚举 {@link TODO heli_bom_material_type 对应的类} + */ + private String type; + /** + * 物料id + */ + private Long materialId; + /** + * 物料名称 + */ + private String materialName; + /** + * 物料编码 + */ + private String materialCode; + /** + * 材质id + */ + private Long compositionId; + /** + * 规格 + */ + private String spec; + /** + * 单位 + */ + private String unit; + /** + * 图号 + */ + private String blueprintNo; + /** + * 数量 + */ + private Integer amount; + /** + * 备注 + */ + private String remark; + /** + * 状态,1表示正常,2表示禁用 + */ + private Integer status; + +} \ No newline at end of file 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 new file mode 100644 index 00000000..2dd1b474 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java @@ -0,0 +1,28 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.processbomdetail; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工艺bom明细 Mapper + * + * @author 管理员 + */ +@Mapper +public interface ProcessBomDetailMapper extends BaseMapperX { + + default List selectListByBomId(Long bomId) { + return selectList(ProcessBomDetailDO::getBomId, bomId); + } + + default int deleteByBomId(Long bomId) { + return delete(ProcessBomDetailDO::getBomId, bomId); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java new file mode 100644 index 00000000..0ae86dc7 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java @@ -0,0 +1,36 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import org.apache.ibatis.annotations.Mapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; + +/** + * 工艺bom Mapper + * + * @author 管理员 + */ +@Mapper +public interface ProcessBomMapper extends BaseMapperX { + + default PageResult selectPage(ProcessBomPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ProcessBomDO::getCode, reqVO.getCode()) + .eqIfPresent(ProcessBomDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(ProcessBomDO::getProjectId, reqVO.getProjectId()) + .eqIfPresent(ProcessBomDO::getProjectSubId, reqVO.getProjectSubId()) + .likeIfPresent(ProcessBomDO::getProjectSubName, reqVO.getProjectSubName()) + .eqIfPresent(ProcessBomDO::getProjectSubCode, reqVO.getProjectSubCode()) + .eqIfPresent(ProcessBomDO::getVersion, reqVO.getVersion()) + .eqIfPresent(ProcessBomDO::getBomStatus, reqVO.getBomStatus()) + .eqIfPresent(ProcessBomDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProcessBomDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ProcessBomDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ProcessBomDO::getId)); + } + +} \ No newline at end of file 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 new file mode 100644 index 00000000..5aeddcf2 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomService.java @@ -0,0 +1,66 @@ +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 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 new file mode 100644 index 00000000..1542ca8f --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java @@ -0,0 +1,112 @@ +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 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml new file mode 100644 index 00000000..eac1ad47 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file 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 new file mode 100644 index 00000000..9dca800e --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/processbom/index.ts @@ -0,0 +1,52 @@ +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 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/ProcessBomForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/ProcessBomForm.vue new file mode 100644 index 00000000..a5dfab92 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/ProcessBomForm.vue @@ -0,0 +1,172 @@ + + \ No newline at end of file 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 new file mode 100644 index 00000000..d5a9109a --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bom.vue @@ -0,0 +1,297 @@ + + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/components/ProcessBomDetailForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/components/ProcessBomDetailForm.vue new file mode 100644 index 00000000..d9dae4ea --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/components/ProcessBomDetailForm.vue @@ -0,0 +1,187 @@ + + \ No newline at end of file diff --git a/sql/v1.3.0/1.structure.sql b/sql/v1.3.0/1.structure.sql index a96355d1..cc0ea9ec 100644 --- a/sql/v1.3.0/1.structure.sql +++ b/sql/v1.3.0/1.structure.sql @@ -219,7 +219,7 @@ DROP TABLE IF EXISTS `pro_process_bom_detail`; CREATE TABLE `pro_process_bom_detail` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增字段,唯一', `bom_id` bigint(20) NOT NULL COMMENT 'bom id', - `type` char(1) not null comment '零件类型 1 标准件|2 其它', + `type` char(1) not null comment '物料类型 1 标准件|2 其它', `material_id` BIGINT(20) COMMENT '物料id', `material_name` varchar(64) NOT NULL COMMENT '物料名称', `material_code` varchar(64) COMMENT '物料编码',