deason 1 éve
szülő
commit
baef43097f

+ 3 - 3
pom.xml

@@ -66,17 +66,17 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>1.18.24</version>
+            <version>1.18.32</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
-            <version>3.0.5</version>
+            <version>3.3.4</version>
         </dependency>
         <dependency>
             <groupId>org.jsoup</groupId>
             <artifactId>jsoup</artifactId>
-            <version>1.15.2</version>
+            <version>1.17.2</version>
         </dependency>
 
         <dependency>

+ 262 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/batch_update_user/BatchUpdateUserTask.java

@@ -0,0 +1,262 @@
+package cn.com.qmth.examcloud.tool.service.batch_update_user;
+
+import cn.com.qmth.examcloud.tool.config.SysProperty;
+import cn.com.qmth.examcloud.tool.service.CommonService;
+import cn.com.qmth.examcloud.tool.service.batch_update_user.vo.RoleInfo;
+import cn.com.qmth.examcloud.tool.service.batch_update_user.vo.UserInfo;
+import cn.com.qmth.examcloud.tool.service.batch_update_user.vo.UserInfoListener;
+import cn.com.qmth.examcloud.tool.utils.HttpHelper;
+import cn.com.qmth.examcloud.tool.utils.JsonMapper;
+import cn.com.qmth.examcloud.tool.vo.user.User;
+import com.alibaba.excel.EasyExcel;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class BatchUpdateUserTask {
+
+    private final static Logger log = LoggerFactory.getLogger(BatchUpdateUserTask.class);
+
+    @Autowired
+    private SysProperty sysProperty;
+
+    @Autowired
+    private CommonService commonService;
+
+    public void start(User user) {
+        final String filePath = "C:/Users/deason/Desktop/用户账号批量创建模板.xlsx";
+
+        UserInfoListener dataListener = new UserInfoListener();
+        EasyExcel.read(filePath, UserInfo.class, dataListener).sheet().doRead();
+
+        this.execute(user, dataListener.getList());
+    }
+
+    private void execute(User loginUser, List<UserInfo> userList) {
+        Map<String, Long> roleMaps = this.queryRoles(loginUser);
+
+        boolean hasError = false;
+        for (int i = 0; i < userList.size(); i++) {
+            UserInfo user = userList.get(i);
+
+            if (StringUtils.isBlank(user.getLoginName())) {
+                log.warn("共{}条 第{}条 登录名不能为空!", userList.size(), i + 1);
+                hasError = true;
+            }
+
+            if (StringUtils.isBlank(user.getUserName())) {
+                log.warn("共{}条 第{}条 姓名不能为空!{}", userList.size(), i + 1, user.getLoginName());
+                hasError = true;
+            }
+
+            if (StringUtils.isBlank(user.getPsw())) {
+                log.warn("共{}条 第{}条 密码不能为空!{}", userList.size(), i + 1, user.getLoginName());
+                hasError = true;
+            }
+
+            if (!roleMaps.containsKey(user.getRoleName())) {
+                log.warn("共{}条 第{}条 角色内容有误!{}", userList.size(), i + 1, user.getLoginName());
+                hasError = true;
+            }
+
+            user.setUserName(user.getUserName().trim());
+            user.setLoginName(user.getLoginName().trim());
+            user.setPsw(user.getPsw().trim());
+        }
+
+        if (hasError) {
+            return;
+        }
+
+        for (int i = 0; i < userList.size(); i++) {
+            UserInfo user = userList.get(i);
+            this.createUser(loginUser, user, roleMaps);
+
+            UserInfo existUser = this.queryUserByLoginName(loginUser, user.getLoginName());
+            if (existUser == null) {
+                log.warn("共{}条 第{}条 用户创建失败!{}", userList.size(), i + 1, user.getLoginName());
+                continue;
+            }
+
+            this.updateDataRuleForExam(loginUser, existUser.getId(), user.getRefExam());
+            this.updateDataRuleForCourse(loginUser, existUser.getId(), user.getRefCourse());
+            this.updateDataRuleForOrg(loginUser, existUser.getId(), user.getRefOrg());
+
+            log.info("共{}条 第{}条 已执行!{}", userList.size(), i + 1, user.getLoginName());
+        }
+    }
+
+    private Map<String, Long> queryRoles(User loginUser) {
+        String url = loginUser.getServerUrl() + "/api/ecs_core/rolePrivilege/getRoles?includeSuperAdmin=true";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        String result = HttpHelper.post(url, headers, null);
+        log.info(result);
+
+        List<RoleInfo> roles = new JsonMapper().toList(result, RoleInfo.class);
+        Map<String, Long> maps = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(roles)) {
+            for (RoleInfo role : roles) {
+                maps.put(role.getRoleName(), role.getRoleId());
+            }
+        }
+
+        return maps;
+    }
+
+    private UserInfo queryUserByLoginName(User loginUser, String loginName) {
+        String url = loginUser.getServerUrl() + "/api/ecs_core/user/query";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        Map<String, String> params = new HashMap<>();
+        params.put("rootOrgId", String.valueOf(loginUser.getRootOrgId()));
+        params.put("loginName", loginName);
+
+        String result = HttpHelper.get(url, headers, params);
+        log.info(result);
+
+        List<UserInfo> users = new JsonMapper().toList(result, UserInfo.class);
+        if (CollectionUtils.isNotEmpty(users)) {
+            for (UserInfo user : users) {
+                if (user.getLoginName().equals(loginName)) {
+                    return user;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    private void createUser(User loginUser, UserInfo user, Map<String, Long> roleMaps) {
+        String url = loginUser.getServerUrl() + "/api/ecs_core/user";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        Long roleId = roleMaps.get(user.getRoleName());
+        List<Long> orgIds = this.toLongValues(user.getRefOrg());
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("rootOrgId", loginUser.getRootOrgId());
+        params.put("name", user.getUserName());
+        params.put("loginName", user.getLoginName());
+        params.put("password", user.getPsw());
+        params.put("phoneNumber", user.getPhoneNumber());
+        params.put("enable", true);
+        params.put("roleIds", new Long[]{roleId});
+        if (!orgIds.isEmpty()) {
+            params.put("orgId", orgIds.get(0));
+        }
+
+        try {
+            String result = HttpHelper.post(url, headers, params);
+            log.info(result);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+    }
+
+    private void updateDataRuleForExam(User loginUser, Long userId, String refExam) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        if (this.isAll(refExam)) {
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/default/status/update?type=EXAM&enabled=true&userId=" + userId;
+            HttpHelper.post(url, headers, null);
+        } else {
+            List<Long> refIds = this.toLongValues(refExam);
+            if (refIds.isEmpty()) {
+                return;
+            }
+
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/add";
+            Map<String, Object> params = new HashMap<>();
+            params.put("type", "EXAM");
+            params.put("userId", userId);
+            params.put("refIds", refIds);
+            HttpHelper.post(url, headers, params);
+        }
+    }
+
+    private void updateDataRuleForCourse(User loginUser, Long userId, String refCourse) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        if (this.isAll(refCourse)) {
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/default/status/update?type=COURSE&enabled=true&userId=" + userId;
+            HttpHelper.post(url, headers, null);
+        } else {
+            List<Long> refIds = this.toLongValues(refCourse);
+            if (refIds.isEmpty()) {
+                return;
+            }
+
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/add";
+            Map<String, Object> params = new HashMap<>();
+            params.put("type", "COURSE");
+            params.put("userId", userId);
+            params.put("refIds", refIds);
+            HttpHelper.post(url, headers, params);
+        }
+    }
+
+    private void updateDataRuleForOrg(User loginUser, Long userId, String refOrg) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("key", loginUser.getKey());
+        headers.put("token", loginUser.getToken());
+
+        if (this.isAll(refOrg)) {
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/default/status/update?type=ORG&enabled=true&userId=" + userId;
+            HttpHelper.post(url, headers, null);
+        } else {
+            List<Long> refIds = this.toLongValues(refOrg);
+            if (refIds.isEmpty()) {
+                return;
+            }
+
+            String url = loginUser.getServerUrl() + "/api/ecs_core/user/data/rule/add";
+            Map<String, Object> params = new HashMap<>();
+            params.put("type", "ORG");
+            params.put("userId", userId);
+            params.put("refIds", refIds);
+            HttpHelper.post(url, headers, params);
+        }
+    }
+
+    private List<Long> toLongValues(String str) {
+        if (StringUtils.isBlank(str)) {
+            return new ArrayList<>();
+        }
+
+        List<Long> values = new ArrayList<>();
+        String[] vv = str.split(",");
+        for (String v : vv) {
+            if (!StringUtils.isNumeric(v)) {
+                continue;
+            }
+            values.add(Long.valueOf(v));
+        }
+
+        return values;
+    }
+
+    private boolean isAll(String str) {
+        return "全部".equals(str);
+    }
+
+}

+ 22 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/batch_update_user/vo/RoleInfo.java

@@ -0,0 +1,22 @@
+package cn.com.qmth.examcloud.tool.service.batch_update_user.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Setter
+@Getter
+public class RoleInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long rootOrgId;
+
+    private Long roleId;
+
+    private String roleCode;
+
+    private String roleName;
+
+}

