【需求】bom完善

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

@ -72,6 +72,14 @@ public enum OperateTypeEnum {
*
* */
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_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, "生产计划子项目不存在");

@ -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;
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<Long> createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) {
return success(processBomService.createProcessBom(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新工艺bom")
@PreAuthorize("@ss.hasPermission('heli:process-bom:update')")
public CommonResult<Boolean> 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<Boolean> 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<ProcessBomRespVO> 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<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));
}
}
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<Long> createProcessBom(@Valid @RequestBody ProcessBomSaveReqVO createReqVO) {
return success(processBomService.createProcessBom(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新工艺bom")
@PreAuthorize("@ss.hasPermission('heli:process-bom:update')")
public CommonResult<Boolean> 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<Long> 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<Boolean> 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<ProcessBomRespVO> 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<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;
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<ProcessBomDetailDO> processBomDetails;
}
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<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;
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;
}
}
}

@ -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<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO);
// ==================== 子表工艺bom明细 ====================
/**
* bom
*
* @param bomId bom id
* @return bom
*/
List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId);
}
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<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO);
// ==================== 子表工艺bom明细 ====================
/**
* bom
*
* @param bomId bom id
* @return bom
*/
List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId);
void operateProcessBom(ProcessBomSaveReqVO operateReqVO);
}

@ -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<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO) {
return processBomMapper.selectPage(pageReqVO);
}
// ==================== 子表工艺bom明细 ====================
@Override
public List<ProcessBomDetailDO> getProcessBomDetailListByBomId(Long bomId) {
return processBomDetailMapper.selectListByBomId(bomId);
}
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);
}
}
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<ProcessBomDO> getProcessBomPage(ProcessBomPageReqVO pageReqVO) {
return processBomMapper.selectPage(pageReqVO);
}
// ==================== 子表工艺bom明细 ====================
@Override
public List<ProcessBomDetailDO> 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<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'
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 })
}
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 })
}

@ -92,9 +92,9 @@
<ContentWrap>
<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 label="BOM编号" align="center" prop="code" width="220" />
<el-table-column label="计划单号" align="center" prop="planCode" width="180" />
<el-table-column label="项目编号" align="center" prop="projectCode" width="220" />
<el-table-column fixed label="BOM编号" align="center" prop="code" width="220" />
<el-table-column fixed label="计划单号" align="center" prop="planCode" width="180" />
<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="projectName" width="180" />
<el-table-column label="子项目名称" align="center" prop="projectSubName" width="180" />
@ -105,13 +105,13 @@
:formatter="dateFormatter"
width="220"
/>
<el-table-column label="BOM版本号" align="center" prop="version" width="140" />
<el-table-column label="单据状态" align="center" prop="bomStatus" width="140">
<el-table-column fixed="right" label="BOM版本号" align="center" prop="version" width="140" />
<el-table-column fixed="right" label="单据状态" align="center" prop="bomStatus" width="140">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_BOM_STATUS" :value="scope.row.bomStatus" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160">
<el-table-column fixed="right" label="操作" align="center" width="160">
<template #default="scope">
<el-button
link

@ -114,12 +114,11 @@
<template #header><span class="hl-table_header">*</span>材质</template>
<template #default="{ row, $index }">
<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>
</template>
</el-table-column>
<el-table-column label="规格型号" prop="spec" width="140">
<template #header><span class="hl-table_header">*</span>规格型号</template>
<template #default="scope">
<span v-if="scope.row.type == '1'" v-html="scope.row.spec"></span>
<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
let bomId = await ProcessBomApi.operateProcessBom(data)
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);
reload()
} finally {

Loading…
Cancel
Save