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.conditions.query.QueryWrapper; 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 com.yuanchu.limslaboratory.utils.MyUtil; 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 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; @Resource ReportMapper reportMapper; /** * 查询检验申请单列表 * * @param message * @return */ @Override public IPage> selectInspectsList(Page 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.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.query() .eq("name", stName) .eq("material_id", material.getId())); //获取型号id Specifications specifications = specificationsService.getOne(Wrappers.query() .eq("name", spName) .eq("standard_id", standard.getId())); //根据型号id查询项目信息 List productList = productMapper.selectList(Wrappers.query().eq("specifications_id", specifications.getId())); ArrayList 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.query().eq("inspection_id", id)); //来料日期,供应商名称,原材料编码,原材料名称,规格型号,单位,数量 BeanUtils.copyProperties(inspectionMaterial, inspectDetailVo); /*查询检验单里面的检验项目,并封装到RawInspectVo对象中*/ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(InspectionProduct::getInspectionMaterialId, inspectionMaterial.getId()); List inspectionProducts = inspectionProductMapper.selectList(queryWrapper); //这里查到的设备id和检验员id要查询名称 List 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 boolean updateInspectsById(Integer id) { //更新检验单里面的检验状态和检验结论 InspectDetailVo inspectDetailVo = selectInspectsListById(id); Inspection inspection = Inspection.builder() .id(id) .inspectionStatus(inspectDetailVo.getInspectionStatus()) .build(); inspectionMapper.updateById(inspection); //生成报告单 Report report = new Report(); //生成报告单号 String code = MyUtil.getTimeSixNumberCode("BG","BG"); //获取检验结论 String conclusion = ""; Inspection inspection1 = inspectionMapper.selectById(id); if (inspection1.getInspectionStatus().equals(1)) { conclusion = "合格"; }else { conclusion = "不合格"; } report.setCode(code); report.setStatus(0); report.setConclusion(conclusion); report.setInspectionId(id); reportMapper.insert(report); return true; } }