Browse Source

添加组织架构批量接口

mssql
Yen 3 years ago
parent
commit
96ced34865
  1. 7
      src/main/java/com/qs/serve/common/util/IdUtil.java
  2. 27
      src/main/java/com/qs/serve/modules/sys/controller/SysDeptController.java
  3. 189
      src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java
  4. 6
      src/main/java/com/qs/serve/modules/sys/entity/SysDept.java
  5. 7
      src/main/java/com/qs/serve/modules/sys/entity/SysUser.java
  6. 17
      src/main/java/com/qs/serve/modules/sys/entity/bo/SysDeptBatchBo.java
  7. 17
      src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBatchBo.java
  8. 68
      src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBo.java
  9. 10
      src/main/java/com/qs/serve/modules/sys/service/SysAttachService.java
  10. 2
      src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java

7
src/main/java/com/qs/serve/common/util/IdUtil.java

@ -13,6 +13,7 @@ import java.util.Random;
public class IdUtil extends cn.hutool.core.util.IdUtil { public class IdUtil extends cn.hutool.core.util.IdUtil {
private static final long BASE_DIFF_MILLIS = 1648013774104L; private static final long BASE_DIFF_MILLIS = 1648013774104L;
private static final long BASE_DIFF_MILLIS2 = 1578585779603640320L;
private static final Snowflake snowflake = getSnowflake(1,1); private static final Snowflake snowflake = getSnowflake(1,1);
@ -24,6 +25,10 @@ public class IdUtil extends cn.hutool.core.util.IdUtil {
return prefix + String.format("%03d", end2); return prefix + String.format("%03d", end2);
} }
public static void main(String[] args) {
System.out.println(getSnowFlakeId());
}
public static Long timeStampLong() { public static Long timeStampLong() {
return System.currentTimeMillis()-BASE_DIFF_MILLIS; return System.currentTimeMillis()-BASE_DIFF_MILLIS;
} }
@ -45,7 +50,7 @@ public class IdUtil extends cn.hutool.core.util.IdUtil {
} }
public static long getSnowFlakeId(){ public static long getSnowFlakeId(){
return snowflake.nextId(); return snowflake.nextId()-BASE_DIFF_MILLIS2;
} }
} }

27
src/main/java/com/qs/serve/modules/sys/controller/SysDeptController.java