+ 40 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/batch_update_user/vo/UserInfo.java

@@ -0,0 +1,40 @@
+package cn.com.qmth.examcloud.tool.service.batch_update_user.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Setter
+@Getter
+public class UserInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ExcelProperty(value = "姓名", index = 0)
+    private String userName;
+
+    @ExcelProperty(value = "登录名", index = 1)
+    private String loginName;
+
+    @ExcelProperty(value = "角色", index = 2)
+    private String roleName;
+
+    @ExcelProperty(value = "考试权限", index = 3)
+    private String refExam;
+
+    @ExcelProperty(value = "课程权限", index = 4)
+    private String refCourse;
+
+    @ExcelProperty(value = "学习中心权限", index = 5)
+    private String refOrg;
+
+    @ExcelProperty(value = "密码", index = 6)
+    private String psw;
+
+    private String phoneNumber;
+
+}

+ 27 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/batch_update_user/vo/UserInfoListener.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.examcloud.tool.service.batch_update_user.vo;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UserInfoListener extends AnalysisEventListener<UserInfo> {
+
+    private List<UserInfo> list = new ArrayList<>();
+
+    @Override
+    public void invoke(UserInfo userInfo, AnalysisContext analysisContext) {
+        list.add(userInfo);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        // ignore
+    }
+
+    public List<UserInfo> getList() {
+        return list;
+    }
+
+}

