Browse Source

4-bc 用户管理增加机构自动创建功能

caozixuan 2 năm trước cách đây
mục cha
commit
c7f337a0bd

+ 18 - 0
distributed-print/src/test/java/com/qmth/distributed/print/SysOrgServiceTest.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print;
 
 import com.alibaba.fastjson.JSON;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -10,6 +11,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -38,4 +40,20 @@ public class SysOrgServiceTest {
         Set<Long> result = sysOrgService.findDeepOrgIdListByOrgIdList(orgIdList);
         System.out.println(JSON.toJSONString(result));
     }
+
+    @Test
+    public void testCreateOrgList(){
+        List<String> orgInfoList = new ArrayList<>();
+        orgInfoList.add("化学学院/核化学/放射化学");
+        orgInfoList.add("化学学院/核化学/聚变化学");
+        orgInfoList.add("化学学院/生物化学/病理化学");
+        orgInfoList.add("物理学院/力学/流体力学");
+        orgInfoList.add("物理学院/电学/电磁学");
+
+        SysUser requestUser = new SysUser();
+        requestUser.setId(2L);
+        requestUser.setSchoolId(2L);
+        Map<String,Long> map = sysOrgService.createOrGetOrgByOrgInfo(orgInfoList,requestUser);
+        System.out.println(JSON.toJSONString(map));
+    }
 }

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -117,6 +117,7 @@ public interface SysOrgService extends IService<SysOrg> {
 
     /**
      * 根据机构信息集合创建或获取机构
+     *
      * @param orgInfoList 机构信息集合(eg. 化学学院/核化学(院系)/放射化学  ||  化学学院/核化学(院系)/聚变化学)
      * @param requestUser 请求的用户
      * @return 根据机构信息创建或查询到的最后一级机构id
@@ -128,5 +129,5 @@ public interface SysOrgService extends IService<SysOrg> {
      * k -> 化学学院/核化学(院系)/聚变化学 v -> 111111111111114
      * )
      */
-    Map<String,Long> createOrGetOrgByOrgInfo(List<String> orgInfoList, SysUser requestUser);
+    Map<String, Long> createOrGetOrgByOrgInfo(List<String> orgInfoList, SysUser requestUser);
 }

