fix(检验计划维护):新增导入

This commit is contained in:
liaohechuan 2024-12-12 19:34:41 +08:00
parent d9512eb250
commit c18ee554cd
8 changed files with 539 additions and 21 deletions

View File

@ -0,0 +1,20 @@
package com.foreverwin.iep.qms.dto;
import lombok.Data;
import java.util.List;
/**
* 导入异常DTO
*/
@Data
public class ErrorMsgDTO {
/**
* 行号
*/
private int lineNum;
/**
* 错误信息
*/
private List<String> errors;
}

View File

@ -0,0 +1,15 @@
package com.foreverwin.iep.qms.dto;
import lombok.Data;
/**
* 检验计划信息导入DTO
*/
@Data
public class QmsQcPlanImportDTO extends QmsQcPlanImportOtherDTO{
/**
* 使用对象的主键(qms_qc_plan_target)
*/
private String targetBo;
}

View File

@ -0,0 +1,187 @@
package com.foreverwin.iep.qms.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 检验计划信息导入DTO
*/
@Data
public class QmsQcPlanImportOtherDTO {
/**
* 检验类型(qms_qc_plan)
*/
@ExcelProperty(value="检验类型")
private String inspecType;
/**
* 检验细类(qms_qc_plan)
*/
@ExcelProperty(value="检验细类")
private String qcSubCategories;
/**
* 检验计划编号(qms_qc_plan)
*/
@ExcelProperty(value="检验计划编号")
private String qcPlan;
/**
* 检验计划说明(qms_qc_plan)
*/
@ExcelProperty(value="检验计划名称")
private String qcPlanDescription;
/**
* 工序名称(qms_qc_plan_target)
*/
@ExcelProperty(value="工序名称")
private String operation;
/**
* 产品编码(物料编码)(qms_qc_plan_target)
*/
@ExcelProperty(value="产品编码(物料编码)")
private String item;
/**
* 产品名称(物料名称)(qms_qc_plan_target)
*/
@ExcelProperty(value="产品名称(物料名称)")
private String itemDescription;
/**
* 检验频率(qms_qc_plan)
*/
@ExcelProperty(value="检验频率")
private String inspecNo;
/**
* 抽样规则(qms_qc_plan)
*/
@ExcelProperty(value="抽样规则")
private String samplePlan;
/**
* 检验人员群组(qms_qc_plan)
*/
@ExcelProperty(value="检验人员群组")
private String userGroup;
/**
* 复核人员群组(qms_qc_plan)
*/
@ExcelProperty(value="复核人员群组")
private String checkUserGroup;
/**
* 版本(qms_qc_plan)
*/
@ExcelProperty(value="版本号")
private String revision;
/**
* 当前版本(qms_qc_plan)
*/
@ExcelProperty(value="当前版本")
private String currentRevision;
/**
* 检验项目编号(qms_qc_item、qms_qc_plan_detail)
*/
@ExcelProperty(value="检验项目编号")
private String qcItem;
/**
* 检验项目编号说明(qms_qc_item)
*/
@ExcelProperty(value="检验项目编号描述")
private String qcItemDescription;
/**
* 品管方式(qms_qc_item)
*/
@ExcelProperty(value="品管方式")
private String itemType;
/**
* 计量单位(qms_qc_item)
*/
@ExcelProperty(value="单位")
private String units;
/**
* 规格管控(qms_qc_item)
*/
@ExcelProperty(value="规格管控")
private String controlMode;
/**
* 检验方法说明(qms_qc_plan_detail)
*/
@ExcelProperty(value="检验说明(长文本)")
private String inspInstructions;
/**
* 测试次数(qms_qc_plan_detail)
*/
@ExcelProperty(value="测试次数")
private BigDecimal testTimes;
/**
* 均值计算判定(qms_qc_plan_detail)
*/
@ExcelProperty(value="均值计算判定(Y/N)")
private String avgJudge;
/**
* 规格下限(qms_qc_plan_detail)
*/
@ExcelProperty(value="规格下限")
private BigDecimal minValue;
/**
* 中心(qms_qc_plan_detail)
*/
@ExcelProperty(value="规格中心(目标值)")
private BigDecimal centerValue;
/**
* 规格上限(qms_qc_plan_detail)
*/
@ExcelProperty(value="规格上限")
private BigDecimal maxValue;
/**
* 内文(qms_qc_plan_detail)
*/
@ExcelProperty(value="文本")
private String content;
/**
* 选项集说明(qms_qc_item_type_text_sub)
*/
@ExcelProperty(value="文本选项集描述")
private String textGroupDesc;
/**
* 选项集编号(qms_qc_item_type_text_sub、qms_qc_plan_detail)
*/
@ExcelProperty(value="文本选项集编号")
private String textGroupNo;
/**
* 是否必填(Y/N,是/否,默认Y)(qms_qc_plan_detail)
*/
@ExcelProperty(value="是否必填(Y/N,是/否,默认Y)")
private String isRequired;
/**
* 需上传照片(Y/N,是/否,默认N)(qms_qc_plan_detail)
*/
@ExcelProperty(value="需上传照片(Y/N,是/否,默认N)")
private String photosMust;
}

