浏览代码

伊宁项目更改相关 增加本地批量新增用户和关联关系

1037015548@qq.com 1 年之前
父节点
当前提交
cc24f6db65

+ 224 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/ActionApi.java

@@ -1,24 +1,46 @@
 package com.ruoyi.web.controller.tool;
 package com.ruoyi.web.controller.tool;
 
 
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.ShiroUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.framework.shiro.service.SysPasswordService;
 import com.ruoyi.system.domain.Dangan;
 import com.ruoyi.system.domain.Dangan;
 import com.ruoyi.system.domain.SysUserOnline;
 import com.ruoyi.system.domain.SysUserOnline;
 import com.ruoyi.system.domain.UserRelate;
 import com.ruoyi.system.domain.UserRelate;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.service.IDanganService;
 import com.ruoyi.system.service.IDanganService;
 import com.ruoyi.system.service.ISysUserOnlineService;
 import com.ruoyi.system.service.ISysUserOnlineService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.IUserRelateService;
 import com.ruoyi.system.service.IUserRelateService;
+import com.ruoyi.web.controller.system.SysUserController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+import org.apache.catalina.User;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.shiro.crypto.hash.Md5Hash;
 import org.apache.shiro.crypto.hash.Md5Hash;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import javax.annotation.Resource;
+import java.io.FileInputStream;
+import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.ruoyi.common.core.domain.AjaxResult.error;
 
 
 @Api("用户信息管理")
 @Api("用户信息管理")
 @RestController
 @RestController
