package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.mapper.InspectionItemMapper;
import com.yuanchu.mom.mapper.TechniqueMapper;
import com.yuanchu.mom.pojo.InspectionItem;
import com.yuanchu.mom.pojo.RawInsProduct;
import com.yuanchu.mom.pojo.dto.InspectionItemDto;
import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.service.InspectionItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author 江苏鵷雏网络科技有限公司
* @since 2023-08-01
*/
@Service
public class InspectionItemServiceImpl extends ServiceImpl implements InspectionItemService {
@Resource
private InspectionItemMapper inspectionItemMapper;
//新增按钮-->2、查询所有检验项目
@Override
public List selectInspectionItem(Integer id, Integer type) {
return inspectionItemMapper.selectInspectionItem(id,type);
}
//更改设备
@Override
public void updateDevByInsId(Integer id, Integer type, Integer devId) {
LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate()
.eq(InspectionItem::getId, id)
.eq(InspectionItem::getType, type)
.set(InspectionItem::getDeviceId, devId)
.set(InspectionItem::getInspectionValue, null)
.set(InspectionItem::getResult, null);
inspectionItemMapper.update(new InspectionItem(), updateWrapper);
}
//新增按钮-->2、检验项目-->失去焦点发起该请求
@Override
public Integer addProcessInspectionSheet(String username, UpdateInspectionItemDto updateInspectionItemDto) {
//查询内控值和标准值
InspectionItem inspectionItem = inspectionItemMapper.selectById(updateInspectionItemDto.getInspectionItemId());
inspectionItem.setInspectionValue(updateInspectionItemDto.getInspectionValue());
inspectionItem.setDeviceId(updateInspectionItemDto.getDeviceId());
if (updateInspectionItemDto.getInspectionValue().equals("过")){
inspectionItem.setResult(1);
}else if (updateInspectionItemDto.getInspectionValue().equals("不过")){
inspectionItem.setResult(0);
}else {
char req = inspectionItem.getRequired().charAt(0);
List list = Arrays.stream(updateInspectionItemDto.getInspectionValue().split(",")).map(s -> {
int values=2;
if (req == '>' || req == '<' || req == '=') {
values = checkValues(inspectionItem.getRequired(), inspectionItem.getInternal(), s);
}else {
values = conValues(inspectionItem.getRequired(), inspectionItem.getInternal(), s);
}
return values;
}).collect(Collectors.toList());
if (list.contains(0)) {
//如果其中一个检验值不合格则该项目检验不合格
inspectionItem.setResult(0);
} else {
inspectionItem.setResult(1);
}
}
inspectionItem.setUsername(username);
inspectionItemMapper.updateById(inspectionItem);
//返回检验项目的结论
return inspectionItem.getResult();
}
/*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/
//如果是±的操作
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.equals(standardValue);
case "≥":
return detectionValue >= standardValue;
case "≤":
return detectionValue <= standardValue;
default:
return false;
}
}
}
}