|
@@ -1,6 +1,5 @@
|
|
|
package com.qmth.teachcloud.common.service.impl;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
@@ -11,7 +10,9 @@ import com.qmth.boot.api.exception.ApiException;
|
|
|
import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
|
|
|
import com.qmth.teachcloud.common.bean.dto.LoginDto;
|
|
|
import com.qmth.teachcloud.common.bean.dto.UserDto;
|
|
|
+import com.qmth.teachcloud.common.bean.dto.excel.SysUserImportDto;
|
|
|
import com.qmth.teachcloud.common.bean.params.UserSaveParams;
|
|
|
+import com.qmth.teachcloud.common.bean.result.UserBatchDisposeResult;
|
|
|
import com.qmth.teachcloud.common.contant.SpringContextHolder;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.*;
|
|
@@ -24,10 +25,12 @@ import com.qmth.teachcloud.common.util.Base64Util;
|
|
|
import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.dao.DuplicateKeyException;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.LinkedMultiValueMap;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
@@ -72,6 +75,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|
|
@Resource
|
|
|
SysUserMapper sysUserMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ SysOrgService sysOrgService;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<UserDto> list(String loginName, String roleId, Boolean enable, String realName, Integer pageNumber, Integer pageSize) {
|
|
|
Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
|
|
@@ -411,19 +417,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //用户科目全量删除全量增加
|
|
|
- QueryWrapper<BasicUserCourse> basicUserCourseQueryWrapper = new QueryWrapper<>();
|
|
|
- basicUserCourseQueryWrapper.lambda().eq(BasicUserCourse::getUserId, sysUser.getId());
|
|
|
- basicUserCourseService.remove(basicUserCourseQueryWrapper);
|
|
|
-
|
|
|
- List<SysRole> sysRoles = sysRoleService.list(sysUser.getRoleIds(), RoleTypeEnum.QUESTION_TEACHER.name());
|
|
|
- if (sysRoles != null && sysRoles.size() > 0) {
|
|
|
- Long[] courseIds = sysUser.getCourseIds();
|
|
|
- if (courseIds.length == 0) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("请选择课程");
|
|
|
- }
|
|
|
- basicUserCourseService.saveBatch(sysUser);
|
|
|
- }
|
|
|
+// //用户科目全量删除全量增加
|
|
|
+// QueryWrapper<BasicUserCourse> basicUserCourseQueryWrapper = new QueryWrapper<>();
|
|
|
+// basicUserCourseQueryWrapper.lambda().eq(BasicUserCourse::getUserId, sysUser.getId());
|
|
|
+// basicUserCourseService.remove(basicUserCourseQueryWrapper);
|
|
|
+//
|
|
|
+// List<SysRole> sysRoles = sysRoleService.list(sysUser.getRoleIds(), RoleTypeEnum.QUESTION_TEACHER.name());
|
|
|
+// if (sysRoles != null && sysRoles.size() > 0) {
|
|
|
+// Long[] courseIds = sysUser.getCourseIds();
|
|
|
+// if (courseIds.length == 0) {
|
|
|
+// throw ExceptionResultEnum.ERROR.exception("请选择课程");
|
|
|
+// }
|
|
|
+// basicUserCourseService.saveBatch(sysUser);
|
|
|
+// }
|
|
|
} catch (Exception e) {
|
|
|
log.error("请求出错", e);
|
|
|
isSuccess = false;
|
|
@@ -451,4 +457,150 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|
|
public List<SysUser> filterFlowPrivilege(Long schoolId, Set<Long> orgIds) {
|
|
|
return sysUserMapper.filterFlowPrivilege(schoolId, orgIds);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> executeSysUserImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws NoSuchAlgorithmException {
|
|
|
+ SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
|
|
|
+ Long schoolId = sysUser.getSchoolId();
|
|
|
+ List<UserSaveParams> userSaveParamsList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < finalList.size(); i++) {
|
|
|
+ LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
|
|
|
+ List<Object> sysUserImportDtoList = excelMap.get(i);
|
|
|
+ assert sysUserImportDtoList != null;
|
|
|
+ List<SysUserImportDto> datasource = sysUserImportDtoList.stream().map(e -> {
|
|
|
+ SysUserImportDto sysUserImportDto = new SysUserImportDto();
|
|
|
+ BeanUtils.copyProperties(e, sysUserImportDto);
|
|
|
+ return sysUserImportDto;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ // TODO: 2021/7/16 校验datasource集合的正确性
|
|
|
+ map.put("dataCount", datasource.size());
|
|
|
+ System.out.println("datasource:\n" + datasource);
|
|
|
+
|
|
|
+ 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();
|
|
|
+ Long orgId = this.analyzeOrgName(schoolId,orgName);
|
|
|
+ List<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
|
|
|
+
|
|
|
+ SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getLoginName,name).eq(SysUser::getSchoolId,schoolId));
|
|
|
+ Long oldUserId = null;
|
|
|
+ if (Objects.nonNull(oldUser)){
|
|
|
+ oldUserId = oldUser.getId();
|
|
|
+ }
|
|
|
+ if (SystemConstant.longNotNull(oldUserId)){
|
|
|
+ // 编辑
|
|
|
+ userSaveParams.setId(oldUserId);
|
|
|
+ }
|
|
|
+ userSaveParams.setOrgId(orgId);
|
|
|
+ userSaveParams.setRealName(name);
|
|
|
+ userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
|
|
|
+ userSaveParams.setMobileNumber(phoneNumber);
|
|
|
+ userSaveParams.setCode(code);
|
|
|
+ userSaveParamsList.add(userSaveParams);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ UserBatchDisposeResult userBatchDisposeResult = this.disposeUserInfoHelp(userSaveParamsList,sysUser);
|
|
|
+ List<SysUser> sysUserList = userBatchDisposeResult.getUserList();
|
|
|
+ List<SysUserRole> sysUserRoleList = userBatchDisposeResult.getUserRoleList();
|
|
|
+ this.saveOrUpdateBatch(sysUserList);
|
|
|
+ sysUserRoleService.saveOrUpdateBatch(sysUserRoleList);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量处理用户信息帮助类
|
|
|
+ * @param userSaveParamsList 用户信息集合
|
|
|
+ * @param master 创建人信息
|
|
|
+ * @return 处理后的结果
|
|
|
+ */
|
|
|
+ private UserBatchDisposeResult disposeUserInfoHelp(List<UserSaveParams> userSaveParamsList,SysUser master) throws NoSuchAlgorithmException {
|
|
|
+ Long schoolId = master.getSchoolId();
|
|
|
+ List<SysUser> userList = new ArrayList<>();
|
|
|
+ List<SysUserRole> sysUserRoleList = new ArrayList<>();
|
|
|
+ for (UserSaveParams userSaveParams : userSaveParamsList) {
|
|
|
+ Gson gson = new Gson();
|
|
|
+ userSaveParams.setSchoolId(schoolId);
|
|
|
+ SysUser userCell = gson.fromJson(gson.toJson(userSaveParams), SysUser.class);
|
|
|
+ if (Objects.isNull(userCell.getId())) {//新增用户
|
|
|
+ userCell.insertInfo(master.getId());
|
|
|
+ userCell.setLoginName(userCell.getCode());
|
|
|
+ userList.add(userCell);
|
|
|
+ List<SysUserRole> sysUserRoleCell = commonService.disposeUserPrivilege(userCell, userSaveParams.getRoleIds());
|
|
|
+ sysUserRoleList.addAll(sysUserRoleCell);
|
|
|
+ }else {//修改用户
|
|
|
+ List<SysUserRole> oldRoleList = cacheService.userRolePrivilegeCache(userCell.getId());
|
|
|
+ List<Long> newRoleList = Arrays.asList(userSaveParams.getRoleIds());
|
|
|
+ Set<Long> dbUserRolesList = oldRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet());
|
|
|
+ int count = (int) dbUserRolesList.stream().filter(newRoleList::contains).count();
|
|
|
+ SysUser dbUser = this.getById(userCell.getId());
|
|
|
+ userCell.updateInfo(master.getId());
|
|
|
+ userList.add(userCell);
|
|
|
+ //如果修改了角色,需要重新登录
|
|
|
+ if (count == 0 || dbUserRolesList.size() != newRoleList.size()) {
|
|
|
+ QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
|
|
|
+ sysUserRoleQueryWrapper.lambda().eq(SysUserRole::getUserId, userCell.getId());
|
|
|
+ sysUserRoleService.remove(sysUserRoleQueryWrapper);
|
|
|
+
|
|
|
+ cacheService.removeUserRolePrivilegeCache(userCell.getId());
|
|
|
+ List<SysUserRole> sysUserRoleCell = commonService.disposeUserPrivilege(userCell, userSaveParams.getRoleIds());
|
|
|
+ sysUserRoleList.addAll(sysUserRoleCell);
|
|
|
+ commonService.removeUserInfo(userCell.getId(), true);
|
|
|
+ }
|
|
|
+ //如果修改了机构或手机号,需更新用户缓存
|
|
|
+ if (Objects.nonNull(dbUser.getOrgId())) {
|
|
|
+ if (dbUser.getOrgId().longValue() != userCell.getOrgId().longValue()
|
|
|
+ || !Objects.equals(dbUser.getMobileNumber(), userCell.getMobileNumber())) {
|
|
|
+ cacheService.updateUserCache(userCell.getId());
|
|
|
+ cacheService.updateUserAuthCache(userCell.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ UserBatchDisposeResult userBatchDisposeResult = new UserBatchDisposeResult();
|
|
|
+ userBatchDisposeResult.setUserList(userList);
|
|
|
+ userBatchDisposeResult.setUserRoleList(sysUserRoleList);
|
|
|
+ return userBatchDisposeResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析机构名称
|
|
|
+ * @param schoolId 学校id
|
|
|
+ * @param orgName 结构名称
|
|
|
+ * @return 机构id
|
|
|
+ */
|
|
|
+ private Long analyzeOrgName(Long schoolId,String orgName){
|
|
|
+ SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getEnable,true).eq(SysOrg::getSchoolId,schoolId).eq(SysOrg::getName,orgName));
|
|
|
+ if (Objects.isNull(sysOrg)){
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("系统中不存在excel导入的机构【" + orgName + "】");
|
|
|
+ }
|
|
|
+ return sysOrg.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据角色名称获取角色id集合
|
|
|
+ * @param schoolId 学校id
|
|
|
+ * @param roleName 角色名称组
|
|
|
+ * @return 角色集合
|
|
|
+ */
|
|
|
+ private List<Long> analyzeRoleName(Long schoolId, String roleName){
|
|
|
+ List<Long> roleIdList = new ArrayList<>();
|
|
|
+ String[] arr = roleName.split(",");
|
|
|
+ for (String cell : arr) {
|
|
|
+ SysRole sysRole = sysRoleService.getOne(new QueryWrapper<SysRole>().lambda()
|
|
|
+ .eq(SysRole::getEnable,true)
|
|
|
+ .eq(SysRole::getName,cell)
|
|
|
+ .eq(SysRole::getSchoolId,schoolId));
|
|
|
+ if (Objects.isNull(sysRole)){
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("系统中不存在excel导入的角色【" + cell + "】");
|
|
|
+ }
|
|
|
+ roleIdList.add(sysRole.getId());
|
|
|
+ }
|
|
|
+ return roleIdList;
|
|
|
+ }
|
|
|
}
|