@@ -48,11 +70,11 @@ public class ActionApi {
         logger.info("validateMessage"+validateMessage.toString());
         logger.info("validateMessage"+validateMessage.toString());
     try {
     try {
         if (!StringUtils.isNotEmpty(validateMessage.getClientKey())) {
         if (!StringUtils.isNotEmpty(validateMessage.getClientKey())) {
-            return AjaxResult.error("请求失败!");
+            return error("请求失败!");
 
 
         }
         }
         if (!StringUtils.isNotEmpty(validateMessage.getCid())) {
         if (!StringUtils.isNotEmpty(validateMessage.getCid())) {
-            return AjaxResult.error("请校验应用id!");
+            return error("请校验应用id!");
         }
         }
 //        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
 //        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
 
 
@@ -60,7 +82,7 @@ public class ActionApi {
         if (StringUtils.isEmpty(validateMessage.getAuthCode())) {
         if (StringUtils.isEmpty(validateMessage.getAuthCode())) {
 
 
 
 
-            return AjaxResult.error("授权码不能为空!");
+            return error("授权码不能为空!");
 
 
 
 
         }
         }
@@ -85,7 +107,7 @@ public class ActionApi {
                     long min = diff % nd % nh / nm;
                     long min = diff % nd % nh / nm;
                     if (min >= 1) {
                     if (min >= 1) {
                         logger.error("reqid已过期");
                         logger.error("reqid已过期");
-                        return AjaxResult.error("reqid已过期!");
+                        return error("reqid已过期!");
                     }
                     }
                     newReqid = "newReqid"+reqidlist[1];
                     newReqid = "newReqid"+reqidlist[1];
                 }
                 }
@@ -99,7 +121,7 @@ public class ActionApi {
 
 
         if (StringUtils.isNull(sysUserOnline)) {
         if (StringUtils.isNull(sysUserOnline)) {
             logger.error("授权已过期!");
             logger.error("授权已过期!");
-            return AjaxResult.error("授权已过期!");
+            return error("授权已过期!");
         }
         }
         String authCode = validateMessage.getAuthCode();
         String authCode = validateMessage.getAuthCode();
         Dangan dangan = danganService.selectDanganByDanganName(validateMessage.getCid());
         Dangan dangan = danganService.selectDanganByDanganName(validateMessage.getCid());
@@ -113,7 +135,7 @@ public class ActionApi {
         logger.info("authHash:"+auth);
         logger.info("authHash:"+auth);
         if (!auth.equals(authCode)) {
         if (!auth.equals(authCode)) {
             logger.error("授权码错误!");
             logger.error("授权码错误!");
-            return AjaxResult.error("授权码错误!");
+            return error("授权码错误!");
         }
         }
 
 
 
 
@@ -129,7 +151,7 @@ public class ActionApi {
 
 
         if (!StringUtils.isNotEmpty(userRelates)) {
         if (!StringUtils.isNotEmpty(userRelates)) {
             logger.error("授权已过期!");
             logger.error("授权已过期!");
-            return AjaxResult.error("授权已过期!");
+            return error("授权已过期!");
         }
         }
 
 
         UserRelate userRelate1 = userRelates.get(0);
         UserRelate userRelate1 = userRelates.get(0);
@@ -146,12 +168,206 @@ public class ActionApi {
         return ajaxResult;
         return ajaxResult;
         }catch(Exception ex){
         }catch(Exception ex){
             logger.error("异常:"+ex.getLocalizedMessage());
             logger.error("异常:"+ex.getLocalizedMessage());
-            return AjaxResult.error("异常");
+            return error("异常");
+        }
+    }
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private SysPasswordService passwordService;
+    @Autowired
+    private ISysUserService userService;
+
+
+    //TODO 本地使用·批量插入用户
+    @PostMapping("/testUtil")
+    public void testUtil(){
+        try {
+            String path = "D:\\工作文档\\武汉三环科普睿科\\会议笔记\\";
+            FileInputStream fileInputStream = new FileInputStream(path + "人员信息导入.xlsx");
+            // 1.创建一个工作簿。使得excel能操作的,这边他也能操作。
+//        Workbook workbook = new HSSFWorkbook(fileInputStream);
+            Workbook workbook = new XSSFWorkbook(fileInputStream);
+
+            // 2.得到表。
+            Sheet sheet = workbook.getSheetAt(0);
+//            // 3.得到行。
+//            Row row = sheet.getRow(0);
+//            // 4.得到列。
+//            Cell cell = row.getCell(0);
+//            // 读取值。一定要注意类型,否则会读取失败
+//            System.out.println(cell.getStringCellValue());// 字符串类型
+//            Cell cell1 = row.getCell(1);
+//            System.out.println(cell1.getNumericCellValue());// 数字类型
+            Integer success = 0;//成功数
+            List<String> unDept = new ArrayList<>();//不存在的部门
+            List<String> unUser = new ArrayList<>();//未成功用户
+            List<String> unDoubleUser = new ArrayList<>();//双手机用户
+            for (int i = 0; i < 262; i++) {
+                // 3.得到行。
+                Row row = sheet.getRow(i+1);
+                row.getCell(2).setCellType(CellType.STRING);
+                row.getCell(3).setCellType(CellType.STRING);
+                // 4.得到列。
+                Cell cell = row.getCell(0);//归属机构
+                Cell cell2 = row.getCell(1);//用户姓名
+                Cell cell3 = row.getCell(2);//登录名称
+                Cell cell4 = row.getCell(3);//手机号码
+                Cell cell5 = row.getCell(4);//子系统登录名
+
+                //TODO 查询归属机构的deptId
+                SysDept sysDept = null;
+                String text = cell.getStringCellValue();
+                if(text.indexOf("(")>=0) {
+                    Pattern pattern = Pattern.compile("\\((.*?)\\)");
+                    Matcher matcher = pattern.matcher(text);
+                    while (matcher.find()) {
+                        text = matcher.group(1);
+                    }
+                }
+                sysDept = sysDeptMapper.selectDeptByName(text);
+                if(sysDept!=null){
+                    try {
+                        //TODO 插入用户信息接口, 并建立关联
+                        SysUser sysUser = new SysUser();
+                        sysUser.setUserName(cell2.getStringCellValue());
+                        DecimalFormat df = new DecimalFormat("0");
+                        sysUser.setLoginName(cell3.getStringCellValue());
+                        sysUser.setPhonenumber(cell4.getStringCellValue());
+                        sysUser.setPassword("Yining" + cell5 + "@2024!");
+                        sysUser.setDeptId(sysDept.getDeptId());
+                        sysUser.setParentId(sysDept.getParentId());
+                        sysUser.setUserType("00");
+                        sysUser.setSex("2");
+                        sysUser.setUsbkey("1");
+                        Integer result = saveUser(sysUser);
+                        if (result > 0) {
+                            success = success + 1;
+                        }
+                    }catch(Exception ex){
+                        unDoubleUser.add(cell2.getStringCellValue());
+                    }
+                }else{
+                    if(!unDept.contains(text)){
+                        unDept.add(text);
+                    }
+                    if(!unUser.contains(cell2.getStringCellValue())){
+                        unUser.add(cell2.getStringCellValue());
+                    }
+                }
+            }
+            System.out.println("未找到部门:"+Arrays.toString(unDept.toArray()));
+            System.out.println("成功数:"+success);
+            System.out.println("未成功数:"+unUser.size());
+            System.out.println("未成功用户:"+Arrays.toString(unUser.toArray()));
+            System.out.println("双手机未成功用户:"+Arrays.toString(unDoubleUser.toArray()));
+
+            // 5.关闭流。
+            fileInputStream.close();
+        }catch(Exception ex){
+            ex.printStackTrace();
         }
         }
     }
     }
 
 
+    //TODO 本地使用·批量插入子系统关联
+    @PostMapping("/testRelate")
+    public void testRelate(){
+        try {
+            String path = "D:\\工作文档\\武汉三环科普睿科\\会议笔记\\";
+            FileInputStream fileInputStream = new FileInputStream(path + "人员信息导入.xlsx");
+            // 1.创建一个工作簿。使得excel能操作的,这边他也能操作。
+//        Workbook workbook = new HSSFWorkbook(fileInputStream);
+            Workbook workbook = new XSSFWorkbook(fileInputStream);
 
 
+            // 2.得到表。
+            Sheet sheet = workbook.getSheetAt(0);
 
 
+            List<Map<String, Object>> danganMap = new ArrayList<>();
+            Map map = new HashMap<>();
+            map.put("danganId", 12);
+            map.put("danganName", "行政办公");
+            Map map1 = new HashMap<>();
+            map1.put("danganId", 13);
+            map1.put("danganName", "人事管理");
+            Map map2 = new HashMap<>();
+            map2.put("danganId", 14);
+            map2.put("danganName", "智慧党建");
+            Map map3 = new HashMap<>();
+            map3.put("danganId", 15);
+            map3.put("danganName", "工程管理");
+            danganMap.add(map);
+            danganMap.add(map1);
+            danganMap.add(map2);
+            danganMap.add(map3);
 
 
+            Integer success = 0;
+            for (int i = 0; i < 262; i++) {
+                // 3.得到行。
+                Row row = sheet.getRow(i+1);
+                row.getCell(2).setCellType(CellType.STRING);
+                row.getCell(3).setCellType(CellType.STRING);
+                row.getCell(4).setCellType(CellType.STRING);
+                // 4.得到列。
+                Cell cell = row.getCell(0);//归属机构
+                Cell cell2 = row.getCell(1);//用户姓名
+                Cell cell3 = row.getCell(2);//登录名称
+                Cell cell4 = row.getCell(3);//手机号码
+                Cell cell5 = row.getCell(4);//子系统登录名
+                SysUser sysUser = sysUserMapper.selectUserByLoginName(cell3.getStringCellValue());
+                if(sysUser!=null) {
+                    for (Map obj : danganMap) {
+                        UserRelate userRelate = new UserRelate();
+                        userRelate.setUserId(sysUser.getUserId());
+                        userRelate.setUserName(sysUser.getUserName());
+                        userRelate.setLoginName(sysUser.getLoginName());
+                        userRelate.setDanganId(Long.valueOf(obj.get("danganId").toString()));
+                        userRelate.setDanganName(obj.get("danganName").toString());
+                        userRelate.setDanganLoginName(cell5.getStringCellValue());
+                        userRelate.setStatus("1");
+                        userRelate.setRelateTime(new Date());
+                        int result = saveRelate(userRelate);
+                        if(result>0){
+                            success = success+1;
+                        }
+                    }
+                }
+            }
+            System.out.println("关联成功数:"+success);
+        }catch(Exception ex){
+            ex.printStackTrace();
+        }
+    }
+
+    public int saveUser(SysUser user){
+        if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user)))
+        {
+//            return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
+            return -1;
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber())
+                && UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+//            return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
+            return -1;
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail())
+                && UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+//            return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在").get("code");
+            return -1;
+        }
+        user.setSalt(ShiroUtils.randomSalt());
+        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+        user.setCreateBy("admin");
+        return userService.insertUser(user);
+    }
 
 
+
+    public int saveRelate(UserRelate userRelate){
+        userRelate.setCreateBy("admin");
+        return userRelateService.insertUserRelate(userRelate);
+    }
 }
 }

