package com.yuanchu.mom.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
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.mom.common.GetLook;
|
import com.yuanchu.mom.mapper.StandardProductListMapper;
|
import com.yuanchu.mom.mapper.StandardTreeMapper;
|
import com.yuanchu.mom.pojo.InsSample;
|
import com.yuanchu.mom.pojo.StandardProductList;
|
import com.yuanchu.mom.pojo.StandardTree;
|
import com.yuanchu.mom.service.StandardProductListService;
|
import com.yuanchu.mom.service.StandardProductListService2;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.concurrent.CompletableFuture;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author Administrator
|
* @description 针对表【standard_product_list(标准树下的检验项目)】的数据库操作Service实现
|
* @createDate 2024-03-05 10:33:29
|
*/
|
@Service
|
@AllArgsConstructor
|
public class StandardProductListServiceImpl extends ServiceImpl<StandardProductListMapper, StandardProductList>
|
implements StandardProductListService {
|
|
private StandardProductListMapper standardProductListMapper;
|
|
private StandardTreeMapper standardTreeMapper;
|
|
private GetLook getLook;
|
|
private StandardProductListService2 standardProductListService2;
|
|
@Override
|
public int upStandardProductList(StandardProductList list) {
|
return standardProductListMapper.updateById(list);
|
}
|
|
@Override
|
public int delStandardProduct(JSONArray list) {
|
return standardProductListMapper.deleteBatchIds(list);
|
}
|
|
@Override
|
public List<StandardProductList> selectStandardProductList(InsSample insSample) {
|
String[] models = insSample.getModel().split("-(?=[^-]*$)");//拆分最后一个【-】
|
List<StandardProductList> list = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery().eq(StandardProductList::getStandardMethodListId, insSample.getStandardMethodListId()).eq(StandardProductList::getState, 1).eq(StandardProductList::getModel, models[0]));
|
if (list.size() == 0) {
|
list = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery().eq(StandardProductList::getStandardMethodListId, insSample.getStandardMethodListId()).eq(StandardProductList::getState, 1));
|
}
|
list = list.stream().filter(a -> {
|
try {
|
if (a.getSection() != null && !Objects.equals(a.getSection(), "")) {
|
List<String> sections = JSON.parseArray(a.getSection(), String.class);
|
List<String> asks = JSON.parseArray(a.getAsk(), String.class);
|
List<String> tells = JSON.parseArray(a.getTell(), String.class);
|
List<String> manHours = JSON.parseArray(a.getManHour(), String.class);
|
List<String> prices = JSON.parseArray(a.getPrice(), String.class);
|
boolean isIf = false;
|
for (int i = 0; i < sections.size(); i++) {
|
if (sections.get(i).contains("&")) {
|
String[] split = sections.get(i).split("&");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(split[0])) > -1 && new BigDecimal(models[1]).compareTo(new BigDecimal(split[1])) < 1;
|
} else if (sections.get(i).contains("≥") || sections.get(i).contains(">=")) {
|
String param = sections.get(i).replace("≥", "").replace(">=", "");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(param)) > -1;
|
} else if (sections.get(i).contains("≤") || sections.get(i).contains("<=")) {
|
String param = sections.get(i).replace("≤", "").replace("<=", "");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(param)) < 1;
|
} else if (sections.get(i).contains(">")) {
|
String param = sections.get(i).replace(">", "");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(param)) > 0;
|
} else if (sections.get(i).contains("<")) {
|
String param = sections.get(i).replace("<", "");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(param)) < 0;
|
} else if (sections.get(i).contains("=")) {
|
String param = sections.get(i).replace("=", "");
|
isIf = new BigDecimal(models[1]).compareTo(new BigDecimal(param)) == 0;
|
}
|
if (isIf) {
|
a.setSection(sections.get(i));
|
a.setAsk(asks.get(i));
|
a.setTell(tells.get(i));
|
a.setPrice(prices.get(i));
|
a.setManHour(manHours.get(i));
|
return true;
|
}
|
}
|
return false;
|
}
|
} catch (Exception ignored) {
|
return false;
|
}
|
return true;
|
}).collect(Collectors.toList());
|
return list;
|
}
|
|
@Override
|
public Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
|
String[] trees = tree.split(" - ");
|
List<StandardProductList> list = new ArrayList<>();
|
if (trees.length == 3) {
|
List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]));
|
if (treeList.size() == 0) {
|
StandardTree standardTree = new StandardTree();
|
standardTree.setFactory(trees[0]);
|
standardTree.setLaboratory(trees[1]);
|
standardTree.setSampleType(trees[2]);
|
treeList.add(standardTree);
|
}
|
for (StandardTree standardTree : treeList) {
|
String str = tree + " - " + standardTree.getSample() + " - " + standardTree.getModel();
|
list.addAll(standardTreeMapper.selectStandardProductListByTree3("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str));
|
}
|
} else if (trees.length == 4) {
|
List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
|
if (treeList.size() == 0) {
|
StandardTree standardTree = new StandardTree();
|
standardTree.setFactory(trees[0]);
|
standardTree.setLaboratory(trees[1]);
|
standardTree.setSampleType(trees[2]);
|
standardTree.setSample(trees[2]);
|
treeList.add(standardTree);
|
}
|
for (StandardTree standardTree : treeList) {
|
String str = tree + " - " + standardTree.getModel();
|
list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str));
|
list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", standardTree.getSample(), standardTree.getModel(), str));
|
}
|
} else {
|
list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", trees[3], trees[4], tree));
|
list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", trees[3], trees[4], tree));
|
}
|
for (StandardProductList productList : list) {
|
productList.setId(IdWorker.getId());
|
}
|
List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery().eq(StandardProductList::getStandardMethodListId, id).like(StandardProductList::getTree, tree));
|
for (StandardProductList sp : standardProductLists) {
|
for (StandardProductList pl : list) {
|
if (Objects.equals(sp.getInspectionItem(), pl.getInspectionItem())
|
&& Objects.equals(sp.getInspectionItemSubclass() == null ? "" : sp.getInspectionItemSubclass(), pl.getInspectionItemSubclass() == null ? "" : pl.getInspectionItemSubclass())
|
&& Objects.equals(sp.getModel(), pl.getModel())
|
&& Objects.equals(sp.getStructureItemParameterId(), pl.getStructureItemParameterId())) {
|
pl.setId(sp.getId());
|
if (sp.getState() != null && !sp.getState().equals("")) {
|
pl.setState(sp.getState());
|
} else {
|
pl.setState(id == 0 ? 1 : 0);
|
}
|
pl.setMethodS(sp.getMethodS());
|
if (sp.getAsk() != null && !sp.getAsk().equals("")) {
|
pl.setAsk(sp.getAsk());
|
}
|
if (sp.getTell() != null && !sp.getTell().equals("")) {
|
pl.setTell(sp.getTell());
|
}
|
if (sp.getPrice() != null && !sp.getPrice().equals("")) {
|
pl.setPrice(sp.getPrice());
|
}
|
if (sp.getManHour() != null && !sp.getManHour().equals("")) {
|
pl.setManHour(sp.getManHour());
|
}
|
if (sp.getSection() != null && !sp.getSection().equals("")) {
|
pl.setSection(sp.getSection());
|
}
|
if (sp.getTemplateId() != null && !sp.getTemplateId().equals("")) {
|
pl.setTemplateId(sp.getTemplateId());
|
}
|
if(sp.getTree() != null && !sp.getTree().equals("")){
|
pl.setTree(sp.getTree());
|
}
|
break;
|
}
|
}
|
}
|
if (page == 1) {
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
CompletableFuture.supplyAsync(() -> {
|
standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate().eq(StandardProductList::getStandardMethodListId, id).like(StandardProductList::getTree, tree));
|
standardProductListService2.saveBatch(list.stream().map(a -> {
|
a.setFactory(trees[0]);
|
a.setLaboratory(trees[1]);
|
a.setSampleType(trees[2]);
|
a.setCreateUser(userId);
|
a.setUpdateUser(userId);
|
a.setStandardMethodListId(id);
|
return a;
|
}).collect(Collectors.toList()));
|
return null;
|
}).thenAccept(res -> {
|
}).exceptionally(e -> {
|
e.printStackTrace();
|
return null;
|
});
|
}
|
Map<String, Object> map = new HashMap<>();
|
try {
|
map.put("productList", list.subList((page - 1) * 50, page * 50));
|
} catch (IndexOutOfBoundsException e) {
|
map.put("productList", list.subList((page - 1) * 50, list.size()));
|
}
|
map.put("total", list.size());
|
return map;
|
}
|
|
@Override
|
public IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
|
IPage<StandardProductList> iPage = new Page<>();
|
iPage.setSize(100);
|
iPage.setCurrent(page);
|
return standardProductListMapper.standardProductListIPage(id, tree, iPage, laboratory, item, items);
|
}
|
|
@Override
|
public Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree) {
|
HashMap<String, List<?>> map = new HashMap<>();
|
map.put("item", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
|
.eq(StandardProductList::getStandardMethodListId, id)
|
.like(StandardProductList::getTree, tree)
|
.select(StandardProductList::getInspectionItem)
|
.groupBy(StandardProductList::getInspectionItem)));
|
map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
|
.eq(StandardProductList::getStandardMethodListId, id)
|
.like(StandardProductList::getTree, tree)
|
.select(StandardProductList::getInspectionItemSubclass)
|
.groupBy(StandardProductList::getInspectionItemSubclass)));
|
return map;
|
}
|
}
|