package com.szwl.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.szwl.annotation.Audit; import com.szwl.constant.AuditEnum; import com.szwl.constant.ResponseCodesEnum; import com.szwl.exception.BizException; import com.szwl.manager.TokenManager; import com.szwl.model.bo.R; import com.szwl.model.bo.ResponseModel; import com.szwl.model.bo.UserDetailBO; import com.szwl.model.entity.*; import com.szwl.model.param.AddLoginUserParam; import com.szwl.model.param.UpdateLoginUserParam; import com.szwl.model.param.UpdateSysRoleParam; import com.szwl.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; /** *

* 短信验证码 前端控制器 *

* * @author wuhs * @since 2022-04-14 */ @Slf4j @Api(value = "/tAdmin", tags = {"账户"}) @RestController @RequestMapping("/tAdmin") public class TAdminController { @Autowired SysRoleService sysRoleService; @Autowired SysUserRoleService sysUserRoleService; @Autowired TokenManager tokenManager; @Autowired TAdminService tAdminService; @Autowired TAdminEquipmentService tAdminEquipmentService; @Autowired TMessageCodeService tMessageCodeService; @ApiOperation(value = "添加子账号") @PostMapping("/addLoginUser") @Transactional @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '添加账号'") public ResponseModel addLoginUser(@RequestBody @Valid AddLoginUserParam param) { // public ResponseModel addLoginUser(@RequestBody AddLoginUserParam param) { //获取当前操作人员 UserDetailBO loginUser = tokenManager.getLoginUserDetails(); // 保存用户实体 Date now = new Date(); Long parentId = param.getAdminId(); if(parentId==null){ return R.fail(ResponseCodesEnum.A0001); } param.setAdminId(null); TAdmin entity = BeanUtil.copyProperties(param,TAdmin.class); entity.setParentId(parentId); if(parentId.toString().equals("1")){ entity.setType(1); }else { entity.setType(3); } // entity.setParentId(34l); entity.setIsAdmined(false); entity.setCreateDate(now); entity.setModifyDate(now); entity.setIsLocked(false); entity.setIsEnabled(true); entity.setLoginFailureCount(0); entity.setEmail(param.getEmail()); entity.setPhone(param.getPhone()); tAdminService.save(entity); // 管理的机器 需要再建立一个关系表 type区分全部还是部分 String equipmentIds = param.getEquipmentIds(); if(StringUtils.isNotEmpty(equipmentIds)){ if(equipmentIds.equals("all")){ //管理全部机器 TAdminEquipment tAdminEquipment = new TAdminEquipment(); tAdminEquipment.setAdminId(entity.getId()); //0:全部机器,1:部分机器 tAdminEquipment.setType("0"); tAdminEquipmentService.save(tAdminEquipment); }else { //部分机器 TAdminEquipment tAdminEquipment = new TAdminEquipment(); tAdminEquipment.setAdminId(entity.getId()); //0:全部机器,1:部分机器 tAdminEquipment.setType("1"); tAdminEquipment.setEquipmentIds(param.getEquipmentIds()); tAdminEquipmentService.save(tAdminEquipment); } } log.debug("添加账号 id:{},TAdmin:{}",entity.getId(),entity); // 保存用户角色关系 List userRoleList = param.getRoleList() .stream() .map(e -> new SysUserRole().setRoleId(e).setUserId(String.valueOf(entity.getId())) ) .collect(Collectors.toList()); if(CollUtil.isNotEmpty(userRoleList)){ sysUserRoleService.saveBatch(userRoleList); } return R.ok(entity); } @ApiOperation(value = "修改子账号") @PostMapping("/updateLoginUser") @Transactional @Audit(type = AuditEnum.UPDATE,content = "#loginUser.name + '修改账号'") public ResponseModel updateLoginUser(@RequestBody @Valid UpdateLoginUserParam param) { // public ResponseModel addLoginUser(@RequestBody AddLoginUserParam param) { //获取当前操作人员 UserDetailBO loginUser = tokenManager.getLoginUserDetails(); // 保存用户实体 Date now = new Date(); Long parentId = param.getAdminId(); if(parentId==null){ return R.fail(ResponseCodesEnum.A0001); } param.setAdminId(null); // TAdmin entity = BeanUtil.copyProperties(param,TAdmin.class); // entity.setParentId(parentId); //// entity.setParentId(34l); // entity.setIsAdmined(false); // entity.setCreateDate(now); // entity.setModifyDate(now); // entity.setIsLocked(false); // entity.setIsEnabled(true); // entity.setLoginFailureCount(0); // entity.setEmail(param.getEmail()); // entity.setPhone(param.getPhone()); // tAdminService.save(entity); LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getParentId,parentId); query.eq(TAdmin::getId,param.getId()); List list = tAdminService.list(query); if(list.size()>0){ TAdmin admin = list.get(0); // 管理的机器 需要再建立一个关系表 type区分全部还是部分 String equipmentIds = param.getEquipmentIds(); if(StringUtils.isNotEmpty(equipmentIds)){ LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(TAdminEquipment::getAdminId,admin.getId()); List list1 = tAdminEquipmentService.list(query1); if(list1.size()>0){ TAdminEquipment tAdminEquipment1 = list1.get(0); if(equipmentIds.equals("all")){ //管理全部机器 //0:全部机器,1:部分机器 tAdminEquipment1.setType("0"); tAdminEquipment1.setEquipmentIds(null); }else { //部分机器 //0:全部机器,1:部分机器 tAdminEquipment1.setType("1"); tAdminEquipment1.setEquipmentIds(param.getEquipmentIds()); } tAdminEquipmentService.updateById(tAdminEquipment1); } } LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(SysUserRole::getUserId,admin.getId()); List list1 = sysUserRoleService.list(query1); if(list1.size()>0){ for(SysUserRole sysUserRole:list1){ sysUserRoleService.removeById(sysUserRole.getId()); } } // 保存用户角色关系 List userRoleList = param.getRoleList() .stream() .map(e -> new SysUserRole().setRoleId(e).setUserId(String.valueOf(admin.getId())) ) .collect(Collectors.toList()); if(CollUtil.isNotEmpty(userRoleList)){ sysUserRoleService.saveBatch(userRoleList); } admin.setIsEnabled(param.getIsEnabled()); admin.setPhone(param.getPhone()); admin.setEmail(param.getEmail()); admin.setIsEnabled(param.getIsEnabled()); if(StringUtils.isNotEmpty(param.getPassword())){ admin.setPassword(param.getPassword()); } tAdminService.updateById(admin); log.debug("修改账号 id:{},TAdmin:{}",admin.getId(),admin); return R.ok(admin); } return R.fail(ResponseCodesEnum.A0100); } @ApiOperation(value = "删除子账号") @PostMapping("/deleteLoginUser") @Transactional @Audit(type = AuditEnum.DELETE,content = "#loginUser.name + '删除账号'") public ResponseModel deleteLoginUser(@RequestBody @Valid UpdateLoginUserParam param) { // public ResponseModel addLoginUser(@RequestBody AddLoginUserParam param) { //获取当前操作人员 UserDetailBO loginUser = tokenManager.getLoginUserDetails(); // 保存用户实体 Date now = new Date(); Long parentId = param.getAdminId(); if(parentId==null){ return R.fail(ResponseCodesEnum.A0001); } param.setAdminId(null); LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.like(TAdmin::getParentId,parentId); query.like(TAdmin::getId,param.getId()); List list = tAdminService.list(query); if(list.size()>0){ TAdmin admin = list.get(0); // 管理的机器 需要再建立一个关系表 type区分全部还是部分 String equipmentIds = param.getEquipmentIds(); if(StringUtils.isNotEmpty(equipmentIds)){ LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(TAdminEquipment::getAdminId,admin.getId()); List list1 = tAdminEquipmentService.list(query1); if(list1.size()>0){ TAdminEquipment tAdminEquipment1 = list1.get(0); tAdminEquipmentService.removeById(tAdminEquipment1.getAdminId()); } } // 用户角色关系 LambdaQueryWrapper query2 = Wrappers.lambdaQuery(); query2.eq(SysUserRole::getUserId,admin.getId()); List list2 = sysUserRoleService.list(query2); if(list2.size()>0){ SysUserRole sysUserRole = list2.get(0); sysUserRoleService.removeById(sysUserRole.getId()); } tAdminService.removeById(admin.getId()); log.debug("删除账号 id:{},TAdmin:{}",admin.getId(),admin); return R.ok(admin); } return R.fail(ResponseCodesEnum.A0100); } @ApiOperation(value = "获取所有子账号信息") @GetMapping("/getChildDrenAdminList") public ResponseModel getChildDrenAdminList(String adminId,String userName,String name) { List returnList = new ArrayList<>(); LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getParentId,adminId); if(StringUtils.isNotEmpty(userName)){ query.eq(TAdmin::getUsername,userName); } if(StringUtils.isNotEmpty(name)){ query.eq(TAdmin::getName,name); } if(StringUtils.isNotEmpty(adminId)){ if(adminId.equals("1")){ // query.in(TAdmin::getType,"1","3"); query.eq(TAdmin::getType,"1"); }else { query.eq(TAdmin::getType,"3"); } }else { return R.fail(ResponseCodesEnum.A0100); } query.eq(TAdmin::getIsAdmined,false); List list = tAdminService.list(query); if(list.size()>0){ for(TAdmin admin:list){ AddLoginUserParam addLoginUserParam = new AddLoginUserParam(); JSONObject jsonObject = new JSONObject(); addLoginUserParam.setUsername(admin.getUsername()); addLoginUserParam.setName(admin.getName()); addLoginUserParam.setEmail(admin.getEmail()); addLoginUserParam.setPhone(admin.getPhone()); addLoginUserParam.setIsEnabled(admin.getIsEnabled()); addLoginUserParam.setId(admin.getId()); LambdaQueryWrapper query2 = Wrappers.lambdaQuery(); query2.eq(TAdminEquipment::getAdminId,admin.getId()); List list1 = tAdminEquipmentService.list(query2); if(list1.size()>0){ TAdminEquipment tAdminEquipment1 = list1.get(0); if(tAdminEquipment1.getType().equals("0")){ //管理全部机器 //0:全部机器,1:部分机器 tAdminEquipment1.setType("0"); tAdminEquipment1.setEquipmentIds(null); addLoginUserParam.setEquipmentIds("all"); }else { //部分机器 //0:全部机器,1:部分机器 tAdminEquipment1.setType("1"); addLoginUserParam.setEquipmentIds(tAdminEquipment1.getEquipmentIds()); } } LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(SysUserRole::getUserId,admin.getId()); List roleList = sysUserRoleService.list(query1); List ids = new ArrayList<>(); StringBuilder roleName = new StringBuilder(); if(roleList.size()>0){ for(int i=0;i list2 = Arrays.asList(sysRole.getMenuCodesJson().split(",")); // addLoginUserParam.setRoleList(list2); } } addLoginUserParam.setRoleName(roleName.toString()); addLoginUserParam.setRoleList(ids); returnList.add(addLoginUserParam); } } return R.ok(returnList); } @ApiOperation(value = "注册") @PostMapping("/save") @Transactional @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '注册账号'") public ResponseModel save(@RequestBody TAdmin admin) { if(StringUtils.isEmpty(admin.getUsername())||StringUtils.isEmpty(admin.getName())||StringUtils.isEmpty(admin.getPassword())){ return R.fail(ResponseCodesEnum.A0100,"数据有空!"); } if(admin.getIfForeign().equals("0")){ //国内用户注册 if(StringUtils.isEmpty(admin.getPhone())){ return R.fail(ResponseCodesEnum.A0100,"手机号为空!"); } }else { //国外用户注册 if(StringUtils.isEmpty(admin.getEmail())){ return R.fail(ResponseCodesEnum.A0100,"邮箱为空!"); } } if (StringUtils.isEmpty(admin.getCode())){ return R.fail(ResponseCodesEnum.A0100,"验证码为空!"); } //校验是否有重复的 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,admin.getUsername()); List list = tAdminService.list(query); if(list.size()>0){ return R.fail(ResponseCodesEnum.A0201,"用户登录名已存在"); } LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); if(admin.getIfForeign().equals("0")){ query1.eq(TAdmin::getPhone,admin.getPhone()); }else { query1.eq(TAdmin::getEmail,admin.getEmail()); } List list1 = tAdminService.list(query1); if(list1.size()>0){ return R.fail(ResponseCodesEnum.A0203,"用户手机/邮箱已存在"); } //校验验证码是否正确 LambdaQueryWrapper query2 = Wrappers.lambdaQuery(); if(admin.getIfForeign().equals("0")){ query2.eq(TMessageCode::getPhone,admin.getPhone()); }else { query2.eq(TMessageCode::getPhone,admin.getEmail()); } query2.eq(TMessageCode::getType,"0");//0,代表注册验证码 query2.eq(TMessageCode::getStatus,"0"); List messageCodeList = tMessageCodeService.list(query2); if(messageCodeList.size()>0){ TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1); if(!tMessageCode.getCode().equals(admin.getCode())){ return R.fail(ResponseCodesEnum.A0002,"验证码错误"); } tMessageCode.setStatus("1"); admin.setCreateDate(new Date()); admin.setModifyDate(new Date()); admin.setIsAdmined(false); admin.setIsEnabled(true); admin.setLoginFailureCount(0); admin.setIsLocked(false); //默认是商家 admin.setType(2); admin.setIsAdmined(true); admin.setPassword(DigestUtils.md5Hex(admin.getPassword())); boolean b = tAdminService.save(admin); //todo 绑定商家角色 tMessageCode.setModifyDate(new Date()); tMessageCodeService.saveOrUpdate(tMessageCode); if(b){ admin.setManagerId(admin.getManager()); tAdminService.getById(admin); } return R.ok(b); }else { return R.fail(ResponseCodesEnum.A0002,"没有找到验证码"); } } @ApiOperation(value = "登录") @PostMapping("/login") @Audit(type = AuditEnum.LOGIN,content = "#username + '请求登录'") public ResponseModel login(String username, String password) { if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){ return R.fail(ResponseCodesEnum.A0001,"参数有空"); } //验证用户名登录 LambdaQueryWrapper query = Wrappers.lambdaQuery(); // query.eq(TAdmin::getUsername,username); query.eq(TAdmin::getPassword,password); query.and( wrapper -> { wrapper.eq(TAdmin::getUsername,username) .or().eq(TAdmin::getPhone,username); } ); TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query)) .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002)); UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin,UserDetailBO.class); String token = IdUtil.simpleUUID(); userDetailBO.setCurrentToken(token); // 获取拥有的权限菜单 Set menuList = sysRoleService.listAuthMenuByUserId(userDetailBO.getId()); userDetailBO.setMenuCodeList(CollUtil.newArrayList(menuList)); // 抹除密码 userDetailBO.setPassword(null); // 保存到redis tokenManager.saveAuthentication(token,userDetailBO); return R.ok(userDetailBO); } @ApiOperation(value = "修改密码") @PostMapping("/updatePassword") public ResponseModel updatePassword(String username,String password) { if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){ return R.fail(ResponseCodesEnum.A0001,"参数有空"); } //查找用户名 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,username); List list = tAdminService.list(query); if(list.size()>0){ TAdmin admin = list.get(0); admin.setPassword(password); boolean b = tAdminService.saveOrUpdate(admin); return R.ok(b); } return R.fail(ResponseCodesEnum.A0001,"修改失败"); } @ApiOperation(value = "获取账号信息") @GetMapping("/getAdmin") public ResponseModel getAdmin(@RequestParam String id) { TAdmin tAdmin = tAdminService.getById(id); return R.ok(tAdmin); } @ApiOperation(value = "获取账号列表 分页") @GetMapping("/pageAdmin") public ResponseModel> pageAdmin(String id,String name,String userName,String ifForeign,long current,long size ) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); if(StringUtils.isNotEmpty(name)){ query.eq(TAdmin::getName,name); } if(StringUtils.isNotEmpty(userName)){ query.like(TAdmin::getUsername,userName); } if(StringUtils.isNotEmpty(ifForeign)){ query.like(TAdmin::getIfForeign,ifForeign); } if(StringUtils.isNotEmpty(id)){ query.like(TAdmin::getRelationAdminId,id); } Page page = new Page<>(current, size, true); IPage iPage = tAdminService.page(page, query); return R.ok(iPage); } @ApiOperation(value = "获取账号列表 分页") @GetMapping("/pageAdmin2") public ResponseModel> pageAdmin2(@RequestParam(value = "current") long current, @RequestParam(value = "size") long size ) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); Page page = new Page<>(current, size, true); IPage iPage = tAdminService.page(page, query); return R.ok(iPage); } @ApiOperation(value = "获取账号列表") @GetMapping("/listAdmin") public ResponseModel listAdmin(String adminId ) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); if(StringUtils.isNotEmpty(adminId)){ query.like(TAdmin::getRelationAdminId,adminId); } List list = tAdminService.list(query); return R.ok(list); } @ApiOperation(value = "修改账号") @PostMapping("/update") @Transactional public ResponseModel update(@RequestBody TAdmin admin) { //校验是否有重复的 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,admin.getUsername()); List list = tAdminService.list(query); TAdmin oldAdmin = list.get(0); if(StringUtils.isNotEmpty(admin.getPassword())){ oldAdmin.setPassword(admin.getPassword()); } if(StringUtils.isNotEmpty(admin.getName())){ oldAdmin.setName(admin.getName()); } if(StringUtils.isNotEmpty(admin.getIfForeign())){ oldAdmin.setIfForeign(admin.getIfForeign()); } if(StringUtils.isNotEmpty(admin.getTradeMerchantNo())){ oldAdmin.setTradeMerchantNo(admin.getTradeMerchantNo()); } if(StringUtils.isNotEmpty(admin.getPayPlatform())){ oldAdmin.setPayPlatform(admin.getPayPlatform()); } if(StringUtils.isNotEmpty(admin.getPromoCodeOpen())){ oldAdmin.setPromoCodeOpen(admin.getPromoCodeOpen()); } if(StringUtils.isNotEmpty(admin.getPhone())){ oldAdmin.setPhone(admin.getPhone()); } if(StringUtils.isNotEmpty(admin.getEmail())){ oldAdmin.setEmail(admin.getEmail()); } if(admin.getApplyStartTime()!=null){ oldAdmin.setApplyStartTime(admin.getApplyStartTime()); } if(admin.getApplyEndTime()!=null){ oldAdmin.setApplyEndTime(admin.getApplyEndTime()); } oldAdmin.setModifyDate(new Date()); tAdminService.updateById(oldAdmin); return R.ok(); } @ApiOperation(value = "绑定上级账户") @PostMapping("/setRelationAdmin") @Transactional public ResponseModel setRelationAdmin(Long adminId,String username) { TAdmin admin = tAdminService.getById(adminId); if(StringUtils.isNotEmpty(username)){ if(StringUtils.isNotEmpty(admin.getRelationAdminId())){ return R.fail("已有绑定关系"); } LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,username); List list = tAdminService.list(query); if(list.size()>0){ TAdmin parentAdmin = list.get(0); if(StringUtils.isNotEmpty(parentAdmin.getRelationAdminId())&&parentAdmin.getRelationAdminId().equals(admin.getId().toString())){ return R.fail("不能互为绑定关系"); }else{ admin.setRelationAdminId(String.valueOf(parentAdmin.getId())); tAdminService.updateById(admin); } }else { return R.fail("找不到账户"); } }else { return R.fail(ResponseCodesEnum.A0001); } return R.ok(); } @ApiOperation(value = "获取所有关联(下级)账号信息") @GetMapping("/getAdminIdList") public ResponseModel> getAdminIdList(@RequestParam String adminId) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getRelationAdminId,adminId); List list = tAdminService.list(query); List idList =new ArrayList<>(); for(TAdmin admin:list){ idList.add(admin.getId()); } return R.ok(idList); } @ApiOperation(value = "获取所有关联(下级)账号信息") @GetMapping("/getAdminList") public ResponseModel getAdminList(String adminId) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getRelationAdminId,adminId); List list = tAdminService.list(query); return R.ok(list); } @ApiOperation(value = "获取账号信息byname") @GetMapping("/getAdminByUsername") public ResponseModel getAdminByUsername(@RequestParam String username) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,username); List list = tAdminService.list(query); TAdmin tAdmin = list.get(0); return R.ok(tAdmin); } @ApiOperation(value = "获取上级账号名") @GetMapping("/getRelationAdminUsername") public String getRelationAdminUsername(String relationAdminId) { TAdmin admin = tAdminService.getById(relationAdminId); return admin.getUsername(); } }