【需求】bom完善

pull/4/head
zengchenxi 8 months ago
parent a8702ce3d3
commit 8130db9f25

@ -72,6 +72,14 @@ public enum OperateTypeEnum {
* *
* */ * */
DELIVER(14), DELIVER(14),
/*
*
* */
SUBMIT(15),
/*
*
* */
CANCEL_SUBMIT(16),
/** /**
* *
* *

@ -58,6 +58,7 @@ public interface ErrorCodeConstants {
/************工艺设计***********/ /************工艺设计***********/
ErrorCode PROCESS_DESIGN_NOT_EXISTS = new ErrorCode(1_006_001, "工艺设计不存在"); ErrorCode PROCESS_DESIGN_NOT_EXISTS = new ErrorCode(1_006_001, "工艺设计不存在");
ErrorCode PROCESS_BOM_NOT_EXISTS = new ErrorCode(1_006_002, "工艺bom不存在"); 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_NOT_EXISTS = new ErrorCode(1_007_001, "生产计划不存在");
ErrorCode PLAN_SUB_NOT_EXISTS = new ErrorCode(1_007_002, "生产计划子项目不存在"); ErrorCode PLAN_SUB_NOT_EXISTS = new ErrorCode(1_007_002, "生产计划子项目不存在");

@ -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;
}
}

@ -1,106 +1,136 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processbom; package com.chanko.yunxi.mes.module.heli.controller.admin.processbom;
import org.springframework.web.bind.annotation.*; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import javax.annotation.Resource; import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import org.springframework.validation.annotation.Validated; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import org.springframework.security.access.prepost.PreAuthorize; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import io.swagger.v3.oas.annotations.tags.Tag; import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
import io.swagger.v3.oas.annotations.Parameter; import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import io.swagger.v3.oas.annotations.Operation; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService;
import javax.validation.constraints.*; import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
import javax.validation.*; import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomRespVO;
import javax.servlet.http.*; import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomSaveReqVO;
import java.util.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import java.io.IOException; 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.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import io.swagger.v3.oas.annotations.Operation;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import io.swagger.v3.oas.annotations.Parameter;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; import javax.servlet.http.HttpServletResponse;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import javax.validation.Valid;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; import java.io.IOException;
import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService; import java.time.LocalDateTime;
import java.util.List;
@Tag(name = "管理后台 - 工艺bom")
@RestController import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
@RequestMapping("/heli/process-bom") import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Validated
public class ProcessBomController { @Tag(name = "管理后台 - 工艺bom")
@RestController
@Resource @RequestMapping("/heli/process-bom")
private ProcessBomService processBomService; @Validated
public class ProcessBomController {
@PostMapping("/create")
@Operation(summary = "创建工艺bom") @Resource
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')") private ProcessBomService processBomService;
public CommonResult<Long> createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) {
return success(processBomService.createProcessBom(createReqVO)); @Resource
} private OperateLogFrameworkService operateLogFrameworkService;
@PutMapping("/update") @Resource
@Operation(summary = "更新工艺bom") private HttpServletRequest request;
@PreAuthorize("@ss.hasPermission('heli:process-bom:update')")
public CommonResult<Boolean> updateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO updateReqVO) { @PostMapping("/create")
processBomService.updateProcessBom(updateReqVO); @Operation(summary = "创建工艺bom")
return success(true); @PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
} public CommonResult<Long> createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) {
return success(processBomService.createProcessBom(createReqVO));
@DeleteMapping("/delete") }
@Operation(summary = "删除工艺bom")
@Parameter(name = "id", description = "编号", required = true) @PutMapping("/update")
@PreAuthorize("@ss.hasPermission('heli:process-bom:delete')") @Operation(summary = "更新工艺bom")
public CommonResult<Boolean> deleteProcessBom(@RequestParam("id") Long id) { @PreAuthorize("@ss.hasPermission('heli:process-bom:update')")
processBomService.deleteProcessBom(id); public CommonResult<Boolean> updateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO updateReqVO) {
return success(true); processBomService.updateProcessBom(updateReqVO);
} return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得工艺bom") @PostMapping("/operate")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Operation(summary = "操作工艺bom")
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')") @PreAuthorize("@ss.hasPermission('heli:process-bom:update')")
public CommonResult<ProcessBomRespVO> getProcessBom(@RequestParam("id") Long id) { @OperateLog(enable = false)
ProcessBomDO processBom = processBomService.getProcessBom(id); @Transactional(rollbackFor = Exception.class)
return success(BeanUtils.toBean(processBom, ProcessBomRespVO.class)); public CommonResult<Long> operateProcessBom(@Valid @RequestBody ProcessBomSaveReqVO operateReqVO) {
} LocalDateTime startTime = LocalDateTime.now();
processBomService.operateProcessBom(operateReqVO);
@GetMapping("/page")
@Operation(summary = "获得工艺bom分页") // 手动记录日志
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')") operateLogFrameworkService.createOperateLog(request,
public CommonResult<PageResult<ProcessBomRespVO>> getProcessBomPage(@Valid ProcessBomPageReqVO pageReqVO) { startTime,
PageResult<ProcessBomDO> pageResult = processBomService.getProcessBomPage(pageReqVO); BusinesTypeEnum.PROCESS_BOM.name(),
return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class)); operateReqVO.getId(),
} OperateTypeEnum.valueOf(operateReqVO.getActive()).getType(),
operateReqVO.getActiveOpinion());
@GetMapping("/export-excel")
@Operation(summary = "导出工艺bom Excel") return success(operateReqVO.getId());
@PreAuthorize("@ss.hasPermission('heli:process-bom:export')") }
@OperateLog(type = EXPORT)
public void exportProcessBomExcel(@Valid ProcessBomPageReqVO pageReqVO, @DeleteMapping("/delete")
HttpServletResponse response) throws IOException { @Operation(summary = "删除工艺bom")
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); @Parameter(name = "id", description = "编号", required = true)
List<ProcessBomDO> list = processBomService.getProcessBomPage(pageReqVO).getList(); @PreAuthorize("@ss.hasPermission('heli:process-bom:delete')")
// 导出 Excel public CommonResult<Boolean> deleteProcessBom(@RequestParam("id") Long id) {
ExcelUtils.write(response, "工艺bom.xls", "数据", ProcessBomRespVO.class, processBomService.deleteProcessBom(id);
BeanUtils.toBean(list, ProcessBomRespVO.class)); return success(true);
} }
// ==================== 子表工艺bom明细 ==================== @GetMapping("/get")
@Operation(summary = "获得工艺bom")
@GetMapping("/process-bom-detail/list-by-bom-id") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@Operation(summary = "获得工艺bom明细列表") @PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
@Parameter(name = "bomId", description = "bom id") public CommonResult<ProcessBomRespVO> getProcessBom(@RequestParam("id") Long id) {
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')") ProcessBomDO processBom = processBomService.getProcessBom(id);
public CommonResult<List<ProcessBomDetailDO>> getProcessBomDetailListByBomId(@RequestParam("bomId") Long bomId) { return success(BeanUtils.toBean(processBom, ProcessBomRespVO.class));
return success(processBomService.getProcessBomDetailListByBomId(bomId)); }
}
@GetMapping("/page")
} @Operation(summary = "获得工艺bom分页")
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
public CommonResult<PageResult<ProcessBomRespVO>> getProcessBomPage(@Valid ProcessBomPageReqVO pageReqVO) {
PageResult<ProcessBomDO> 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<ProcessBomDO> 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<List<ProcessBomDetailDO>> getProcessBomDetailListByBomId(@RequestParam("bomId") Long bomId) {
return success(processBomService.getProcessBomDetailListByBomId(bomId));
}
}

