package com.yuanchu.mom.service.impl; import ch.qos.logback.core.joran.util.beans.BeanUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.mapper.RawInsProductMapper; import com.yuanchu.mom.mapper.RawInspectMapper; import com.yuanchu.mom.pojo.RawInsProduct; import com.yuanchu.mom.pojo.RawInspect; import com.yuanchu.mom.pojo.vo.RawInsProductVo; import com.yuanchu.mom.service.RawInsProductService; import com.yuanchu.mom.utils.MyUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; /** * 原材料申请单中的项目列表(RawInsProduct)表服务实现类 * * @author zss * @since 2023-08-01 13:52:31 */ @Service public class RawInsProductServiceImpl extends ServiceImpl implements RawInsProductService { @Resource RawInsProductMapper rawInsProductMapper; @Resource RawInspectMapper rawInspectMapper; //更新检验项目(填写检验值,检验设备) @Override public void updaterawInsProduct(int userId, Integer rpId, String testValue, Integer devId) { RawInsProduct rawInsProduct = rawInsProductMapper.selectById(rpId); //赋值设备 rawInsProduct.setDeviceId(devId); //赋值检验员id rawInsProduct.setUserId(userId); //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0 String required = rawInsProduct.getRequired();//标准值 String internal = rawInsProduct.getInternal();//内控值 rawInsProduct.setTestValue(testValue); if (testValue.equals("过")){ rawInsProduct.setTestState(1); }else if (testValue.equals("不过")){ rawInsProduct.setTestState(0); }else { char req = required.charAt(0); List list = Arrays.stream(testValue.split(",")).map(s -> { int values=2; if (req == '>' || req == '<' || req == '=') { values = checkValues(required, internal, s); }else { values = conValues(required, internal, s); } return values; }).collect(Collectors.toList()); if (list.contains(0)) { //如果其中一个检验值不合格则该项目检验不合格 rawInsProduct.setTestState(0); } else { rawInsProduct.setTestState(1); } } /*更新原材料检验项目表*/ rawInsProductMapper.updateById(rawInsProduct); /*更新原材料检验单*/ RawInspect rawInspect = new RawInspect(); rawInspect.setId(rawInsProduct.getRawInspectId()); rawInspectMapper.updateById(rawInspect); } //只更改设备,之前的检验值删掉 @Override public void updateDevByRpId(Integer rpId, Integer devId) { LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate() .eq(RawInsProduct::getId, rpId) .set(RawInsProduct::getDeviceId, devId) .set(RawInsProduct::getTestState, null) .set(RawInsProduct::getTestValue, null); rawInsProductMapper.update(new RawInsProduct(), updateWrapper); } /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/ //如果是±的操作 private int conValues(String standardValueStr, String controlValueStr, String detectionValueStr) { double standVar = Double.parseDouble(standardValueStr); double controlVar = Double.parseDouble(controlValueStr); double detecVar = Double.parseDouble(detectionValueStr); double a = standVar + controlVar; double b = standVar - controlVar; if (detecVar >= b && detecVar <= a) { return 1; } return 0; } //如果是> , < ,=的操作 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; } } } }