package com.yuanchu.mom.service.impl;
|
|
import cn.hutool.json.JSONUtil;
|
import cn.hutool.poi.excel.ExcelUtil;
|
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.yuanchu.mom.common.GetLook;
|
import com.yuanchu.mom.common.PrintChina;
|
import com.yuanchu.mom.mapper.StandardMethodMapper;
|
import com.yuanchu.mom.mapper.StandardProductListMapper;
|
import com.yuanchu.mom.mapper.StructureItemParameterMapper;
|
import com.yuanchu.mom.pojo.StandardMethod;
|
import com.yuanchu.mom.pojo.StandardProductList;
|
import com.yuanchu.mom.pojo.StructureItemParameter;
|
import com.yuanchu.mom.service.StandardMethodService;
|
import com.yuanchu.mom.service.StandardProductListService;
|
import com.yuanchu.mom.service.StructureItemParameterService;
|
import com.yuanchu.mom.utils.QueryWrappers;
|
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<StandardMethodMapper, StandardMethod>
|
implements StandardMethodService {
|
|
private GetLook getLook;
|
|
private StandardMethodMapper standardMethodMapper;
|
|
StandardProductListMapper standardProductListMapper;
|
StandardProductListService standardProductListService;
|
|
StructureItemParameterMapper structureItemParameterMapper;
|
StructureItemParameterService structureItemParameterService;
|
|
@Override
|
public Map<String, Object> selectStandardMethodList(Page page, StandardMethod standardMethod) {
|
Map<String, Object> map = new HashMap<>();
|
map.put("head", PrintChina.printChina(StandardMethod.class));
|
Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectStandardMethodList");
|
if (map1.get("look") == 1) standardMethod.setCreateUser(map1.get("userId"));
|
map.put("body", standardMethodMapper.selectStandardMethodList(page, QueryWrappers.queryWrappers(standardMethod)));
|
return map;
|
}
|
|
@Override
|
public List<StandardMethod> selectStandardMethods() {
|
return standardMethodMapper.selectList(Wrappers.<StandardMethod>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<StandardProductList> 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<StructureItemParameter> 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<Object> structureTestObjectIdList = new ArrayList<>();
|
List<StandardMethod> 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<Object> list) {
|
StandardMethod standardMethod = new StandardMethod();
|
standardMethod.setField(list.get(1).toString());
|
// 造格式
|
List<List<Object>> 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<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) {
|
List<StandardMethod> updateList = new ArrayList<>();
|
List<Integer> deleteListId = new ArrayList<>();
|
List<StandardMethod> addList = new ArrayList<>();
|
if (!structureTestObjectIdList.isEmpty()) {
|
// 循环excel里面的分组
|
structureTestObjectIdList.forEach(j -> {
|
// 以excel中的组名查询数据库中的分组
|
List<StandardMethod> standardMethods = baseMapper.selectList(Wrappers.<StandardMethod>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);
|
});
|
}
|
}
|
}
|