瀏覽代碼

合同段监理同步人员信息相关、节点默认信息同步相关

liuyc 2 年之前
父節點
當前提交
80e55d3efb
共有 17 個文件被更改,包括 464 次插入288 次删除
  1. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveUserInfoByProjectDTO.java
  2. 0 9
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  3. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  4. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java
  5. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  6. 134 29
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  7. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java
  8. 1 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  9. 0 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  10. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  11. 103 52
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  12. 43 61
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java
  13. 62 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  14. 70 34
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  15. 0 6
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  16. 0 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
  17. 39 78
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveUserInfoByProjectDTO.java

@@ -52,5 +52,11 @@ public class SaveUserInfoByProjectDTO extends BaseEntity {
     @ApiModelProperty(value = "userId",required = true)
     private String userId;
 
+    /**
+     * 是否从监理合同段关联
+     */
+    @JsonProperty(value = "isRecordJl")
+    @ApiModelProperty(value = "数据来源-监理合同段id",required = true)
+    private Long isRecordJlId;
 
 }

+ 0 - 9
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -17,16 +17,13 @@
 package org.springblade.system.user.feign;
 
 
-import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -159,12 +156,6 @@ public interface IUserClient {
     @GetMapping(UPDATE_USER_ROLE_ID)
     boolean updateUserRoleIdTwo(@RequestParam("userId") String userId, @RequestParam("roleId") String roleId);
 
-    /**
-     * 批量删除用户RoleId
-     */
-    @GetMapping(UPDATE_USERS_ROLE_ID)
-    boolean updateUserRoleIdThree(@RequestParam("userIds") List<String> userIds, @RequestParam("roleIds") String roleIds);
-
     /**
      * 获取全部userList
      */

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java

@@ -125,7 +125,7 @@ public class TrialDetectionController extends BladeController {
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "自检记录新增或修改", notes = "传入TrialSelfInspectionRecordDTO")
     public R<Object> selfSubmit(@Valid @RequestBody TrialSelfInspectionRecordDTO dto) throws Exception {
-        return R.status(iTrialSelfInspectionRecordService.selfSubmit(dto));
+        return R.data(iTrialSelfInspectionRecordService.selfSubmit(dto));
     }
 
     @PostMapping("/self/copy")

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java

@@ -15,7 +15,7 @@ public interface ITrialSelfInspectionRecordService extends BaseService<TrialSelf
 
     IPage<TrialSelfInspectionRecordVO> selfPage(IPage<TrialSelfInspectionRecord> page, TrialSelfInspectionRecordPageDTO dto);
 
-    boolean selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception;
+    String selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception;
 
     List<TrialSampleInfoVO> selfSampleList(String id);
 

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -642,7 +642,7 @@ public class TrialSelfInspectionRecordServiceImpl
     }
 
     @Override
