Fixiaobai
2023-09-06 8abe275e36823f1065300af45e1f7a9a68f549a7
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
@@ -1,24 +1,29 @@
package com.yuanchu.limslaboratory.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
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.exception.ApplicationException;
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 lombok.extern.slf4j.Slf4j;
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.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
/**
@@ -28,6 +33,7 @@
 * @since 2023-08-03 13:03:36
 */
@Service
@Slf4j
public class InspectionServiceImpl extends ServiceImpl<InspectionMapper, Inspection> implements InspectionService {
    @Resource
@@ -81,14 +87,13 @@
    //新增检验单-->选择检验项目版本
    @Override
    public List<Integer> chooseVer(String name, String mcode, String specifications) {
        Integer specificationId = getSpecificationId(name, mcode, specifications);
        return productMapper.chooseVersion(specificationId);
        return productMapper.chooseVersion(Integer.parseInt(specifications));
    }
    //新增检验单-->选择检验项目版本-->查看该版本下我们要做的项目要求
    @Override
    public List<Map<String, Object>> lookProByVer(String name, String mcode, String specifications, Integer version, String experiment) {
        Integer specificationId = getSpecificationId(name, mcode, specifications);
        Integer specificationId = Integer.parseInt(specifications);
        /*如果试验项目为空则是成品检验或者原材料检验则是展示该版本的所有项目检验要求参数*/
        if (ObjectUtils.isEmpty(experiment)) {
            return productMapper.pageProductInformation(specificationId, version);
@@ -117,7 +122,8 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer addInspect(Integer id, InspectionVo inspectionVo) {
    public Integer addInspect(Integer id, InspectionVo inspectionVo) throws ApplicationException {
        log.info(inspectionVo.toString());
        /*新增检验申请表*/
        Inspection inspection = Inspection.builder()
                .startTime(inspectionVo.getStartTime())
@@ -132,6 +138,7 @@
            RawMaterial rawMaterial = new RawMaterial();
            rawMaterial.setId(inspectionVo.getId());
            rawMaterial.setType(1);
            rawMaterial.setInspectionDate(DateUtil.date());
            rawMaterial.setSurveyor(userMapper.selectById(id).getName());
            rawMaterialMapper.updateById(rawMaterial);
        }
@@ -149,14 +156,21 @@
                .num(inspectionVo.getNum())
                .unit(inspectionVo.getUnit())
                .supplier(inspectionVo.getSupplier())
                .specificationsId(inspectionVo.getSpecificationId())
                .specifications(inspectionVo.getSpecifications())
                .formTime(inspectionVo.getFormTime())
                .inspectionId(inspection.getId())
                .notes(inspectionVo.getNotes())
                .build();
        inspectionMaterialMapper.insert(inspectionMaterial);
        /*新增检验项目表*/
        //根据样品名称编号以及型号规格获取型号id
        Integer specificationId = getSpecificationId(inspectionVo.getName(), inspectionVo.getMcode(), inspectionVo.getSpecifications());
        Integer specificationId = Integer.parseInt(inspectionVo.getSpecificationId());
        //if(ObjectUtils.isNotEmpty(inspectionVo.getSpecificationId())){
        //    specificationId =Integer.parseInt(inspectionVo.getSpecificationId());
        //}else{
        //    specificationId=getSpecificationId(inspectionVo.getName(), inspectionVo.getMcode(), inspectionVo.getSpecifications());
        //}
        //如果试验项目字段不为空则按该字段的项目进行匹配
        if (ObjectUtils.isNotEmpty(inspectionVo.getExperiment())) {
            //获取试验项目信息(结构,导线外径)
@@ -194,7 +208,20 @@
            return inspection.getId();
        }
        //如果试验项目为空则按照型号id在标准库里面全部匹配
        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specificationId));
        List<Product> productList =
                productMapper.selectList(Wrappers.<Product>query()
                        .eq("specifications_id", specificationId)
                .eq("version",inspectionVo.getVersion()));
        productList.stream().forEach(p->{
            String internal = Optional.ofNullable(p)
                    .map(Product::getInternal)
                    .orElse("空");
            String required = Optional.ofNullable(p)
                    .map(Product::getRequired).orElse("空");
            if(Objects.equals("空",internal)||Objects.equals(required,"空")) {
                throw new ApplicationException("项目版本不可用");
            }
        });
        //将查询的项目信息构建成检验项目
        ArrayList<InspectionProduct> list = new ArrayList<>();
        for (Product product : productList) {
@@ -233,7 +260,8 @@
        BeanUtils.copyProperties(inspectionMaterial, inspectDetailVo);
        /*查询检验单里面的检验项目,并封装到RawInspectVo对象中*/
        LambdaQueryWrapper<InspectionProduct> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(InspectionProduct::getInspectionMaterialId, inspectionMaterial.getId());
        queryWrapper
                .eq(InspectionProduct::getInspectionMaterialId, inspectionMaterial.getId());
        List<InspectionProduct> inspectionProducts = inspectionProductMapper.selectList(queryWrapper);
        //这里查到的设备id和检验员id要查询名称
        List<InsProductVo> insProductVos = inspectionProducts.stream().map(insProduct -> {
@@ -242,16 +270,15 @@
            BeanUtils.copyProperties(insProduct, insProductVo);
            //获取设备名(前提是如果存在)
            if (insProduct.getInstrumentId() != null) {
                String equipmentName = instrumentService.getById(insProduct.getInstrumentId()).getEquipmentName();
                insProductVo.setInstrumentName(equipmentName);
                insProductVo.setInstrumentId(insProduct.getInstrumentId());
            }
            //获取用户名(前提是如果存在)
            if (insProduct.getUserId() != null) {
                String userName = userMapper.selectById(insProduct.getUserId()).getName();
                insProductVo.setUserName(userName);
            if (insProduct.getUserProId() != null) {
                insProductVo.setUserId(insProduct.getUserProId());
            }
            //项目关联物料id
            insProductVo.setInspectionMaterialId(inspectionMaterial.getId());
            insProductVo.setId(insProduct.getId());
            return insProductVo;
        }).collect(Collectors.toList());
        inspectDetailVo.setInsProducts(insProductVos);
@@ -286,12 +313,23 @@
        return "保存成功!";
    }
    @Override
    public boolean chooseEquipment(Integer id, Integer equipmentId) {
        UpdateWrapper<InspectionProduct>inspectionProductUpdateWrapper=new UpdateWrapper<>();
        inspectionProductUpdateWrapper.lambda().set(InspectionProduct::getInstrumentId,equipmentId)
                .eq(InspectionProduct::getId,id);
        return inspectionProductMapper.update(null,inspectionProductUpdateWrapper)>0;
    }
    /*根据样品名称,样品编号,型号规格获取型号id*/
    private Integer getSpecificationId(String name, String mcode, String specification) {
        //获取物料id
        Material material = materialMapper.selectOne(Wrappers.<Material>query()
                .eq("name", name)
                .eq("code", mcode));
        if (Objects.isNull(material)){
            return null;
        }
        //获取规格名称和型号名称
        String[] split = specification.split("-");
        String stName = split[0];