XiaoRuby
2023-09-24 20956b0f05f81ca47cf6c3e8f9b3b426e9cfd035
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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<RawInsProductMapper, RawInsProduct> 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<Integer> 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<RawInsProduct> updateWrapper = Wrappers.<RawInsProduct>lambdaUpdate()
                .eq(RawInsProduct::getId, rpId)
                .set(RawInsProduct::getDeviceId, devId)
                .set(RawInsProduct::getTestState, null)
                .set(RawInsProduct::getTestValue, null);
        rawInsProductMapper.update(new RawInsProduct(), updateWrapper);
    }
 
    @Override
    public void batchAddInsProduct(Integer id, List<RawInsProductVo> rawInsProducts) {
        List<RawInsProduct> rawInsProductList = new ArrayList<>();
        rawInsProducts.forEach(i -> {
            RawInsProduct rawInsProduct1 = new RawInsProduct();
            BeanUtils.copyProperties(i, rawInsProduct1);
            rawInsProduct1.setRawInspectId(id);
            rawInsProduct1.setState(1);
            rawInsProductList.add(rawInsProduct1);
        });
        rawInsProductMapper.insertBatchSomeColumn(rawInsProductList);
    }
 
    /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/
    //如果是±的操作
    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;
            }
        }
    }
 
}