-    public boolean selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception {
+    public String selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception {
         if (ObjectUtil.isEmpty(dto.getId())) {
             //构建记录表编号、报告单编号
             this.buildNumber(dto);
@@ -685,7 +685,7 @@ public class TrialSelfInspectionRecordServiceImpl
             this.trialDeviceUseService.addDeviceUseInfo(dto);
         }
 
-        return true;
+        return dto.getId().toString();
     }
 
     @Override

+ 134 - 29
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.controller;
 
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
@@ -13,7 +14,10 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.dto.FindAllUserByConditionDTO;
@@ -29,6 +33,8 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springblade.system.user.vo.UserVO2;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -38,7 +44,9 @@ import org.springblade.manager.service.IContractInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 
+import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -51,6 +59,7 @@ public class ContractInfoController extends BladeController {
     private final IUserClient iUserClient;
     private final IWbsTreeContractService wbsTreeContractService;
     private final SaveUserInfoByProjectMapper saveUserInfoByProjectMapper;
+    private final JdbcTemplate jdbcTemplate;
 
     /**
      * 详情
@@ -146,8 +155,7 @@ 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) {
+        if (contractInfoService.saveAndUpdateContract(contractInfo)) {
             return R.data(contractInfo, "操作成功");
         }
         return R.fail("操作失败");
@@ -161,18 +169,13 @@ public class ContractInfoController extends BladeController {
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "逻辑删除", notes = "传入ids")
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        List<WbsTreeContract> wbsTreeContracts = wbsTreeContractService.findWbsTreeContract(ids);
-        if (wbsTreeContracts.size() > 0) {
+        if (wbsTreeContractService.findWbsTreeContract(ids).size() > 0) {
             return R.fail("合同段存在关联的WBS树,删除失败");
         }
-        Long list = saveUserInfoByProjectMapper.selectCount(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
-                .eq(SaveUserInfoByProjectDTO::getContractId, ids)
-        );
-        if (list > 0L) {
+        if (saveUserInfoByProjectMapper.selectCount(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().eq(SaveUserInfoByProjectDTO::getContractId, ids)) > 0L) {
             return R.fail("当前合同段存在关联用户,删除失败");
         }
-        Integer list2 = saveUserInfoByProjectMapper.selectSGJL(ids);
-        if (list2 > 0) {
+        if (saveUserInfoByProjectMapper.selectSGJL(ids) > 0) {
             return R.fail("当前监理合同段存在关联的施工合同信息,删除失败");
         }
         return R.status(contractInfoService.deleteLogic(Func.toLongList(ids)));
@@ -223,7 +226,7 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 保存-项目分配维护人员
+     * 保存-项目分配维护人员 - 单保存
      */
     @PostMapping("/save-userInfo-by-project")
     @ApiOperationSupport(order = 12)
@@ -304,12 +307,11 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 保存-项目合同段分配人员
+     * 保存-项目合同段分配人员 - 单保存
      */
     @PostMapping("/save-userInfo-by-project-tow")
     @ApiOperationSupport(order = 13)
     @ApiOperation(value = "保存-项目合同段分配人员", notes = "传入项目id、合同id、岗位处roleId、用户id")
-    @Transactional(rollbackFor = Exception.class)
     public R saveUserInfoByProjectTow(@RequestBody List<SaveUserInfoByProjectDTO> list) {
         if (list.size() > 0) {
             list.forEach((lists) -> {
@@ -324,18 +326,73 @@ public class ContractInfoController extends BladeController {
                     throw new ServiceException("当前用户类型已存在合同段,请重新选择项目合同段添加");
                 }
             });
-            //添加userRoleId
-            iUserClient.updateUserRoleId(list);
-            boolean result = saveUserInfoByProjectService.saveBatch(list);
-            if (result) {
-                return R.success("保存成功");
+
+            String contractId = list.stream().map(SaveUserInfoByProjectDTO::getContractId).findAny().orElse(null);
+            ContractInfo contractInfo = contractInfoService.selectById(contractId);
+            //监理、业主、中西试验室合同段新增
+            if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
+                //同步到对应关联的施工合同段中
+                String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
+                List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
+                if (record_SG.size() > 0) {
+                    for (String sgId : record_SG) {
+                        //当前施工合同段所有用户角色信息
+                        String sql2 = "select * from m_project_assignment_user where contract_id = " + sgId + " and post_id is null and status = 1 and is_deleted = 0";
+                        List<SaveUserInfoByProjectDTO> userRoleInfoSG = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+
+                        //去重
+                        List<SaveUserInfoByProjectDTO> lists = BeanUtil.copyProperties(list, SaveUserInfoByProjectDTO.class);
+                        if (lists.size() > 0) {
+                            Iterator<SaveUserInfoByProjectDTO> iterator = lists.iterator();
+                            while (iterator.hasNext()) {
+                                SaveUserInfoByProjectDTO jl = iterator.next();
+                                for (SaveUserInfoByProjectDTO sg : userRoleInfoSG) {
+                                    if (sg.getUserId().equals(jl.getUserId())) {
+                                        //如果监理合同段与施工合同段中有相同的用户信息,就移除,一个用户只能存在一个合同段中
+                                        iterator.remove();
+                                    }
+                                }
+                            }
+                        }
+
+                        //重构入参
+                        List<SaveUserInfoByProjectDTO> addList = new ArrayList<>();
+                        for (SaveUserInfoByProjectDTO jl : lists) {
+                            SaveUserInfoByProjectDTO newObj = BeanUtil.copyProperties(jl, SaveUserInfoByProjectDTO.class);
+                            assert newObj != null;
+                            newObj.setId(SnowFlakeUtil.getId());
+                            newObj.setContractId(sgId);
+                            newObj.setStatus(1);
+                            if (ObjectUtil.isNotEmpty(SecureUtil.getUser())) {
+                                newObj.setCreateUser(SecureUtil.getUser().getUserId());
+                                newObj.setCreateDept(Long.parseLong(SecureUtil.getUser().getDeptId().split(",")[0]));
+                            }
+                            newObj.setCreateTime(new Date());
+                            newObj.setIsRecordJlId(contractInfo.getId()); //从监理合同段关联的数据,用于删除关联时同步删除用户信息
+                            addList.add(newObj);
+                        }
+
+                        //保存监理数据时,同步到对应关联的施工合同段中去
+                        if (addList.size() > 0) {
+                            saveUserInfoByProjectService.saveBatch(addList);
+                        }
+                    }
+                }
             }
+
+            //保存当前合同段数据
+            saveUserInfoByProjectService.saveBatch(list);
+
+            //更新用户roleId
+            iUserClient.updateUserRoleId(list);
+
+            return R.success("保存成功");
         }
         return R.fail("保存失败");
     }
 
     /**
-     * 项目分配用户删除
+     * 项目分配用户删除 - 全部删除 or 单删除
      */
     @PostMapping("/remove-users-by-ids")
     @ApiOperationSupport(order = 14)
@@ -348,32 +405,80 @@ public class ContractInfoController extends BladeController {
         //查询当前角色信息是否存在
         List<Long> idsListTemp = Func.toLongList(ids);
         String roleIdTemp = "";
+        String contractId = "";
         for (Long idTemp : idsListTemp) {
             SaveUserInfoByProjectDTO saveUserInfoByProjectDTO = saveUserInfoByProjectMapper.selectOne(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().eq(SaveUserInfoByProjectDTO::getId, idTemp));
             roleIdTemp = saveUserInfoByProjectDTO.getRoleId();
+            contractId = saveUserInfoByProjectDTO.getContractId();
         }
         if (StringUtils.isEmpty(roleIdTemp)) {
-            //roleId = null 表示为运营维护人员角色分配 - 物理删除
+            //roleId = null 表示为运营维护人员角色分配
             return R.status(saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp));
         } else {
             //roleId != null 表示合同段人员角色分配
-            if (idsListTemp.size() > 1) {
-                //全部删除
-                return R.status(saveUserInfoByProjectService.deleteBatchByIdsList(idsListTemp));
-            } else {
-                //单删除
+            ContractInfo contractInfo = contractInfoService.selectById(contractId);
+
+            if (idsListTemp.size() > 1) { //全部删除
+                if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
+                    //监理合同段同步删除施工合同段下的用户信息
+                    String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
+                    List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
+                    for (String sgId : record_SG) {
+                        //同步删除当前施工合同段下所有关联用户 is_record_jl_id = contractInfo.getId()
+                        String del = "delete from m_project_assignment_user where is_record_jl_id = " + contractInfo.getId() + " and contract_id = " + sgId;
+                        jdbcTemplate.execute(del);
+                    }
+                }
+
+                //更新每一个user的roleId字段
+                List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().in(SaveUserInfoByProjectDTO::getId, idsListTemp));
+                List<String> userIds = list.stream().map(SaveUserInfoByProjectDTO::getUserId).distinct().collect(Collectors.toList());
+
+                saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp);
+
+                for (String userId : userIds) {
+                    //物理删除后,再根据userId查询当前用户中的最新角色信息
+                    String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + userId;
+                    List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+
+                    List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
+
+                    if (collect.size() > 0) {
+                        String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
+                        String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + userId;
+                        jdbcTemplate.execute(updateSql);
+                    }
+                }
+
+            } else { //单删除
                 SaveUserInfoByProjectDTO saveUserInfoByProjectDTO = saveUserInfoByProjectMapper.selectById(ids);
                 String userId = saveUserInfoByProjectDTO.getUserId();
                 String roleId = saveUserInfoByProjectDTO.getRoleId();
-                //删除用户RoleId
+
+                if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
+                    //监理合同段同步删除施工合同段下的用户信息
+                    String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
+                    List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
+                    for (String sgId : record_SG) {
+                        //同步删除当前用户
+                        String del = "delete from m_project_assignment_user where is_record_jl_id = " + contractInfo.getId() + " and contract_id = " + sgId + " and project_id = " + contractInfo.getPId() + " and user_id = " + userId + " and role_id = " + roleId;
+                        jdbcTemplate.execute(del);
+                    }
+                }
+
+                //物理删除
+                saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp);
+
+                //更新当前用户roleId
                 iUserClient.updateUserRoleIdTwo(userId, roleId);
