package com.yuanchu.mom.service.impl;
|
|
import cn.hutool.poi.excel.ExcelUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.yuanchu.mom.dto.*;
|
import com.yuanchu.mom.exception.ErrorException;
|
import com.yuanchu.mom.mapper.StandardProductListMapper;
|
import com.yuanchu.mom.mapper.StandardTreeMapper;
|
import com.yuanchu.mom.pojo.*;
|
import com.yuanchu.mom.service.*;
|
import lombok.AllArgsConstructor;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author Administrator
|
* @description 针对表【standard_tree(标准树)】的数据库操作Service实现
|
* @createDate 2024-03-01 15:06:44
|
*/
|
@Service
|
@AllArgsConstructor
|
public class StandardTreeServiceImpl extends ServiceImpl<StandardTreeMapper, StandardTree>
|
implements StandardTreeService {
|
|
private StandardTreeMapper standardTreeMapper;
|
|
private StandardMethodListService standardMethodListService;
|
|
private StandardProductListMapper standardProductListMapper;
|
|
private StandardProductListService standardProductListService;
|
|
private StandardTemplateService standardTemplateService;
|
|
private EnumService enumService;
|
|
@Override
|
public List<FactoryDto> selectStandardTreeList() {
|
List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeList();
|
for (FactoryDto factoryDto : factoryDtos) {
|
for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
|
for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
|
if (sampleTypeDto.getChildren().size() == 0) {
|
sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
|
}
|
}
|
}
|
}
|
return factoryDtos;
|
}
|
|
@Override
|
public List<SampleTypeDto> selectStandardTreeList2() {
|
List<SampleTypeDto> sampleTypeDtos= new ArrayList<>();
|
List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeList();
|
for (FactoryDto factoryDto : factoryDtos) {
|
for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
|
for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
|
if (sampleTypeDto.getChildren().size() == 0) {
|
sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
|
}
|
sampleTypeDtos.add(sampleTypeDto);
|
}
|
}
|
}
|
return sampleTypeDtos;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int addStandardTree(StandardTree standardTree) {
|
StandardTree tree = standardTreeMapper.selectOne(Wrappers.<StandardTree>lambdaQuery()
|
.eq(StandardTree::getFactory, standardTree.getFactory())
|
.eq(StandardTree::getLaboratory, standardTree.getLaboratory())
|
.eq(StandardTree::getSampleType, standardTree.getSampleType())
|
.eq(StandardTree::getSample, standardTree.getSample())
|
.eq(StandardTree::getModel, standardTree.getModel()));
|
if (tree != null) {
|
throw new ErrorException("该型号已存在");
|
}
|
return standardTreeMapper.insert(standardTree);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int delStandardTree(String tree) {
|
String[] trees = tree.split(" - ");
|
switch (trees.length) {
|
case 5:
|
if (trees[3] == null) {
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).isNull(StandardTree::getSample).eq(StandardTree::getModel, trees[4]));
|
} else {
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]).eq(StandardTree::getModel, trees[4]));
|
}
|
break;
|
/*case 4:
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
|
break;
|
case 3:
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
|
break;
|
case 2:
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]));
|
break;
|
case 1:
|
standardTreeMapper.delete(Wrappers.<StandardTree>lambdaUpdate().eq(StandardTree::getFactory, trees[0]));
|
break;*/
|
}
|
return 1;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int addStandardProduct(String ids, String tree) {
|
String[] trees = tree.split(" - ");
|
JSONArray jsonArray = JSON.parseArray(ids);
|
for (Object o : jsonArray) {
|
StandardProductList standardProductList = standardTreeMapper.selectStandardProductById(Integer.parseInt("" + o));
|
standardProductList.setFactory(trees[0]);
|
try {
|
standardProductList.setLaboratory(trees[1]);
|
} catch (Exception e) {
|
}
|
try {
|
standardProductList.setSampleType(trees[2]);
|
} catch (Exception e) {
|
}
|
try {
|
standardProductList.setSample(trees[3]);
|
} catch (Exception e) {
|
}
|
try {
|
standardProductList.setModel(trees[4]);
|
} catch (Exception e) {
|
}
|
standardProductListMapper.insert(standardProductList);
|
}
|
return 1;
|
}
|
|
@Override
|
public List<SampleTypeDto> getStandardTree2() {
|
return standardTreeMapper.getStandardTree2();
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int upStandardProducts(Map<String, Object> product) {
|
List<Integer> ids = JSON.parseArray(product.get("ids") + "");
|
StandardProductList productList = JSON.parseObject(JSON.toJSONString(product.get("standardProductList")), StandardProductList.class);
|
if (productList.getMethodS() != null) {
|
standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids).like(StandardProductList::getMethod, productList.getMethodS()));
|
return 1;
|
}
|
standardProductListMapper.update(productList, Wrappers.<StandardProductList>lambdaUpdate().in(StandardProductList::getId, ids));
|
return 1;
|
}
|
|
@Override
|
public List<StandardTree> getStandTreeBySampleType(String laboratory, String sampleType) {
|
return standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery()
|
.eq(StandardTree::getLaboratory, laboratory)
|
.eq(StandardTree::getSampleType, sampleType)
|
.select(StandardTree::getModel, StandardTree::getSample));
|
}
|
|
/**
|
* 河口检测中心导入
|
* @param file
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void inExcelOfTree(MultipartFile file) {
|
InputStream inputStream;
|
try {
|
inputStream = file.getInputStream();
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
List<StandardProductList> lists = new ArrayList<>();
|
AtomicReference<String> laboratory = new AtomicReference<>();
|
ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
|
StandardProductList str = new StandardProductList();
|
if (i == 0 && l == 1) {
|
laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
|
if (laboratory.get() == null) {
|
throw new ErrorException("检验对象不存在:" + list.get(1));
|
}
|
}
|
if (i == 0 && l >= 1) {
|
Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
|
if (standardMethodId == null) {
|
throw new ErrorException("标准编号不存在:" + list.get(0));
|
}
|
str.setStandardMethodListId(standardMethodId);
|
str.setSampleType(list.get(1) + "");
|
if (list.get(2) != null) {
|
String sample = baseMapper.selSample(list.get(2) + "");
|
if (sample == null) {
|
throw new ErrorException("样品不存在:" + list.get(2));
|
}
|
str.setSample(list.get(2) + "");
|
} else {
|
str.setSample(null);
|
}
|
if (list.get(3) != null) {
|
str.setModel(list.get(3) + "");
|
Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
|
.eq(StandardTree::getModel, str.getModel())
|
.eq(StandardTree::getSampleType, list.get(1) + ""));
|
if (aLong == 0) {
|
StandardTree standardTree = new StandardTree();
|
standardTree.setFactory("中天科技检测中心");
|
standardTree.setLaboratory(laboratory.get());
|
standardTree.setSampleType(str.getSampleType());
|
standardTree.setSample(str.getSample());
|
standardTree.setModel(str.getModel());
|
standardTreeMapper.insert(standardTree);
|
}
|
} else {
|
str.setModel(null);
|
}
|
str.setInspectionItem(list.get(4) + "");
|
if (list.get(6) == null) {
|
str.setInspectionItemSubclass("");
|
} else {
|
str.setInspectionItemSubclass(list.get(6).toString());
|
}
|
StandardProductList db_str;
|
try {
|
db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
|
} catch (Exception e) {
|
throw new ErrorException("重复查询:" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
|
}
|
if (ObjectUtils.isNotEmpty(db_str)) {
|
str.setId(db_str.getId());
|
str.setStructureItemParameterId(db_str.getStructureItemParameterId());
|
}
|
if (list.get(8) != null) {
|
str.setMethodS(list.get(8) + "");
|
}
|
|
if (list.get(11) == null) {
|
str.setTell(null);
|
} else {
|
str.setTell(list.get(11).toString());
|
}
|
|
if (list.get(12) == null) {
|
str.setAsk(null);
|
} else {
|
str.setAsk(list.get(12).toString());
|
}
|
|
if (list.get(13) == null) {
|
str.setPrice(null);
|
} else {
|
str.setPrice((list.get(13).toString()));
|
}
|
|
if (list.get(14) == null) {
|
str.setManHour(null);
|
} else {
|
str.setManHour(list.get(14).toString());
|
}
|
|
StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(21)));
|
if (standTempIdByName != null) {
|
str.setTemplateId(standTempIdByName.getId());
|
} else {
|
throw new ErrorException("模板不存在:" + list.get(21));
|
}
|
str.setFactory("中天科技检测中心");
|
str.setLaboratory(laboratory.get());
|
str.setState(1);
|
str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
|
try {
|
str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
|
} catch (Exception e) {
|
str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
|
}
|
if (str.getStructureItemParameterId() == null) {
|
throw new ErrorException("检验项目不存在:" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
|
}
|
lists.add(str);
|
}
|
});
|
lists.forEach(a -> {
|
if (a.getId() != null) {
|
standardProductListMapper.updateById(a);
|
} else {
|
standardProductListMapper.insert(a);
|
}
|
});
|
}
|
|
@Override
|
public void importWorkstationExcel(MultipartFile file) {
|
InputStream inputStream;
|
try {
|
inputStream = file.getInputStream();
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
List<StandardProductList> lists = new ArrayList<>();
|
AtomicReference<String> laboratory = new AtomicReference<>();
|
ExcelUtil.readBySax(inputStream, 0, (i, l, list) -> {
|
StandardProductList str = new StandardProductList();
|
if (i == 0 && l == 1) {
|
laboratory.set(standardTreeMapper.getLaboratory(list.get(1) + ""));
|
if (laboratory.get() == null) {
|
throw new ErrorException("检验对象不存在:" + list.get(1));
|
}
|
}
|
if (i == 0 && l >= 1) {
|
Integer standardMethodId = standardMethodListService.getStandardMethodId(list.get(0) + "");
|
if (standardMethodId == null) {
|
throw new ErrorException("标准编号不存在:" + list.get(0));
|
}
|
str.setStandardMethodListId(standardMethodId);
|
str.setSampleType(list.get(1) + "");
|
if (list.get(2) != null) {
|
String sample = baseMapper.selSample(list.get(2) + "");
|
if (sample == null) {
|
throw new ErrorException("样品不存在:" + list.get(2));
|
}
|
str.setSample(list.get(2) + "");
|
} else {
|
str.setSample(null);
|
}
|
if (list.get(3) != null) {
|
str.setModel(list.get(3) + "");
|
Long aLong = standardTreeMapper.selectCount(Wrappers.<StandardTree>lambdaQuery()
|
.eq(StandardTree::getModel, str.getModel())
|
.eq(StandardTree::getSampleType, list.get(1) + ""));
|
if (aLong == 0) {
|
StandardTree standardTree = new StandardTree();
|
standardTree.setFactory("中天科技检测中心");
|
standardTree.setLaboratory(laboratory.get());
|
standardTree.setSampleType(str.getSampleType());
|
standardTree.setSample(str.getSample());
|
standardTree.setModel(str.getModel());
|
standardTreeMapper.insert(standardTree);
|
}
|
} else {
|
str.setModel(null);
|
}
|
str.setInspectionItemClass(list.get(4).toString());
|
str.setInspectionItemClassEn(list.get(5).toString());
|
// 开始加2
|
str.setInspectionItem(list.get(6) + "");
|
if (list.get(8) == null) {
|
str.setInspectionItemSubclass("");
|
} else {
|
str.setInspectionItemSubclass(list.get(8).toString());
|
}
|
StandardProductList db_str;
|
try {
|
db_str = standardProductListMapper.getOne(str.getStandardMethodListId(), str.getInspectionItem(), str.getSample(), str.getInspectionItemSubclass(), str.getModel(), str.getInspectionItemClass());
|
} catch (Exception e) {
|
throw new ErrorException("重复查询:" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
|
}
|
if (ObjectUtils.isNotEmpty(db_str)) {
|
str.setId(db_str.getId());
|
str.setStructureItemParameterId(db_str.getStructureItemParameterId());
|
}
|
if (list.get(10) != null) {
|
str.setMethodS(list.get(10) + "");
|
}
|
if (list.get(13) == null) {
|
str.setTell(null);
|
} else {
|
str.setTell(list.get(13).toString());
|
}
|
|
if (list.get(14) == null) {
|
str.setAsk(null);
|
} else {
|
str.setAsk(list.get(14).toString());
|
}
|
|
if (list.get(15) == null) {
|
str.setPrice(null);
|
} else {
|
str.setPrice((list.get(15).toString()));
|
}
|
|
if (list.get(16) == null) {
|
str.setManHour(null);
|
} else {
|
str.setManHour(list.get(16).toString());
|
}
|
|
StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list.get(23)));
|
if (standTempIdByName != null) {
|
str.setTemplateId(standTempIdByName.getId());
|
} else {
|
throw new ErrorException("模板不存在:" + list.get(23));
|
}
|
str.setFactory("中天科技检测中心");
|
str.setLaboratory(laboratory.get());
|
str.setState(1);
|
str.setTree(str.getFactory() + " - " + str.getLaboratory() + " - " + str.getSampleType() + " - " + str.getSample() + " - " + (str.getModel() == null ? "" : str.getModel()));
|
try {
|
str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
|
} catch (Exception e) {
|
str.setStructureItemParameterId(standardTreeMapper.getStructureItemParameterId("\"" + str.getSampleType() + "\",\"" + str.getSample() + "\"", str.getInspectionItem(), str.getInspectionItemSubclass(), str.getInspectionItemClass()));
|
}
|
if (str.getStructureItemParameterId() == null) {
|
throw new ErrorException("检验项目不存在:" + str.getInspectionItem() + " " + str.getInspectionItemSubclass());
|
}
|
lists.add(str);
|
}
|
});
|
lists.forEach(a -> {
|
if (a.getId() != null) {
|
standardProductListMapper.updateById(a);
|
} else {
|
standardProductListMapper.insert(a);
|
}
|
});
|
}
|
|
//导出
|
@Override
|
public void exportStandTree(HttpServletResponse response) throws IOException {
|
//查询标准库数据,按照产品大类分类
|
List<standardTreeDto> standardTreeDtos = standardTreeMapper.exportStandTree();
|
Map<String, List<standardTreeDto>> collect = standardTreeDtos.stream().collect(Collectors.groupingBy(standardTreeDto -> standardTreeDto.getSampleType()));
|
List<Map.Entry<String, List<standardTreeDto>>> entryList = new ArrayList<>(collect.entrySet());
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("UTF-8");
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
String fileName = URLEncoder.encode("标准库导出", "UTF-8");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
|
try {
|
// 新建ExcelWriter
|
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
|
for (int i = 0; i < collect.size(); i++) {
|
Map.Entry<String, List<standardTreeDto>> entry = entryList.get(i);
|
WriteSheet mainSheet = EasyExcel.writerSheet(i, entry.getKey()+"标准库导出").head(standardTreeDto.class).build();
|
excelWriter.write(entry.getValue(), mainSheet);
|
}
|
// 关闭流
|
excelWriter.finish();
|
} catch (IOException e) {
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
@Override
|
public void resetTreeOfPrice(String tree, Integer standardId) {
|
standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getPrice, null));
|
}
|
|
@Override
|
public void resetTreeOfHour(String tree, Integer standardId) {
|
standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId).set(StandardProductList::getManHour, null));
|
}
|
|
@Override
|
public void resetTreeOfAsk(String tree, Integer standardId) {
|
standardProductListMapper.update(null, Wrappers.<StandardProductList>lambdaUpdate().like(StandardProductList::getTree, tree).eq(StandardProductList::getStandardMethodListId, standardId)
|
.set(StandardProductList::getAsk, null)
|
.set(StandardProductList::getTell, null)
|
.set(StandardProductList::getSection, null)
|
.set(StandardProductList::getPrice, null)
|
.set(StandardProductList::getManHour, null));
|
}
|
}
|