fix(检验计划维护):新增导入
This commit is contained in:
parent
d9512eb250
commit
c18ee554cd
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user