-                return R.status(saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp));
+
             }
+            return R.status(true);
         }
     }
 
     /**
-     * 项目分配用户逻辑删除当前项目下所有合同段角色信息
+     * 项目分配用户 - 删除当前项目下该用户的所有合同段角色信息
      */
     @PostMapping("/remove-userProjectInfo-role-byId")
     @ApiOperationSupport(order = 14)
@@ -467,7 +572,7 @@ public class ContractInfoController extends BladeController {
      */
     @GetMapping("/trial/relation/tree")
     @ApiOperationSupport(order = 18)
-    @ApiOperation(value = "查询合同段私有Wbs节点树形结构", notes = "传入wbsId,项目id,合同段id")
+    @ApiOperation(value = "查询合同段私有Wbs节点树形结构", notes = "传入wbsId,项目id,合同段id,自检记录id")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
             @ApiImplicitParam(name = "项目id", value = "projectId", required = true),

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

@@ -202,7 +202,6 @@ public class ProjectInfoController extends BladeController {
         return R.fail(200, "未查询到信息");
     }
 
-
     /**
      * 保存或修改分配项目级wbs树
      */

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

@@ -98,9 +98,7 @@
     </insert>
 
     <delete id="deleteContractRelationJLYZ">
-        delete
-        from m_contract_relation_jlyz
-        where contract_id_jlyz = #{id}
+        delete from m_contract_relation_jlyz where contract_id_jlyz = #{id}
     </delete>
 
     <select id="selectContractByProjectIds" resultMap="contractInfoResultMap">

+ 0 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -106,7 +106,6 @@
     </resultMap>
 
 
-
     <resultMap id="resultMap2" type="org.springblade.manager.vo.WbsTreeContractVO">
         <result column="id" property="id"/>
         <result column="wbs_id" property="wbsId"/>
@@ -581,7 +580,6 @@
             UPDATE m_wbs_tree_contract
             <set>
                 node_name = #{item.nodeName},
-                full_name = #{item.nodeName},
                 node_type = #{item.nodeType},
                 major_data_type = #{item.majorDataType},
                 table_type = #{item.tableType},

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java

@@ -44,9 +44,9 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
 
     boolean updateStatus(String pKeyId);
 
-    boolean updateBatchByIds(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId);
+    boolean updateBatchByIds(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId, Integer wbsType);
 
-    boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String wbsId);
+    boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String wbsId, Integer wbsType);
 
     WbsNodeTabAndParamVO getNodeTabAndParam(String id, String wbsId, String projectId);
 

+ 103 - 52
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -9,8 +9,12 @@ import lombok.AllArgsConstructor;
 import org.springblade.common.utils.BaiduApiUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.dto.FindAllUserByConditionDTO;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.*;
@@ -22,10 +26,12 @@ import org.springblade.manager.mapper.ContractInfoMapper;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springblade.system.user.vo.UserVO2;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,6 +50,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     private final SaveUserInfoByProjectServiceImpl saveUserInfoByProjectService;
     private final WbsTreeContractMapper wbsTreeContractMapper;
     private final JdbcTemplate jdbcTemplate;
