package cn.iocoder.yudao.module.mes.service.pd.processparamtemplate;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.processparamtemplate.vo.MesPdProcessParamTemplatePageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.processparamtemplate.vo.MesPdProcessParamTemplateSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparam.MesPdProcessParamDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparamtemplate.MesPdProcessParamTemplateDetailDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pd.processparamtemplate.MesPdProcessParamTemplateDetailMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pd.processparamtemplate.MesPdProcessParamTemplateMapper;
|
import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
|
import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
|
import cn.iocoder.yudao.module.mes.service.pd.processparam.MesPdProcessParamService;
|
import jakarta.annotation.Resource;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
|
|
/**
|
* MES 工艺参数模板 Service 实现类
|
*
|
* @author 芋道源码
|
*/
|
@Service
|
@Validated
|
public class MesPdProcessParamTemplateServiceImpl implements MesPdProcessParamTemplateService {
|
|
@Resource
|
private MesPdProcessParamTemplateMapper templateMapper;
|
|
@Resource
|
private MesPdProcessParamTemplateDetailMapper detailMapper;
|
|
@Resource
|
@Lazy
|
private MesPdProcessParamService processParamService;
|
|
@Resource
|
@Lazy
|
private MesMdAutoCodeRecordService autoCodeRecordService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Long createProcessParamTemplate(MesPdProcessParamTemplateSaveReqVO createReqVO) {
|
// 1. 生成模板编码
|
String templateCode = autoCodeRecordService.generateAutoCode(
|
MesMdAutoCodeRuleCodeEnum.PD_PROCESS_PARAM_TEMPLATE_CODE.getCode());
|
// 2. 插入模板主表
|
MesPdProcessParamTemplateDO template = BeanUtils.toBean(createReqVO, MesPdProcessParamTemplateDO.class);
|
template.setTemplateCode(templateCode);
|
templateMapper.insert(template);
|
// 3. 快照工艺参数值到明细中
|
createTemplateDetails(template.getId(), createReqVO.getDetails());
|
return template.getId();
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void updateProcessParamTemplate(MesPdProcessParamTemplateSaveReqVO updateReqVO) {
|
// 1. 校验存在
|
validateProcessParamTemplateExists(updateReqVO.getId());
|
// 2. 更新模板主表
|
MesPdProcessParamTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesPdProcessParamTemplateDO.class);
|
templateMapper.updateById(updateObj);
|
// 3. 删除旧明细并重新插入(快照模式:先删后插)
|
detailMapper.deleteByTemplateId(updateReqVO.getId());
|
createTemplateDetails(updateReqVO.getId(), updateReqVO.getDetails());
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void deleteProcessParamTemplate(Long id) {
|
// 1. 校验存在
|
validateProcessParamTemplateExists(id);
|
// 2. 删除明细
|
detailMapper.deleteByTemplateId(id);
|
// 3. 删除模板主表
|
templateMapper.deleteById(id);
|
}
|
|
@Override
|
public MesPdProcessParamTemplateDO validateProcessParamTemplateExists(Long id) {
|
MesPdProcessParamTemplateDO template = templateMapper.selectById(id);
|
if (template == null) {
|
throw exception(PD_PROCESS_PARAM_TEMPLATE_NOT_EXISTS);
|
}
|
return template;
|
}
|
|
@Override
|
public MesPdProcessParamTemplateDO getProcessParamTemplate(Long id) {
|
return templateMapper.selectById(id);
|
}
|
|
@Override
|
public PageResult<MesPdProcessParamTemplateDO> getProcessParamTemplatePage(MesPdProcessParamTemplatePageReqVO pageReqVO) {
|
return templateMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public List<MesPdProcessParamTemplateDetailDO> getProcessParamTemplateDetailListByTemplateId(Long templateId) {
|
return detailMapper.selectListByTemplateId(templateId);
|
}
|
|
/**
|
* 创建模板明细(快照逻辑:从工艺参数主表复制值到明细)
|
*
|
* @param templateId 模板ID
|
* @param detailVOs 明细VO列表
|
*/
|
private void createTemplateDetails(Long templateId, List<MesPdProcessParamTemplateSaveReqVO.Detail> detailVOs) {
|
if (detailVOs == null || detailVOs.isEmpty()) {
|
return;
|
}
|
List<MesPdProcessParamTemplateDetailDO> detailDOs = new ArrayList<>();
|
for (MesPdProcessParamTemplateSaveReqVO.Detail detailVO : detailVOs) {
|
// 查找源工艺参数
|
MesPdProcessParamDO param = processParamService.getProcessParam(detailVO.getProcessParamId());
|
if (param == null) {
|
throw exception(PD_PROCESS_PARAM_NOT_EXISTS);
|
}
|
// 将值从参数复制到明细(快照!)
|
MesPdProcessParamTemplateDetailDO detail = MesPdProcessParamTemplateDetailDO.builder()
|
.templateId(templateId)
|
.processParamId(param.getId()) // 仅作溯源
|
.paramCode(param.getParamCode()) // 复制
|
.paramName(param.getParamName()) // 复制
|
.paramType(param.getParamType()) // 复制
|
.unitMeasureId(param.getUnitMeasureId()) // 复制
|
.required(detailVO.getRequired() != null ? detailVO.getRequired() : param.getRequired()) // 允许覆盖
|
.remark(detailVO.getRemark() != null ? detailVO.getRemark() : param.getRemark()) // 允许覆盖
|
.build();
|
detailDOs.add(detail);
|
}
|
detailDOs.forEach(detailMapper::insert);
|
}
|
|
}
|