package com.ruoyi.basic.service.impl; import cn.hutool.json.JSONUtil; import cn.hutool.poi.excel.ExcelUtil; 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.ruoyi.common.utils.QueryWrappers; import com.ruoyi.basic.mapper.StandardMethodMapper; import com.ruoyi.basic.mapper.StandardProductListMapper; import com.ruoyi.basic.mapper.StructureItemParameterMapper; import com.ruoyi.basic.pojo.StandardMethod; import com.ruoyi.basic.pojo.StandardProductList; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.basic.service.StandardMethodService; import com.ruoyi.basic.service.StandardProductListService; import com.ruoyi.basic.service.StructureItemParameterService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.*; import java.util.concurrent.CompletableFuture; /** * @author Administrator * @description 针对表【standard_method(标准方法)】的数据库操作Service实现 * @createDate 2024-03-03 19:21:41 */ @Service @AllArgsConstructor public class StandardMethodServiceImpl extends ServiceImpl implements StandardMethodService { private StandardMethodMapper standardMethodMapper; StandardProductListMapper standardProductListMapper; StandardProductListService standardProductListService; StructureItemParameterMapper structureItemParameterMapper; StructureItemParameterService structureItemParameterService; @Override public IPage selectStandardMethodList(Page page, StandardMethod standardMethod) { return standardMethodMapper.selectStandardMethodList(page, QueryWrappers.queryWrappers(standardMethod)); } @Override public List selectStandardMethods() { return standardMethodMapper.selectList(Wrappers.lambdaQuery().select(StandardMethod::getId, StandardMethod::getCode, StandardMethod::getName).ne(StandardMethod::getId, 0)); } @Override public int addStandardMethod(StandardMethod standardMethod) { int insert = standardMethodMapper.insert(standardMethod); return insert; } @Override public int delStandardMethod(Integer id) { int i = standardMethodMapper.deleteById(id); return i; } @Override public int upStandardMethod(StandardMethod standardMethod) { StandardMethod oldStandardMethod = standardMethodMapper.selectById(standardMethod.getId()); if (!oldStandardMethod.getCode().equals(standardMethod.getCode())) { CompletableFuture.supplyAsync(() -> replaceMethod(oldStandardMethod.getCode(), standardMethod.getCode())); } int i = standardMethodMapper.updateById(standardMethod); return i; } //编辑method后全部替换 public String replaceMethod(String oldCode, String code) { //查询StandardProductList中所有Method如果包含之前的则替换 List standardProductLists = standardProductListMapper.selectList(null); for (StandardProductList standardProductList : standardProductLists) { if (standardProductList.getMethod().contains(oldCode)) { String[] split = standardProductList.getMethod().split(","); String a = null; for (int i = 0; i < split.length; i++) { String methodName = split[i].substring(1, split[i].length() - 1); if (i == 0) { methodName = split[i].substring(2, split[i].length() - 1); } else if (i == split.length - 1) { methodName = split[i].substring(1, split[i].length() - 2); } if (methodName.equals(oldCode)) { methodName = code; } a += "\"" + methodName + "\","; } String method = "[\"" + a.substring(0, a.length() - 1) + "\"]"; standardProductList.setMethod(method); } } standardProductListService.updateBatchById(standardProductLists); //查询StructureItemParameter中所有Method如果包含之前的则替换 List structureItemParameters = structureItemParameterMapper.selectList(null); for (StructureItemParameter structureItemParameter : structureItemParameters) { if (structureItemParameter.getMethod().contains(oldCode)) { String[] split = structureItemParameter.getMethod().split(","); String a = null; for (int i = 0; i < split.length; i++) { String methodName = split[i].substring(1, split[i].length() - 1); if (i == 0) { methodName = split[i].substring(2, split[i].length() - 1); } else if (i == split.length - 1) { methodName = split[i].substring(1, split[i].length() - 2); } if (methodName.equals(oldCode)) { methodName = code; } a += "\"" + methodName + "\","; } String method = "[\"" + a.substring(0, a.length() - 1) + "\"]"; structureItemParameter.setMethod(method); } } structureItemParameterService.updateBatchById(structureItemParameters); return "替换完毕!"; } @Transactional(rollbackFor = Exception.class) @Override public void inputExcel(MultipartFile file) throws IOException { // 存储检测对象List List structureTestObjectIdList = new ArrayList<>(); List result = new ArrayList<>(); ExcelUtil.readBySax(file.getInputStream(), 0, (i, l, list) -> { // 去除第一行表头 if (l == 0) { return; } // 存储唯一检测对象 if (!structureTestObjectIdList.contains(list.get(2))) { structureTestObjectIdList.add(list.get(2)); } StandardMethod standardMethod = formatData(list); result.add(standardMethod); }); addStructureTest(structureTestObjectIdList, result); } // 格式化数据 public StandardMethod formatData(List list) { StandardMethod standardMethod = new StandardMethod(); standardMethod.setField(list.get(1).toString()); // 造格式 List> structureTestObjectId = new ArrayList<>(); if (ObjectUtils.isEmpty(list.get(3))) { structureTestObjectId.add(Arrays.asList(list.get(2))); } else { structureTestObjectId.add(Arrays.asList(list.get(2), list.get(3))); } standardMethod.setStructureTestObjectId(JSONUtil.toJsonStr(structureTestObjectId)); standardMethod.setCode(list.get(4).toString()); standardMethod.setName(list.get(5).toString()); standardMethod.setNameEn(list.get(6).toString()); if (!Objects.equals(list.get(7), null)) { standardMethod.setRemark(list.get(7).toString()); } standardMethod.setQualificationId(list.get(8).toString()); if (ObjectUtils.isNotEmpty(list.get(9))) { if (list.get(9).equals("是")) { standardMethod.setIsProduct(1); } else if (list.get(9).equals("否")) { standardMethod.setIsProduct(0); } } if (ObjectUtils.isNotEmpty(list.get(10))) { if (list.get(10).equals("是")) { standardMethod.setIsUse(1); } else if (list.get(9).equals("否")) { standardMethod.setIsUse(0); } } return standardMethod; } // 新增数据 public void addStructureTest(List structureTestObjectIdList, List standardMethodList) { List updateList = new ArrayList<>(); List deleteListId = new ArrayList<>(); List addList = new ArrayList<>(); if (!structureTestObjectIdList.isEmpty()) { // 循环excel里面的分组 structureTestObjectIdList.forEach(j -> { // 以excel中的组名查询数据库中的分组 List standardMethods = baseMapper.selectList(Wrappers.lambdaQuery() .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\"")); // 将结果循环匹配 for (int i = 0; i < standardMethods.size(); i++) { boolean isExistence = false; for (int i1 = 0; i1 < standardMethodList.size(); i1++) { // 更新 if (standardMethods.get(i).getStructureTestObjectId().equals(standardMethodList.get(i1).getStructureTestObjectId()) && standardMethods.get(i).getCode().equals(standardMethodList.get(i1).getCode()) && standardMethods.get(i).getField().equals(standardMethodList.get(i1).getField())) { // 给excel数据赋值id做更新 standardMethodList.get(i1).setId(standardMethods.get(i).getId()); // 更新 updateList.add(standardMethodList.get(i1)); isExistence = true; break; } } // 删除 if (!isExistence) { deleteListId.add(standardMethods.get(i).getId()); } } for (int i = 0; i < standardMethodList.size(); i++) { if (standardMethodList.get(i).getStructureTestObjectId().contains("\"" + j + "\"")) { boolean isExistence = false; for (int i1 = 0; i1 < standardMethods.size(); i1++) { if (standardMethods.get(i1).getStructureTestObjectId().equals(standardMethodList.get(i).getStructureTestObjectId()) && standardMethods.get(i1).getCode().equals(standardMethodList.get(i).getCode()) && standardMethods.get(i1).getField().equals(standardMethodList.get(i).getField())) { isExistence = true; break; } } // 新增 if (!isExistence) { addList.add(standardMethodList.get(i)); } } } }); } if (!addList.isEmpty()) { // 新增 baseMapper.insertBatchSomeColumn(addList); } if (!deleteListId.isEmpty()) { // 删除 baseMapper.deleteBatchIds(deleteListId); } if (!updateList.isEmpty()) { // 更新 updateList.forEach(i -> { baseMapper.updateById(i); }); } } }