@ -11,6 +11,7 @@ import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.TreeUtil; import com.qs.serve.common.util.TreeUtil;
import com.qs.serve.modules.sys.entity.SysDept; import com.qs.serve.modules.sys.entity.SysDept;
import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.entity.bo.SysDeptBatchBo;
import com.qs.serve.modules.sys.entity.dto.SysDeptTranParam; import com.qs.serve.modules.sys.entity.dto.SysDeptTranParam;
import com.qs.serve.modules.sys.entity.dto.SysDeptTreeNode; import com.qs.serve.modules.sys.entity.dto.SysDeptTreeNode;
import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.sys.mapper.SysUserMapper;
@ -82,9 +83,6 @@ public class SysDeptController {
treeNode.setSort(0); treeNode.setSort(0);
return treeNode; return treeNode;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if(param.getLoadRepair()!=null&&param.getLoadRepair().equals(1)){
return R.ok(treeNodes);
}
treeNodes = TreeUtil.buildByRecursive(treeNodes,TreeUtil.DEFAULT_PID_STRING); treeNodes = TreeUtil.buildByRecursive(treeNodes,TreeUtil.DEFAULT_PID_STRING);
return R.ok(treeNodes); return R.ok(treeNodes);
} }
@ -122,6 +120,29 @@ public class SysDeptController {
return R.isTrue(result); return R.isTrue(result);
} }
/**
* (批量)保存,建议每次小于800条
* @param param
* @return
*/
@SysLog(title = "部门",biz = BizType.INSERT)
@PostMapping("/saveBatch")
@PreAuthorize("hasRole('sys:dept:insert')")
public R<?> saveBatch(@RequestBody @Valid SysDeptBatchBo param){
List<SysDept> deptList = param.getDeptList();
List<String> ids = deptList.stream().map(d->d.getId()).collect(Collectors.toList());
LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
lqw.in(SysDept::getId,ids);
lqw.select(SysDept::getId);
List<SysDept> sysDeptIdObjs = sysDeptService.list(lqw);
List<String> existIds = sysDeptIdObjs.stream().map(SysDept::getId).collect(Collectors.toList());
List<SysDept> deptList4Upd = deptList.stream().filter(dep->existIds.contains(dep.getId())).collect(Collectors.toList());
List<SysDept> deptList4save = deptList.stream().filter(dep->!existIds.contains(dep.getId())).collect(Collectors.toList());
sysDeptService.saveBatch(deptList4save);
sysDeptService.updateBatchById(deptList4Upd);
return R.ok();
}
/** /**
* 根据ID更新 * 根据ID更新
* @param param * @param param

189
src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java

@ -14,6 +14,8 @@ import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.util.*; import com.qs.serve.common.util.*;
import com.qs.serve.modules.sys.entity.*; import com.qs.serve.modules.sys.entity.*;
import com.qs.serve.modules.sys.entity.bo.SysUserBatchBo;
import com.qs.serve.modules.sys.entity.bo.SysUserBo;
import com.qs.serve.modules.sys.entity.dto.*; import com.qs.serve.modules.sys.entity.dto.*;
import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.sys.mapper.SysUserMapper;
import com.qs.serve.modules.sys.service.*; import com.qs.serve.modules.sys.service.*;
@ -43,16 +45,13 @@ import java.util.stream.Collectors;
public class SysUserController { public class SysUserController {
private SysUserService sysUserService; private SysUserService sysUserService;
private SysUserMapper sysUserMapper;
private SysDeptService sysDeptService; private SysDeptService sysDeptService;
private SysPostService sysPostService; private SysPostService sysPostService;
private SysRoleService sysRoleService; private SysRoleService sysRoleService;
private WxUserService wxUserService; private WxUserService wxUserService;
private RedisService redisService;
/** /**
* 个人登录信息 * (个人)登录信息
* @return * @return
*/ */
@PostMapping("/info") @PostMapping("/info")
@ -69,24 +68,8 @@ public class SysUserController {
return R.ok(sysUserVo); return R.ok(sysUserVo);
} }
/** /**
* 个人信息详细 * (个人)密码更新
* @return
*/
@GetMapping("/detail")
public R<SysUser> detail(){
LoginUser loginUser = AuthContextUtils.getLoginUser();
SysUser sysUser = sysUserService.getById(loginUser.getUserId());
sysUser.setAuthorIds(loginUser.getAuthorIds());
sysUser.setAuthorList(loginUser.getAuthorList());
sysUserService.relateInfo(sysUser);
sysUser.setPassword(null);
return R.ok(sysUser);
}
/**
* 个人密码更新
* @param param * @param param
* @return * @return
*/ */
@ -106,39 +89,49 @@ public class SysUserController {
return R.error(); return R.error();
} }
/** /**
* 获取检测工号 * 信息详细
* @return * @return
*/ */
@LimitSubmit(message = "请勿频繁操作!!") @GetMapping("/detail")
@GetMapping("/getUserCode") public R<SysUser> detail(){
@PreAuthorize("hasRole('sys:user:query')") LoginUser loginUser = AuthContextUtils.getLoginUser();
public R<String> getUserCode(){ SysUser sysUser = sysUserService.getById(loginUser.getUserId());
LocalDateTime localDateTime = LocalDateTime.now(); sysUser.setAuthorIds(loginUser.getAuthorIds());
String timeKey = localDateTime.getYear() + String.format("%02d",localDateTime.getMonthValue()); sysUser.setAuthorList(loginUser.getAuthorList());
String key = RedisCacheKeys.SYS_USER_CODE_KEY + timeKey; sysUserService.relateInfo(sysUser);
Integer val = redisService.getInteger(key); sysUser.setPassword(null);
if(val==null){ return R.ok(sysUser);
val = 1;
}else {
val +=1;
}
redisService.set(key,val);
return R.ok("A"+timeKey+val,R.SUCCESS_TIPS);
} }
/**
* 检测工号是否已被使用
* @param code //获取检测工号
* @return // @LimitSubmit(message = "请勿频繁操作!!")
*/ // @GetMapping("/getUserCode")
@GetMapping("/checkCode") // @PreAuthorize("hasRole('sys:user:query')")
@PreAuthorize("hasRole('sys:user:query')") // public R<String> getUserCode(){
public R<Boolean> checkCode(String code){ // LocalDateTime localDateTime = LocalDateTime.now();
return R.ok(sysUserMapper.checkCode(code)>0L); // String timeKey = localDateTime.getYear() + String.format("%02d",localDateTime.getMonthValue());
} // String key = RedisCacheKeys.SYS_USER_CODE_KEY + timeKey;
// Integer val = redisService.getInteger(key);
// if(val==null){
// val = 1;
// }else {
// val +=1;
// }
// redisService.set(key,val);
// return R.ok("A"+timeKey+val,R.SUCCESS_TIPS);
// }
//检测工号是否已被使用
// @GetMapping("/checkCode")
// @PreAuthorize("hasRole('sys:user:query')")
// public R<Boolean> checkCode(String code){
// return R.ok(sysUserMapper.checkCode(code)>0L);
// }
/** /**
@ -208,14 +201,15 @@ public class SysUserController {
/** /**
* 保存 * 保存
* @param param * @param userBo
* @return * @return
*/ */
@SysLog(title = "人员",desc = "用户新增",biz = BizType.INSERT) @SysLog(title = "人员",desc = "用户新增",biz = BizType.INSERT)
@PostMapping("/save") @PostMapping("/save")
@PreAuthorize("hasRole('sys:user:insert')") @PreAuthorize("hasRole('sys:user:insert')")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public R<?> save(@RequestBody @Valid SysUser param){ public R<?> save(@RequestBody @Valid SysUserBo userBo){
SysUser param = CopierUtil.copy(userBo,new SysUser());
//设置普通管理员 //设置普通管理员
param.setSuperFlag(0); param.setSuperFlag(0);
param.setTenantId(AuthContextUtils.getTenant()); param.setTenantId(AuthContextUtils.getTenant());
@ -228,43 +222,27 @@ public class SysUserController {
} }
param.setAccount(param.getMobile()); param.setAccount(param.getMobile());
param.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD)); param.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD));
if(param.getMobile()!=null){
param.setAccount(param.getMobile());
}
boolean result = sysUserService.save(param); boolean result = sysUserService.save(param);
if(param.getId()!=null&& com.qs.serve.common.util.CollectionUtil.isNotEmpty(param.getRoleIds())){ if(param.getId()!=null&& com.qs.serve.common.util.CollectionUtil.isNotEmpty(userBo.getRoleIds())){
sysRoleService.saveUserRole4Edit(param.getRoleIds(),param.getId()); sysRoleService.saveUserRole4Edit(userBo.getRoleIds(),param.getId());
} }
return R.isTrue(result); return R.isTrue(result);
} }
/** /**
* 重置用户密码 * 更新
* @param uid * @param userBo
* @return
*/
@SysLog(title = "人员",desc = "重置密码",biz = BizType.RESET)
@PostMapping("/resetPwd/{uid}")
@PreAuthorize("hasRole('sys:user:reset')")
public R<?> resetPwd(@PathVariable("uid") String uid){
SysUser sysUser = sysUserService.getById(uid);
if(sysUser.getSuperFlag().equals(1)){
Assert.throwEx("最高级管理员不可重置密码");
}
SysUser sysUser1 = new SysUser();
sysUser1.setId(uid);
sysUser1.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD));
sysUserService.updateById(sysUser1);
return R.ok();
}
/**
* 根据ID更新
* @param param
* @return * @return
*/ */
@SysLog(title = "人员",desc = "用户更新",biz = BizType.UPDATE) @SysLog(title = "人员",desc = "用户更新",biz = BizType.UPDATE)
@PostMapping("/updateById") @PostMapping("/updateById")
@PreAuthorize("hasRole('sys:user:update')") @PreAuthorize("hasRole('sys:user:update')")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public R<?> updateById(@RequestBody @Valid SysUser param){ public R<?> updateById(@RequestBody @Valid SysUserBo userBo){
SysUser param = CopierUtil.copy(userBo,new SysUser());
if(param.getMobile()!=null){ if(param.getMobile()!=null){
param.setAccount(param.getMobile()); param.setAccount(param.getMobile());
} }
@ -291,5 +269,66 @@ public class SysUserController {
return R.isTrue(result); return R.isTrue(result);
} }
/**
* (批量)保存,建议每次小于800条
* @param batchBo
* @return
*/
@SysLog(title = "人员",desc = "用户新增",biz = BizType.INSERT)
@PostMapping("/saveBatch")
@PreAuthorize("hasRole('sys:user:insert')")
@Transactional(rollbackFor = Exception.class)
public R<?> saveBatch(@RequestBody @Valid SysUserBatchBo batchBo){
for (SysUserBo userBo : batchBo.getUserList()) {
SysUser dbData = sysUserService.getById(userBo.getId());
SysUser param = CopierUtil.copy(userBo,dbData==null?new SysUser():dbData);
//设置普通管理员
param.setSuperFlag(0);
param.setTenantId(AuthContextUtils.getTenant());
param.setAccount(param.getMobile());
param.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD));
if(param.getMobile()!=null){
param.setAccount(param.getMobile());
}
//检查手机号是否已用
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(SysUser::getId,userBo.getId());
wrapper.eq(SysUser::getMobile,param.getMobile());
Long count = sysUserService.count(wrapper);
if(count>0L){
return R.error("手机号已被注册");
}
if(dbData == null){
sysUserService.save(param);
}else {
sysUserService.updateById(param);
}
if(param.getId()!=null&& com.qs.serve.common.util.CollectionUtil.isNotEmpty(userBo.getRoleIds())){
sysRoleService.saveUserRole4Edit(userBo.getRoleIds(),param.getId());
}
}
return R.ok();
}
/**
* 重置密码
* @param uid
* @return
*/
@SysLog(title = "人员",desc = "重置密码",biz = BizType.RESET)
@PostMapping("/resetPwd/{uid}")
@PreAuthorize("hasRole('sys:user:reset')")
public R<?> resetPwd(@PathVariable("uid") String uid){
SysUser sysUser = sysUserService.getById(uid);
if(sysUser.getSuperFlag().equals(1)){
Assert.throwEx("最高级管理员不可重置密码");
}
SysUser sysUser1 = new SysUser();
sysUser1.setId(uid);
sysUser1.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD));
sysUserService.updateById(sysUser1);
return R.ok();
}
} }