+    private final IUserClient iUserClient;
 
     @Override
     public List<String> getProcessContractByJLContractId(String contractId) {
@@ -167,9 +174,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return this.baseMapper.tree(null, null, contractId, wbsType, parentId);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @Override
     public boolean saveAndUpdateContract(ContractInfoVO contractInfo) {
-        if (contractInfo.getId() == null) { //新增
+        if (contractInfo.getId() == null) {
             List<ContractInfo> contractInfos = baseMapper.selectList(Wrappers.<ContractInfo>query().lambda()
                     .eq(ContractInfo::getContractName, contractInfo.getContractName())
                     .eq(ContractInfo::getPId, contractInfo.getPId())
@@ -181,43 +188,16 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 throw new ServiceException("合同类型不能为空");
             }
 
-            boolean row = saveOrUpdate(contractInfo);
+            boolean row = this.saveOrUpdate(contractInfo);
 
-            //监理、总监办
+            //监理、总监办新增
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                 if (contractInfo.getIdList().size() > 0) {
                     List<WbsTreeContractVO3> infos = contractInfo.getIdList();
                     infos.forEach(info -> {
-                        //新增关联记录信息
+                        //新增关系记录
                         baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), info.getContractId());
                     });
-
-                    /*//把当前监理合同段中的人员同步到质检合同段中去
-                    List<String> recordContractIds = infos.stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
-
-                    List<SaveUserInfoByProjectDTO> userRoleInfoListSG = new ArrayList<>();
-
-                    //查询当前监理合同段所有用户角色信息
-                    String sql1 = "select * from m_project_assignment_user where contract_id = " + contractInfo.getId() + " and post_id is null and status = 1 and is_deleted = 0";
-                    List<SaveUserInfoByProjectDTO> userRoleInfoJL = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
-
-                    for (String recordContractId : recordContractIds) {
-                        String sql2 = "select * from m_project_assignment_user where contract_id = " + recordContractId + " and post_id is null and status = 1 and is_deleted = 0";
-                        List<SaveUserInfoByProjectDTO> userRoleInfoSG = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
-                        userRoleInfoListSG.addAll(userRoleInfoSG);
-                    }
-
-                    Iterator<SaveUserInfoByProjectDTO> jlInfo = userRoleInfoJL.iterator();
-                    while (jlInfo.hasNext()){
-                        SaveUserInfoByProjectDTO jl = jlInfo.next();
-                        for (SaveUserInfoByProjectDTO sg : userRoleInfoListSG) {
-                            if (jl.getUserId().equals(sg.getUserId())){
-                                //移除在施工合同段中已经存在的人员信息
-                                jlInfo.remove();
-                            }
-                        }
-                    }*/
-
                 }
 
                 //中西试验室
@@ -225,9 +205,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 //TODO
             }
 
-            return submitContractRelevantInfo(row, contractInfo);
+            return this.submitContractRelevantInfo(row, contractInfo);
 
-        } else { //编辑
+        } else {
             List<ContractInfo> contractInfos = baseMapper.selectList(Wrappers.<ContractInfo>query().lambda()
                     .eq(ContractInfo::getContractName, contractInfo.getContractName())
                     .eq(ContractInfo::getPId, contractInfo.getPId())
@@ -236,37 +216,108 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             if (contractInfos.size() > 0) {
                 throw new ServiceException("合同段名称已存在当前项目下,请重新输入");
             }
-            boolean row = saveOrUpdate(contractInfo);
 
-            //监理、总监办
+            boolean row = this.saveOrUpdate(contractInfo);
+
+            //监理、总监办编辑
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
-                List<WbsTreeContractVO3> idList = contractInfo.getIdList();
+                //获取当前项目所有施工合同段信息
+                List<Long> contractInfosSGAll = baseMapper.selectList(Wrappers.<ContractInfo>lambdaQuery().eq(ContractInfo::getPId, contractInfo.getPId()).eq(ContractInfo::getContractType, 1).eq(ContractInfo::getStatus, 1)).stream().map(ContractInfo::getId).collect(Collectors.toList());
+
+                List<String> updateId_SG = contractInfo.getIdList().stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
+                //删除新增记录信息
+                baseMapper.deleteContractRelationJLYZ(contractInfo.getId());
+                updateId_SG.forEach(id -> {
+                    baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), id);
+                });
 
-                List<ContractRelationJlyz> resultListJLTZ = baseMapper.selectByContractRelationJlyz(contractInfo.getId());
-                if (resultListJLTZ.size() > 0) {
-                    baseMapper.deleteContractRelationJLYZ(contractInfo.getId());
-                }
+                //当前关联的施工合同段ids
+                String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
+                List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
 
-                if (idList.size() > 0) {
-                    List<String> idList_SG = idList.stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
-                    idList_SG.forEach(ids -> {
-                        baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), ids);
-                    });
+                List<String> saveIds = contractInfosSGAll.stream().filter(f -> record_SG.contains(f.toString())).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
+                List<Long> delIds = contractInfosSGAll.stream().filter(f -> !record_SG.contains(f.toString())).collect(Collectors.toList());
+
+                if (saveIds.size() > 0) {
+                    //同步
+                    this.syncUserInfoToContract(contractInfo, saveIds);
                 }
 
-                //删除当前合同段下的关联的施工合同段对应的合同段人员
-                //String sql = "delete from m_project_assignment_user where contract_id = " + contractInfo.getId() + " and post_id is null and status = 1 and is_deleted = 0";
+                if (delIds.size() > 0) {
+                    //删除
+                    List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectService.getBaseMapper().selectList(Wrappers.<SaveUserInfoByProjectDTO>lambdaQuery()
+                            .eq(SaveUserInfoByProjectDTO::getProjectId, contractInfo.getPId())
+                            .eq(SaveUserInfoByProjectDTO::getIsRecordJlId, contractInfo.getId())
+                            .eq(SaveUserInfoByProjectDTO::getStatus, 1)
+                            .in(SaveUserInfoByProjectDTO::getContractId, delIds)
+                    );
+                    List<Long> ids = list.stream().map(SaveUserInfoByProjectDTO::getId).collect(Collectors.toList());
+                    if (ids.size() > 0) {
+                        saveUserInfoByProjectService.deleteBatchByIdsList(ids); //物理删除关联记录、用户roleId
+                    }
+                }
 
-                //中西试验室
+                //中西试验室编辑
             } else if (contractInfo.getContractType().equals(4)) {
-                //TODO
+
             }
 
-            return submitContractRelevantInfo(row, contractInfo);
+            return this.submitContractRelevantInfo(row, contractInfo);
+        }
+    }
+
+    @Async
+    void syncUserInfoToContract(ContractInfoVO contractInfo, List<String> saveSGIds) {
+        //当前监理合同段所有用户角色信息
+        String sql1 = "select * from m_project_assignment_user where contract_id = " + contractInfo.getId() + " and post_id is null and status = 1 and is_deleted = 0";
+        List<SaveUserInfoByProjectDTO> userRoleInfoJL = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+
+        if (userRoleInfoJL.size() > 0) {
+            for (String sgId : saveSGIds) {
+                //当前施工合同段所有用户角色信息
+                String sql2 = "select * from m_project_assignment_user where contract_id = " + sgId + " and post_id is null and status = 1 and is_deleted = 0";
+                List<SaveUserInfoByProjectDTO> userRoleInfoSG = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+
+                //去重
+                List<SaveUserInfoByProjectDTO> list = BeanUtil.copyProperties(userRoleInfoJL, SaveUserInfoByProjectDTO.class);
+                if (list.size() > 0) {
+                    Iterator<SaveUserInfoByProjectDTO> iterator = list.iterator();
+                    while (iterator.hasNext()) {
+                        SaveUserInfoByProjectDTO jl = iterator.next();
+                        for (SaveUserInfoByProjectDTO sg : userRoleInfoSG) {
+                            if (sg.getUserId().equals(jl.getUserId())) {
+                                //如果监理合同段与施工合同段中有相同的用户信息,就移除,一个用户只能存在一个合同段中
+                                iterator.remove();
+                            }
+                        }
+                    }
+                }
+
+                //重构入参
+                List<SaveUserInfoByProjectDTO> addList = new ArrayList<>();
+                for (SaveUserInfoByProjectDTO jl : list) {
+                    SaveUserInfoByProjectDTO newObj = BeanUtil.copyProperties(jl, SaveUserInfoByProjectDTO.class);
+                    assert newObj != null;
+                    newObj.setId(SnowFlakeUtil.getId());
+                    newObj.setContractId(sgId);
+                    newObj.setIsRecordJlId(contractInfo.getId()); //从监理合同段关联的数据,用于删除关联时同步删除用户信息
+                    addList.add(newObj);
+                }
+
+
+                if (addList.size() > 0) {
+                    //保存数据
+                    saveUserInfoByProjectService.saveBatch(addList);
+
+                    //更新用户roleId
+                    iUserClient.updateUserRoleId(addList);
+                }
+            }
         }
     }
 