@ -1,59 +1,66 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo; package com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.util.*; import java.util.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO;
@Schema(description = "管理后台 - 工艺bom新增/修改 Request VO") @Schema(description = "管理后台 - 工艺bom新增/修改 Request VO")
@Data @Data
public class ProcessBomSaveReqVO { public class ProcessBomSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511") @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511")
private Long id; private Long id;
@Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "编号,唯一不能为空") @NotEmpty(message = "编号,唯一不能为空")
private String code; private String code;
@Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403") @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403")
@NotNull(message = "生产计划id不能为空") @NotNull(message = "生产计划id不能为空")
private Long planId; private Long planId;
@Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32751") @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32751")
@NotNull(message = "项目id不能为空") @NotNull(message = "项目id不能为空")
private Long projectId; private Long projectId;
@Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12526") @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12526")
@NotNull(message = "子项目id不能为空") @NotNull(message = "子项目id不能为空")
private Long projectSubId; private Long projectSubId;
@Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@NotEmpty(message = "子项目名称不能为空") @NotEmpty(message = "子项目名称不能为空")
private String projectSubName; private String projectSubName;
@Schema(description = "子项目编号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "子项目编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "子项目编号不能为空") @NotEmpty(message = "子项目编号不能为空")
private String projectSubCode; private String projectSubCode;
@Schema(description = "bom版本号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "bom版本号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "bom版本号不能为空") @NotNull(message = "bom版本号不能为空")
private Integer version; private Integer version;
@Schema(description = "bom状态 已保存|已提交 1|2", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @Schema(description = "bom状态 已保存|已提交 1|2", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "bom状态 已保存|已提交 1|2不能为空") @NotNull(message = "bom状态 已保存|已提交 1|2不能为空")
private Integer bomStatus; private Integer bomStatus;
@Schema(description = "备注", example = "你猜") @Schema(description = "备注", example = "你猜")
private String remark; private String remark;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "状态,1表示正常2表示禁用不能为空") @NotNull(message = "状态,1表示正常2表示禁用不能为空")
private Integer status; private Integer status;
@Schema(description = "工艺bom明细列表") @Schema(description = "工艺bom明细列表")
private List<ProcessBomDetailDO> processBomDetails; private List<ProcessBomDetailDO> processBomDetails;
} @Schema(description = "操作类型")
@NotBlank(message = "操作类型不能为空")
private String active;
@Schema(description = "操作意见")
private String activeOpinion;
}