+ 4 - 1
ruoyi-admin/src/main/resources/application-test.yml

@@ -56,7 +56,10 @@ spring:
 #                     url: jdbc:postgresql://119.96.165.176:5432/lhk_union_mgr_new?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
 #                     url: jdbc:postgresql://119.96.165.176:5432/lhk_union_mgr_new?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
 #                     username: postgres
 #                     username: postgres
 #                     password: kpr.23417.postgres
 #                     password: kpr.23417.postgres
-                      url: jdbc:postgresql://140.246.183.164:5432/union_mgr?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+#                      url: jdbc:postgresql://140.246.183.164:5432/union_mgr?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+#                      username: postgres
+#                      password: kpr.23417.postgres
+                      url: jdbc:postgresql://60.13.253.94:54321/union_mgr?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
                       username: postgres
                       username: postgres
                       password: kpr.23417.postgres
                       password: kpr.23417.postgres
                 # 从库数据源
                 # 从库数据源

+ 1 - 5
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java

@@ -1,10 +1,6 @@
 package com.ruoyi.common.utils.poi;
 package com.ruoyi.common.utils.poi;
 
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.ParameterizedType;

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java

@@ -114,4 +114,12 @@ public interface SysDeptMapper
      * @return 子部门数
      * @return 子部门数
      */
      */
     public int selectNormalChildrenDeptById(Long deptId);
     public int selectNormalChildrenDeptById(Long deptId);
