package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.pojo.vo.ProcessInspectVo; import com.yuanchu.mom.service.*; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** * 过程检验(ProcessInspect)表服务实现类 * * @author zss * @since 2023-09-06 13:36:03 */ @Service public class ProcessInspectServiceImpl extends ServiceImpl implements ProcessInspectService { @Resource ProcessInspectMapper processInspectMapper; @Resource MaterialMapper materialMapper; @Resource StandardService standardService; @Resource SpecificationsService specificationsService; @Resource ProductService productService; @Resource InspectionItemMapper inspectionItemMapper; @Resource InspectionItemService inspectionItemService; @Resource InspectUnacceptedMapper inspectUnacceptedMapper; //新增过程检验单-->根据订单号选择产品信息和工艺 @Override public List> chooseMater(String orderNumber) { return processInspectMapper.chooseMater(orderNumber); } //新增过程检验单 @Override @Transactional(rollbackFor = Exception.class) public Integer addProcess(String userId, ProcessInspectVo processInspectVo) { /*新增过程检验单*/ ProcessInspect processInspect = new ProcessInspect(); processInspect.setUserId(Integer.parseInt(userId)); BeanUtils.copyProperties(processInspectVo, processInspect); processInspectMapper.insert(processInspect); /*批量新增过程检验项目表*/ //获取型号id Integer specificationId = getSpecificationId(processInspectVo.getMaterial(), processInspectVo.getMaterialCode(), processInspectVo.getSpecificationsModel()); //查询标准BOM技术指标中该型号工艺下最新版本的检验项目 Integer ver = productService.selectVerByPro(specificationId).get(0);//该型号下技术指标最新版本 List productList = productService.selProByVerSpe(processInspectVo.getTechnologyId(), ver); List inspectionItemList = productList.stream().map(product -> { InspectionItem inspectionItem = new InspectionItem(); BeanUtils.copyProperties(product, inspectionItem); inspectionItem.setInspectId(processInspect.getId()); inspectionItem.setType(1); return inspectionItem; }).collect(Collectors.toList()); inspectionItemService.saveBatch(inspectionItemList); return processInspect.getId(); } //上报(更新检验状态) @Override @Transactional(rollbackFor = Exception.class) public String updateProcessInspectsById(Integer id) { /*更新检验单里面的检验结论*/ //先判断检验结果 List results = inspectionItemMapper.getResult(id,1); int count = 0; for (Integer result : results) { if (result != null && result == 1) { count++; } } ProcessInspect processInspect = processInspectMapper.selectById(id); //如果检验项目中的结论包含不合格则检验单不合格 if (results.contains(0)) { processInspect.setResult(0);//不合格 //更新检验单 processInspectMapper.updateById(processInspect); } else if (count == results.size()) { processInspect.setResult(1);//合格 processInspectMapper.updateById(processInspect); } else return "项目未检验完!"; /*如果检验结论为不合格,则需要新增不合格检验单*/ if (processInspect.getResult() == 0) { InspectUnaccepted processUnaccepted = InspectUnaccepted.builder() .reason(processInspect.getMaterial() +processInspect.getTechname()+ "不合格") //暂且定义为产品名称+工艺不合格 .rawInspectId(id) .type(2) //类型为过程检验 .build(); inspectUnacceptedMapper.insert(processUnaccepted); } return "上报成功!"; } //根据检验单id查询过程检验单详情 @Override public List> selectProcessInspectsListById(Integer id) { return processInspectMapper.selectProcessInspectsListById(id); } //分页查询过程检验单列表 @Override public IPage> selectProcessInspectsList(Page page, String techfather, Integer result, String name) { return processInspectMapper.selectProcessInspectsList(page,techfather,result,name); } /*根据样品名称,样品编号,型号规格获取型号id*/ private Integer getSpecificationId(String name, String mcode, String specification) { //获取物料id Material material = materialMapper.selectOne(Wrappers.query() .eq("name", name) .eq("code", mcode)); if (Objects.isNull(material)) { return null; } //获取规格名称和型号名称 String[] split = specification.split("-"); String stName = split[0]; String spName = split[1]; //获取规格id Standard standard = standardService.getOne(Wrappers.query() .eq("name", stName) .eq("material_id", material.getId())); //获取型号id Specifications specifications = specificationsService.getOne(Wrappers.query() .eq("name", spName) .eq("standard_id", standard.getId())); return specifications.getId(); } /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/ private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) { boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr); boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr); if (isStandardValueSatisfied && isControlValueSatisfied) { return 1; } else { return 0; } } private boolean isValueSatisfied(String valueStr, String detectionValueStr) { String substring = valueStr.substring(1, 2); if (substring.equals("=")) { String operator = valueStr.substring(0, 2); Double standardValue = Double.parseDouble(valueStr.substring(2)); Double detectionValue = Double.parseDouble(detectionValueStr); switch (operator) { case ">=": return detectionValue >= standardValue; case "<=": return detectionValue <= standardValue; default: return false; } } else { String operator = valueStr.substring(0, 1); Double standardValue = Double.parseDouble(valueStr.substring(1)); Double detectionValue = Double.parseDouble(detectionValueStr); switch (operator) { case ">": return detectionValue > standardValue; case "≥": return detectionValue >= standardValue; case "≤": return detectionValue <= standardValue; case "<": return detectionValue < standardValue; case "=": return detectionValue.equals(standardValue); default: return false; } } } }