6
src/main/java/com/qs/serve/modules/sys/entity/SysDept.java

@ -23,7 +23,7 @@ public class SysDept implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** id */ /** id */
@TableId(type = IdType.ASSIGN_UUID) @TableId(type = IdType.INPUT)
private String id; private String id;
/** 名称 */ /** 名称 */
@ -72,9 +72,5 @@ public class SysDept implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String mgrUserName; private String mgrUserName;
/** 是否用于维修加载 */
@TableField(exist = false)
private Integer loadRepair;
} }

7
src/main/java/com/qs/serve/modules/sys/entity/SysUser.java

@ -30,7 +30,7 @@ public class SysUser implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** id */ /** id */
@TableId(type = IdType.ASSIGN_UUID) @TableId(type = IdType.INPUT)
private String id; private String id;
/** 手机号 */ /** 手机号 */
@ -146,6 +146,11 @@ public class SysUser implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private List<String> authorIds; private List<String> authorIds;
/** 选中ID */
@TableField(exist = false)
private List<String> selectIds;
@TableField(exist = false) @TableField(exist = false)
private List<?> tenantInfo; private List<?> tenantInfo;

17
src/main/java/com/qs/serve/modules/sys/entity/bo/SysDeptBatchBo.java

@ -0,0 +1,17 @@
package com.qs.serve.modules.sys.entity.bo;
import com.qs.serve.modules.sys.entity.SysDept;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/8
*/
@Data
public class SysDeptBatchBo {
List<SysDept> deptList;
}

