|
@@ -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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|