-    private boolean submitContractRelevantInfo(boolean row, ContractInfoVO contractInfo) {
+    @Async
+    boolean submitContractRelevantInfo(boolean row, ContractInfoVO contractInfo) {
         if (row) {
             List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
                     .eq(SaveUserInfoByProjectDTO::getProjectId, contractInfo.getPId())

+ 43 - 61
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java

@@ -12,6 +12,8 @@ import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.service.SaveUserInfoByProjectService;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,11 +25,9 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class SaveUserInfoByProjectServiceImpl
-        extends BaseServiceImpl<SaveUserInfoByProjectMapper, SaveUserInfoByProjectDTO>
-        implements SaveUserInfoByProjectService {
+public class SaveUserInfoByProjectServiceImpl extends BaseServiceImpl<SaveUserInfoByProjectMapper, SaveUserInfoByProjectDTO> implements SaveUserInfoByProjectService {
 
-    private final IUserClient iUserClient;
+    private final JdbcTemplate jdbcTemplate;
 
     @Override
     public List<User> findMaintenanceUser() {
@@ -50,31 +50,34 @@ public class SaveUserInfoByProjectServiceImpl
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class) //Todo
     public boolean deleteBatchByIdsList(List<Long> idsList) {
-        //获取该idsList信息
-        List<SaveUserInfoByProjectDTO> list = baseMapper.selectByIds(idsList);
+        //更新每一个user的roleId字段
+        List<SaveUserInfoByProjectDTO> list = baseMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().in(SaveUserInfoByProjectDTO::getId, idsList));
 
-        //获取userIdList
-        List<String> userIds = list.stream().map(SaveUserInfoByProjectDTO::getUserId).collect(Collectors.toList());
+        List<String> userIds = list.stream().map(SaveUserInfoByProjectDTO::getUserId).distinct().collect(Collectors.toList());
 
-        //roleIds可以看作同一个roleId
-        List<String> collect = list.stream().map(SaveUserInfoByProjectDTO::getRoleId).collect(Collectors.toList());
+        this.deleteByIdsPhysical(idsList);
 
-        String roleIds = "";
-        for (String s : collect) {
-            roleIds = s;
-        }
-
-        boolean b = iUserClient.updateUserRoleIdThree(userIds, roleIds);
+        if (userIds.size() > 0) {
+            for (String userId : userIds) {
+                //物理删除后,再根据userId查询当前用户中的最新角色信息
+                String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + userId;
+                List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
 
-        //物理删除项目合同段关联用户信息
-        int row = baseMapper.deleteByIdsPhysical(idsList);
+                List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
 
-        if (!b || row <= 0) {
-            throw new ServiceException("操作异常,请重新尝试");
+                if (collect.size() > 0) {
+                    String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
+                    String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + userId;
+                    jdbcTemplate.execute(updateSql);
+                } else {
+                    String updateSql = "update blade_user set role_id = null where id = " + userId;
+                    jdbcTemplate.execute(updateSql);
+                }
+            }
+            return true;
         }
-        return true;
+        return false;
     }
 
     @Override
@@ -85,42 +88,27 @@ public class SaveUserInfoByProjectServiceImpl
         String projectId = saveUserInfoByProjectDTO.getProjectId();
         String userId = saveUserInfoByProjectDTO.getUserId();
 
-        //获取当前用户所绑定的所有项目角色信息
-        List<SaveUserInfoByProjectDTO> list1 = baseMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
-                .eq(SaveUserInfoByProjectDTO::getUserId, userId)
-                .isNull(SaveUserInfoByProjectDTO::getPostId)
-                .isNotNull(SaveUserInfoByProjectDTO::getRoleId)
-        );
-
-        //获取当前用户其他项目信息List
-        List<SaveUserInfoByProjectDTO> list2 = list1.stream().filter(f -> !f.getProjectId().equals(projectId) && f.getUserId().equals(userId)).collect(Collectors.toList());
-        List<String> roleIdListAllOther = list2.stream().map(SaveUserInfoByProjectDTO::getRoleId).collect(Collectors.toList());
-
-        //获取当前用户选择删除的项目下所有信息List
-        List<SaveUserInfoByProjectDTO> list3 = list1.stream().filter(f -> f.getProjectId().equals(projectId) && f.getUserId().equals(userId)).collect(Collectors.toList());
-        List<String> roleIdListCurrent = list3.stream().map(SaveUserInfoByProjectDTO::getRoleId).collect(Collectors.toList());
-
-        //保留的roleId
-        List<String> saveRoleIdListReally = new ArrayList<>();
-        for (String s : roleIdListAllOther) {
-            for (String s1 : roleIdListCurrent) {
-                if (s.equals(s1)) {
-                    saveRoleIdListReally.add(s);
-                }
-            }
-        }
-        roleIdListAllOther.addAll(saveRoleIdListReally);
-        //去重
-        List<String> resultRoleIds = roleIdListAllOther.stream().distinct().collect(Collectors.toList());
-
-        //物理删除
-        int row = baseMapper.deleteByCondition(projectId, userId);
+        if (com.alibaba.nacos.common.utils.StringUtils.isNotEmpty(userId)) {
+            //物理删除
+            baseMapper.deleteByCondition(projectId, userId);
 
-        //修改用户roleId
-        boolean result = this.updateUserRoleIdFour(resultRoleIds, userId);
+            //更新user的roleId字段
+            String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + userId;
+            List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
 
-        return row > 0 && result;
+            List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
 
+            if (collect.size() > 0) {
+                String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
+                String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + userId;
+                jdbcTemplate.execute(updateSql);
+            } else {
+                String updateSql = "update blade_user set role_id = null where id = " + userId;
+                jdbcTemplate.execute(updateSql);
+            }
+            return true;
+        }
+        return false;
     }
 
     @Override
@@ -128,10 +116,4 @@ public class SaveUserInfoByProjectServiceImpl
         return baseMapper.deleteByIdsPhysical(idsListTemp) > 0;
     }
 
-    private boolean updateUserRoleIdFour(List<String> saveRoleIdListReally, String userId) {
-        String roleIds = StringUtils.join(saveRoleIdListReally, ",");
-        int row = baseMapper.updateUserRoleIdById(roleIds, userId);
-        return row > 0;
-    }
-
 }

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

@@ -354,7 +354,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    public boolean updateBatchByIds(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId) {
+    public boolean updateBatchByIds(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId, Integer wbsType) {
         List<WbsTreePrivate> listPrivate = new ArrayList<>();
         List<WbsTreeContract> listContract = new ArrayList<>();
         //获取当前项目下所有合同段信息
@@ -397,13 +397,42 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             baseMapper.updateBatchWbsPrivate(listPrivate);
         }
         if (listContract.size() > 0) {
-            wbsTreeContractMapper.updateBatchWbsContract(listContract);
+            //获取合同段下的复制、新增节点
+            List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = new ArrayList<>();
+            for (ContractInfo contractInfo : contractInfos) {
+                List<WbsTreeContract> wbsTreeContractsCopyOrAdd = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                        .eq(WbsTreeContract::getProjectId, projectId)
+                        .eq(WbsTreeContract::getContractId, contractInfo.getId())
+                        .eq(WbsTreeContract::getWbsType, wbsType)
+                        .eq(WbsTreeContract::getType, 1)
+                        .isNotNull(WbsTreeContract::getOldId)
+                );
+                wbsTreeContractsCopyOrAddAll.addAll(wbsTreeContractsCopyOrAdd);
+            }
+
+            List<WbsTreeContract> listContractAdd = new ArrayList<>();
+
+            for (WbsTreeContract obj1 : listContract) {
+                for (WbsTreeContract obj2 : wbsTreeContractsCopyOrAddAll) {
+                    if (obj1.getId().toString().equals(obj2.getOldId()) && obj1.getProjectId().equals(obj2.getProjectId()) && obj1.getContractId().equals(obj2.getContractId())) {
+                        obj2.setNodeName(obj1.getNodeName());
+                        obj2.setNodeType(obj1.getNodeType());
+                        obj2.setMajorDataType(obj1.getMajorDataType());
+                        obj2.setTableType(obj1.getTableType());
+                        obj2.setTableOwner(obj1.getTableOwner());
+                        listContractAdd.add(obj2);
+                    }
+                }
+            }
+
+            listContractAdd.addAll(listContract);
+            wbsTreeContractMapper.updateBatchWbsContract(listContractAdd);
         }
         return true;
     }
 
     @Override
