新增:AND a.username = 'admin'

This commit is contained in:
2024-09-07 23:06:47 +08:00
parent 7b2c68b942
commit dc68c46bcb
9 changed files with 87 additions and 37 deletions

View File

@@ -75,7 +75,8 @@ public class MybatisPlusConfig {
"sys_website_field", "sys_website_field",
"sys_modules", "sys_modules",
"sys_environment", "sys_environment",
"sys_components" "sys_components",
"sys_company"
).contains(tableName); ).contains(tableName);
} }
}; };

View File

@@ -18,6 +18,7 @@ import java.util.UUID;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Pattern;
/** /**
* 常用工具方法 * 常用工具方法
@@ -232,4 +233,21 @@ public class CommonUtil {
} }
} }
/**
* 验证给定的字符串是否为有效的中国大陆手机号码。
*
* @param phoneNumber 要验证的电话号码字符串
* @return 如果字符串是有效的手机号码则返回true否则返回false
*/
public static boolean isValidPhoneNumber(String phoneNumber) {
// 定义手机号码的正则表达式
String regex = "^1[3-9]\\d{9}$";
// 创建Pattern对象
Pattern pattern = Pattern.compile(regex);
// 使用matcher方法创建Matcher对象并进行匹配
return pattern.matcher(phoneNumber).matches();
}
} }

View File

