package com.ydtech.modules.admin.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydtech.constants.SysConstants; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageRequest; import com.ydtech.core.page.PageResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.*; import com.ydtech.modules.admin.model.dto.AgentUserDto; import com.ydtech.modules.admin.model.dto.SysUserDto; import com.ydtech.modules.admin.model.vo.SysReferrerVo; import com.ydtech.modules.admin.model.vo.SysUserVO; import com.ydtech.modules.admin.service.*; import com.ydtech.modules.admin.model.vo.SysUserBaseVO; import com.ydtech.modules.admin.model.vo.SysUser2Vo; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.base.model.dto.BaseDto; import com.ydtech.modules.base.model.dto.PageDto; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.esm.model.EsmUserReferrer; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.security.utils.PasswordUtils; import com.ydtech.utils.StringUtils; import com.ydtech.utils.excel.ExcelEasypoiUtils; import com.ydtech.utils.idgen.IdGenerate; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY; /** * 用户控制器 * * @author Yasepix * @date Oct 29, 2018 */ @RestController @Api(tags = "用户控制器") @RequestMapping("user") public class SysUserController extends BaseController { @Autowired private SysUserService sysUserService; @Autowired private SysUserRoleService sysUserRoleService; @Autowired private SysDeptService sysDeptService; @Autowired private SysUserInfoService sysUserInfoService; @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private EsmUserReferrerService esmUserReferrerService; @Autowired private SysRoleService sysRoleService; // @PreAuthorize("hasAuthority('sys:user:delete')") @ApiOperation(value = "逻辑删除") @PostMapping(value = "/deleteFlag") public HttpResult deleteFlag(@RequestBody List records) { for (SysUser record : records) { SysUser sysUser = sysUserService.getById(record.getId()); if (sysUser != null && SysConstants.ADMIN.equalsIgnoreCase(sysUser.getName())) { return HttpResult.error("超级管理员不允许删除!"); } } return HttpResult.ok(sysUserService.deleteFlag(records)); } // @PreAuthorize("hasAuthority('sys:user:view')") @GetMapping(value = "/findByName") public HttpResult findByUserName(@RequestParam String name) { return HttpResult.ok(sysUserService.getById(name)); } // @PreAuthorize("hasAuthority('sys:user:view')") @GetMapping(value = "/findPermissions") public HttpResult findPermissions(@RequestParam String name) { SysUser sysUser = new SysUser(); sysUser.setId(name); return HttpResult.ok(sysUserService.findPermissions(sysUser)); } // @PreAuthorize("hasAuthority('sys:user:view')") @GetMapping(value = "/findUserRoles") public HttpResult findUserRoles(@RequestParam Long userId) { return HttpResult.ok(sysUserService.findUserRoles(userId)); } /** * 用户角色分页查询 * @param pageRequest * @return */ @PostMapping(value = "/queryPage") public HttpResult queryPage(@RequestBody PageRequest pageRequest) { String deptid = pageRequest.getColumnFilterValue(pageRequest, "deptid"); String name = pageRequest.getColumnFilterValue(pageRequest, "name"); String containsSubDept = pageRequest.getColumnFilterValue(pageRequest, "containsSubDept"); String mobile = pageRequest.getColumnFilterValue(pageRequest, "mobile"); SysUser sysUser = new SysUser(); sysUser.setDeptId(deptid); sysUser.setName(name); sysUser.setMobile(mobile); Page page = PageRequest.buildPageRequest(pageRequest); IPage pResult = sysUserService.selectUserPage(page,sysUser,containsSubDept); //传入查询条件 PageResult pageResult = PageResult.buildPageResult(pResult); return HttpResult.ok(pageResult); } /** * 配置用户角色 * * @param userId * @param roleId * @return */ @PostMapping(value = "/saveUserRole") @Transactional public HttpResult saveUserRole(@RequestParam String userId, @RequestParam String roleId) { SysUserRole userRole = new SysUserRole(); // List list = sysUserRoleService.selectList(" where user_id=?", new Object[]{userId}); sysUserRoleService.deleteByUserId(userId); userRole = new SysUserRole(); userRole.setUserId(userId); userRole.setRoleId(Long.parseLong(roleId)); userRole.setCreateBy(getUserName()); userRole.setCreateTime(new Date()); sysUserRoleService.save(userRole); return HttpResult.ok(); } @ApiOperation(value = "获取用户综合信息") @PostMapping(value = "/gainUserSynthesisInfo/{userId}") public HttpResult gainUserSynthesisInfo(@PathVariable String userId) { return HttpResult.ok(sysUserService.gainUserSynthesisInfo(userId)); } /** * Used * * @author: lig * @date: 2023年05月10日 0010 */ // @PreAuthorize("hasAuthority('sys:user:view')") @PostMapping(value = "/findPageUsed") @Deprecated public HttpResult findPageUsed(@RequestBody PageRequest pageRequest) { //return HttpResult.ok(sysUserService.findPage(pageRequest)); int pageNum = pageRequest.getPageNum(); int pageSize = pageRequest.getPageSize(); String name = pageRequest.getColumnFilterValue(pageRequest, "name"); // String email = pageRequest.getColumnFilterValue(pageRequest, "email"); //需要处理传入的部门 PageResult pageResult = sysUserService.selectPagingCustom(pageNum, pageSize, name, ""); sysUserService.findSysUseresmUserInternalVORoles(pageResult); return HttpResult.ok(pageResult); } /** * 密码修改 * * @param id * @param password * @return */ @PostMapping(value = "/updatePwd") public HttpResult updatePwd(@RequestParam String id, @RequestParam String password) { if (StringUtils.isEmpty(id) || StringUtils.isEmpty(password)) { return HttpResult.error("ID和密码不能为空"); } SysUser sysUser = sysUserService.getById(id); if (sysUser == null) { return HttpResult.error("ID不存在"); } //密码加密 String salt = PasswordUtils.getSalt(); String pwd = PasswordUtils.encode(password, sysUser.getSalt()); sysUser.setPassword(pwd); sysUserService.updateById(sysUser); return HttpResult.ok("修改成功"); } /** * 手机号更新 * * @param id * @param mobile * @return */ @PostMapping(value = "/updateMobile") public HttpResult updateMobile(@RequestParam String id, @RequestParam String mobile) { if (StringUtils.isEmpty(id) || StringUtils.isEmpty(mobile)) { return HttpResult.error("ID和手机号不能为空"); } SysUser sysUser = sysUserService.getById(id); if (sysUser == null) { return HttpResult.error("ID不存在"); } LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.ne(SysUser::getId, id); lqw.eq(SysUser::getMobile, mobile); List users = sysUserService.list(lqw); // List users = sysUserService.selectList(" where id != ? and mobile=?", new Object[]{id, mobile}); if (users != null && users.size() > 0) { return HttpResult.error("手机号已存在"); } sysUser.setMobile(mobile); sysUserService.updateById(sysUser); return HttpResult.ok("修改成功"); } /** * 根据工号查询推荐人信息 * * @param id * @return */ @GetMapping(value = "/findById") public HttpResult findByUserId(@RequestParam String id) { SysUser sysUser = sysUserService.getById(id); SysUserVO sysUserVO = new SysUserVO(); sysUserVO = sysUserService.gainUserInternal(id); // SysUserVO sysUserVO = sysUserService.selectById(id); if (sysUserVO != null) { return HttpResult.ok(sysUserVO); } throw new SystemException("没有推荐人"); } /** * 根据部门ID查询该部门的团队长信息 * * @param deptId * @return */ @GetMapping(value = "/selectByDeptId") public HttpResult selectByDeptId(String deptId) { return HttpResult.ok(sysUserService.gainUserInternalByDeptId(deptId)); // return HttpResult.ok(sysUserService.selectByDeptId(deptId)); } /** * 根据部门id查询该部门的推荐人信息 */ @GetMapping("/selectfindByreferrerId") public HttpResult findByReferrerId(@Valid String deptId) { return HttpResult.ok(sysUserService.findByReferrerId(deptId)); } // /** // * 审批 // * // * @param userId // * @param status 审批 // * @return // */ // @ApiOperation(value = "审批") // @ApiImplicitParams({ // @ApiImplicitParam(name = "userId", value = "用户ID") // , @ApiImplicitParam(name = "status", value = "审批状态") // }) // @GetMapping(value = "/approval") // public HttpResult approval(@RequestParam String userId, @RequestParam String status) { // // LambdaUpdateWrapper luw = new LambdaUpdateWrapper(); // luw.eq(SysUser::getId, userId); // luw.set(SysUser::getApprovalStatus, status); // // return HttpResult.ok(sysUserService.update(luw)); // // } //======================== 重构新接口 /** * @author: lig * @date: 2023年06月30日 0030 */ @ApiOperation(value = "(重构)保存或更新") @PostMapping(value = "/saveOrUpdate") @Transactional public HttpResult saveOrUpdate(@RequestBody SysUser sysUser) { if (StringUtils.isNullOrEmpty(sysUser.getMobile())) { return HttpResult.error("手机不能为空"); } if (StringUtils.isNullOrEmpty(sysUser.getDeptId())) { return HttpResult.error("机构ID不能为空"); } //处理密码 if (StringUtils.isNotEmpty(sysUser.getPassword())) { String salt = PasswordUtils.getSalt(); String pwd = PasswordUtils.encode(sysUser.getPassword(), salt); sysUser.setPassword(pwd); sysUser.setSalt(salt); } sysUserService.saveUser(sysUser); return HttpResult.ok(sysUser); } @ApiOperation(value = "(重构)逻辑删除") @PostMapping(value = "/logicDeleteBatch") public HttpResult logicDeleteBatch(@RequestBody List userIds) { if (null != userIds && userIds.size() > 0) { LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); luw.set(SysUser::getStatus, "0"); luw.in(SysUser::getId, userIds); sysUserService.update(luw); return HttpResult.ok(); } return HttpResult.error("请正确选择参数"); } @ApiOperation(value = "(重构)用户查询分页") @PostMapping(value = "/findPage") public HttpResult> findPage(@RequestBody PageDto pageDto) { return HttpResult.ok(sysUserService.gainUserPage(pageDto)); } @ApiOperation(value = "(重构)审批通过") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户ID") }) @GetMapping(value = "/approvalPass") public HttpResult approvalPass(@RequestParam String userId) { SysUser sysUser = sysUserService.getById(userId); sysUser.setStatus(1); return HttpResult.ok(sysUserService.updateById(sysUser)); } @ApiOperation(value = "(重构)审批不通过") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户ID"), @ApiImplicitParam(name = "reason", value = "原因") }) @GetMapping(value = "/approvalNotPass") public HttpResult approvalNotPass(@RequestParam String userId, @RequestParam String reason) { SysUser sysUser = sysUserService.getById(userId); sysUser.setStatus(3); sysUser.setApprovalOpinion(reason); return HttpResult.ok(sysUserService.updateById(sysUser)); } @ApiOperation(value = "(重构)获取用户") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", required = true, value = "用户ID") }) @GetMapping(value = "/{userId}") public HttpResult findUserById(@PathVariable String userId) { // 查询用户 SysUser sysUser = sysUserService.getById(userId); // 查询角色 SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId); // SysUserRole sysUserRole = sysUserRoleService.getById(userId); if (!ObjectUtils.isEmpty(sysUserRole)){ sysUser.setRoleId(StringUtils.toString(sysUserRole.getRoleId())); } // 查询推荐人 EsmUserReferrer referrer = esmUserReferrerService.getById(userId); if (ObjectUtils.isEmpty(referrer)) { sysUser.setReferrerId(null); sysUser.setReferrerName(null); } else { sysUser.setReferrerId(referrer.getReferrerId()); sysUser.setReferrerName(referrer.getReferrerName()); } //查询详情信息 SysUserInfo userInfo = sysUserInfoService.getById(userId); SysUser2Vo sysUserVo = new SysUser2Vo(); sysUserVo.setSysUser(sysUser); sysUserVo.setSysUserInfo(userInfo); return HttpResult.ok(sysUserVo); } @ApiOperation(value = "(new)获取登录用户") @GetMapping(value = "/loginUser") public HttpResult loginUser() { SysUser sysUser = sysUserService.getById(getUserId()); SysRole sysRole = sysUserRoleService.gainRoleByUserId(sysUser.getId()); if (null != sysRole) { sysUser.setRoleId(StringUtils.toString(sysRole.getId())); sysUser.setRoleName(sysRole.getName()); } if (StringUtils.isNotEmpty(sysUser.getDeptId())) { SysDept sysDept = sysDeptService.getById(sysUser.getDeptId()); sysUser.setDeptName(sysDept.getName()); } EsmUserReferrer eur = esmUserReferrerService.getById(sysUser.getId()); if(null != eur){ sysUser.setReferrerId(eur.getReferrerId()); sysUser.setReferrerName(eur.getReferrerName()); } return HttpResult.ok(sysUser); } /** * 个代注册 * * @author: lig * @date: 2023年07月03日 0003 */ @ApiOperation(value = "(new)个代注册") @PostMapping(value = "/agentRegist") @Transactional public HttpResult agentRegist(@RequestBody AgentUserDto dto) { int noCount = 3;//顺序号是几位的 Integer result = 0; String resultStr = ""; String phoneMsg = dto.getMobileMsg(); if (StringUtils.isNullOrEmpty(phoneMsg)) { return HttpResult.error("短信验证码不能为空"); } // //从数据库获取最新验证码 // String msg = stringRedisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + dto.getMobile()); // // if (msg == null || msg.length() == 0) { // return HttpResult.error("短信验证码发送失败"); // } // if (!phoneMsg.equals(msg)) { // return HttpResult.error("短信验证码不正确"); // } String recommenderid = dto.getReferrerId(); // if (StringUtils.isNullOrEmpty(recommenderid)) { // return HttpResult.error("推荐人ID不能为空"); // } SysUser recommender = sysUserService.getById(recommenderid); if (recommender == null) { return HttpResult.error("推荐人信息不存在"); } //只有团队长和代理人才能邀请 by gws SysUserRole recommenderRole =sysUserRoleService.selectByUserId(recommenderid); if(!"20".equals(recommenderRole.getRoleId())&&!"21".equals(recommenderRole.getRoleId())){ return HttpResult.error("只有团队长和代理人才能邀请"); } SysUser sysUser = sysUserService.findByPhone(dto.getMobile()); if (sysUser != null) { return HttpResult.error("手机号已存在"); } else { sysUser = new SysUser(); } String nextPK = "001"; //根据机构号获取userid最大值,不需要加人员类型判断 从sys_user获取 String maxId = sysUserService.findMaxId(recommender.getDeptId()); if (StringUtils.isNullOrEmpty(maxId)) { nextPK = recommender.getDeptId() + "001"; } else { nextPK = IdGenerate.nextCode(maxId, noCount); } if (dto.getName() != null && !dto.getName().equals("")) { } else { sysUser.setName("游客"); } sysUser.setMobile(dto.getMobile()); sysUser.setDeptId(recommender.getDeptId()); //密码加密 String salt = PasswordUtils.getSalt(); String password = PasswordUtils.encode(dto.getPassword(), salt); sysUser.setPassword(password); sysUser.setSalt(salt); sysUser.setStatus(2); sysUser.setId(nextPK); sysUser.setCreateBy("admin"); sysUserService.save(sysUser); //角色配置 SysUserRole userRole = new SysUserRole(); userRole.setUserId(nextPK); userRole.setRoleId(20L); sysUserRoleService.save(userRole); esmUserReferrerService.addReferrer(dto.getReferrerId(),nextPK); return HttpResult.ok("保存成功", sysUser.getId()); } @PostMapping(value = "/newUserImport") @ApiOperation(value = "新用户导入") @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "excel文件", required = true, dataType = "__file"), @ApiImplicitParam(name = "deptId", value = "机构部门ID", required = true, dataType = "String", paramType = "formData") }) @Transactional public HttpResult newUserImport(@RequestPart MultipartFile file, @RequestParam String deptId) { SysDept sd = sysDeptService.getById(deptId); if (null == sd) return HttpResult.error("机构部门不存在"); try { List userList = ExcelEasypoiUtils.importExcel(file, SysUser.class, 0, 1, 1); userList = userList.stream().filter(l -> StringUtils.isNotEmpty(l.getMobile())).collect(Collectors.toList()); userList.stream().forEach(a -> { if (StringUtils.isNullOrEmpty(a.getMobile())) throw new SystemException("手机不能为空"); //处理密码 if (StringUtils.isNotEmpty(a.getPassword())) { String salt = PasswordUtils.getSalt(); String pwd = PasswordUtils.encode(a.getPassword(), salt); a.setPassword(pwd); a.setSalt(salt); } a.setDeptId(sd.getId()); a.setDeptName(sd.getName()); //获取角色 LambdaQueryWrapper lqwRole = new LambdaQueryWrapper<>(); lqwRole.like(SysRole::getName, a.getRoleName()); SysRole sr = sysRoleService.getOne(lqwRole); a.setRoleId(sr.getId().toString()); a.setRoleName(sr.getName()); //状态 if (a.getExcelStatus().equals("正常")) { a.setStatus(1); } if (a.getExcelStatus().equals("新注册")) { a.setStatus(2); } // //性别 // if (a.getSex().equals("未知")) { // a.setSex("U"); // } // if (a.getSex().equals("男")) { // a.setSex("M"); // } // if (a.getSex().equals("女")) { // a.setSex("W"); // } if (StringUtils.isNullOrEmpty(a.getDeptId())) throw new SystemException("机构ID不能为空"); //by gws 21 团队长 20 代理人 必须归属团队 // 22 后线人员 必须归属部门 if (StringUtils.isNullOrEmpty(a.getRoleId())) throw new SystemException("角色ID不能为空"); if("21".equals(a.getRoleId())||"20".equals(a.getRoleId())){//21 团队长 20 代理人 boolean teamflag=false; char[] deptids=a.getDeptId().toCharArray(); char ch1 = 'D'; char ch2 = 'M'; if(deptids.length>6){ teamflag=deptids[deptids.length-3]==ch1&&deptids[deptids.length-6]==ch2; } if(!teamflag){ throw new SystemException("团队长和代理人只能归属团队中") ; } }else if("22".equals(a.getRoleId())){//22 后线人员 boolean deptflag=false; char[] deptids=a.getDeptId().toCharArray(); char ch1 = 'D'; char ch2 = 'M'; if(deptids.length>6){ deptflag=deptids[deptids.length-3]==ch1&&deptids[deptids.length-6]!=ch2; }else if(deptids.length<=6 && deptids.length>3){ deptflag=deptids[deptids.length-3]==ch1; } if(!deptflag){ throw new SystemException("后线人员只能归属业务部门中") ; } }else{ throw new SystemException("角色id有误") ; } sysUserService.saveUser(a); }); } catch (IOException e) { throw new SystemException(e.getMessage()); } return HttpResult.ok("导入成功"); } // @ApiOperation(value = "保存或更新用户信息") // @PostMapping(value = "/saveOrUpdateInfo") // public HttpResult saveOrUpdateInfo(@RequestBody SysUserInfo sysUserInfo) { // if (StringUtils.isNullOrEmpty(sysUserInfo.getId())) return HttpResult.error("用户ID不能为空"); // return HttpResult.ok(sysUserInfoService.saveOrUpdate(sysUserInfo)); // // } @GetMapping(value = "/findUserInfo/{userId}") @ApiOperation(value = "获取用户信息") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户信息", required = true, dataType = "String") }) //@SaCheckPermission("sys:menu:add") public HttpResult findUserInfo(@PathVariable String userId) { return HttpResult.ok(sysUserInfoService.getById(userId)); } @ApiOperation(value = "保存用户基本详情信息") @Transactional @PostMapping(value = "/saveUserInfo") public HttpResult saveUserInfo(@RequestBody SysUser2Vo sysUserVo){ //by gws 21 团队长 20 代理人 必须归属团队 // 22 后线人员 必须归属部门 SysUser sysUser=sysUserVo.getSysUser(); if (StringUtils.isNullOrEmpty(sysUser)) { return HttpResult.error("用户信息不能为空"); } if (StringUtils.isNullOrEmpty(sysUser.getDeptId())) { return HttpResult.error("机构ID不能为空"); } if (StringUtils.isNullOrEmpty(sysUser.getRoleId())) { throw new SystemException("角色id不能为空") ; } if (!StringUtils.isNullOrEmpty(sysUser.getRoleId())) { if("21".equals(sysUser.getRoleId())||"20".equals(sysUser.getRoleId())){//21 团队长 20 代理人 boolean teamflag=false; char[] deptids=sysUser.getDeptId().toCharArray(); char ch1 = 'D'; char ch2 = 'M'; if(deptids.length>6){ teamflag=deptids[deptids.length-3]==ch1&&deptids[deptids.length-6]==ch2; } if(!teamflag){ throw new SystemException("团队长和代理人只能归属团队中") ; } }else if("22".equals(sysUser.getRoleId())){//22 后线人员 boolean deptflag=false; char[] deptids=sysUser.getDeptId().toCharArray(); char ch1 = 'D'; char ch2 = 'M'; if(deptids.length>6){ deptflag=deptids[deptids.length-3]==ch1&&deptids[deptids.length-6]!=ch2; }else if(deptids.length<=6 && deptids.length>3){ deptflag=deptids[deptids.length-3]==ch1; } if(!deptflag){ throw new SystemException("后线人员只能归属业务部门中") ; } }else{ throw new SystemException("角色id有误") ; } } return HttpResult.ok(sysUserService.saveUserInfo(sysUserVo)) ; } @ApiOperation(value = "修改用户详情信息") @PostMapping(value = "/updateUserInfo/{userId}") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户信息", required = true, dataType = "String") }) @Transactional public HttpResult updateUserInfo(@PathVariable String userId,@RequestBody SysUser2Vo sysUserVo) { return HttpResult.ok(sysUserService.updateUserInfo(userId,sysUserVo)); } @ApiOperation(value = "获取推荐人分页信息") @PostMapping(value = "/referrerFindPage") public HttpResult> referrerFindPage(@RequestBody PageDto pageDto) { return HttpResult.ok(esmUserReferrerService.gainReferrerPage(pageDto)); } @PostMapping(value = "/realNameAuth") @ApiOperation(value = "实名认证", notes = "" + "参数1:姓名" + "
参数2:身份证号" ) public HttpResult realNameAuth(@RequestBody BaseDto dto) { SysUser sysUser = sysUserService.getById(getUserId()); sysUser.setName(dto.getParam1()); sysUser.setIdentity(dto.getParam2()); // sysUser.setStatus(1); return HttpResult.ok(sysUserService.updateById(sysUser)); } }