-    public boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String wbsId) {
+    public boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String wbsId, Integer wbsType) {
         List<WbsTreePrivate> listPrivate = new ArrayList<>();
         List<WbsTreeContract> listContract = new ArrayList<>();
         //获取当前项目下所有合同段信息
@@ -447,7 +476,36 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             baseMapper.updateBatchWbsPrivate(listPrivate);
         }
         if (listContract.size() > 0) {
-            wbsTreeContractMapper.updateBatchWbsContract(listContract);
+            //获取合同段下的复制、新增节点
+            List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = new ArrayList<>();
+            for (ContractInfo contractInfo : contractInfos) {
+                List<WbsTreeContract> wbsTreeContractsCopyOrAdd = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                        .eq(WbsTreeContract::getProjectId, projectId)
+                        .eq(WbsTreeContract::getContractId, contractInfo.getId())
+                        .eq(WbsTreeContract::getWbsType, wbsType)
+                        .eq(WbsTreeContract::getType, 1)
+                        .isNotNull(WbsTreeContract::getOldId)
+                );
+                wbsTreeContractsCopyOrAddAll.addAll(wbsTreeContractsCopyOrAdd);
+            }
+
+            List<WbsTreeContract> listContractAdd = new ArrayList<>();
+
+            for (WbsTreeContract obj1 : listContract) {
+                for (WbsTreeContract obj2 : wbsTreeContractsCopyOrAddAll) {
+                    if (obj1.getId().toString().equals(obj2.getOldId()) && obj1.getProjectId().equals(obj2.getProjectId()) && obj1.getContractId().equals(obj2.getContractId())) {
+                        obj2.setNodeName(obj1.getNodeName());
+                        obj2.setNodeType(obj1.getNodeType());
+                        obj2.setMajorDataType(obj1.getMajorDataType());
+                        obj2.setTableType(obj1.getTableType());
+                        obj2.setTableOwner(obj1.getTableOwner());
+                        listContractAdd.add(obj2);
+                    }
+                }
+            }
+
+            listContractAdd.addAll(listContract);
+            wbsTreeContractMapper.updateBatchWbsContract(listContractAdd);
         }
         return true;
     }
@@ -1519,7 +1577,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return R.data(table + "");
     }
 