View File

@ -1,10 +1,14 @@
package com.foreverwin.iep.qms.controller;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.foreverwin.iep.common.base.FrontPage;
import com.foreverwin.iep.common.utils.HandleBoProcessor;
import com.foreverwin.iep.qms.dto.ErrorMsgDTO;
import com.foreverwin.iep.qms.dto.QmsQcPlanImportDTO;
import com.foreverwin.iep.qms.dto.QmsQcPlanImportOtherDTO;
import com.foreverwin.iep.qms.entity.QmsQcPlan;
import com.foreverwin.iep.qms.entity.ZQmsQcPlanItf;
import com.foreverwin.iep.qms.service.QmsQcPlanService;
@ -17,6 +21,13 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* 检验计划
@ -152,4 +163,34 @@ public class QmsQcPlanController {
public R<String> saveOrUpdateSapExaminePlan(@RequestBody ZQmsQcPlanItf zQmsQcPlanItf) {
return R.ok(qmsQcPlanService.saveOrUpdateSapExaminePlan(zQmsQcPlanItf));
}
/**
* 下载检验计划信息模板
* @throws Exception
*/
@ResponseBody
@GetMapping("/downloadQcPlanTemplate")
public void downloadQcPlanTemplate() throws Exception {
String fileName = "检验计划信息";
String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = attributes.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
// 这里需要设置不关闭流
List<QmsQcPlanImportOtherDTO> qmsQcPlanImportOtherDTOList = new ArrayList<>();
EasyExcel.write(response.getOutputStream(), QmsQcPlanImportOtherDTO.class).autoCloseStream(Boolean.FALSE).sheet(fileName).doWrite(qmsQcPlanImportOtherDTOList);
}
/**
* 检验计划信息导入
* @param qmsQcPlanImportDTOList 检验计划信息导入DTO
* @return
*/
@ApiOperation(value = "检验计划信息导入", notes = "检验计划信息导入")
@PostMapping("/doImport")
public R<List<ErrorMsgDTO>> doImport(@RequestBody List<QmsQcPlanImportDTO> qmsQcPlanImportDTOList){
return R.ok(qmsQcPlanService.doImport(qmsQcPlanImportDTOList));
}
}

View File

@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foreverwin.iep.common.base.FrontPage;
import com.foreverwin.iep.qms.domain.UserGroup;
import com.foreverwin.iep.qms.dto.ErrorMsgDTO;
import com.foreverwin.iep.qms.dto.QmsQcPlanImportDTO;
import com.foreverwin.iep.qms.entity.QmsQcPlan;
import com.foreverwin.iep.qms.entity.ZQmsQcPlanItf;
import java.util.List;
/**
* 檢驗計劃服務介面
* <p>
@ -73,4 +77,11 @@ public interface QmsQcPlanService extends IService<QmsQcPlan> {
IPage<QmsQcPlan> getDistinctQcPlan(FrontPage page, String qcPlan);
String saveOrUpdateSapExaminePlan(ZQmsQcPlanItf zQmsQcPlanItf);
/**
* 检验计划信息导入
* @param qmsQcPlanImportDTOList 检验计划信息导入DTO
* @return
*/
List<ErrorMsgDTO> doImport(List<QmsQcPlanImportDTO> qmsQcPlanImportDTOList);
}

