zss
2023-08-22 affabbd21802dacbf943692912a83e63106670e4
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
package com.yuanchu.limslaboratory.service.impl;
 
import cn.hutool.core.lang.Snowflake;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.limslaboratory.mapper.*;
import com.yuanchu.limslaboratory.pojo.*;
import com.yuanchu.limslaboratory.pojo.vo.InsProductVo;
import com.yuanchu.limslaboratory.pojo.vo.InspectDetailVo;
import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
import com.yuanchu.limslaboratory.service.*;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * 申请表(Inspection)表服务实现类
 *
 * @author zss
 * @since 2023-08-03 13:03:36
 */
@Service
public class InspectionServiceImpl extends ServiceImpl<InspectionMapper, Inspection> implements InspectionService {
 
    @Resource
    InspectionMapper inspectionMapper;
 
    @Resource
    InspectionMaterialMapper inspectionMaterialMapper;
 
    @Resource
    InspectionProductService inspectionProductService;
 
    @Resource
    InspectionProductMapper inspectionProductMapper;
 
    @Resource
    MaterialMapper materialMapper;
 
    @Resource
    StandardService standardService;
 
    @Resource
    SpecificationsService specificationsService;
 
    @Resource
    ProductMapper productMapper;
 
    @Resource
    InstrumentService instrumentService;
 
    @Resource
    UserMapper userMapper;
 
 
    /**
     * 查询检验申请单列表
     *
     * @param message
     * @return
     */
    @Override
    public IPage<Map<String, Object>> selectInspectsList(Page<Object> page, String message) {
        return inspectionMapper.selectInspectsList(page, message);
    }
 
    /**
     * 新增检验申请表
     *
     * @param id
     * @param
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer addInspect(Integer id, InspectionVo inspectionVo) {
        /*新增检验申请表*/
        Inspection inspection = Inspection.builder()
                .startTime(inspectionVo.getStartTime())
                .endTime(inspectionVo.getEndTime())
                .type(inspectionVo.getType())
                .code(new Snowflake(1, 1).nextIdStr())
                .userId(id)
                .build();
        inspectionMapper.insert(inspection);
        /*新增检验样品表*/
        InspectionMaterial inspectionMaterial = InspectionMaterial.builder()
                .code(inspectionVo.getMcode())
                .name(inspectionVo.getName())
                .num(inspectionVo.getNum())
                .unit(inspectionVo.getUnit())
                .supplier(inspectionVo.getSupplier())
                .specifications(inspectionVo.getSpecifications())
                .formTime(inspectionVo.getFormTime())
                .inspectionId(inspection.getId())
                .build();
        inspectionMaterialMapper.insert(inspectionMaterial);
        /*新增检验项目表*/
        //获取物料id
        Material material = materialMapper.selectOne(Wrappers.<Material>query()
                .eq("name", inspectionVo.getName())
                .eq("code", inspectionVo.getMcode()));
        //获取规格名称和型号名称
        String specification = inspectionVo.getSpecifications();
        String[] split = specification.split("-");
        String stName = split[0];
        String spName = split[1];
        //获取规格id
        Standard standard = standardService.getOne(Wrappers.<Standard>query()
                .eq("name", stName)
                .eq("material_id", material.getId()));
        //获取型号id
        Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
                .eq("name", spName)
                .eq("standard_id", standard.getId()));
        //根据型号id查询项目信息
        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specifications.getId()));
        ArrayList<InspectionProduct> list = new ArrayList<>();
        for (Product product : productList) {
            InspectionProduct rawInsProduct = InspectionProduct.builder()
                    .name(product.getName())
                    .unit(product.getUnit())
                    .required(product.getRequired())
                    .internal(product.getInternal())
                    .inspectionMaterialId(material.getId())
                    .build();
            list.add(rawInsProduct);
        }
        //检验项目批量添加
        inspectionProductService.saveBatch(list);
        return inspection.getId();
    }
 
    //根据检验单id查询原材料检验单详情
    @Override
    @Transactional(rollbackFor = Exception.class)
    public InspectDetailVo selectInspectsListById(Integer id) {
        /*将检验单基本信息查询出来并封装到RawInspectVo对象中*/
        Inspection inspection = inspectionMapper.selectById(id);
        InspectDetailVo inspectDetailVo = new InspectDetailVo();
        //报检人
        User user = userMapper.selectById(inspection.getUserId());
        inspectDetailVo.setUserName(user.getName());
        //报检开始时间和结束时间
        inspectDetailVo.setStartTime(inspection.getStartTime());
        inspectDetailVo.setEndTime(inspection.getEndTime());
        //检验结论
        inspectDetailVo.setInspectionStatus(inspection.getInspectionStatus());
        //查询检验物料
        InspectionMaterial inspectionMaterial = inspectionMaterialMapper.selectOne(Wrappers.<InspectionMaterial>query().eq("inspection_id", id));
        //来料日期,供应商名称,原材料编码,原材料名称,规格型号,单位,数量
        BeanUtils.copyProperties(inspectionMaterial, inspectDetailVo);
        /*查询检验单里面的检验项目,并封装到RawInspectVo对象中*/
        LambdaQueryWrapper<InspectionProduct> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(InspectionProduct::getInspectionMaterialId, inspectionMaterial.getId());
        List<InspectionProduct> inspectionProducts = inspectionProductMapper.selectList(queryWrapper);
        //这里查到的设备id和检验员id要查询名称
        List<InsProductVo> insProductVos = inspectionProducts.stream().map(insProduct -> {
            //将一个对象的值赋值给另一个对象
            InsProductVo insProductVo = new InsProductVo();
            BeanUtils.copyProperties(insProduct, insProductVo);
            //获取设备名(前提是如果存在)
            if (insProduct.getInstrumentId() != null) {
                String equipmentName = instrumentService.getById(insProduct.getInstrumentId()).getEquipmentName();
                insProductVo.setInstrumentName(equipmentName);
            }
            //获取用户名(前提是如果存在)
            if (insProduct.getUserId() != null) {
                String userName = userMapper.selectById(insProduct.getUserId()).getName();
                insProductVo.setUserName(userName);
            }
            //项目关联物料id
            insProductVo.setInspectionMaterialId(inspectionMaterial.getId());
            return insProductVo;
        }).collect(Collectors.toList());
        inspectDetailVo.setInsProducts(insProductVos);
        return inspectDetailVo;
    }
 
    //作废检验单
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String delInspect(Integer id) {
        /*作废检验单*/
        Inspection inspection = new Inspection();
        inspection.setId(id);
        inspection.setState(0);
        inspectionMapper.updateById(inspection);
        /*作废检验样品*/
        InspectionMaterial inspectionMaterial = inspectionMaterialMapper.selectOne(Wrappers.<InspectionMaterial>query().eq("inspection_id", id));
        inspectionMaterial.setState(0);
        inspectionMaterialMapper.updateById(inspectionMaterial);
        /*作废检验项目*/
        inspectionProductMapper.updat(inspectionMaterial.getId());
        return "作废成功!";
    }
 
    //保存检验项目责任人
    @Override
    public String chooseUseProId(Integer id, Integer userProId) {
        InspectionProduct inspectionProduct = new InspectionProduct();
        inspectionProduct.setId(id);
        inspectionProduct.setUserProId(userProId);
        inspectionProductMapper.updateById(inspectionProduct);
        return "保存成功!";
    }
 
 
}