+
+    /**
+     * 根据部门名称查询信息
+     *
+     * @param deptId 部门ID
+     * @return 部门信息
+     */
+    public SysDept selectDeptByName(String deptName);
 }
 }

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -121,4 +121,15 @@ public interface SysUserMapper
      * @return 结果
      * @return 结果
      */
      */
     public SysUser checkEmailUnique(String email);
     public SysUser checkEmailUnique(String email);
+
+
+
+    /**
+     * @Author Lx
+     * @Description //TODO 根据id集合查询用户
+     * @Date 14:42 2024/4/17
+     * @Param
+     * @return
+     **/
+    public List<SysUser> selectUserListByIds(Long[] ids);
 }
 }

+ 8 - 0
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -184,4 +184,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
         </foreach>
 	</update>
 	</update>
 
 
+	<select id="selectDeptByName" parameterType="String" resultMap="SysDeptResult">
+		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
+		d.province,d.city,d.town,d.street,d.dept_type,
+		(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
+		from sys_dept d
+		where d.dept_name = #{dept_name} and del_flag = '0'
+	</select>
+
 </mapper> 
 </mapper> 

+ 9 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -241,5 +241,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		LOCALTIMESTAMP(0)
 		LOCALTIMESTAMP(0)
  		)
  		)
 	</insert>
 	</insert>
-	
+
+	<select id="selectUserListByIds" parameterType="Long" resultMap="SysUserResult">
+		select u.user_id, u.dept_id, u.login_name, u.user_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		where u.del_flag = '0' and u.user_id in
+		<foreach collection="array" item="userId" open="(" separator="," close=")">
+			#{userId}
+		</foreach>
+	</select>
 </mapper> 
 </mapper>