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.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.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
|
Integer specificationId = getSpecificationId(inspectionVo.getName(), inspectionVo.getMcode(), inspectionVo.getSpecifications());
|
//如果试验项目字段不为空
|
if (ObjectUtils.isNotEmpty(inspectionVo.getExperiment())) {
|
//获取试验项目信息(结构,导线外径)
|
List<String> experiments = Arrays.stream(inspectionVo.getExperiment().split(",")).collect(Collectors.toList());
|
//根据型号id和项目信息查询项目信息
|
List<Product> products = new ArrayList<>();
|
for (String experiment : experiments) {
|
List<Product> productList1 = productMapper.selectList(Wrappers.<Product>query()
|
.eq("specifications_id", specificationId)
|
.eq("father", experiment));
|
if (ObjectUtils.isEmpty(productList1)) {
|
Product product = productMapper.selectOne(Wrappers.<Product>query()
|
.eq("specifications_id", specificationId)
|
.isNull("father")
|
.eq("name", experiment));
|
products.add(product);
|
} else products.addAll(productList1);
|
}
|
|
//将查询的项目信息构建成检验项目
|
ArrayList<InspectionProduct> list = new ArrayList<>();
|
for (Product product : products) {
|
InspectionProduct rawInsProduct = InspectionProduct.builder()
|
.name(product.getName())
|
.unit(product.getUnit())
|
.required(product.getRequired())
|
.internal(product.getInternal())
|
.inspectionMaterialId(inspectionMaterial.getId())
|
.build();
|
list.add(rawInsProduct);
|
}
|
|
//检验项目批量添加
|
inspectionProductService.saveBatch(list);
|
return inspection.getId();
|
}
|
//todo:未完
|
return null;
|
}
|
|
//根据检验单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 "保存成功!";
|
}
|
|
|
//新增检验单-->选择检验项目版本
|
@Override
|
public List<Map<String, Object>> chooseVer(String name, String mcode, String specifications) {
|
Integer specificationId = getSpecificationId(name, mcode, specifications);
|
return null;
|
}
|
|
|
/*根据样品名称,样品编号,型号规格获取型号id*/
|
private Integer getSpecificationId(String name, String mcode, String specification) {
|
//获取物料id
|
Material material = materialMapper.selectOne(Wrappers.<Material>query()
|
.eq("name", name)
|
.eq("code", mcode));
|
//获取规格名称和型号名称
|
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()));
|
return specifications.getId();
|
}
|
|
}
|