-
     @Transactional(rollbackFor = Exception.class)
     public boolean insertBatch(Collection<WbsTreePrivate> entityList, int batchSize) {
         try {

+ 70 - 34
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -1,6 +1,5 @@
 package org.springblade.manager.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -37,7 +36,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.xml.soap.Text;
 import java.io.File;
 import java.io.IOException;
 import java.util.*;
@@ -308,26 +306,70 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     @Override
     public boolean syncNodeInfo(Long pKeyId) {
-        //当项目节点
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId).eq(WbsTreePrivate::getStatus, 1));
 
-        //获取当前项目下所有合同段引用过该节点的信息
-        List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
-                .eq(WbsTreeContract::getWbsId, wbsTreePrivate.getWbsId())
-                .eq(WbsTreeContract::getStatus, 1)
-                .and(obj -> obj.eq(WbsTreeContract::getId, wbsTreePrivate.getId()).or().eq(WbsTreeContract::getOldId, wbsTreePrivate.getId()))
-        );
+        //获取当前项目引用
+        String sql = "select reference_wbs_template_id,reference_wbs_template_type,reference_wbs_template_id_trial,reference_wbs_template_type_trial from m_project_info where id = " + wbsTreePrivate.getProjectId();
+        ProjectInfo projectInfo = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
+        assert projectInfo != null;
+        if (("1").equals(wbsTreePrivate.getWbsType())) {
+            //质检公有
+            if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType()))) {
+                //获取公有树
+                List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
+                //获取项目私节点、元素表
+                List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
+                //同步修改
+                this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+
+                //质检私有
+            } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("private").equals(projectInfo.getReferenceWbsTemplateType())) {
+                //获取私有引用根节点
+                WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateId()));
+                //获取私有引用项目树
+                List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRecord.getProjectId())
+                        .eq(WbsTreePrivate::getStatus, 1)
+                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, wbsTreePrivateRecord.getWbsId()).or().isNull(WbsTreePrivate::getWbsId))
+                );
+                //获取当前项目私有树、元素表
+                List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).or().isNull(WbsTreePrivate::getWbsId))
+                );
+                //同步修改
+                this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateId().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+            }
 
-        List<Long> pIds = wbsTreeContracts.stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
+        } else if (("2").equals(wbsTreePrivate.getWbsType())) {
+            //试验公有
+            if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
 
-        wbsTreeContractService.update(Wrappers.<WbsTreeContract>lambdaUpdate()
-                .set(WbsTreeContract::getNodeName, wbsTreePrivate.getNodeName())
-                .set(WbsTreeContract::getNodeType, wbsTreePrivate.getNodeType())
-                .set(WbsTreeContract::getMajorDataType, wbsTreePrivate.getMajorDataType())
-                .in(WbsTreeContract::getPKeyId, pIds)
-        );
+                List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
+
+                List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
+
+                this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+
+                //试验私有
+            } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
+
+                WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateIdTrial()));
 
+                List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                        .eq(WbsTreePrivate::getStatus, 1)
+                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, wbsTreePrivateRecord.getWbsId()).or().isNull(WbsTreePrivate::getWbsId))
+                );
+
+                List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateIdTrial()).or().isNull(WbsTreePrivate::getWbsId))
+                );
+
+                this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateIdTrial().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+            }
+        }
         return true;
     }
 
@@ -499,11 +541,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 idList2.addAll(collect);
             } else if (pawDTO.getReferenceType().equals("private")) {
                 //当前私有引用ids
-                List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
-                        .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
-                        .eq(WbsTreePrivate::getType, 1)
-                );
+                List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId()).eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 1));
                 List<String> collect = wbsTreePrivates2.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
                 idList2.addAll(collect);
             }
@@ -511,9 +549,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
             List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-            //1.同步修改节点基础信息、私有电签默认信息
