package com.yuanchu.mom.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.dto.FactoryDto; import com.yuanchu.mom.mapper.StandardMethodListMapper; import com.yuanchu.mom.mapper.StandardProductListMapper; import com.yuanchu.mom.pojo.StandardMethodList; import com.yuanchu.mom.pojo.StandardProductList; import com.yuanchu.mom.pojo.StandardTree; import com.yuanchu.mom.service.StandardMethodListService; import com.yuanchu.mom.service.StandardProductListService; import com.yuanchu.mom.service.StandardTreeService; import com.yuanchu.mom.mapper.StandardTreeMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.CompletableFuture; /** * @author Administrator * @description 针对表【standard_tree(标准树)】的数据库操作Service实现 * @createDate 2024-03-01 15:06:44 */ @Service @AllArgsConstructor public class StandardTreeServiceImpl extends ServiceImpl implements StandardTreeService { private StandardTreeMapper standardTreeMapper; private StandardMethodListMapper standardMethodListMapper; private StandardMethodListService standardMethodListService; private StandardProductListMapper standardProductListMapper; private StandardProductListService standardProductListService; private GetLook getLook; @Override public List selectStandardTreeList() { return standardTreeMapper.selectStandardTreeList(); } @Override @Transactional(rollbackFor = Exception.class) public int addStandardTree(StandardTree standardTree) { List productList = standardTreeMapper.getStandardProductListBySample(standardTree.getSampleType()); List methodList = standardTreeMapper.getStandardMethodListBySample(standardTree.getSampleType()); for (StandardMethodList standardMethod : methodList) { standardMethod.setFactory(standardTree.getFactory()); standardMethod.setLaboratory(standardTree.getLaboratory()); standardMethod.setSampleType(standardTree.getSampleType()); standardMethod.setSample(standardTree.getSample()); standardMethod.setModel(standardTree.getModel()); standardMethodListMapper.insert(standardMethod); for (StandardProductList standardProductList : productList) { standardProductList.setFactory(standardTree.getFactory()); standardProductList.setLaboratory(standardTree.getLaboratory()); standardProductList.setSampleType(standardTree.getSampleType()); standardProductList.setSample(standardTree.getSample()); standardProductList.setModel(standardTree.getModel()); standardProductList.setStandardMethodListId(standardMethod.getId()); standardProductList.setState(0); standardProductList.setId(null); standardProductList.setCreateUser(null); standardProductList.setCreateTime(null); standardProductList.setUpdateUser(null); standardProductList.setUpdateTime(null); standardProductListMapper.insert(standardProductList); } } return standardTreeMapper.insert(standardTree); } @Override @Transactional(rollbackFor = Exception.class) public int delStandardTree(String tree) { String[] trees = tree.split(" - "); switch (trees.length) { case 5: standardTreeMapper.delete(Wrappers.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.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.lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2])); break; case 2: standardTreeMapper.delete(Wrappers.lambdaUpdate().eq(StandardTree::getFactory, trees[0]).eq(StandardTree::getLaboratory, trees[1])); break; case 1: standardTreeMapper.delete(Wrappers.lambdaUpdate().eq(StandardTree::getFactory, trees[0])); break; } Map> listMap = standardMethodListService.selectsStandardMethodByFLSSM2(tree); if (listMap.get("standardMethodList").size() != 0) { for (Object o : listMap.get("standardMethodList")) { JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(o)); List list = standardProductListService.selectStandardProductListByMethodId((Integer) jsonObject.get("id")); if (list.size() != 0) { standardProductListMapper.deleteBatchIds(list); } } standardMethodListMapper.deleteBatchIds(listMap.get("standardMethodList")); } 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 @Transactional(rollbackFor = Exception.class) public void reTreeBySampleType(String sampleType) { Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); CompletableFuture.supplyAsync(() -> { //根据样品名称查询所有检测项目参数(能力) List productList = standardTreeMapper.getStandardProductListBySample(sampleType); List productList1 = JSON.parseArray(JSON.toJSONString(productList), StandardProductList.class); List methodList = standardTreeMapper.getStandardMethodListBySample(sampleType); List methodList1 = JSON.parseArray(JSON.toJSONString(methodList), StandardMethodList.class); List treeList = standardTreeMapper.selectList(Wrappers.lambdaQuery().eq(StandardTree::getSampleType, sampleType)); for (StandardTree tree : treeList) { String treeStr = tree.getFactory() + " - " + tree.getLaboratory() + " - " + tree.getSampleType() + (tree.getSample() == null ? "" : " - " + tree.getSample()) + (tree.getModel() == null ? "" : " - " + tree.getModel()); List standardMethodList = JSON.parseArray(JSON.toJSONString(standardMethodListService.selectsStandardMethodByFLSSM(treeStr).get("standardMethodList")), StandardMethodList.class); for (StandardMethodList sl1 : standardMethodList) { int count1 = 0; for (StandardMethodList sl2 : methodList) { if (sl1.getCode().equals(sl2.getCode())) { sl1.setName(sl2.getName()); sl1.setRemark(sl2.getRemark()); sl2.setId(sl1.getId()); standardMethodListMapper.updateById(sl1); //通过检验标准id查询检验项目(标准库) List standardProductList = standardProductListService.selectStandardProductListByMethodId(sl1.getId()); for (StandardProductList pl1 : standardProductList) { int count2 = 0; for (StandardProductList pl2 : productList) { if (Objects.equals(pl1.getInspectionItemSubclass(), pl2.getInspectionItemSubclass()) && Objects.equals(pl1.getInspectionItem(), pl2.getInspectionItem())) { pl2.setUpdateUser(userId); pl2.setUpdateTime(LocalDateTime.now()); pl2.setId(pl1.getId()); pl2.setSample(tree.getSample()); pl2.setDic(pl1.getDic()); //如果标准库里面的要求有值则不更新,要求为null则同步更新 if (ObjectUtils.isNotEmpty(pl1.getAsk())){ pl2.setAsk(null); } if (ObjectUtils.isNotEmpty(pl1.getTell())){ pl2.setTell(null); } standardProductListMapper.updateById(pl2); break; } else { count2++; } } if (count2 == productList.size()) { standardProductListMapper.delete(Wrappers.lambdaUpdate().eq(StandardProductList::getStandardMethodListId, sl1.getId())); } } for (StandardProductList pl2 : productList) { if (pl2.getId() == null) { pl2.setFactory(tree.getFactory()); pl2.setLaboratory(tree.getLaboratory()); pl2.setSampleType(tree.getSampleType()); pl2.setSample(tree.getSample()); pl2.setModel(tree.getModel()); pl2.setStandardMethodListId(sl1.getId()); pl2.setState(0); pl2.setId(null); pl2.setCreateUser(null); pl2.setCreateTime(null); pl2.setUpdateUser(null); pl2.setUpdateTime(null); standardProductListMapper.insert(pl2); } } break; } else { count1++; } } if (count1 == methodList.size()) { standardMethodListMapper.deleteById(sl1); standardProductListMapper.delete(Wrappers.lambdaUpdate().eq(StandardProductList::getStandardMethodListId, sl1.getId())); } } for (StandardMethodList sl2 : methodList) { if (sl2.getId() == null) { sl2.setFactory(tree.getFactory()); sl2.setLaboratory(tree.getLaboratory()); sl2.setSampleType(tree.getSampleType()); sl2.setSample(tree.getSample()); sl2.setModel(tree.getModel()); standardMethodListMapper.insert(sl2); for (StandardProductList standardProductList : productList) { standardProductList.setFactory(tree.getFactory()); standardProductList.setLaboratory(tree.getLaboratory()); standardProductList.setSampleType(tree.getSampleType()); standardProductList.setSample(tree.getSample()); standardProductList.setModel(tree.getModel()); standardProductList.setStandardMethodListId(sl2.getId()); standardProductList.setState(0); standardProductList.setId(null); standardProductList.setCreateUser(null); standardProductList.setCreateTime(null); standardProductList.setUpdateUser(null); standardProductList.setUpdateTime(null); standardProductListMapper.insert(standardProductList); } } } methodList = JSON.parseArray(JSON.toJSONString(methodList1), StandardMethodList.class); productList = JSON.parseArray(JSON.toJSONString(productList1), StandardProductList.class); } return 1; }).thenAccept(res -> { }).exceptionally(e -> { e.printStackTrace(); return null; }); } }