@ -1,5 +1,7 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom; 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 lombok.*;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -78,4 +80,29 @@ public class ProcessBomDO extends BaseDO {
@TableField(exist = false) @TableField(exist = false)
private String projectName; 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;
}
}
} }

@ -1,66 +1,67 @@
package com.chanko.yunxi.mes.module.heli.service.processbom; package com.chanko.yunxi.mes.module.heli.service.processbom;
import java.util.*; import java.util.*;
import javax.validation.*; import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*; 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.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; 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.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/** /**
* bom Service * bom Service
* *
* @author * @author
*/ */
public interface ProcessBomService { public interface ProcessBomService {
/** /**
* bom * bom
* *
* @param createReqVO * @param createReqVO
* @return * @return
*/ */
Long createProcessBom(@Valid ProcessBomSaveReqVO createReqVO); Long createProcessBom(@Valid ProcessBomSaveReqVO createReqVO);
/** /**
* bom * bom
* *
* @param updateReqVO * @param updateReqVO
*/ */
void updateProcessBom(@Valid ProcessBomSaveReqVO updateReqVO); void updateProcessBom(@Valid ProcessBomSaveReqVO updateReqVO);
/** /**
* bom * bom
* *
* @param id * @param id
*/ */
void deleteProcessBom(Long id); void deleteProcessBom(Long id);
/** /**
* bom * bom
* *
* @param id * @param id
* @return bom * @return bom
*/ */
ProcessBomDO getProcessBom(Long id); ProcessBomDO getProcessBom(Long id);
/** /**
* bom * bom
* *
* @param pageReqVO * @param pageReqVO
* @return bom * @return bom
*/ */
PageResult<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO); PageResult<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO);
// ==================== 子表工艺bom明细 ==================== // ==================== 子表工艺bom明细 ====================
/** /**
* bom * bom
* *
* @param bomId bom id * @param bomId bom id
* @return bom * @return bom
*/ */
List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId); List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId);
} void operateProcessBom(ProcessBomSaveReqVO operateReqVO);
}