17
src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBatchBo.java

@ -0,0 +1,17 @@
package com.qs.serve.modules.sys.entity.bo;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/8
*/
@Data
public class SysUserBatchBo {
List<SysUserBo> userList;
}

68
src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBo.java

@ -0,0 +1,68 @@
package com.qs.serve.modules.sys.entity.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/8
*/
@Data
public class SysUserBo {
/** id */
private String id;
/** 手机号 */
@Length(max = 64,message = "手机号长度不能超过20字")
private String mobile;
/** 账号 */
@Length(max = 64,message = "账号长度不能超过20字")
private String account;
/** 昵称 */
@Length(max = 64,message = "昵称长度不能超过20字")
private String name;
/** 编号/工号 */
@Length(max = 64,message = "编号/工号长度不能超过64字")
private String code;
/** 头像 */
@Length(max = 255,message = "头像长度不能超过255字")
private String icon;
/** 部门ID */
@Length(max = 64,message = "部门ID长度不能超过64字")
private String deptId;
/** 职位ID */
@Length(max = 64,message = "部门ID长度不能超过64字")
private String positionId;
/** 身份证号码 */
@Length(max = 45,message = "身份证号码长度不能超过45字")
private String identityNo;
/** 备注 */
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 角色ID列表 */
@TableField(exist = false)
private List<String> roleIds;
/** 登陆客户端标识:android,ios */
//private String appClient;
/** app推送token */
//private String appToken;
}

10
src/main/java/com/qs/serve/modules/sys/service/SysAttachService.java

@ -3,6 +3,10 @@ package com.qs.serve.modules.sys.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.sys.entity.SysAttach; import com.qs.serve.modules.sys.entity.SysAttach;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/** /**
* 系统附件 服务接口 * 系统附件 服务接口
* @author YenHex * @author YenHex
@ -10,5 +14,11 @@ import com.qs.serve.modules.sys.entity.SysAttach;
*/ */
public interface SysAttachService extends IService<SysAttach> { public interface SysAttachService extends IService<SysAttach> {
@Override
default List<SysAttach> listByIds(Collection<? extends Serializable> idList) {
List<SysAttach> attaches = IService.super.listByIds(idList);
attaches.forEach(a->a.setPath(null));
return attaches;
}
} }

2
src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java

@ -27,7 +27,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
@Override @Override
public boolean save2(SysDept dept) { public boolean save2(SysDept dept) {
dept.setId(IdUtil.timeStampId()); dept.setId(IdUtil.getSnowFlakeId()+"");
if(dept.getParentId().equals(TreeUtil.DEFAULT_PID_STRING)){ if(dept.getParentId().equals(TreeUtil.DEFAULT_PID_STRING)){
dept.setLevelPath(dept.getId()); dept.setLevelPath(dept.getId());
}else{ }else{

Loading…
Cancel
Save