Przeglądaj źródła

修改了一些BUG、需求

liuyc 3 lat temu
rodzic
commit
ff0326e0a7
17 zmienionych plików z 316 dodań i 119 usunięć
  1. 94 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO3.java
  2. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java
  3. 30 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  4. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ImageClassificationConfigController.java
  5. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  6. 22 18
      blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelBatchUtil.java
  7. 0 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java
  8. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  9. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  10. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  11. 18 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  12. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ImageClassificationConfigServiceImpl.java
  13. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectContractAreaServiceImpl.java
  14. 7 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java
  15. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  16. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  17. 116 80
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 94 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/vo/UserVO3.java

@@ -0,0 +1,94 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.system.user.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.user.entity.User;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserVO对象", description = "UserVO对象")
+public class UserVO3 extends User {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * uId
+     */
+    @JsonProperty(value = "uId")
+    private Long uId;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 租户名
+     */
+    private String tenantName;
+
+    /**
+     * 用户平台名
+     */
+    private String userTypeName;
+
+    /**
+     * 角色名
+     */
+    private String roleName;
+
+    /**
+     * 部门名
+     */
+    private String deptName;
+
+    /**
+     * 岗位名
+     */
+    private String postName;
+
+    /**
+     * 性别
+     */
+    private String sexName;
+
+    /**
+     * 拓展信息
+     */
+    private String userExt;
+
+    /**
+     * 合同段名称
+     */
+    private String contractName;
+}

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java

@@ -37,7 +37,6 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
  * @author liuyc
  * @since 2022-05-16
  */
-
 @RestController
 @AllArgsConstructor
 @RequestMapping("/archiveTree")