@ -1,112 +1,133 @@
package com.chanko.yunxi.mes.module.heli.service.processbom; package com.chanko.yunxi.mes.module.heli.service.processbom;
import org.springframework.stereotype.Service; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import javax.annotation.Resource; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional; 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 java.util.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbomdetail.ProcessBomDetailDO;
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.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 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.*; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* bom Service /**
* * bom Service
* @author *
*/ * @author
@Service */
@Validated @Service
public class ProcessBomServiceImpl implements ProcessBomService { @Validated
public class ProcessBomServiceImpl implements ProcessBomService {
@Resource
private ProcessBomMapper processBomMapper; @Resource
@Resource private ProcessBomMapper processBomMapper;
private ProcessBomDetailMapper processBomDetailMapper; @Resource
private ProcessBomDetailMapper processBomDetailMapper;
@Override
@Transactional(rollbackFor = Exception.class) @Override
public Long createProcessBom(ProcessBomSaveReqVO createReqVO) { @Transactional(rollbackFor = Exception.class)
// 插入 public Long createProcessBom(ProcessBomSaveReqVO createReqVO) {
ProcessBomDO processBom = BeanUtils.toBean(createReqVO, ProcessBomDO.class); // 插入
processBomMapper.insert(processBom); ProcessBomDO processBom = BeanUtils.toBean(createReqVO, ProcessBomDO.class);
processBomMapper.insert(processBom);
// 插入子表
createProcessBomDetailList(processBom.getId(), createReqVO.getProcessBomDetails()); // 插入子表
// 返回 if(createReqVO.getProcessBomDetails() != null && !createReqVO.getProcessBomDetails().isEmpty()) createProcessBomDetailList(processBom.getId(), createReqVO.getProcessBomDetails());
return processBom.getId(); // 返回
} return processBom.getId();
}
@Override
@Transactional(rollbackFor = Exception.class) @Override
public void updateProcessBom(ProcessBomSaveReqVO updateReqVO) { @Transactional(rollbackFor = Exception.class)
// 校验存在 public void updateProcessBom(ProcessBomSaveReqVO updateReqVO) {
validateProcessBomExists(updateReqVO.getId()); // 校验存在
// 更新 validateProcessBomExists(updateReqVO.getId());
ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class); // 提交的时候 明细不容许为空
processBomMapper.updateById(updateObj); if(OperateTypeEnum.valueOf(updateReqVO.getActive()) == OperateTypeEnum.SUBMIT){
if(updateReqVO.getProcessBomDetails() == null || updateReqVO.getProcessBomDetails().isEmpty()){
// 更新子表 throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS);
updateProcessBomDetailList(updateReqVO.getId(), updateReqVO.getProcessBomDetails()); }
} }
@Override // 更新
@Transactional(rollbackFor = Exception.class) ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class);
public void deleteProcessBom(Long id) { if(!updateObj.canOperate(OperateTypeEnum.valueOf(updateReqVO.getActive()))){
// 校验存在 throw exception(INVALID_OPERATE);
validateProcessBomExists(id); }
// 删除 processBomMapper.updateById(updateObj);
processBomMapper.deleteById(id);
// 更新子表
// 删除子表 updateProcessBomDetailList(updateReqVO.getId(), updateReqVO.getProcessBomDetails());
deleteProcessBomDetailByBomId(id); }
}
@Override
private void validateProcessBomExists(Long id) { @Transactional(rollbackFor = Exception.class)
if (processBomMapper.selectById(id) == null) { public void deleteProcessBom(Long id) {
throw exception(PROCESS_BOM_NOT_EXISTS); // 校验存在
} validateProcessBomExists(id);
} // 删除
processBomMapper.deleteById(id);
@Override
public ProcessBomDO getProcessBom(Long id) { // 删除子表
return processBomMapper.selectById(id); deleteProcessBomDetailByBomId(id);
} }
@Override private void validateProcessBomExists(Long id) {
public PageResult<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO) { if (processBomMapper.selectById(id) == null) {
return processBomMapper.selectPage(pageReqVO); throw exception(PROCESS_BOM_NOT_EXISTS);
} }
}
// ==================== 子表工艺bom明细 ====================
@Override
@Override public ProcessBomDO getProcessBom(Long id) {
public List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId) { return processBomMapper.selectById(id);
return processBomDetailMapper.selectListByBomId(bomId); }
}
@Override
private void createProcessBomDetailList(Long bomId, List<ProcessBomDetailDO> list) { public PageResult<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO) {
list.forEach(o -> o.setBomId(bomId)); return processBomMapper.selectPage(pageReqVO);
processBomDetailMapper.insertBatch(list); }
}
// ==================== 子表工艺bom明细 ====================
private void updateProcessBomDetailList(Long bomId, List<ProcessBomDetailDO> list) {
deleteProcessBomDetailByBomId(bomId); @Override
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新 public List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId) {
createProcessBomDetailList(bomId, list); return processBomDetailMapper.selectListByBomId(bomId);
} }
private void deleteProcessBomDetailByBomId(Long bomId) { @Override
processBomDetailMapper.deleteByBomId(bomId); @Transactional(rollbackFor = Exception.class)
} public void operateProcessBom(ProcessBomSaveReqVO operateReqVO) {
if(operateReqVO.getId() == null){
} createProcessBom(operateReqVO);
}else{
updateProcessBom(operateReqVO);
}
}
private void createProcessBomDetailList(Long bomId, List<ProcessBomDetailDO> list) {
list.forEach(o -> o.setBomId(bomId));
processBomDetailMapper.insertBatch(list);
}
private void updateProcessBomDetailList(Long bomId, List<ProcessBomDetailDO> list) {
deleteProcessBomDetailByBomId(bomId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createProcessBomDetailList(bomId, list);
}
private void deleteProcessBomDetailByBomId(Long bomId) {
processBomDetailMapper.deleteByBomId(bomId);
}
}

