Commit 31a61011 authored by tianhongyang's avatar tianhongyang

Merge branch 'V20230915' of http://192.168.60.201/root/dsk-operate-sys into V20230915

parents 0fa8ec63 1e24d93b
......@@ -6,6 +6,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.dsk.biz.utils.ExcelUtils;
import com.dsk.common.annotation.Log;
import com.dsk.common.constant.GlobalConstants;
import com.dsk.common.core.controller.BaseController;
......@@ -13,7 +14,7 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.StreamUtils;
import com.dsk.common.utils.StringUtils;
......@@ -25,7 +26,6 @@ import com.dsk.system.domain.SysUser;
import com.dsk.system.domain.vo.SysUserExportVo;
import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.domain.vo.SysUserVo;
import com.dsk.system.listener.SysUserImportListener;
import com.dsk.system.service.ISysDeptService;
import com.dsk.system.service.ISysPostService;
import com.dsk.system.service.ISysRoleService;
......@@ -106,14 +106,39 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<List<SysUserImportVo>> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
List<SysUserImportVo> resultList = result.getList();
if (!resultList.isEmpty()) {
//ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
//List<SysUserImportVo> resultList = result.getList();
//if (!resultList.isEmpty()) {
// String key = GlobalConstants.BATCH_IMPORT_FAIL_USERS + LoginHelper.getUserId();
// RedisUtils.setCacheList(key, resultList);
// return R.fail(resultList);
//}
//return R.ok(result.getAnalysis());
//识别Excel内容
List<SysUserImportVo> userImportList = new ExcelUtils<>(SysUserImportVo.class).importExcel(file.getInputStream(), 2);
if (userImportList.isEmpty()) {
throw new ServiceException("表格中不存在待导入数据!");
}
for (SysUserImportVo userImportVo : userImportList) {
System.out.println("👉🏻:"+userImportVo);
}
//开始导入业务
List<SysUserImportVo> failImportUsers = userService.batchImportUser(userImportList, updateSupport);
//将导入失败用户存入Redis并返回给前端
if (!failImportUsers.isEmpty()) {
String key = GlobalConstants.BATCH_IMPORT_FAIL_USERS + LoginHelper.getUserId();
RedisUtils.setCacheList(key, resultList);
return R.fail(resultList);
//删除旧的
RedisUtils.deleteObject(key);
//写入新的
RedisUtils.setCacheList(key, failImportUsers);
return R.fail(failImportUsers);
}
return R.ok(result.getAnalysis());
return R.ok();
}
/**
......@@ -122,7 +147,7 @@ public class SysUserController extends BaseController {
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) {
List<Object> list = new ArrayList<>();
list.add(new SysUserImportVo("测试组织", "测试用户昵称", "18888888888", "测试角色"));
list.add(new SysUserImportVo("重庆市轨道交通(集团)有限公司", "刘国海", "18888888888", "运营部部长"));
ExcelUtil.exportTemplate(list, "用户数据", "excel/userImportTemplate.xlsx", response);
}
......
......@@ -5,7 +5,7 @@ VUE_APP_TITLE = 数字化经营履约全生命链路管理系统
ENV = 'production'
# 数字化经营履约全生命链路管理系统/生产环境
VUE_APP_BASE_API = 'https://szhapi.jiansheku.com/'
VUE_APP_BASE_API = 'https://szhapi.jiansheku.com'
# 子系统地址
VUE_APP_SUB_SYSTEM_ADDRESS = "https://plug.jiansheku.com"
VUE_APP_SUB_SYSTEM_ADDRESS = "https://plug.jiansheku.com"
\ No newline at end of file
......@@ -358,6 +358,9 @@ export default {
width: 100%;
background: #fff;
position: relative;
::v-deep .el-scrollbar__wrap{
margin-left: 64px;
}
.tags-view-wrapper {
.tags-view-item {
display: inline-block;
......@@ -393,9 +396,9 @@ export default {
background: #FFFFFF;
}
}
&:first-of-type {
margin-left: 64px;
}
/*&:first-of-type {*/
/*margin-left: 64px;*/
/*}*/
&:hover {
.el-icon-close{
background-color: rgba(153,153,153,0.3);
......
package com.dsk.system.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -23,38 +24,38 @@ public class SysUserImportVo implements Serializable {
/**
* 所属组织
*/
@ExcelProperty(value = "*所属组织")
@Excel(name = "所属组织(必填)")
private String deptName;
/**
* 用户昵称
*/
@ExcelProperty(value = "*用户昵称")
@Excel(name = "用户名称(必填)")
private String nickName;
/**
* 手机号码
*/
@ExcelProperty(value = "*手机号码")
@Excel(name = "手机号码(必填)")
private String phonenumber;
/**
* 用户角色
*/
@ExcelProperty(value = "*用户角色")
@Excel(name = "用户角色")
private String roleName;
/**
* 失败原因
* 该字段无需同步到模板中
*/
@ExcelProperty(value = "失败原因")
@Excel(name = "失败原因")
private String failReason;
public SysUserImportVo(String deptName, String nickName, String phonenumber, String roleName) {
this.deptName = deptName.replace(" ", "");
this.nickName = nickName.replace(" ", "");
this.phonenumber = phonenumber;
this.phonenumber = phonenumber.replace(" ", "");
this.roleName = roleName.replace(" ", "");
}
}
......@@ -3,6 +3,7 @@ package com.dsk.system.service;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.system.domain.SysUser;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.vo.SysUserImportVo;
import java.util.List;
......@@ -111,6 +112,15 @@ public interface ISysUserService {
*/
void checkUserAllowed(SysUser user);
/**
* 批量导入(更新)用户
*
* @param userImportList Excel中识别出的用户集合
* @param updateSupport 是否更新标识符
* @return 导入失败用户集合
*/
List<SysUserImportVo> batchImportUser(List<SysUserImportVo> userImportList, boolean updateSupport);
/**
* 校验用户是否有数据权限
*
......
package com.dsk.system.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ArrayUtil;
......@@ -22,7 +23,9 @@ import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StreamUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.ValidatorUtils;
import com.dsk.system.domain.*;
import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.mapper.*;
import com.dsk.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
......@@ -35,10 +38,7 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 用户 业务层处理
......@@ -250,6 +250,73 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public List<SysUserImportVo> batchImportUser(List<SysUserImportVo> userImportList, boolean updateSupport) {
//导入失败用户集合
ArrayList<SysUserImportVo> failImportUsers = new ArrayList<>();
//导入成功用户数量
int successNum = 0;
//导入失败用户数量
int failureNum = 0;
for (SysUserImportVo userVo : userImportList) {
//无需判断字段是否为空,若查不到,直接存入导入失败的用户集合
SysUser user = this.baseMapper.selectUserByPhonenumber(userVo.getPhonenumber());
SysDept dept = this.deptMapper.selectOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDeptName, userVo.getDeptName()));
SysRole role = this.roleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleName, userVo.getRoleName()));
try {
if (ObjectUtil.isNull(dept)) {
throw new ServiceException("部门不存在");
}
if (ObjectUtil.isNull(role)) {
throw new ServiceException("角色不存在");
}
// 验证是否存在这个用户
if (ObjectUtil.isNull(user)) {
user = BeanUtil.toBean(userVo, SysUser.class);
user.setUserName(userVo.getPhonenumber());
user.setDeptId(dept.getDeptId());
user.setDept(dept);
user.setRoleId(role.getRoleId());
user.setRoleIds(new Long[]{role.getRoleId()});
ValidatorUtils.validate(user);
user.setCreateBy(LoginHelper.getUsername());
this.insertUser(user);
} else if (updateSupport) {
Long userId = user.getUserId();
user = BeanUtil.toBean(userVo, SysUser.class);
user.setUserId(userId);
user.setUserName(userVo.getPhonenumber());
user.setDeptId(dept.getDeptId());
user.setDept(dept);
user.setRoleId(role.getRoleId());
user.setRoleIds(new Long[]{role.getRoleId()});
ValidatorUtils.validate(user);
this.checkUserAllowed(user);
this.checkUserDataScope(user.getUserId());
user.setUpdateBy(LoginHelper.getUsername());
this.updateUser(user);
log.info(++successNum + "、账号 " + user.getUserName() + " 更新成功");
} else {
userVo.setFailReason("手机号已存在");
log.error(++failureNum + "、账号 " + user.getUserName() + " 已存在");
failImportUsers.add(userVo);
}
} catch (Exception e) {
userVo.setFailReason(e.getMessage());
failImportUsers.add(userVo);
log.error(++failureNum + "、账号 " + userVo.getPhonenumber() + " 导入失败:", e);
}
}
return failImportUsers;
}
/**
* 校验用户是否有数据权限
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment