小程序注册抽成通用方法

This commit is contained in:
mirage 2026-02-25 10:43:17 +08:00
parent 824933f911
commit 737c7a1ff1
3 changed files with 118 additions and 83 deletions

View File

@ -17,14 +17,13 @@ import com.mdd.common.core.AjaxResult;
import com.mdd.common.core.PageResult; import com.mdd.common.core.PageResult;
import com.mdd.common.entity.College; import com.mdd.common.entity.College;
import com.mdd.common.entity.Teacher; import com.mdd.common.entity.Teacher;
import com.mdd.common.entity.admin.Admin;
import com.mdd.common.entity.admin.AdminRole; import com.mdd.common.entity.admin.AdminRole;
import com.mdd.common.entity.system.SystemRole; import com.mdd.common.entity.system.SystemRole;
import com.mdd.common.mapper.CollegeMapper; import com.mdd.common.mapper.CollegeMapper;
import com.mdd.common.mapper.TeacherMapper; import com.mdd.common.mapper.TeacherMapper;
import com.mdd.common.mapper.admin.AdminMapper;
import com.mdd.common.mapper.system.SystemRoleMapper; import com.mdd.common.mapper.system.SystemRoleMapper;
import com.mdd.common.exception.OperateException; import com.mdd.common.exception.OperateException;
import com.mdd.common.service.RegisterService;
import com.mdd.common.util.ConfigUtils; import com.mdd.common.util.ConfigUtils;
import com.mdd.common.util.QrCodeUtil; import com.mdd.common.util.QrCodeUtil;
import com.mdd.common.util.RandomUtil; import com.mdd.common.util.RandomUtil;
@ -55,8 +54,8 @@ public class TeacherServiceImpl implements ITeacherService {
@Resource @Resource
TeacherMapper teacherMapper; TeacherMapper teacherMapper;
@Autowired @Resource
private AdminMapper adminMapper; RegisterService registerService;
@Autowired @Autowired
private CollegeMapper collegeMapper; private CollegeMapper collegeMapper;
@Autowired @Autowired
@ -161,15 +160,17 @@ public class TeacherServiceImpl implements ITeacherService {
*/ */
@Override @Override
public AjaxResult<Object> add(TeacherCreateValidate createValidate) { public AjaxResult<Object> add(TeacherCreateValidate createValidate) {
// 密码默认是电话号码后8位
String password = createValidate.getContactPhone().substring(3);
// 自动生成唯一教师工号作为管理员账号 & 教师工号 // 自动生成唯一教师工号作为管理员账号 & 教师工号
String teacherCode = generateTeacherCode(); String teacherCode = generateTeacherCode();
// 创建admin账号
// 创建后台管理系统账号
SystemAdminCreateValidate admin = new SystemAdminCreateValidate(); SystemAdminCreateValidate admin = new SystemAdminCreateValidate();
admin.setAccount(teacherCode); admin.setAccount(teacherCode);
admin.setName(createValidate.getName()); admin.setName(createValidate.getName());
admin.setDisable(1); admin.setDisable(1);
// 密码默认是电话号码后8位 admin.setPassword(password);
admin.setPassword(createValidate.getContactPhone().substring(3));
int teacherRoleId; int teacherRoleId;
try { try {
teacherRoleId = Integer.parseInt(ConfigUtils.get("teacher", "teacher_role_id")); teacherRoleId = Integer.parseInt(ConfigUtils.get("teacher", "teacher_role_id"));
@ -182,10 +183,15 @@ public class TeacherServiceImpl implements ITeacherService {
// 是否启用:0-启用 1-不启用 // 是否启用:0-启用 1-不启用
admin.setDisable(0); admin.setDisable(0);
adminServiceImpl.add(admin); adminServiceImpl.add(admin);
QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account", admin.getAccount()); // 注册小程序
queryWrapper.isNull("delete_time"); registerService.registerUniapp(password, teacherCode, 5);
Admin admin1 = adminMapper.selectOne(queryWrapper);
// TODO: 这段没用上,先注释了
// QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("account", admin.getAccount());
// queryWrapper.isNull("delete_time");
// Admin admin1 = adminMapper.selectOne(queryWrapper);
// 创建教师信息注意新表结构没有admin_id字段所以不存储adminId // 创建教师信息注意新表结构没有admin_id字段所以不存储adminId
Teacher model = new Teacher(); Teacher model = new Teacher();
model.setTeacherName(createValidate.getName()); model.setTeacherName(createValidate.getName());

View File

@ -0,0 +1,65 @@
package com.mdd.common.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.entity.user.User;
import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.util.ConfigUtils;
import com.mdd.common.util.ToolUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class RegisterService {
@Resource
UserMapper userMapper;
/**
* 注册小程序
*
* @param password 密码
* @param account 账号
*/
public void registerUniapp(String password, String account, Integer terminal) {
Integer sn = this.__generateSn();
String pwd = ToolUtils.makePassword(password);
User user = new User();
user.setSn(sn);
user.setNickname("用户" + sn);
user.setAccount(account);
user.setPassword(pwd);
String defaultAvatar = ConfigUtils.get("default_image", "user_avatar", "/api/static/default_avatar.png");
user.setAvatar(defaultAvatar);
// 默认是PC端注册
user.setChannel(terminal);
user.setIsNewUser(1);
user.setCreateTime(System.currentTimeMillis() / 1000);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.insert(user);
}
/**
* 生成用户编号
*
* @return Integer
* @author fzr
*/
public Integer __generateSn() {
Integer sn;
while (true) {
sn = Integer.parseInt(ToolUtils.randomInt(8));
User snModel = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn")
.eq("sn", sn)
.last("limit 1"));
if (snModel == null) {
break;
}
}
return sn;
}
}

View File

@ -18,6 +18,7 @@ import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.mapper.user.UserSessionMapper; import com.mdd.common.mapper.user.UserSessionMapper;
import com.mdd.common.plugin.notice.NoticeCheck; import com.mdd.common.plugin.notice.NoticeCheck;
import com.mdd.common.plugin.wechat.WxMnpDriver; import com.mdd.common.plugin.wechat.WxMnpDriver;
import com.mdd.common.service.RegisterService;
import com.mdd.common.util.*; import com.mdd.common.util.*;
import com.mdd.front.cache.ScanLoginCache; import com.mdd.front.cache.ScanLoginCache;
import com.mdd.front.cache.TokenLoginCache; import com.mdd.front.cache.TokenLoginCache;
@ -49,7 +50,8 @@ public class LoginServiceImpl implements ILoginService {
@Resource @Resource
UserMapper userMapper; UserMapper userMapper;
@Resource
RegisterService registerService;
@Resource @Resource
UserAuthMapper userAuthMapper; UserAuthMapper userAuthMapper;
@Resource @Resource
@ -58,10 +60,10 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 注册账号 * 注册账号
* *
* @author fzr * @param account 账号
* @param account 账号
* @param password 密码 * @param password 密码
* @param terminal 总端 * @param terminal 总端
* @author fzr
*/ */
@Override @Override
public void register(String account, String password, Integer terminal) { public void register(String account, String password, Integer terminal) {
@ -73,31 +75,14 @@ public class LoginServiceImpl implements ILoginService {
Assert.isNull(model, "账号已存在,换一个吧!"); Assert.isNull(model, "账号已存在,换一个吧!");
Integer sn = this.__generateSn(); registerService.registerUniapp(password, account, terminal);
// String salt = ToolUtils.randomString(5);
String pwd = ToolUtils.makePassword(password);
User user = new User();
user.setSn(sn);
user.setNickname("用户"+sn);
user.setAccount(account);
user.setPassword(pwd);
String defaultAvatar = ConfigUtils.get("default_image", "user_avatar", "/api/static/default_avatar.png");
user.setAvatar(defaultAvatar);
user.setChannel(terminal);
user.setIsNewUser(1);
user.setCreateTime(System.currentTimeMillis() / 1000);
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.insert(user);
} }
/** /**
* 账号登录 * 账号登录
* *
* @author fzr
* @return LoginTokenVo * @return LoginTokenVo
* @author fzr
*/ */
@Override @Override
@Transactional @Transactional
@ -115,7 +100,7 @@ public class LoginServiceImpl implements ILoginService {
// 账号密码登录 // 账号密码登录
if (loginPwdValidate.getScene().equals(LoginEnum.ACCOUNT_PASSWORD.getCode())) { if (loginPwdValidate.getScene().equals(LoginEnum.ACCOUNT_PASSWORD.getCode())) {
User user = userMapper.selectOne(new QueryWrapper<User>() User user = userMapper.selectOne(new QueryWrapper<User>()
.nested(wq->wq .nested(wq -> wq
.eq("account", account).or() .eq("account", account).or()
.eq("mobile", account).or() .eq("mobile", account).or()
) )
@ -136,10 +121,10 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 手机号登录 * 手机号登录
* *
* @author fzr
* @param mobile 手机号 * @param mobile 手机号
* @param code 验证码 * @param code 验证码
* @return LoginTokenVo * @return LoginTokenVo
* @author fzr
*/ */
@Override @Override
public LoginTokenVo mobileLogin(String mobile, String code, Integer terminal, Integer sceneId) { public LoginTokenVo mobileLogin(String mobile, String code, Integer terminal, Integer sceneId) {
@ -165,10 +150,10 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 微信小程序登录 * 微信小程序登录
* *
* @author fzr * @param code 编码
* @param code 编码
* @param terminal 终端 * @param terminal 终端
* @return LoginTokenVo * @return LoginTokenVo
* @author fzr
*/ */
@Override @Override
@Transactional @Transactional
@ -189,10 +174,10 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 公众号登录 * 公众号登录
* *
* @author fzr * @param code 编码
* @param code 编码
* @param terminal 终端 * @param terminal 终端
* @return LoginTokenVo * @return LoginTokenVo
* @author fzr
*/ */
@Override @Override
public LoginTokenVo officeLogin(String code, Integer terminal) { public LoginTokenVo officeLogin(String code, Integer terminal) {
@ -200,7 +185,7 @@ public class LoginServiceImpl implements ILoginService {
WxMpService wxMpService = WxMnpDriver.oa(); WxMpService wxMpService = WxMnpDriver.oa();
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code); WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
String uniId = wxOAuth2AccessToken.getUnionId(); String uniId = wxOAuth2AccessToken.getUnionId();
String openId = wxOAuth2AccessToken.getOpenId(); String openId = wxOAuth2AccessToken.getOpenId();
String unionId = uniId == null ? "0" : uniId; String unionId = uniId == null ? "0" : uniId;
String avatar = ""; String avatar = "";
@ -211,9 +196,10 @@ public class LoginServiceImpl implements ILoginService {
String userInfoUrl = String.format(userInfoUri, accessToken, openId); String userInfoUrl = String.format(userInfoUri, accessToken, openId);
String resultInfo = HttpUtils.sendGet(userInfoUrl); String resultInfo = HttpUtils.sendGet(userInfoUrl);
Map<String, String> resultMap = MapUtils.jsonToMap(resultInfo); Map<String, String> resultMap = MapUtils.jsonToMap(resultInfo);
avatar = resultMap.get("headimgurl"); avatar = resultMap.get("headimgurl");
nickname = resultMap.get("nickname"); nickname = resultMap.get("nickname");
} catch (Exception ignored) {} } catch (Exception ignored) {
}
return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal); return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
} catch (WxErrorException e) { } catch (WxErrorException e) {
@ -224,9 +210,9 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 公众号跳转url * 公众号跳转url
* *
* @author fzr
* @param url 连接 * @param url 连接
* @return String * @return String
* @author fzr
*/ */
@Override @Override
public String oaCodeUrl(String url) { public String oaCodeUrl(String url) {
@ -239,9 +225,9 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 扫码链接 * 扫码链接
* *
* @author fzr
* @param session session * @param session session
* @return String * @return String
* @author fzr
*/ */
@Override @Override
public String scanCodeUrl(String url, HttpSession session) { public String scanCodeUrl(String url, HttpSession session) {
@ -280,11 +266,11 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 扫码登录 * 扫码登录
* *
* @author fzr * @param code 编码
* @param code 编码 * @param state 标识
* @param state 标识
* @param terminal 终端 * @param terminal 终端
* @param session 会话 * @param session 会话
* @author fzr
*/ */
@Override @Override
public LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session) { public LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session) {
@ -309,7 +295,7 @@ public class LoginServiceImpl implements ILoginService {
String result = HttpUtils.sendGet(accessTokenUrl); String result = HttpUtils.sendGet(accessTokenUrl);
resultMap = MapUtils.jsonToMap(result); resultMap = MapUtils.jsonToMap(result);
} catch (Exception e) { } catch (Exception e) {
throw new OperateException("获取access_token失败:"+e.getMessage()); throw new OperateException("获取access_token失败:" + e.getMessage());
} }
// 访问微信获取用户信息 (openId,unionId,昵称,头像等) // 访问微信获取用户信息 (openId,unionId,昵称,头像等)
@ -322,13 +308,13 @@ public class LoginServiceImpl implements ILoginService {
String resultUserInfo = HttpUtils.sendGet(userInfoUrl); String resultUserInfo = HttpUtils.sendGet(userInfoUrl);
userinfoMap = MapUtils.jsonToMap(resultUserInfo); userinfoMap = MapUtils.jsonToMap(resultUserInfo);
} catch (Exception e) { } catch (Exception e) {
throw new OperateException("获取用户信息失败:"+e.getMessage()); throw new OperateException("获取用户信息失败:" + e.getMessage());
} }
String openId = userinfoMap.get("openid"); String openId = userinfoMap.get("openid");
String uniId = userinfoMap.get("unionid"); String uniId = userinfoMap.get("unionid");
String unionId = uniId == null ? "0" : uniId; String unionId = uniId == null ? "0" : uniId;
String avatar = resultMap.getOrDefault("headimgurl", ""); String avatar = resultMap.getOrDefault("headimgurl", "");
String nickname = resultMap.getOrDefault("nickname", ""); String nickname = resultMap.getOrDefault("nickname", "");
return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal); return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
@ -356,13 +342,13 @@ public class LoginServiceImpl implements ILoginService {
if (StringUtils.equals(unionId, "0") == false) { if (StringUtils.equals(unionId, "0") == false) {
queryWrapper = new QueryWrapper<UserAuth>() queryWrapper = new QueryWrapper<UserAuth>()
.nested(wq->wq .nested(wq -> wq
.eq("unionid", unionId).or() .eq("unionid", unionId).or()
.eq("openid", openId) .eq("openid", openId)
).last("limit 1"); ).last("limit 1");
} else { } else {
queryWrapper = new QueryWrapper<UserAuth>() queryWrapper = new QueryWrapper<UserAuth>()
.nested(wq->wq .nested(wq -> wq
.eq("openid", openId) .eq("openid", openId)
).last("limit 1"); ).last("limit 1");
} }
@ -380,14 +366,14 @@ public class LoginServiceImpl implements ILoginService {
String defaultAvatar = ConfigUtils.get("default_image", "user_avatar", "/api/static/default_avatar.png"); String defaultAvatar = ConfigUtils.get("default_image", "user_avatar", "/api/static/default_avatar.png");
// 创建用户 // 创建用户
if (StringUtils.isNull(user)) { if (StringUtils.isNull(user)) {
Integer sn = this.__generateSn(); Integer sn = registerService.__generateSn();
//user.setAvatar(defaultAvatar); //user.setAvatar(defaultAvatar);
String defaultNickname = "用户" + sn; String defaultNickname = "用户" + sn;
if (StringUtils.isNotEmpty(avatar)) { if (StringUtils.isNotEmpty(avatar)) {
try { try {
Long time = System.currentTimeMillis(); Long time = System.currentTimeMillis();
String date = TimeUtils.millisecondToDate(time, "yyyyMMdd"); String date = TimeUtils.millisecondToDate(time, "yyyyMMdd");
String name = ToolUtils.makeMd5(ToolUtils.makeUUID()+time) + ".jpg"; String name = ToolUtils.makeMd5(ToolUtils.makeUUID() + time) + ".jpg";
String path = "avatar" + date + "/" + name; String path = "avatar" + date + "/" + name;
String savePath = YmlUtils.get("like.upload-directory") + path; String savePath = YmlUtils.get("like.upload-directory") + path;
ToolUtils.download(avatar, savePath); ToolUtils.download(avatar, savePath);
@ -445,11 +431,11 @@ public class LoginServiceImpl implements ILoginService {
/** /**
* 处理录令牌 * 处理录令牌
* *
* @author fzr * @param userId 用户ID
* @param userId 用户ID * @param mobile 用户手机
* @param mobile 用户手机
* @param terminal 终端 * @param terminal 终端
* @return LoginTokenVo * @return LoginTokenVo
* @author fzr
*/ */
private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) { private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) {
// 实现账号登录 // 实现账号登录
@ -485,26 +471,4 @@ public class LoginServiceImpl implements ILoginService {
return vo; return vo;
} }
/**
* 生成用户编号
*
* @author fzr
* @return Integer
*/
private Integer __generateSn() {
Integer sn;
while (true) {
sn = Integer.parseInt(ToolUtils.randomInt(8));
User snModel = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn")
.eq("sn", sn)
.last("limit 1"));
if (snModel == null) {
break;
}
}
return sn;
}
} }