View File

@ -17,15 +17,21 @@ import com.foreverwin.iep.common.spc.SpcInvoke;
import com.foreverwin.iep.common.spc.constant.SpcMethod;
import com.foreverwin.iep.common.utils.HandleBoProcessor;
import com.foreverwin.iep.common.utils.SidUtils;
import com.foreverwin.iep.integration.constant.Msg;
import com.foreverwin.iep.prd.domain.GenerateNextNumberRequest;
import com.foreverwin.iep.prd.domain.GenerateNextNumberResponse;
import com.foreverwin.iep.prd.domain.SaveCustomDataRequest;
import com.foreverwin.iep.prd.entity.Item;
import com.foreverwin.iep.prd.entity.Operation;
import com.foreverwin.iep.prd.entity.ProductConfig;
import com.foreverwin.iep.prd.entity.ProductOp;
import com.foreverwin.iep.prd.feign.RemoteCustomFieldsService;
import com.foreverwin.iep.prd.feign.RemoteNextNumberService;
import com.foreverwin.iep.prd.mapper.ItemMapper;
import com.foreverwin.iep.prd.mapper.OperationMapper;
import com.foreverwin.iep.qms.domain.UserGroup;
import com.foreverwin.iep.qms.dto.ErrorMsgDTO;
import com.foreverwin.iep.qms.dto.QmsQcPlanImportDTO;
import com.foreverwin.iep.qms.dto.QmsQcPlanTargetDTO;
import com.foreverwin.iep.qms.entity.*;
import com.foreverwin.iep.qms.mapper.QmsQcPlanDetailMapper;
@ -35,12 +41,14 @@ import com.foreverwin.iep.qms.mapper.QmsSamplePlanMapper;
import com.foreverwin.iep.qms.service.*;
import com.foreverwin.iep.sys.entity.SystemTransactionLog;
import com.foreverwin.iep.sys.feign.RemoteSystemTransactionLogService;
import com.foreverwin.mom.admin.api.entity.SysDictItem;
import com.foreverwin.mom.admin.api.entity.SysRole;
import com.foreverwin.mom.admin.api.feign.RemoteParamService;
import com.foreverwin.mom.admin.api.feign.RemoteRoleService;
import com.foreverwin.mom.common.core.constant.SecurityConstants;
import com.foreverwin.mom.common.core.exception.BusinessException;
import com.foreverwin.mom.common.core.util.I18nUtil;
import com.foreverwin.mom.common.core.util.R;
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
import com.foreverwin.mom.common.security.util.SecurityUtils;
import lombok.AllArgsConstructor;
@ -53,6 +61,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@ -95,6 +104,8 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
private final ZQmsQcPlanDetailItfService zQmsQcPlanDetailItfService;
private final RemoteNextNumberService nextNumberService;
private QmsInspecJobService getQmsInspecJobService() {
return SpringUtil.getBean(QmsInspecJobService.class);
}
@ -404,7 +415,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
@Override
@Transactional(rollbackFor = Exception.class)
public String saveOrUpdateSapExaminePlan(ZQmsQcPlanItf zQmsQcPlanItf) {
String responseStatus = "S";
String responseStatus = Msg.S;
String responseDescription = "成功";
// 初始化
List<String> strList = new ArrayList<>(Arrays.asList("0", "1"));
@ -414,7 +425,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
if (StrUtil.isNotBlank(zQmsQcPlanItf.getOperationId())) {
Operation operation = operationMapper.selectById(Operation.genHandle(zQmsQcPlanItf.getSite(), zQmsQcPlanItf.getOperationId(), "#"));
if (operation == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "工序编号[OPEARTION_ID]【"+ zQmsQcPlanItf.getOperationId() +"】在iMES系统中不存在!";
return responseDescription;
}
@ -422,40 +433,40 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
// 校验产品编码
Item item = itemMapper.selectById(Item.genHandle(zQmsQcPlanItf.getSite(), zQmsQcPlanItf.getItem(), "1"));
if (item == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "产品编码[ITEM]【"+ zQmsQcPlanItf.getItem() +"】在iMES系统中不存在!";
return responseDescription;
}
// 校验检验类型
if (!strList.contains(zQmsQcPlanItf.getInspecType())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验类型[INSPEC_TYPE]传参错误,应为0:PQC,1:IQC!";
return responseDescription;
}
// 校验检验频率ID
if ("0".equals(zQmsQcPlanItf.getInspecType()) && StrUtil.isBlank(zQmsQcPlanItf.getInspecFreqId())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验频率ID[INSPEC_FREQ_ID]不能为空!";
return responseDescription;
}
if (StrUtil.isNotBlank(zQmsQcPlanItf.getInspecFreqId())) {
QmsInspecFreq qmsInspecFreq = qmsInspecFreqService.getById(QmsInspecFreq.genHandle(zQmsQcPlanItf.getSite(), zQmsQcPlanItf.getInspecFreqId()));
if (qmsInspecFreq == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验频率ID[INSPEC_FREQ_ID]【"+ zQmsQcPlanItf.getInspecFreqId() +"】在iMES系统中不存在!";
return responseDescription;
}
}
// 校验抽样规则ID
if ("1".equals(zQmsQcPlanItf.getInspecType()) && StrUtil.isBlank(zQmsQcPlanItf.getSamplePlanId())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "抽样规则ID[SAMPLE_PLAN_ID]不能为空!";
return responseDescription;
}
if (StrUtil.isNotBlank(zQmsQcPlanItf.getSamplePlanId())) {
QmsSamplePlan qmsSamplePlan = qmsSamplePlanMapper.selectById(QmsSamplePlan.genHandle(zQmsQcPlanItf.getSite(), zQmsQcPlanItf.getSamplePlanId()));
if (qmsSamplePlan == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "抽样规则ID[SAMPLE_PLAN_ID]【"+ zQmsQcPlanItf.getSamplePlanId() +"】在iMES系统中不存在!";
return responseDescription;
}
@ -463,13 +474,13 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
// 校验检验人员群组
SysRole sysRole = baseMapper.getRoleCode(zQmsQcPlanItf.getSite(), zQmsQcPlanItf.getUserGroup());
if (sysRole == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验人员群组[USER_GROUP]【"+ zQmsQcPlanItf.getUserGroup() +"】在iMES系统中不存在!";
return responseDescription;
}
// 校验抛送至SPC
if (!strList.contains(zQmsQcPlanItf.getToSpc())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "抛送至SPC[TO_SPC]传参错误,应为0:不抛送,1:要抛送!";
return responseDescription;
}
@ -506,7 +517,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
for (ZQmsQcPlanDetailItf zQmsQcPlanDetailItf : zQmsQcPlanDetailItfList) {
QmsQcItem qmsQcItem = qmsQcItemService.getOne(zQmsQcPlanDetailItf.getSite(), zQmsQcPlanDetailItf.getQcItem());
if (qmsQcItem == null) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细检验项目编号[QC_ITEM]【"+ zQmsQcPlanDetailItf.getQcItem() +"】在iMES系统中不存在!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -515,19 +526,19 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
// 校验规格下限、中心、规格上限
if (StrUtil.isNotBlank(qmsQcItem.getControlMode())) {
if ("0".equals(qmsQcItem.getControlMode()) && StrUtil.isBlank(zQmsQcPlanDetailItf.getMaxValue())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细检验项目编号[QC_ITEM]【"+ zQmsQcPlanDetailItf.getQcItem() +"】的规格管控[CONTROL_MODE]【"+qmsQcItem.getControlMode()+"】为[单边上限管制],规格上限[MAX_VALUE]不能为空!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
return responseDescription;
} else if ("1".equals(qmsQcItem.getControlMode()) && StrUtil.isBlank(zQmsQcPlanDetailItf.getMinValue())) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细检验项目编号[QC_ITEM]【"+ zQmsQcPlanDetailItf.getQcItem() +"】的规格管控[CONTROL_MODE]【"+qmsQcItem.getControlMode()+"】为[单边下限管制],规格下限[MIN_VALUE]不能为空!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
return responseDescription;
} else if ("2".equals(qmsQcItem.getControlMode()) && (StrUtil.isBlank(zQmsQcPlanDetailItf.getMaxValue()) || StrUtil.isBlank(zQmsQcPlanDetailItf.getMinValue()) || StrUtil.isBlank(zQmsQcPlanDetailItf.getCenterValue()))) {
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细检验项目编号[QC_ITEM]【"+ zQmsQcPlanDetailItf.getQcItem() +"】的规格管控[CONTROL_MODE]【"+qmsQcItem.getControlMode()+"】为[双边管制],规格下限[MIN_VALUE]、中心[CENTER_VALUE]、规格上限[MAX_VALUE]均不能为空!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -547,7 +558,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
try {
testNum = new BigDecimal(zQmsQcPlanDetailItf.getTestNum());
} catch (NumberFormatException e){
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细测试次数[TEST_NUM]【"+ zQmsQcPlanDetailItf.getTestNum() +"】需要为数值类型!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -560,7 +571,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
try {
maxValue = new BigDecimal(zQmsQcPlanDetailItf.getMaxValue());
} catch (NumberFormatException e){
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细规格上限[MAX_VALUE]【"+ zQmsQcPlanDetailItf.getMaxValue() +"】需要为数值类型!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -573,7 +584,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
try {
minValue = new BigDecimal(zQmsQcPlanDetailItf.getMinValue());
} catch (NumberFormatException e){
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细规格下限[MIN_VALUE]【"+ zQmsQcPlanDetailItf.getMinValue() +"】需要为数值类型!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -586,7 +597,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
try {
centerValue = new BigDecimal(zQmsQcPlanDetailItf.getCenterValue());
} catch (NumberFormatException e){
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = "检验明细中心[CENTER_VALUE]【"+ zQmsQcPlanDetailItf.getCenterValue() +"】需要为数值类型!";
zQmsQcPlanDetailItf.setResponseStatus(responseStatus);
zQmsQcPlanDetailItf.setResponseDescription(responseDescription);
@ -624,7 +635,7 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
qmsQcPlanTargetService.saveOrUpdate(qmsQcPlanTarget);
} catch (Exception e) {
e.printStackTrace();
responseStatus = "E";
responseStatus = Msg.E;
responseDescription = e.getMessage();
} finally {
// 检验计划接口表
@ -635,10 +646,207 @@ public class QmsQcPlanServiceImpl extends ServiceImpl<QmsQcPlanMapper, QmsQcPlan
zQmsQcPlanDetailItfService.saveBatch(zQmsQcPlanItf.getZQmsQcPlanDetailItfList());
}
if ("S".equals(responseStatus)) {
if (Msg.S.equals(responseStatus)) {
return responseStatus;
} else {
return responseDescription;
}
}
}
/**
* 检验计划信息导入
* @param qmsQcPlanImportDTOList 检验计划信息导入DTO
* @return
*/
@Override
public List<ErrorMsgDTO> doImport(List<QmsQcPlanImportDTO> qmsQcPlanImportDTOList) {
//参数初始化
String site = TenantContextHolder.getTenantId();
List<ErrorMsgDTO> errorMsgDTOList = new ArrayList<>();
// 当前登录人
String user = SecurityUtils.getUserName();
// 当前时间
LocalDateTime nowTime = LocalDateTime.now();
if (CollectionUtils.isNotEmpty(qmsQcPlanImportDTOList)) {
int rowNum = 1;
// 需要生成检验计划编号的数组
List<String> qcPlanList = new ArrayList<>();
//字典-检验细类
List<SysDictItem> qcSubCategoriesSysDictItemList = baseMapper.selectSysDictItemList(site, "qc_sub_categories");
// 工序
List<Operation> operationList = operationMapper.selectList(Wrappers.<Operation>lambdaQuery()
.eq(Operation::getSite, site)
);
for (QmsQcPlanImportDTO qmsQcPlanImportDTO : qmsQcPlanImportDTOList) {
rowNum++;
ErrorMsgDTO errorMsgDTO = new ErrorMsgDTO();
List<String> errors = new ArrayList<>();
//转化字典
if(CollectionUtils.isNotEmpty(qcSubCategoriesSysDictItemList) && StrUtil.isNotBlank(qmsQcPlanImportDTO.getQcSubCategories())) {
//字典-检验细类
Optional<SysDictItem> opt = qcSubCategoriesSysDictItemList.stream().filter(r -> qmsQcPlanImportDTO.getQcSubCategories().equals(r.getLabel())).findFirst();
if(opt.isPresent()) {
qmsQcPlanImportDTO.setQcSubCategories(opt.get().getItemValue());
} else {
errors.add("检验细类【"+qmsQcPlanImportDTO.getQcSubCategories()+"】在iMES系统中字典管理[qc_sub_categories]未匹配到!");
}
}
// 转化工序
if (CollectionUtils.isNotEmpty(operationList) && StrUtil.isNotBlank(qmsQcPlanImportDTO.getOperation())) {
Optional<Operation> opt = operationList.stream().filter(r -> qmsQcPlanImportDTO.getOperation().equals(r.getDescription())).findFirst();
if(opt.isPresent()) {
qmsQcPlanImportDTO.setOperation(opt.get().getOperation());
} else {
errors.add("工序【"+qmsQcPlanImportDTO.getOperation()+"】在iMES系统中未找到!");
}
}
// 校验物料是否存在
Item item = itemMapper.selectOne(Wrappers.<Item>lambdaQuery()
.eq(Item::getSite, site)
.eq(Item::getItem, qmsQcPlanImportDTO.getItem())
.eq(Item::getCurrentRevision, "Y")
);
if (item == null) {
errors.add("物料【"+qmsQcPlanImportDTO.getItem()+"】在iMES系统中未找到当前版本!");
}
if (errors.size() > 0) {
errorMsgDTO.setLineNum(rowNum);
errorMsgDTO.setErrors(errors);
errorMsgDTOList.add(errorMsgDTO);
} else {
// 通过检验细类+工序+物料确定唯一计划
String targetBo = ProductOp.genHandle(ProductConfig.genHandle(item.getHandle()), Operation.genHandle(site, qmsQcPlanImportDTO.getOperation(), "#"));
qmsQcPlanImportDTO.setTargetBo(targetBo);
List<QmsQcPlan> qmsQcPlanList = baseMapper.selectListByTarget(site, qmsQcPlanImportDTO.getQcSubCategories(), targetBo);
if (CollectionUtils.isNotEmpty(qmsQcPlanList)) {
qmsQcPlanImportDTO.setQcPlan(qmsQcPlanList.get(0).getQcPlan());
} else {
// 检验计划不存在,则需要创建
qcPlanList.add(qmsQcPlanImportDTO.getQcSubCategories()+qmsQcPlanImportDTO.getItem()+qmsQcPlanImportDTO.getOperation()+rowNum);
}
}
}
//无报错则保存
if (errorMsgDTOList.size() == 0) {
// 调用编号规则
List<String> qcPlanCodeList = new ArrayList<>();
if (qcPlanList.size() > 0) {
qcPlanCodeList = this.getNextNumber(site, "QC_PLAN_CODE", qcPlanList.size());
}
rowNum = 1;
int seq = 0;
// 检验计划保存列表
List<QmsQcPlan> qmsQcPlanList = new ArrayList<>();
// 检验计划明细表保存列表
List<QmsQcPlanDetail> qmsQcPlanDetailList = new ArrayList<>();
// 检验计划使用对象保存列表
List<QmsQcPlanTarget> qmsQcPlanTargetList = new ArrayList<>();
for (QmsQcPlanImportDTO qmsQcPlanImportDTO : qmsQcPlanImportDTOList) {
rowNum++;
if (qcPlanList.contains(qmsQcPlanImportDTO.getQcSubCategories()+qmsQcPlanImportDTO.getItem()+qmsQcPlanImportDTO.getOperation()+rowNum)) {
// 包含需要创建检验计划编号
qmsQcPlanImportDTO.setQcPlan(qcPlanCodeList.get(seq));
seq++;
}
// 检验计划
QmsQcPlan qmsQcPlan = baseMapper.selectOne(Wrappers.<QmsQcPlan>lambdaQuery()
.eq(QmsQcPlan::getSite, site)
.eq(QmsQcPlan::getQcPlan, qmsQcPlanImportDTO.getQcPlan())
.eq(QmsQcPlan::getCurrentRevision, "Y")
);
if (qmsQcPlan == null) {
qmsQcPlan = new QmsQcPlan();
qmsQcPlan.setHandle(QmsQcPlan.genHandle(site, qmsQcPlanImportDTO.getQcPlan(), qmsQcPlanImportDTO.getRevision()));
qmsQcPlan.setSite(site);
qmsQcPlan.setQcPlan(qmsQcPlanImportDTO.getQcPlan());
qmsQcPlan.setRevision(qmsQcPlanImportDTO.getRevision());
qmsQcPlan.setCurrentRevision("Y");
qmsQcPlan.setDateCreate(nowTime);
qmsQcPlan.setCreator(user);
}
qmsQcPlan.setDescription(qmsQcPlanImportDTO.getQcPlanDescription());
qmsQcPlan.setInspecType(qmsQcPlanImportDTO.getInspecType());
qmsQcPlan.setInspecFreqBo(QmsInspecFreq.genHandle(site, qmsQcPlanImportDTO.getInspecNo()));
qmsQcPlan.setUserGroup(qmsQcPlanImportDTO.getUserGroup());
qmsQcPlan.setDateUpdate(nowTime);
qmsQcPlan.setUpdater(user);
qmsQcPlan.setQcSubCategories(qmsQcPlanImportDTO.getQcSubCategories());
qmsQcPlan.setCheckUserGroup(qmsQcPlanImportDTO.getCheckUserGroup());
qmsQcPlanList.add(qmsQcPlan);
// 检验计划明细表
String qmsQcPlanDetailBo = QmsQcPlanDetail.genHandle(qmsQcPlan.getHandle(), QmsQcItem.genHandle(site, qmsQcPlanImportDTO.getQcItem()));
QmsQcPlanDetail qmsQcPlanDetail = qmsQcPlanDetailService.getById(qmsQcPlanDetailBo);
if (qmsQcPlanDetail == null) {
qmsQcPlanDetail = new QmsQcPlanDetail();
qmsQcPlanDetail.setHandle(qmsQcPlanDetailBo);
qmsQcPlanDetail.setQcPlanBo(qmsQcPlan.getHandle());
qmsQcPlanDetail.setSeq("1");
qmsQcPlanDetail.setQcItemBo(QmsQcItem.genHandle(site, qmsQcPlanImportDTO.getQcItem()));
}
qmsQcPlanDetail.setMaxValue(qmsQcPlanImportDTO.getMaxValue());
qmsQcPlanDetail.setMinValue(qmsQcPlanImportDTO.getMinValue());
qmsQcPlanDetail.setCenterValue(qmsQcPlanImportDTO.getCenterValue());
qmsQcPlanDetail.setContent(qmsQcPlanImportDTO.getContent());
qmsQcPlanDetail.setInspInstructions(qmsQcPlanImportDTO.getInspInstructions());
qmsQcPlanDetail.setTestTimes(qmsQcPlanImportDTO.getTestTimes());
qmsQcPlanDetail.setTextGroupNo(qmsQcPlanImportDTO.getTextGroupNo());
qmsQcPlanDetail.setIsRequired(qmsQcPlanImportDTO.getIsRequired());
qmsQcPlanDetail.setPhotosMust(qmsQcPlanImportDTO.getPhotosMust());
qmsQcPlanDetail.setAvgJudge(qmsQcPlanImportDTO.getAvgJudge());
qmsQcPlanDetailList.add(qmsQcPlanDetail);
// 检验计划使用对象
String qmsQcPlanTargetBo = QmsQcPlanTarget.genHandle(site, qmsQcPlan.getQcPlan(), qmsQcPlanImportDTO.getTargetBo(), "0");
QmsQcPlanTarget qmsQcPlanTarget = qmsQcPlanTargetService.getById(qmsQcPlanTargetBo);
if (qmsQcPlanTarget == null) {
qmsQcPlanTarget = new QmsQcPlanTarget();
qmsQcPlanTarget.setHandle(qmsQcPlanTargetBo);
qmsQcPlanTarget.setSite(site);
qmsQcPlanTarget.setQcPlan(qmsQcPlan.getQcPlan());
qmsQcPlanTarget.setSeq("1");
qmsQcPlanTarget.setTargetBo(qmsQcPlanImportDTO.getTargetBo());
qmsQcPlanTarget.setDateCreate(nowTime);
qmsQcPlanTarget.setCreator(user);
}
qmsQcPlanTarget.setDateUpdate(nowTime);
qmsQcPlanTarget.setUpdater(user);
qmsQcPlanTargetList.add(qmsQcPlanTarget);
}
super.saveOrUpdateBatch(qmsQcPlanList);
qmsQcPlanDetailService.saveOrUpdateBatch(qmsQcPlanDetailList);
qmsQcPlanTargetService.saveOrUpdateBatch(qmsQcPlanTargetList);
}
}
return errorMsgDTOList;
}
/**
* 获取编号规则
* @param site 站点
* @param numberConstant 编号类型
* @param number 需要生成的数量
* @return
*/
private List<String> getNextNumber(String site, String numberConstant, int number) {
GenerateNextNumberRequest generateNextNumberRequest = new GenerateNextNumberRequest();
generateNextNumberRequest.setSite(site);
generateNextNumberRequest.setNextNumberType(numberConstant);
generateNextNumberRequest.setNumberOfValues(number);
R<GenerateNextNumberResponse> generate = nextNumberService.generate(generateNextNumberRequest, SecurityConstants.FROM_IN);
GenerateNextNumberResponse data = generate.getData();
return data.getIds();
}
}

View File

@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.foreverwin.iep.common.base.FrontPage;
import com.foreverwin.iep.qms.domain.UserGroup;
import com.foreverwin.iep.qms.entity.QmsQcPlan;
import com.foreverwin.mom.admin.api.entity.SysDictItem;
import com.foreverwin.mom.admin.api.entity.SysRole;
import com.foreverwin.mom.common.data.datascope.MomBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 检验计划
*
@ -25,4 +28,8 @@ public interface QmsQcPlanMapper extends MomBaseMapper<QmsQcPlan> {
IPage<QmsQcPlan> getListPage(FrontPage page, @Param("entity")QmsQcPlan entity);
SysRole getRoleCode(@Param("site") String site, @Param("roleCode") String roleCode);
List<SysDictItem> selectSysDictItemList(@Param("site") String site, @Param("dictType") String dictType);
List<QmsQcPlan> selectListByTarget(@Param("site") String site, @Param("qcSubCategories") String qcSubCategories, @Param("targetBo") String targetBo);
}

View File

@ -71,4 +71,33 @@
and sr.ROLE_CODE = #{roleCode}
and sr.DEL_FLAG = '0'
</select>
<!--查询字典-->
<select id="selectSysDictItemList" resultType="com.foreverwin.mom.admin.api.entity.SysDictItem">
select
sdi.ITEM_VALUE,
sdi.LABEL
from
momx.sys_dict_item sdi
where
sdi.TENANT_ID = #{site}
and sdi.DEL_FLAG = '0'
and sdi.DICT_TYPE = #{dictType}
</select>
<!--通过检验细类+工序+物料确定唯一计划-->
<select id="selectListByTarget" resultType="com.foreverwin.iep.qms.entity.QmsQcPlan">
select
qqpt.QC_PLAN
from
wip.qms_qc_plan_target qqpt
inner join wip.qms_qc_plan qqp on
qqp.SITE = qqpt.SITE
and qqp.QC_PLAN = qqpt.QC_PLAN
and qqp.CURRENT_REVISION = 'Y'
and qqp.QC_SUB_CATEGORIES = #{qcSubCategories}
where
qqpt.SITE = #{site}
and qqpt.TARGET_BO = #{targetBo}
</select>
</mapper>