+ 49 - 42
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -395,56 +395,51 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Map<String, Long> createOrGetOrgByOrgInfo(List<String> orgInfoList, SysUser requestUser) {
+        Map<String, Long> map = new HashMap<>();
         for (String orgInfo : orgInfoList) {
-
-        }
-        return null;
-    }
-
-    private Map<String, Long> createOrGetOrg(Map<String, Long> map, String orgInfo, SysUser requestUser) {
-        // 父机构id
-        Long schoolId = requestUser.getSchoolId();
-        Long parentId = requestUser.getSchoolId();
-
-        String[] arr = orgInfo.split(SystemConstant.ORG_SPLIT);
-        for (int i = 0; i < arr.length; i++) {
-            SysOrg targetOrg;
-            String orgDetailName = "";
-            String orgName = arr[i];
-
-            // 拼机构元素详细名称
-            for (int j = 0; j <= i; j++) {
-                orgDetailName = orgDetailName + arr[j] + SystemConstant.ORG_SPLIT;
-            }
-            if (orgDetailName.length() > 0) {
-                orgDetailName = orgDetailName.substring(0, orgDetailName.length() - SystemConstant.ORG_SPLIT.length());
-            }
-            if (!map.containsKey(orgDetailName)) {
-                // 在map中没有找到,就去数据库查找
-                targetOrg = this.getOne(new QueryWrapper<SysOrg>()
-                        .lambda()
-                        .eq(SysOrg::getSchoolId, schoolId)
-                        .eq(SysOrg::getName, orgName)
-                        .eq(SysOrg::getParentId, parentId));
-
-                // 如果在数据库中也没有找到这个机构元素,则新建当前机构元素并保存在数据库
-                if (Objects.isNull(targetOrg)) {
-                    targetOrg = this.saveOrgElement(parentId, orgName, requestUser);
+            // 父机构id
+            Long schoolId = requestUser.getSchoolId();
+            Long parentId = requestUser.getSchoolId();
+
+            String[] arr = orgInfo.split(SystemConstant.ORG_SPLIT);
+            for (int i = 0; i < arr.length; i++) {
+                SysOrg targetOrg;
+                String orgDetailName = "";
+                String orgName = arr[i];
+
+                // 拼机构元素详细名称
+                for (int j = 0; j <= i; j++) {
+                    orgDetailName = orgDetailName + arr[j] + SystemConstant.ORG_SPLIT;
                 }
+                if (orgDetailName.length() > 0) {
+                    orgDetailName = orgDetailName.substring(0, orgDetailName.length() - SystemConstant.ORG_SPLIT.length());
+                }
+                if (!map.containsKey(orgDetailName)) {
+                    // 在map中没有找到,就去数据库查找
+                    targetOrg = this.getOne(new QueryWrapper<SysOrg>()
+                            .lambda()
+                            .eq(SysOrg::getSchoolId, schoolId)
+                            .eq(SysOrg::getName, orgName)
+                            .eq(SysOrg::getParentId, parentId));
+
+                    // 如果在数据库中也没有找到这个机构元素,则新建当前机构元素并保存在数据库
+                    if (Objects.isNull(targetOrg)) {
+                        targetOrg = this.saveOrgElement(parentId, orgName, requestUser);
+                    }
 
-                // 不管是已有的还是新建的机构,都保存在map中方便后面查询 格式:(k -> 化学学院/核化学/聚变化学 v -> 11111111111)
-                map.put(orgDetailName, targetOrg.getId());
-                // 更新parentId为该机构元素的id,并作为数组下一个节点的父机构id
-                parentId = targetOrg.getId();
-            } else {
-                // 如果map中本身就有该机构元素,则直接获取该机构元素id作为 数组下一个节点的父机构id
-                parentId = map.get(orgDetailName);
+                    // 不管是已有的还是新建的机构,都保存在map中方便后面查询 格式:(k -> 化学学院/核化学/聚变化学 v -> 11111111111)
+                    map.put(orgDetailName, targetOrg.getId());
+                    // 更新parentId为该机构元素的id,并作为数组下一个节点的父机构id
+                    parentId = targetOrg.getId();
+                } else {
+                    // 如果map中本身就有该机构元素,则直接获取该机构元素id作为 数组下一个节点的父机构id
+                    parentId = map.get(orgDetailName);
+                }
             }
         }
         return map;
     }
 
-
     /**
      * 根据子机构id深度优先搜索其父机构们
      *
@@ -505,6 +500,18 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
      * @return 新增后的机构id
      */
     private SysOrg saveOrgElement(Long parentId, String orgName, SysUser requestUser) {
+        SysOrg checkOrg = this.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getName,orgName).eq(SysOrg::getSchoolId,requestUser.getSchoolId()));
+        if (Objects.nonNull(checkOrg)){
+            // 数据库中存在该名字的机构
+            SysOrg p1 = this.getById(checkOrg.getParentId());
+            SysOrg p2 = this.getById(parentId);
+            if (SystemConstant.isOneNull(p1,p2)){
+                throw ExceptionResultEnum.ERROR.exception("未找到父机构");
+            }
+            throw ExceptionResultEnum.ERROR.exception("机构创建失败:机构【" + orgName + "】存在多个不同的上级机构 " +
+                    "-> 已存在机构关系【..." + p1.getName() + "/" + orgName + "...】,却又创建机构关系【..." + p2.getName() + "/" + orgName + "...】");
+        }
+
         SysOrg sysOrg = new SysOrg();
         sysOrg.setSchoolId(requestUser.getSchoolId());
         sysOrg.insertInfo(requestUser.getId());

+ 49 - 47
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -713,63 +713,65 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             if (sysUserImportDtoList.get(0) instanceof DescribeImportDto) {
                 continue;
             }
+
             //  处理机构
-            if (sysUserImportDtoList.get(0) instanceof SysUserImportDto){
+            if (sysUserImportDtoList.get(0) instanceof SysUserImportDto) {
                 List<SysUserImportDto> datasource = sysUserImportDtoList.stream().map(e -> {
                     SysUserImportDto sysUserImportDto = new SysUserImportDto();
-                    BeanUtils.copyProperties(e,sysUserImportDto);
+                    BeanUtils.copyProperties(e, sysUserImportDto);
                     return sysUserImportDto;
                 }).collect(Collectors.toList());
                 // 机构信息
                 List<String> orgInfoList = datasource.stream().map(SysUserImportDto::getOrgName).distinct().collect(Collectors.toList());
+                // 提前创建或获取机构信息并存入map
+                Map<String, Long> orgInfoMap = sysOrgService.createOrGetOrgByOrgInfo(orgInfoList, requestUser);
+                for (SysUserImportDto sysUserImportDto : datasource) {
+                    String name = sysUserImportDto.getName();
+                    String code = sysUserImportDto.getCode();
+                    String phoneNumber = sysUserImportDto.getPhoneNumber();
+                    String orgName = sysUserImportDto.getOrgName();
+                    if (!orgInfoMap.containsKey(orgName)){
+                        throw ExceptionResultEnum.ERROR.exception("在解析的机构map集合中,没有找到excel数据中的用户机构名称【" + orgName + "】");
+                    }
+                    // 直接解析机构id
+                    Long orgId = orgInfoMap.get(orgName);
+                    String roleName = sysUserImportDto.getRoleName();
 
-            }
-
-
-
-
-            for (int y = 0; y < Objects.requireNonNull(sysUserImportDtoList).size(); y++) {
-                SysUserImportDto sysUserImportDto = (SysUserImportDto) sysUserImportDtoList.get(y);
-                String name = sysUserImportDto.getName();
-                String code = sysUserImportDto.getCode();
-                String phoneNumber = sysUserImportDto.getPhoneNumber();
-                String orgName = sysUserImportDto.getOrgName();
-                String roleName = sysUserImportDto.getRoleName();
+                    UserSaveParams userSaveParams = new UserSaveParams();
 
-                UserSaveParams userSaveParams = new UserSaveParams();
-                Long orgId = this.analyzeOrgName(schoolId, orgName);
-                LinkedHashSet<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
+                    LinkedHashSet<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
 
-                SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getCode, code).eq(SysUser::getSchoolId, schoolId));
-                Long oldUserId = null;
-                Set<Long> oldRoleIdSet = new HashSet<>();
-                if (Objects.nonNull(oldUser)) {
-                    oldUserId = oldUser.getId();
-                    oldRoleIdSet = new HashSet<>(sysRoleService.getUserRoles(oldUserId));
-                }
-                String loginName = code;
-                if (SystemConstant.longNotNull(oldUserId)) {
-                    // 编辑
-                    userSaveParams.setId(oldUserId);
-                    loginName = oldUser.getLoginName();
-                }
-                userSaveParams.setOrgId(orgId);
-                userSaveParams.setRealName(name);
-                userSaveParams.setLoginName(loginName);
-                userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
-                if (SystemConstant.strNotNull(phoneNumber)) {
-                    userSaveParams.setMobileNumber(phoneNumber);
-                }
-                userSaveParams.setCode(code);
-                userSaveParams.setSchoolId(schoolId);
-                Long upUserId = this.saveUserCommon(userSaveParams, requestUser.getId());
-                if (SystemConstant.longNotNull(upUserId)) {
-
-                    Set<Long> currentRoleIdSet = new HashSet<>(Arrays.asList(userSaveParams.getRoleIds()));
-                    List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(oldRoleIdSet, currentRoleIdSet, upUserId, true, requestUser.getId());
-                    List<UserPushParam> userPushParamCell = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
-                    if (userPushParamCell != null && userPushParamCell.size() > 0) {
-                        userPushParamList.addAll(userPushParamCell);
+                    SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getCode, code).eq(SysUser::getSchoolId, schoolId));
+                    Long oldUserId = null;
+                    Set<Long> oldRoleIdSet = new HashSet<>();
+                    if (Objects.nonNull(oldUser)) {
+                        oldUserId = oldUser.getId();
+                        oldRoleIdSet = new HashSet<>(sysRoleService.getUserRoles(oldUserId));
+                    }
+                    String loginName = code;
+                    if (SystemConstant.longNotNull(oldUserId)) {
+                        // 编辑
+                        userSaveParams.setId(oldUserId);
+                        loginName = oldUser.getLoginName();
+                    }
+                    userSaveParams.setOrgId(orgId);
+                    userSaveParams.setRealName(name);
+                    userSaveParams.setLoginName(loginName);
+                    userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
+                    if (SystemConstant.strNotNull(phoneNumber)) {
+                        userSaveParams.setMobileNumber(phoneNumber);
+                    }
+                    userSaveParams.setCode(code);
+                    userSaveParams.setSchoolId(schoolId);
+                    Long upUserId = this.saveUserCommon(userSaveParams, requestUser.getId());
+                    if (SystemConstant.longNotNull(upUserId)) {
+
+                        Set<Long> currentRoleIdSet = new HashSet<>(Arrays.asList(userSaveParams.getRoleIds()));
+                        List<PushUserTrack> pushUserTrackList = pushUserTrackService.createPushTrackUser(oldRoleIdSet, currentRoleIdSet, upUserId, true, requestUser.getId());
+                        List<UserPushParam> userPushParamCell = pushUserTrackService.analyzeUserPushSpecialPrivilege(pushUserTrackList);
+                        if (userPushParamCell != null && userPushParamCell.size() > 0) {
+                            userPushParamList.addAll(userPushParamCell);
+                        }
                     }
                 }
             }