+ 7 - 2
src/test/java/cn/com/qmth/examcloud/tool/ToolTest.java

@@ -5,6 +5,7 @@ import cn.com.qmth.examcloud.tool.config.SpringContextHolder;
 import cn.com.qmth.examcloud.tool.config.SysProperty;
 import cn.com.qmth.examcloud.tool.entity.TaskEntity;
 import cn.com.qmth.examcloud.tool.service.CommonService;
+import cn.com.qmth.examcloud.tool.service.batch_update_user.BatchUpdateUserTask;
 import cn.com.qmth.examcloud.tool.service.create_random_paper_template.CreateRandomPaperTemplateTask;
 import cn.com.qmth.examcloud.tool.service.exam_record_audit.ExamRecordDataAuditTask;
 import cn.com.qmth.examcloud.tool.service.export_student_photo.ExportStudentPhotoTask;
@@ -43,6 +44,9 @@ public class ToolTest {
     @Autowired
     private ExamRecordDataAuditTask examRecordDataAuditTask;
 
+    @Autowired
+    private BatchUpdateUserTask batchUpdateUserTask;
+
     @Test
     public void demo() throws Exception {
         User user = doLogin();
@@ -51,6 +55,7 @@ public class ToolTest {
         // queryPaperStructTask.start(user, 0L);
         // exportStudentPhotoTask.start(user);
         // examRecordDataAuditTask.start(user);
+        // batchUpdateUserTask.start(user);
         // createRandomPaperTemplate(user);
     }
 
@@ -71,8 +76,8 @@ public class ToolTest {
     }
 
     private User doLogin() {
-        // String serverUrl = "org0.dev39.qmth.com.cn";
-        String serverUrl = "ecs-test.ea100.com.cn";
+        String serverUrl = "org0.dev39.qmth.com.cn";
+        // String serverUrl = "ecs-test.ea100.com.cn";
         // String serverUrl = "ccnu.exam-cloud.cn";
         String loginName = "admin5";
         String password = "0";