@ -1,52 +1,58 @@
import request from '@/config/axios' import request from '@/config/axios'
export interface ProcessBomVO { export interface ProcessBomVO {
id: number id: number
code: string code: string
planId: number planId: number
projectId: number projectId: number
projectSubId: number projectSubId: number
projectSubName: string projectSubName: string
projectSubCode: string projectSubCode: string
version: number version: number
bomStatus: number bomStatus: number
remark: string remark: string
status: number 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 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 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 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 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
} 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 Excel
} export const exportProcessBom = async (params) => {
return await request.download({ url: `/heli/process-bom/export-excel`, params })
// ==================== 子表工艺bom明细 ==================== }
// 获得工艺bom明细列表 // ==================== 子表工艺bom明细 ====================
export const getProcessBomDetailListByBomId = async (bomId) => {
return await request.get({ url: `/heli/process-bom/process-bom-detail/list-by-bom-id?bomId=` + bomId }) // 获得工艺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 })
}

@ -92,9 +92,9 @@
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column fixed label="序号" type="index" width="60" /> <el-table-column fixed label="序号" type="index" width="60" />
<el-table-column label="BOM编号" align="center" prop="code" width="220" /> <el-table-column fixed label="BOM编号" align="center" prop="code" width="220" />
<el-table-column label="计划单号" align="center" prop="planCode" width="180" /> <el-table-column fixed label="计划单号" align="center" prop="planCode" width="180" />
<el-table-column label="项目编号" align="center" prop="projectCode" width="220" /> <el-table-column fixed label="项目编号" align="center" prop="projectCode" width="220" />
<el-table-column label="客户名称" align="center" prop="customerName" width="240" /> <el-table-column label="客户名称" align="center" prop="customerName" width="240" />
<el-table-column label="项目名称" align="center" prop="projectName" width="180" /> <el-table-column label="项目名称" align="center" prop="projectName" width="180" />
<el-table-column label="子项目名称" align="center" prop="projectSubName" width="180" /> <el-table-column label="子项目名称" align="center" prop="projectSubName" width="180" />
@ -105,13 +105,13 @@
:formatter="dateFormatter" :formatter="dateFormatter"
width="220" width="220"
/> />
<el-table-column label="BOM版本号" align="center" prop="version" width="140" /> <el-table-column fixed="right" label="BOM版本号" align="center" prop="version" width="140" />
<el-table-column label="单据状态" align="center" prop="bomStatus" width="140"> <el-table-column fixed="right" label="单据状态" align="center" prop="bomStatus" width="140">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_BOM_STATUS" :value="scope.row.bomStatus" /> <dict-tag :type="DICT_TYPE.HELI_BOM_STATUS" :value="scope.row.bomStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="160"> <el-table-column fixed="right" label="操作" align="center" width="160">
<template #default="scope"> <template #default="scope">
<el-button <el-button
link link

@ -114,12 +114,11 @@
<template #header><span class="hl-table_header">*</span>材质</template> <template #header><span class="hl-table_header">*</span>材质</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.compositionId`" :rules="subFormRules.compositionId" class="mb-0px!"> <el-form-item :prop="`${$index}.compositionId`" :rules="subFormRules.compositionId" class="mb-0px!">
<CompositionSelect v-model="row.compositionId" /> <CompositionSelect v-model="row.compositionId" @update:newValue="(val) => {row.compositionId = val.id;}"/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="规格型号" prop="spec" width="140"> <el-table-column label="规格型号" prop="spec" width="140">
<template #header><span class="hl-table_header">*</span>规格型号</template>
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.type == '1'" v-html="scope.row.spec"></span> <span v-if="scope.row.type == '1'" v-html="scope.row.spec"></span>
<el-input v-else v-model="scope.row.spec" /> <el-input v-else v-model="scope.row.spec" />
@ -316,7 +315,12 @@ const submitForm = async (operate) => {
const data = formData.value as unknown as ProcessBomApi.ProcessBomVO const data = formData.value as unknown as ProcessBomApi.ProcessBomVO
let bomId = await ProcessBomApi.operateProcessBom(data) let bomId = await ProcessBomApi.operateProcessBom(data)
message.success(t('common.operationSuccess')) message.success(t('common.operationSuccess'))
commonStore.setStore('active', 'update');
let jumpActive = 'update'
if(operate == 'SUBMIT'){
jumpActive = 'detail'
}
commonStore.setStore('active', jumpActive);
commonStore.setStore('id', bomId); commonStore.setStore('id', bomId);
reload() reload()
} finally { } finally {

Loading…
Cancel
Save