+ 30 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -166,7 +166,6 @@ public class ContractInfoController extends BladeController {
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "新增或修改", notes = "传入contractInfo")
     public R submit(@Valid @RequestBody ContractInfoVO contractInfo) {
-        //新增合同段
         boolean b = contractInfoService.saveAndUpdateContract(contractInfo);
         if (b) {
             return R.data(contractInfo, "操作成功");
@@ -242,7 +241,6 @@ public class ContractInfoController extends BladeController {
     public R saveUserInfoByProject(@RequestBody List<SaveUserInfoByProjectDTO> list) {
         if (list.size() > 0) {
             list.forEach((lists) -> {
-                //判重
                 Long row = saveUserInfoByProjectMapper.selectCount(
                         Wrappers.<SaveUserInfoByProjectDTO>query().lambda().
                                 eq(SaveUserInfoByProjectDTO::getProjectId, lists.getProjectId()).
@@ -253,17 +251,42 @@ public class ContractInfoController extends BladeController {
                     throw new ServiceException("当前用户角色已存在该合同段,请重新选择");
                 }
                 if (StringUtils.isEmpty(lists.getContractId())) {
-                    //新增到全部合同段
+                    //全部
                     List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(lists.getProjectId());
-                    contractInfos.forEach(contractInfo -> {
+                    if (contractInfos.size() <= 0) {
+                        //无合同段-分配角色
+                        Long row2 = saveUserInfoByProjectMapper.selectCount(
+                                Wrappers.<SaveUserInfoByProjectDTO>query().lambda().
+                                        eq(SaveUserInfoByProjectDTO::getProjectId, lists.getProjectId()).
+                                        eq(SaveUserInfoByProjectDTO::getRoleId, lists.getRoleId()).
+                                        eq(SaveUserInfoByProjectDTO::getUserId, lists.getUserId()));
+                        if (row2 > 0L) {
+                            throw new ServiceException("当前用户已存在,请重新选择");
+                        }
                         Long id = SnowFlakeUtil.getId();
                         lists.setId(id);
                         lists.setStatus(1);
-                        lists.setContractId(String.valueOf(contractInfo.getId()));
                         saveUserInfoByProject.save(lists);
-                    });
+                    } else {
+                        contractInfos.forEach(contractInfo -> {
+                            Long row1 = saveUserInfoByProjectMapper.selectCount(
+                                    Wrappers.<SaveUserInfoByProjectDTO>query().lambda().
+                                            eq(SaveUserInfoByProjectDTO::getProjectId, lists.getProjectId()).
+                                            eq(SaveUserInfoByProjectDTO::getContractId, contractInfo.getId()).
+                                            eq(SaveUserInfoByProjectDTO::getRoleId, lists.getRoleId()).
+                                            eq(SaveUserInfoByProjectDTO::getUserId, lists.getUserId()));
+                            if (row1 > 0L) {
+                                throw new ServiceException("当前用户角色已在合同段下存在,请重新选择");
+                            }
+                            Long id = SnowFlakeUtil.getId();
+                            lists.setId(id);
+                            lists.setStatus(1);
+                            lists.setContractId(String.valueOf(contractInfo.getId()));
+                            saveUserInfoByProject.save(lists);
+                        });
+                    }
                 } else {
-                    //新增单个合同段
+                    //单合同段
                     saveUserInfoByProject.saveBatch(list);
                 }
             });

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ImageClassificationConfigController.java

@@ -43,7 +43,7 @@ import java.util.List;
 /**
  * 影像分类配置表 控制器
  *
- * @author BladeX
+ * @author liuyc
  * @since 2022-05-16
  */
 @RestController

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -34,6 +34,11 @@ import java.util.List;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 
+/**
+ * 控制器
+ *
+ * @author liuyc
+ */
 @RestController
 @AllArgsConstructor
 @RequestMapping("/wbsPrivate")

+ 22 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelBatchUtil.java

@@ -13,24 +13,36 @@ import java.io.*;
 import java.util.*;
 
 public class WbsExcelBatchUtil {
-    /*public static void main(String[] args) throws IOException {
+    /*public static void main(String[] args) throws IOException, ClassNotFoundException {
         WbsExcelBatchUtil excelUtil = new WbsExcelBatchUtil();
         //读取excel数据
         ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\隧道总体.xls");
-        for (Map<String, String> map : result) {
-            System.out.println(map);
-        }
-        System.out.println("-----------------");
+        List<Map<String, String>> list1 = deepCopy(result);
+        System.out.println(list1);
         List<Map<String, String>> list = removeRepeatMapByKey(result, "表名");
-        for (Map<String, String> map : list) {
-            System.out.println(map);
-        }
     }*/
 
 
+    /**
+     * 深拷贝List
+     * @param src
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException {
+        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(byteOut);
+        out.writeObject(src);
+        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
+        ObjectInputStream in = new ObjectInputStream(byteIn);
+        @SuppressWarnings("unchecked")
+        List<T> dest = (List<T>) in.readObject();
+        return dest;
+    }
+
+
     /**
      * List<Map>去重
-     *
      * @param list
      * @param mapKey
      * @return
@@ -41,7 +53,7 @@ public class WbsExcelBatchUtil {
         Map<String, Map> msp = new HashMap<>();
         for (int i = list.size() - 1; i >= 0; i--) {
             Map map = list.get(i);
-            String id = map.get(mapKey).toString();//错误举例 (String)map.get(mapKey);
+            String id = map.get(mapKey).toString();
             map.remove(mapKey);
             msp.put(id, map);
         }
@@ -56,7 +68,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 读取excel数据
-     *
      * @param path
      */
     public ArrayList<Map<String, String>> readExcelToObj(String path) throws IOException {
@@ -77,7 +88,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 读取excel文件
-     *
      * @param wb
      * @param sheetIndex    sheet页下标:从0开始
      * @param startReadLine 开始读取的行:从0开始
@@ -125,7 +135,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 获取合并单元格的值
-     *
      * @param sheet
      * @param row
      * @param column
@@ -152,7 +161,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 判断合并了行
-     *
      * @param sheet
      * @param row
      * @param column
@@ -177,7 +185,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 判断指定的单元格是否是合并单元格
-     *
      * @param sheet
      * @param row    行下标
      * @param column 列下标
@@ -212,7 +219,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 合并单元格
-     *
      * @param sheet
      * @param firstRow 开始行
      * @param lastRow  结束行
@@ -225,7 +231,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 获取单元格的值
-     *
      * @param cell
      * @return
      */
@@ -304,7 +309,6 @@ public class WbsExcelBatchUtil {
 
     /**
      * 获取path路径
-     *
      * @param file
      * @return
      * @throws IOException

+ 0 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java

@@ -25,7 +25,6 @@ public class WbsExcelUtil {
 
     /**
      * 读取excel数据
-     *
      * @param path
      */
     public ArrayList<Map<String, String>> readExcelToObj(String path) throws IOException {
@@ -46,7 +45,6 @@ public class WbsExcelUtil {
 
     /**
      * 读取excel文件
-     *
      * @param wb
      * @param sheetIndex    sheet页下标:从0开始
      * @param startReadLine 开始读取的行:从0开始

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -111,12 +111,13 @@
         </if>
     </select>
 
-    <select id="findUserListByCondition" resultType="org.springblade.system.user.vo.UserVO">
+    <select id="findUserListByCondition" resultType="org.springblade.system.user.vo.UserVO3">
         SELECT
         mpau.id,
         u.`name`,
         u.account,
-        (select role_name from blade_role where id = u.role_id) as postName,
+        (select dict_value from blade_dict_biz where id = mpau.role_id) as postName,
+        (select contract_name from m_contract_info where id = mpau.contract_id) as contractName,
         u.`password`,
         u.`phone`
         FROM

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -40,7 +40,7 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
 
     void updateByCondition(String id, String projectId, String wbsId);
 
-    void updateTableByCondition(@Param("parentId") String id,
+    void updateTableByCondition(@Param("id") String id,
                                 @Param("projectId") String projectId,
                                 @Param("wbsId") String wbsId);
 

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -108,9 +108,10 @@
     <update id="updateTableByCondition">
         UPDATE m_wbs_tree_private
         SET is_deleted = 0
-        WHERE parent_id = #{parentId}
-        AND wbs_id = #{wbsId}
+        WHERE parent_id = #{id}
         AND project_id = #{projectId}
+        AND wbs_id = #{wbsId}
+        AND type = 2
     </update>
 
     <update id="updateByCondition1">

+ 18 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -17,15 +17,18 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.common.utils.BaiduApiUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.manager.dto.FindAllUserByConditionDTO;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectContractArea;
 import org.springblade.manager.mapper.ProjectContractAreaMapper;
+import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.vo.CRolePostVO;
 import org.springblade.manager.vo.ContractInfoVO;
 import org.springblade.manager.mapper.ContractInfoMapper;
@@ -58,6 +61,7 @@ public class ContractInfoServiceImpl
 
     private final ContractInfoMapper contractInfoMapper;
     private final ProjectContractAreaMapper projectContractAreaMapper;
+    private final SaveUserInfoByProjectMapper saveUserInfoByProjectMapper;
 
     @Override
     public List<ContractInfo> selectContractByProjectIds(List<Long> ids) {
@@ -153,10 +157,21 @@ public class ContractInfoServiceImpl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean saveAndUpdateContract(ContractInfoVO contractInfo) {
-        //新增合同段
         boolean row = saveOrUpdate(contractInfo);
         if (row) {
-            //获取合同段位置信息
+            //绑定用户角色信息
+            List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
+                    .eq(SaveUserInfoByProjectDTO::getProjectId, contractInfo.getPId())
+                    .isNull(SaveUserInfoByProjectDTO::getContractId)
+            );
+            if (list.size() > 0) {
+                Long contractId = contractInfo.getId();
+                list.forEach(i -> {
+                    i.setContractId(String.valueOf(contractId));
+                    saveUserInfoByProjectMapper.updateById(i);
+                });
+            }
+            //获取位置信息初始化
             String projectPlace = contractInfo.getProjectPlace();
             try {
                 Map<String, Object> addressInfo = BaiduApiUtil.geocoding(projectPlace);
@@ -170,7 +185,7 @@ public class ContractInfoServiceImpl
                 projectContractArea.setProjectId(contractInfo.getPId());
                 projectContractArea.setIsDeleted(0);
                 projectContractArea.setContractId(String.valueOf(contractInfo.getId()));
-                //判重
+
                 QueryWrapper<ProjectContractArea> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("project_id", contractInfo.getPId());
                 queryWrapper.eq("contract_id", contractInfo.getId());

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ImageClassificationConfigServiceImpl.java

@@ -30,7 +30,7 @@ import java.util.List;
 /**
  * 影像分类配置表 服务实现类
  *
- * @author BladeX
+ * @author liuyc
  * @since 2022-05-16
  */
 @Service

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectContractAreaServiceImpl.java

@@ -10,6 +10,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * 客户级项目表 服务实现类
+ *
+ * @author liuyc
+ */
 @Service
 public class ProjectContractAreaServiceImpl extends BaseServiceImpl<ProjectContractAreaMapper, ProjectContractArea> implements ProjectContractAreaService {
 

+ 7 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.service.impl;
 
+import lombok.AllArgsConstructor;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
@@ -8,8 +9,13 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 
-
+/**
+ * 服务实现类
+ *
+ * @author liuyc
+ */
 @Service
+@AllArgsConstructor
 public class SaveUserInfoByProjectServiceImpl
         extends BaseServiceImpl<SaveUserInfoByProjectMapper, SaveUserInfoByProjectDTO>
         implements SaveUserInfoByProjectService {

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -23,6 +23,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
+/**
+ * 服务实现类
+ *
+ * @author liuyc
+ */
 @Service
 @AllArgsConstructor
 public class WbsTreeContractServiceImpl

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -26,6 +26,11 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * 服务实现类
+ *
+ * @author liuyc
+ */
 @Service
 @AllArgsConstructor
 public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMapper, WbsTreePrivate> implements IWbsTreePrivateService {

+ 116 - 80
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -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";