@@ -3,6 +3,7 @@ package com.gxwebsoft.common.system.controller;
import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonRequest;
@@ -86,6 +87,8 @@ public class MainController extends BaseController {
@ApiOperation("用户登录") @ApiOperation("用户登录")
@PostMapping("/login") @PostMapping("/login")
public ApiResult<LoginResult> login(@RequestBody LoginParam param, HttpServletRequest request) { public ApiResult<LoginResult> login(@RequestBody LoginParam param, HttpServletRequest request) {
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
String username = param.getUsername(); String username = param.getUsername();
Integer tenantId; Integer tenantId;
if(param.getTenantId() != null){ if(param.getTenantId() != null){
@@ -113,11 +116,6 @@ public class MainController extends BaseController {
// 登录账号|手机号码|邮箱登录 // 登录账号|手机号码|邮箱登录
User user = userService.getByUsername(username, tenantId); User user = userService.getByUsername(username, tenantId);
// 租户管理员模式
if (param.getIsAdmin() != null) {
user = userService.getAdminByPhone(param.getPhone());
}
if (user == null) { if (user == null) {
String message = "账号不存在"; String message = "账号不存在";
loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request);
@@ -145,8 +143,7 @@ public class MainController extends BaseController {
// 登录成功 // 登录成功
loginRecordService.saveAsync(username, LoginRecord.TYPE_LOGIN, null, tenantId, request); loginRecordService.saveAsync(username, LoginRecord.TYPE_LOGIN, null, tenantId, request);
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
final JSONObject register = cacheClient.getSettingInfo("register", tenantId); final JSONObject register = cacheClient.getSettingInfo("register", tenantId);
if (register != null) { if (register != null) {
System.out.println("register = " + register); System.out.println("register = " + register);
@@ -343,6 +340,11 @@ public class MainController extends BaseController {
String userTemplateId = "SMS_257840118"; String userTemplateId = "SMS_257840118";
String sign = "南宁网宿科技"; String sign = "南宁网宿科技";
if (!CommonUtil.isValidPhoneNumber(param.getPhone())) {
return fail("请输入有效的手机号码");
}
// 读取租户的短信配置 // 读取租户的短信配置
if (getTenantId() != null) { if (getTenantId() != null) {
String string = redisUtil.get("setting:sms:" + getTenantId()); String string = redisUtil.get("setting:sms:" + getTenantId());
@@ -456,6 +458,8 @@ public class MainController extends BaseController {
@ApiOperation("短信验证码登录") @ApiOperation("短信验证码登录")
@PostMapping("/loginBySms") @PostMapping("/loginBySms")
public ApiResult<LoginResult> loginBySms(@RequestBody LoginParam param, HttpServletRequest request) { public ApiResult<LoginResult> loginBySms(@RequestBody LoginParam param, HttpServletRequest request) {
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
final String phone = param.getPhone(); final String phone = param.getPhone();
final Integer tenantId = getTenantId(); final Integer tenantId = getTenantId();
final String code = param.getCode(); final String code = param.getCode();
@@ -464,11 +468,6 @@ public class MainController extends BaseController {
} }
User user = userService.getByUsername(phone, tenantId); User user = userService.getByUsername(phone, tenantId);
// 租户管理员模式
if(param.getIsAdmin() != null){
user = userService.getAdminByPhone(param.getPhone());
}
// 验证码校验 // 验证码校验
String key = "code:" + param.getPhone(); String key = "code:" + param.getPhone();
if (!code.equals(redisUtil.get(key)) && !"789789".equals(code)) { if (!code.equals(redisUtil.get(key)) && !"789789".equals(code)) {
@@ -491,8 +490,6 @@ public class MainController extends BaseController {
} }
loginRecordService.saveAsync(phone, LoginRecord.TYPE_LOGIN, null, tenantId, request); loginRecordService.saveAsync(phone, LoginRecord.TYPE_LOGIN, null, tenantId, request);
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
final JSONObject register = cacheClient.getSettingInfo("register", tenantId); final JSONObject register = cacheClient.getSettingInfo("register", tenantId);
if (register != null) { if (register != null) {
final String ExpireTime = register.getString("tokenExpireTime"); final String ExpireTime = register.getString("tokenExpireTime");
@@ -523,13 +520,33 @@ public class MainController extends BaseController {
throw new BusinessException("验证码不正确"); throw new BusinessException("验证码不正确");
} }
// 注册会员 // 注册网站平台会员
final User byPhone = userService.getByPhone(phone);
if(ObjectUtil.isNotEmpty(byPhone)){
return fail("该手机号已存在",null);
}
if (byPhone == null) {
final UserParam userParam = new UserParam();
userParam.setPhone(phone);
userParam.setTenantId(5);
final User addUser = userService.addUser(userParam);
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
// 签发token
String access_token = JwtUtil.buildToken(new JwtSubject(phone, addUser.getTenantId()),
tokenExpireTime, configProperties.getTokenKey());
return success("注册成功", new LoginResult(access_token, addUser));
}
// 注册管理员
if (userService.getAdminByPhone(phone) != null) { if (userService.getAdminByPhone(phone) != null) {
throw new BusinessException("该手机号码已注册"); throw new BusinessException("该手机号码已注册");
} }
// 添加租户 // 添加租户
Tenant tenant = new Tenant(); Tenant tenant = new Tenant();
tenant.setTenantName(tenantName); tenant.setTenantName(tenantName);
tenant.setPhone(phone);
tenant.setTenantCode(CommonUtil.randomUUID16()); tenant.setTenantCode(CommonUtil.randomUUID16());
tenantService.save(tenant); tenantService.save(tenant);

View File

@@ -49,7 +49,6 @@ public class TenantController extends BaseController {
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@PreAuthorize("hasAuthority('sys:tenant:list')")
@ApiOperation("分页查询租户") @ApiOperation("分页查询租户")
@GetMapping("/page") @GetMapping("/page")
public ApiResult<PageResult<Tenant>> page(TenantParam param) { public ApiResult<PageResult<Tenant>> page(TenantParam param) {

View File

@@ -2,6 +2,7 @@ package com.gxwebsoft.common.system.controller;
import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -20,6 +21,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -36,6 +38,7 @@ import java.util.stream.Collectors;
* @author WebSoft * @author WebSoft
* @since 2018-12-24 16:10:41 * @since 2018-12-24 16:10:41
*/ */
@Slf4j
@Api(tags = "用户") @Api(tags = "用户")
@RestController @RestController
@RequestMapping("/api/system/user") @RequestMapping("/api/system/user")
@@ -49,7 +52,7 @@ public class UserController extends BaseController {
@Resource @Resource
private DictionaryDataService dictionaryDataService; private DictionaryDataService dictionaryDataService;
@PreAuthorize("hasAuthority('sys:auth:user')") @PreAuthorize("hasAuthority('sys:auth:user')")
@ApiOperation("分页查询用户") @ApiOperation("分页查询用户")
@GetMapping("/page") @GetMapping("/page")
public ApiResult<PageResult<User>> page(UserParam param) { public ApiResult<PageResult<User>> page(UserParam param) {
@@ -83,6 +86,11 @@ public class UserController extends BaseController {
public ApiResult<?> add(@RequestBody User user) { public ApiResult<?> add(@RequestBody User user) {
user.setStatus(0); user.setStatus(0);
user.setPassword(userService.encodePassword(user.getPassword())); user.setPassword(userService.encodePassword(user.getPassword()));
// 排重
final User byPhone = userService.getByPhone(user.getPhone());
if(ObjectUtil.isNotEmpty(byPhone)){
return fail("该手机号码已存在");
}
if (userService.saveUser(user)) { if (userService.saveUser(user)) {
return success("添加成功",user.getUserId()); return success("添加成功",user.getUserId());
} }
@@ -99,6 +107,15 @@ public class UserController extends BaseController {
d.setPassword(userService.encodePassword(d.getPassword())); d.setPassword(userService.encodePassword(d.getPassword()));
} }
}); });
final Set<String> collect = userList.stream().map(User::getPhone).collect(Collectors.toSet());
final List<User> list = userService.list(new LambdaQueryWrapper<User>().in(User::getPhone, collect).select(User::getPhone));
System.out.println("list = " + list);
final Map<String, List<User>> phoneCollect = list.stream().collect(Collectors.groupingBy(User::getPhone));
System.out.println("phoneCollect = " + phoneCollect);
userList.removeIf(d -> phoneCollect.containsKey(d.getPhone()));
System.out.println("phoneCollect = " + phoneCollect);
if (userService.saveBatch(userList)) { if (userService.saveBatch(userList)) {
return success("添加成功"); return success("添加成功");
} }

View File

@@ -1,5 +1,6 @@
package com.gxwebsoft.common.system.entity; package com.gxwebsoft.common.system.entity;
import cn.hutool.core.util.DesensitizedUtil;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@@ -79,4 +80,11 @@ public class Tenant implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Object date; private Object date;
@ApiModelProperty(value = "手机号码")
@TableField(exist = false)
private String phone;
public String getPhone(){
return DesensitizedUtil.mobilePhone(this.phone);
}
} }

View File

@@ -177,6 +177,14 @@ public class User implements UserDetails {
@ApiModelProperty(value = "是否管理员") @ApiModelProperty(value = "是否管理员")
private Boolean isAdmin; private Boolean isAdmin;
@ApiModelProperty(value = "租户管理员ID")
@TableField(exist = false)
private Integer adminId;
@ApiModelProperty(value = "用于一键登录控制台")
@TableField(exist = false)
private String adminToken;
@ApiModelProperty("评论数") @ApiModelProperty("评论数")
private Integer commentNumbers; private Integer commentNumbers;

View File

@@ -251,7 +251,7 @@
<where> <where>
AND a.deleted = 0 AND a.deleted = 0
AND a.phone = #{phone} AND a.phone = #{phone}
AND a.nickname = '超级管理员' AND a.username = 'admin'
</where> </where>
</select> </select>

View File

@@ -50,24 +50,6 @@ public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> impleme
PageParam<Tenant, TenantParam> page = new PageParam<>(param); PageParam<Tenant, TenantParam> page = new PageParam<>(param);
page.setDefaultOrder("sort_number asc, create_time desc"); page.setDefaultOrder("sort_number asc, create_time desc");
List<Tenant> list = baseMapper.selectPageRel(page, param); List<Tenant> list = baseMapper.selectPageRel(page, param);
// if (param.getSceneType() != null && param.getSceneType().equals("plug")) {
// final Set<Integer> collectIds = list.stream().map(Tenant::getTenantId).collect(Collectors.toSet());
// System.out.println("collectIds = " + collectIds);
// final List<Company> companyList = companyService.list(new LambdaUpdateWrapper<Company>().in(Company::getTenantId, collectIds));
// System.out.println("companyList = " + companyList);
// final Map<Integer, List<Company>> collect = companyList.stream().collect(Collectors.groupingBy(Company::getTenantId));
// list.forEach(d -> {
// final List<Company> companies = collect.get(d.getTenantId());
// if (!CollectionUtils.isEmpty(companies)) {
// final Company c1 = companies.get(0);
// final Company c2 = new Company();
// c2.setCompanyName(c1.getCompanyName());
// c2.setShortName(c1.getShortName());
// c2.setPhone(DesensitizedUtil.mobilePhone(c1.getPhone()));
// d.setCompany(c2);
// }
// });
// }
return new PageResult<>(list, page.getTotal()); return new PageResult<>(list, page.getTotal());
} }