|
@@ -16,6 +16,8 @@
|
|
|
*/
|
|
|
package org.springblade.manager.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.AllArgsConstructor;
|
|
@@ -54,7 +56,9 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
+import java.lang.reflect.Array;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 服务实现类
|
|
@@ -162,11 +166,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
public boolean importWbsTreeTableAndForm(MultipartFile excelFile, WbsTree wbsTree) {
|
|
|
String canonicalPath = null;
|
|
|
try {
|
|
|
- //解析excel
|
|
|
+ //解析
|
|
|
File file = WbsExcelBatchUtil.convert(excelFile);
|
|
|
canonicalPath = file.getCanonicalPath();
|
|
|
WbsExcelBatchUtil excelUtil = new WbsExcelBatchUtil();
|
|
|
ArrayList<Map<String, String>> result = excelUtil.readExcelToObj(canonicalPath);
|
|
|
+ List<Map<String, String>> result2 = WbsExcelBatchUtil.deepCopy(result);
|
|
|
List<Map<String, String>> maps = WbsExcelBatchUtil.removeRepeatMapByKey(result, "表名");
|
|
|
assert maps != null;
|
|
|
List<WbsTreeBatchImportDTO> list = new ArrayList<>();
|
|
@@ -186,17 +191,16 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}*/
|
|
|
wbsTree.setDeptName(deptName);
|
|
|
wbsTree.setTableType(getTableType(map.get("表类型")));
|
|
|
- //初始化实体表
|
|
|
Long id = SnowFlakeUtil.getId();
|
|
|
String initTableName = "m_wbs_form_" + DateUtil.time() + "_" + id.toString();
|
|
|
wbsTree.setInitTableName(initTableName);
|
|
|
wbsTree.setId(id);
|
|
|
- //创建表单
|
|
|
+ //新增表单
|
|
|
boolean b = submit3(wbsTree);
|
|
|
if (b) {
|
|
|
- //创建对应实体表
|
|
|
+ //新增实体表
|
|
|
initTable(initTableName);
|
|
|
- //返回信息
|
|
|
+
|
|
|
WbsTreeBatchImportDTO wbsTreeBatchImportDTO = new WbsTreeBatchImportDTO();
|
|
|
wbsTreeBatchImportDTO.setId(id);
|
|
|
wbsTreeBatchImportDTO.setTableName(deptName);
|
|
@@ -204,20 +208,15 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
list.add(wbsTreeBatchImportDTO);
|
|
|
}
|
|
|
}
|
|
|
- //创建元素并新增对应实体表字段
|
|
|
+ //新增元素
|
|
|
list.forEach(i -> {
|
|
|
Long elementTableId = i.getId();
|
|
|
String tableName = i.getTableName();
|
|
|
String initTableName = i.getInitTableName();
|
|
|
-
|
|
|
- for (Map<String, String> map : result) {
|
|
|
- System.out.println("i:" + i);
|
|
|
- System.out.println("map:" + map);
|
|
|
- int keyNumb = 0;
|
|
|
+ int keyNumb = 0;
|
|
|
+ for (Map<String, String> map : result2) {
|
|
|
if (tableName.equals(map.get("表名"))) {
|
|
|
- System.out.println(map);
|
|
|
- //TODO
|
|
|
- /*keyNumb++;
|
|
|
+ keyNumb++;
|
|
|
WbsFormElement wbsFormElement = new WbsFormElement();
|
|
|
wbsFormElement.setEName(map.get("字段名"));
|
|
|
String key = "key_" + keyNumb;
|
|
@@ -229,18 +228,17 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
wbsFormElement.setEAllowDeviation(map.get("允许偏差范围"));
|
|
|
wbsFormElement.setRemark(map.get("备注"));
|
|
|
wbsFormElementService.save(wbsFormElement);
|
|
|
- //新增实体表字段
|
|
|
+ //新增实体字段
|
|
|
baseMapper.alterTableFiled(initTableName,
|
|
|
wbsFormElement.getEKey(),
|
|
|
getInitTableFiledType(wbsFormElement.getEType()),
|
|
|
- wbsFormElement.getELength());*/
|
|
|
+ wbsFormElement.getELength());
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
return true;
|
|
|
} catch (
|
|
|
- IOException e) {
|
|
|
+ IOException | ClassNotFoundException e) {
|
|
|
e.printStackTrace();
|
|
|
} finally {
|
|
|
File file2 = new File(canonicalPath);
|
|
@@ -252,6 +250,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private Boolean initTable(String tableName) {
|
|
|
//建表
|
|
|
Integer row = baseMapper.createTable(tableName);
|
|
@@ -558,22 +557,38 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
throw new ServiceException("请选择需要关联的节点树");
|
|
|
}*/
|
|
|
String[] ids = wbsTreeIds.split(",");
|
|
|
- List<String> idList1 = Arrays.asList(ids);
|
|
|
+ List<String> idList = Arrays.asList(ids);
|
|
|
+ List<String> idList1 = idList.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
|
|
|
List<String> idList2 = new ArrayList<>();
|
|
|
- //查询出当前私有库下所有的wbs节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getType, 1)
|
|
|
- );
|
|
|
- for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
|
|
|
- idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
+ int deletedStatus = 0;
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ //当前公有引用
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getType, 1)
|
|
|
+ );
|
|
|
+ for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
|
|
|
+ idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
+ }
|
|
|
+ } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ //私有引用
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getType, 1)
|
|
|
+ );
|
|
|
+ for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates2) {
|
|
|
+ idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
+ }
|
|
|
+ deletedStatus = 1;
|
|
|
}
|
|
|
+
|
|
|
List<String> diffrent = WbsTreeContractServiceImpl.getDiffrent(idList1, idList2);
|
|
|
if (diffrent.size() == 0) {
|
|
|
List<String> tableId1 = new ArrayList<>();
|
|
|
List<String> tableId2 = new ArrayList<>();
|
|
|
- //查找wbs总树节点下是否新增了元素表,进行同步更新到wbs私有树中
|
|
|
+ //公有树是否新增元素表,同步到私有
|
|
|
List<WbsTree> allNodeList = findAllNodeList(wbsTreeIds);
|
|
|
List<WbsTree> wbsTreeListAll = new ArrayList<>();
|
|
|
for (WbsTree wbsTree : allNodeList) {
|
|
@@ -609,27 +624,30 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}
|
|
|
return "1";
|
|
|
}
|
|
|
- //TODO 是否要同步删除元素表
|
|
|
+ //同步删除 TODO
|
|
|
}
|
|
|
} else {
|
|
|
- if (idList1.size() > idList2.size()) { //新增
|
|
|
- //新增前去删除当前项目已经引用的旧的私有节点,避免重复引用
|
|
|
- //wbsTreePrivateMapper.delete(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()));
|
|
|
-
|
|
|
+ //新增
|
|
|
+ if (idList1.size() > idList2.size()) {
|
|
|
for (String id : diffrent) {
|
|
|
- //项目私有wbs节点库存在该节点且为删除状态,那么修改is_deleted=0,否则新增
|
|
|
- WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectByCondition2(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
-
|
|
|
- if (wbsTreePrivate != null) {
|
|
|
- //修改该节点
|
|
|
- wbsTreePrivateMapper.updateByCondition(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
- //修改该节点下元素表
|
|
|
- wbsTreePrivateMapper.updateTableByCondition(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
- } else {
|
|
|
- //引用WBS公共库
|
|
|
- if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- WbsTree wbsTree = wbsTreeMapper.selectById(id);
|
|
|
- if (wbsTree != null) {
|
|
|
+ //公共
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectByCondition2(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
+ if (wbsTreePrivate != null) {
|
|
|
+ //修改节点、元素表
|
|
|
+ wbsTreePrivateMapper.updateByCondition(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
+ wbsTreePrivateMapper.updateTableByCondition(id, pawDTO.getProjectId(), pawDTO.getWbsId());
|
|
|
+ }
|
|
|
+ WbsTree wbsTree = wbsTreeMapper.selectById(id);
|
|
|
+ if (wbsTree != null) {
|
|
|
+ //判重(是否存在修改的旧数据)
|
|
|
+ WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getId, id)
|
|
|
+ );
|
|
|
+ if (wbsTreePrivate1 == null) {
|
|
|
+ //新增
|
|
|
Long snowId = SnowFlakeUtil.getId();
|
|
|
wbsTreePrivateMapper.insertCombination1(snowId, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
|
|
|
//查询该节点下是否有元素表
|
|
@@ -653,54 +671,72 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //保存引用模板id、类型
|
|
|
- projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
|
|
|
}
|
|
|
- } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- //引用项目WBS私有库 通过referencePrivateWbsProjectId 查询引用的私有库
|
|
|
- WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectByCondition(id, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
- //引用的私有库根节点primaryKeyId,赋值给新增的私有树wbsId字段
|
|
|
+ //保存返回
|
|
|
+ projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //私有
|
|
|
+ else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ //判重
|
|
|
+ WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectByCondition2(id, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
|
|
|
+ if (wbsTreePrivate != null) {
|
|
|
+ //修改节点、元素表
|
|
|
+ wbsTreePrivateMapper.updateByCondition(id, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
|
|
|
+ wbsTreePrivateMapper.updateTableByCondition(id, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
|
|
|
+ }
|
|
|
+ //引用私有库
|
|
|
+ WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectByCondition(id, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
+ if (wbsTreePrivate1 != null) {
|
|
|
String wbsId = String.valueOf(pawDTO.getPrimaryKeyId());
|
|
|
- if (wbsTreePrivate1 == null) {
|
|
|
- throw new ServiceException("当前WBS私有树不存在,请重新选择");
|
|
|
- }
|
|
|
wbsTreePrivate1.setWbsId(wbsId);
|
|
|
- Long snowId = SnowFlakeUtil.getId();
|
|
|
-
|
|
|
- //新增
|
|
|
- wbsTreePrivateMapper.insertCombination2(snowId, wbsTreePrivate1, pawDTO.getProjectId()); //pawDTO.getProjectId() 为当前项目id
|
|
|
- //查询该节点下是否有元素表
|
|
|
- List<WbsTree> wbsTreeTableList = wbsTreePrivateMapper.selectIsTable(wbsTreePrivate1.getId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
- if (wbsTreeTableList.size() > 0) {
|
|
|
- for (WbsTree tree : wbsTreeTableList) {
|
|
|
- //判重
|
|
|
- WbsTreePrivate wbsTreePrivates1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getId, tree.getId())
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getParentId, tree.getParentId())
|
|
|
- .eq(WbsTreePrivate::getDeptName, tree.getDeptName())
|
|
|
- .eq(WbsTreePrivate::getType, 2)
|
|
|
- );
|
|
|
- if (wbsTreePrivates1 == null) {
|
|
|
- Long snowId1 = SnowFlakeUtil.getId();
|
|
|
- tree.setWbsId(String.valueOf(pawDTO.getPrimaryKeyId()));
|
|
|
- wbsTreePrivateMapper.insertCombination1(snowId1, tree, pawDTO.getWbsType(), pawDTO.getProjectId());
|
|
|
+ //判重(是否存在修改的旧数据)
|
|
|
+ WbsTreePrivate wbsTreePrivate2 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreePrivate::getId, id)
|
|
|
+ );
|
|
|
+ if (wbsTreePrivate2 == null) {
|
|
|
+ //新增
|
|
|
+ Long snowId = SnowFlakeUtil.getId();
|
|
|
+ wbsTreePrivateMapper.insertCombination2(snowId, wbsTreePrivate1, pawDTO.getProjectId()); //pawDTO.getProjectId() 为当前项目id
|
|
|
+ //查询该节点下是否有元素表
|
|
|
+ List<WbsTree> wbsTreeTableList = wbsTreePrivateMapper.selectIsTable(wbsTreePrivate1.getId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
+ if (wbsTreeTableList.size() > 0) {
|
|
|
+ for (WbsTree tree : wbsTreeTableList) {
|
|
|
+ //判重
|
|
|
+ WbsTreePrivate wbsTreePrivates1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getId, tree.getId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getParentId, tree.getParentId())
|
|
|
+ .eq(WbsTreePrivate::getDeptName, tree.getDeptName())
|
|
|
+ .eq(WbsTreePrivate::getType, 2)
|
|
|
+ );
|
|
|
+ if (wbsTreePrivates1 == null) {
|
|
|
+ Long snowId1 = SnowFlakeUtil.getId();
|
|
|
+ tree.setWbsId(String.valueOf(pawDTO.getPrimaryKeyId()));
|
|
|
+ wbsTreePrivateMapper.insertCombination1(snowId1, tree, pawDTO.getWbsType(), pawDTO.getProjectId());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //保存引用模板id、类型
|
|
|
projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- } else { //删除
|
|
|
+ } else {
|
|
|
+ //删除节点、元素表
|
|
|
for (String id : diffrent) {
|
|
|
- //删除当前节点
|
|
|
wbsTreePrivateMapper.deleteByCondition(id, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
- //删除节点下元素表 id = parentId
|
|
|
wbsTreePrivateMapper.deleteByCondition2(id, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
}
|
|
|
+ if (deletedStatus == 1) {
|
|
|
+ for (String id : diffrent) {
|
|
|
+ wbsTreePrivateMapper.deleteByCondition(id, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
+ wbsTreePrivateMapper.deleteByCondition2(id, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return "2";
|