diff --git a/src/main/java/com/qs/serve/common/util/IdUtil.java b/src/main/java/com/qs/serve/common/util/IdUtil.java index d08da9d1..302c65c3 100644 --- a/src/main/java/com/qs/serve/common/util/IdUtil.java +++ b/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 { private static final long BASE_DIFF_MILLIS = 1648013774104L; + private static final long BASE_DIFF_MILLIS2 = 1578585779603640320L; 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); } + public static void main(String[] args) { + System.out.println(getSnowFlakeId()); + } + public static Long timeStampLong() { return System.currentTimeMillis()-BASE_DIFF_MILLIS; } @@ -45,7 +50,7 @@ public class IdUtil extends cn.hutool.core.util.IdUtil { } public static long getSnowFlakeId(){ - return snowflake.nextId(); + return snowflake.nextId()-BASE_DIFF_MILLIS2; } } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysDeptController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysDeptController.java index dc8567cb..fe092336 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysDeptController.java +++ b/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.modules.sys.entity.SysDept; 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.SysDeptTreeNode; import com.qs.serve.modules.sys.mapper.SysUserMapper; @@ -82,9 +83,6 @@ public class SysDeptController { treeNode.setSort(0); return treeNode; }).collect(Collectors.toList()); - if(param.getLoadRepair()!=null&¶m.getLoadRepair().equals(1)){ - return R.ok(treeNodes); - } treeNodes = TreeUtil.buildByRecursive(treeNodes,TreeUtil.DEFAULT_PID_STRING); return R.ok(treeNodes); } @@ -122,6 +120,29 @@ public class SysDeptController { 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 deptList = param.getDeptList(); + List ids = deptList.stream().map(d->d.getId()).collect(Collectors.toList()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(SysDept::getId,ids); + lqw.select(SysDept::getId); + List sysDeptIdObjs = sysDeptService.list(lqw); + List existIds = sysDeptIdObjs.stream().map(SysDept::getId).collect(Collectors.toList()); + List deptList4Upd = deptList.stream().filter(dep->existIds.contains(dep.getId())).collect(Collectors.toList()); + List deptList4save = deptList.stream().filter(dep->!existIds.contains(dep.getId())).collect(Collectors.toList()); + sysDeptService.saveBatch(deptList4save); + sysDeptService.updateBatchById(deptList4Upd); + return R.ok(); + } + /** * 根据ID更新 * @param param diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java index 4bf24aa9..115a5f54 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java +++ b/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.util.*; 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.mapper.SysUserMapper; import com.qs.serve.modules.sys.service.*; @@ -43,16 +45,13 @@ import java.util.stream.Collectors; public class SysUserController { private SysUserService sysUserService; - private SysUserMapper sysUserMapper; private SysDeptService sysDeptService; private SysPostService sysPostService; private SysRoleService sysRoleService; private WxUserService wxUserService; - private RedisService redisService; - /** - * 个人登录信息 + * (个人)登录信息 * @return */ @PostMapping("/info") @@ -69,24 +68,8 @@ public class SysUserController { return R.ok(sysUserVo); } - /** - * 个人信息详细 - * @return - */ - @GetMapping("/detail") - public R 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 * @return */ @@ -106,39 +89,49 @@ public class SysUserController { return R.error(); } - /** - * 获取检测工号 + * 信息详细 * @return */ - @LimitSubmit(message = "请勿频繁操作!!") - @GetMapping("/getUserCode") - @PreAuthorize("hasRole('sys:user:query')") - public R getUserCode(){ - LocalDateTime localDateTime = LocalDateTime.now(); - 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("/detail") + public R 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 code - * @return - */ - @GetMapping("/checkCode") - @PreAuthorize("hasRole('sys:user:query')") - public R checkCode(String code){ - return R.ok(sysUserMapper.checkCode(code)>0L); - } + + + //获取检测工号 +// @LimitSubmit(message = "请勿频繁操作!!") +// @GetMapping("/getUserCode") +// @PreAuthorize("hasRole('sys:user:query')") +// public R getUserCode(){ +// LocalDateTime localDateTime = LocalDateTime.now(); +// 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 checkCode(String code){ +// return R.ok(sysUserMapper.checkCode(code)>0L); +// } /** @@ -208,14 +201,15 @@ public class SysUserController { /** * 保存 - * @param param + * @param userBo * @return */ @SysLog(title = "人员",desc = "用户新增",biz = BizType.INSERT) @PostMapping("/save") @PreAuthorize("hasRole('sys:user:insert')") @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.setTenantId(AuthContextUtils.getTenant()); @@ -228,43 +222,27 @@ public class SysUserController { } param.setAccount(param.getMobile()); param.setPassword(SecureUtil.md5(GySysConst.DEFAULT_PASSWORD)); + if(param.getMobile()!=null){ + param.setAccount(param.getMobile()); + } boolean result = sysUserService.save(param); - if(param.getId()!=null&& com.qs.serve.common.util.CollectionUtil.isNotEmpty(param.getRoleIds())){ - sysRoleService.saveUserRole4Edit(param.getRoleIds(),param.getId()); + if(param.getId()!=null&& com.qs.serve.common.util.CollectionUtil.isNotEmpty(userBo.getRoleIds())){ + sysRoleService.saveUserRole4Edit(userBo.getRoleIds(),param.getId()); } return R.isTrue(result); } /** - * 重置用户密码 - * @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(); - } - - /** - * 根据ID更新 - * @param param + * 更新 + * @param userBo * @return */ @SysLog(title = "人员",desc = "用户更新",biz = BizType.UPDATE) @PostMapping("/updateById") @PreAuthorize("hasRole('sys:user:update')") @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){ param.setAccount(param.getMobile()); } @@ -291,5 +269,66 @@ public class SysUserController { 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 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(); + } + } diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysDept.java b/src/main/java/com/qs/serve/modules/sys/entity/SysDept.java index 486ea245..2eee59dc 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/SysDept.java +++ b/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; /** id */ - @TableId(type = IdType.ASSIGN_UUID) + @TableId(type = IdType.INPUT) private String id; /** 名称 */ @@ -72,9 +72,5 @@ public class SysDept implements Serializable { @TableField(exist = false) private String mgrUserName; - /** 是否用于维修加载 */ - @TableField(exist = false) - private Integer loadRepair; - } diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java b/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java index 16e17f66..3ec2be29 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java +++ b/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; /** id */ - @TableId(type = IdType.ASSIGN_UUID) + @TableId(type = IdType.INPUT) private String id; /** 手机号 */ @@ -146,6 +146,11 @@ public class SysUser implements Serializable { @TableField(exist = false) private List authorIds; + /** 选中ID */ + @TableField(exist = false) + private List selectIds; + + @TableField(exist = false) private List tenantInfo; diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysDeptBatchBo.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysDeptBatchBo.java new file mode 100644 index 00000000..40e1bfa3 --- /dev/null +++ b/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 deptList; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBatchBo.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBatchBo.java new file mode 100644 index 00000000..1974eda6 --- /dev/null +++ b/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 userList; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBo.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserBo.java new file mode 100644 index 00000000..0b9e2c6a --- /dev/null +++ b/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 roleIds; + + /** 登陆客户端标识:android,ios */ + //private String appClient; + + /** app推送token */ + //private String appToken; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/service/SysAttachService.java b/src/main/java/com/qs/serve/modules/sys/service/SysAttachService.java index 50b945bd..a45e6bd3 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/SysAttachService.java +++ b/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.qs.serve.modules.sys.entity.SysAttach; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + /** * 系统附件 服务接口 * @author YenHex @@ -10,5 +14,11 @@ import com.qs.serve.modules.sys.entity.SysAttach; */ public interface SysAttachService extends IService { + @Override + default List listByIds(Collection idList) { + List attaches = IService.super.listByIds(idList); + attaches.forEach(a->a.setPath(null)); + return attaches; + } } diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java index 5d8c4b79..e25223fa 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysDeptServiceImpl.java @@ -27,7 +27,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl @Override public boolean save2(SysDept dept) { - dept.setId(IdUtil.timeStampId()); + dept.setId(IdUtil.getSnowFlakeId()+""); if(dept.getParentId().equals(TreeUtil.DEFAULT_PID_STRING)){ dept.setLevelPath(dept.getId()); }else{