+            //1.同步私有电签默认信息
             if (saveIds.size() == 0 && delIds.size() == 0) {
-                if (pawDTO.getReferenceType().equals("public")) {
+                /*if (pawDTO.getReferenceType().equals("public")) {
                     //获取公有wbs树所有的节点、元素表
                     List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, Long.parseLong(pawDTO.getWbsId())).eq(WbsTree::getStatus, 1));
 
@@ -523,7 +561,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     //修改公有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
                     this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, pawDTO.getProjectId());
 
-                }
+                }*/
 
                 if (pawDTO.getReferenceType().equals("private")) {
 
@@ -550,7 +588,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
 
                     //同步私有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
-                    this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
+                    //this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
 
                 }
 
@@ -618,6 +656,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 //3.新增
                 if (saveIds.size() > 0) {
                     if (saveIds.size() >= 1000) {
+                        //加锁
                         String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
                         if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
                             throw new ServiceException("请勿重复提交,请60秒后再尝试");
@@ -762,11 +801,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                         this.insertBatch(insertData1, 1000);
 
-                        //修改质检关联信息
                         if (pawDTO.getWbsType() == 1) {
                             projectInfoMapper.updateTemplateInfoQuality(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
                         }
-                        //修改试验关联信息
                         if (pawDTO.getWbsType() == 2) {
                             projectInfoMapper.updateTemplateInfoTrial(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
                         }
@@ -778,16 +815,15 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //电签
                         textDictInfoService.insertBatch(insertData3, 1000);
 
-                        //修改质检关联信息
                         if (pawDTO.getWbsType() == 1) {
                             projectInfoMapper.updateTemplateInfoQuality(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
-                        //修改试验关联信息
                         if (pawDTO.getWbsType() == 2) {
                             projectInfoMapper.updateTemplateInfoTrial(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
                     }
                     if (saveIds.size() >= 1000) {
+                        //解锁
                         bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
                         bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
                     }
@@ -826,14 +862,14 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Async
-    public boolean updateWbsInfoPrivateAsync(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId) {
-        return wbsTreePrivateService.updateBatchByIds(wbsTreeListAll, wbsTreePrivatesAll, projectId);
+    public boolean updateWbsInfoPrivateAsync(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId, Integer wbsType) {
+        return wbsTreePrivateService.updateBatchByIds(wbsTreeListAll, wbsTreePrivatesAll, projectId, wbsType);
     }
 
     @Async
     public boolean updateWbsInfoContractAsync(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String
-            projectId, String primaryKeyId) {
-        return wbsTreePrivateService.updateBatchByIds2(wbsTreePrivates, wbsTreePrivatesAllNow, projectId, primaryKeyId);
+            projectId, String primaryKeyId, Integer wbsType) {
+        return wbsTreePrivateService.updateBatchByIds2(wbsTreePrivates, wbsTreePrivatesAllNow, projectId, primaryKeyId, wbsType);
     }
 
     //新增独立表单库数据

+ 0 - 6
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -27,7 +27,6 @@ import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
 import org.springblade.system.user.enums.UserEnum;
 import org.springblade.system.user.service.IUserService;
-import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -115,11 +114,6 @@ public class UserClient implements IUserClient {
         return service.updateUserRoleIdTwo(userId, roleId);
     }
 
-    @Override
-    public boolean updateUserRoleIdThree(List<String> userIds, String roleIds) {
-        return service.updateUserRoleIdThree(userIds, roleIds);
-    }
-
     @Override
     public List<User> selectUserAll() {
         return service.selectUserAll();

+ 0 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java

@@ -237,8 +237,6 @@ public interface IUserService extends BaseService<User> {
 
     boolean updateUserRoleIdTwo(String userId, String roleId);
 
-    boolean updateUserRoleIdThree(List<String> userIds, String roleIds);
-
     List<UserVO> selectUserListByCondition();
 
     List<User> selectUserAll();

+ 39 - 78
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -61,11 +61,14 @@ import org.springblade.system.user.service.IUserService;
 import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import sun.security.rsa.RSASignature;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
 
@@ -85,6 +88,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
     private final BladeTenantProperties tenantProperties;
     private final ContractClient contractClient;
     private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
+    private final JdbcTemplate jdbcTemplate;
 
 
     @Override
@@ -591,102 +595,59 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
      */
     @Override
     public boolean updateUserRoleId(List<SaveUserInfoByProjectDTO> list) {
-        String roleId1 = "";
-        String id = "";
-        for (SaveUserInfoByProjectDTO l : list) {
-            roleId1 = l.getRoleId();
-            id = l.getUserId();
-        }
-        //去重
-        User user = baseMapper.selectById(id);
-        String roleId2 = user.getRoleId();
-        boolean b = false;
-        if (roleId2 != null && roleId2.contains(roleId1)) {
-            //存在
-            b = false;
-        } else {
-            if (StringUtils.isEmpty(roleId2) || ("").equals(roleId2)) {
-                //第一次新增
-                int row = baseMapper.updateRoleId(id, roleId1);
-                if (row > 0) {
-                    b = true;
-                }
-            } else {
-                int row = baseMapper.updateRoleIdById(id, roleId1);
-                if (row > 0) {
-                    b = true;
+        List<String> userIds = list.stream().map(SaveUserInfoByProjectDTO::getUserId).distinct().collect(Collectors.toList());
+        if (userIds.size() > 0) {
+            for (String userId : userIds) {
+                //更新user的roleId字段
+                String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + userId;
+                List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+
+                List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
+
+                if (collect.size() > 0) {
+                    String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
+                    String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + userId;
+                    jdbcTemplate.execute(updateSql);
+
+                } else {
+                    String updateSql = "update blade_user set role_id = null where id = " + userId;
+                    jdbcTemplate.execute(updateSql);
                 }
             }
+            return true;
         }
-        return b;
+        return false;
     }
 
     /**
      * 删除RoleId
      *
-     * @param id
-     * @param roleId
+     * @param id     = userId
+     * @param roleId = roleId
      * @return
      */
     @Override
     public boolean updateUserRoleIdTwo(String id, String roleId) {
-        User user = baseMapper.selectById(id);
-        if (user.getRoleId() != null && !user.getRoleId().equals("")) {
-            if (user.getRoleId().contains(roleId)) {
-                String[] split = user.getRoleId().split(",");
-                String replace = "";
-                if (split[0].equals(roleId)) {
-                    replace = user.getRoleId().replace(roleId, "");
-                } else {
-                    replace = user.getRoleId().replace("," + roleId, "");
-                }
-                //查询当前项目不同合同段中删除的角色是否存在多条引用同种角色,RoleId相同
-                List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectClient.searchUserInfoAndProject(id, roleId);
-                if (list.size() >= 2) {
-                    //不删除,还有合同段引用中
-                    return true;
-                } else {
-                    //删除
-                    int i = baseMapper.updateRoleIdByIdTwo(id, replace);
-                    return i > 0;
-                }
+        if (StringUtils.isNotEmpty(id)) {
+            //更新user的roleId字段
+            String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + id;
+            List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
 
+            List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
+
+            if (collect.size() > 0) {
+                String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
+                String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + id;
+                jdbcTemplate.execute(updateSql);
+            } else {
+                String updateSql = "update blade_user set role_id = null where id = " + id;
+                jdbcTemplate.execute(updateSql);
             }
+            return true;
         }
         return false;
     }
 
-    @Override
-    public boolean updateUserRoleIdThree(List<String> userIds, String roleIds) {
-        //获取userList
-        List<User> userList = baseMapper.selectBatchIds(userIds);
-        userList.forEach(user -> {
-            if ((user.getRoleId() != null) && (!user.getRoleId().equals(""))) {
-                if (user.getRoleId().contains(roleIds)) {
-                    String[] split = user.getRoleId().split(",");
-                    String replace = "";
-                    if (split[0].equals(roleIds)) {
-                        replace = user.getRoleId().replace(roleIds, "");
-                    } else {
-                        replace = user.getRoleId().replace("," + roleIds, "");
-                    }
-                    List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectClient.searchUserInfoAndProject(String.valueOf(user.getId()), roleIds);
-                    if (list.size() >= 2) {
-                        //不删除,还有合同段引用中
-                        return;
-                    } else {
-                        //删除
-                        int i = baseMapper.updateRoleIdByIdTwo(String.valueOf(user.getId()), replace);
-                        if (i > 0) {
-                            return;
-                        }
-                    }
-                }
-            }
-        });
-        return true;
-    }
-
     @Override
     public List<UserVO> selectUserListByCondition() {
         return baseMapper.selectUserListByCondition();