小程序注册抽成通用方法

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.entity.College;
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.system.SystemRole;
import com.mdd.common.mapper.CollegeMapper;
import com.mdd.common.mapper.TeacherMapper;
import com.mdd.common.mapper.admin.AdminMapper;
import com.mdd.common.mapper.system.SystemRoleMapper;
import com.mdd.common.exception.OperateException;
import com.mdd.common.service.RegisterService;
import com.mdd.common.util.ConfigUtils;
import com.mdd.common.util.QrCodeUtil;
import com.mdd.common.util.RandomUtil;
@ -55,8 +54,8 @@ public class TeacherServiceImpl implements ITeacherService {
@Resource
TeacherMapper teacherMapper;
@Autowired
private AdminMapper adminMapper;
@Resource
RegisterService registerService;
@Autowired
private CollegeMapper collegeMapper;
@Autowired
@ -161,15 +160,17 @@ public class TeacherServiceImpl implements ITeacherService {
*/
@Override
public AjaxResult<Object> add(TeacherCreateValidate createValidate) {
// 密码默认是电话号码后8位
String password = createValidate.getContactPhone().substring(3);
// 自动生成唯一教师工号作为管理员账号 & 教师工号
String teacherCode = generateTeacherCode();
// 创建admin账号
// 创建后台管理系统账号
SystemAdminCreateValidate admin = new SystemAdminCreateValidate();
admin.setAccount(teacherCode);
admin.setName(createValidate.getName());
admin.setDisable(1);
// 密码默认是电话号码后8位
admin.setPassword(createValidate.getContactPhone().substring(3));
admin.setPassword(password);
int teacherRoleId;
try {
teacherRoleId = Integer.parseInt(ConfigUtils.get("teacher", "teacher_role_id"));
@ -182,10 +183,15 @@ public class TeacherServiceImpl implements ITeacherService {
// 是否启用:0-启用 1-不启用
admin.setDisable(0);
adminServiceImpl.add(admin);
QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account", admin.getAccount());
queryWrapper.isNull("delete_time");
Admin admin1 = adminMapper.selectOne(queryWrapper);
// 注册小程序
registerService.registerUniapp(password, teacherCode, 5);
// TODO: 这段没用上,先注释了
// QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("account", admin.getAccount());
// queryWrapper.isNull("delete_time");
// Admin admin1 = adminMapper.selectOne(queryWrapper);
// 创建教师信息注意新表结构没有admin_id字段所以不存储adminId
Teacher model = new Teacher();
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.plugin.notice.NoticeCheck;
import com.mdd.common.plugin.wechat.WxMnpDriver;
import com.mdd.common.service.RegisterService;
import com.mdd.common.util.*;
import com.mdd.front.cache.ScanLoginCache;
import com.mdd.front.cache.TokenLoginCache;
@ -49,7 +50,8 @@ public class LoginServiceImpl implements ILoginService {
@Resource
UserMapper userMapper;
@Resource
RegisterService registerService;
@Resource
UserAuthMapper userAuthMapper;
@Resource
@ -58,10 +60,10 @@ public class LoginServiceImpl implements ILoginService {
/**
* 注册账号
*
* @author fzr
* @param account 账号
* @param password 密码
* @param terminal 总端
* @author fzr
*/
@Override
public void register(String account, String password, Integer terminal) {
@ -73,31 +75,14 @@ public class LoginServiceImpl implements ILoginService {
Assert.isNull(model, "账号已存在,换一个吧!");
Integer sn = this.__generateSn();
// 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);
registerService.registerUniapp(password, account, terminal);
}
/**
* 账号登录
*
* @author fzr
* @return LoginTokenVo
* @author fzr
*/
@Override
@Transactional
@ -115,7 +100,7 @@ public class LoginServiceImpl implements ILoginService {
// 账号密码登录
if (loginPwdValidate.getScene().equals(LoginEnum.ACCOUNT_PASSWORD.getCode())) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.nested(wq->wq
.nested(wq -> wq
.eq("account", account).or()
.eq("mobile", account).or()
)
@ -136,10 +121,10 @@ public class LoginServiceImpl implements ILoginService {
/**
* 手机号登录
*
* @author fzr
* @param mobile 手机号
* @param code 验证码
* @return LoginTokenVo
* @author fzr
*/
@Override
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 terminal 终端
* @return LoginTokenVo
* @author fzr
*/
@Override
@Transactional
@ -189,10 +174,10 @@ public class LoginServiceImpl implements ILoginService {
/**
* 公众号登录
*
* @author fzr
* @param code 编码
* @param terminal 终端
* @return LoginTokenVo
* @author fzr
*/
@Override
public LoginTokenVo officeLogin(String code, Integer terminal) {
@ -213,7 +198,8 @@ public class LoginServiceImpl implements ILoginService {
Map<String, String> resultMap = MapUtils.jsonToMap(resultInfo);
avatar = resultMap.get("headimgurl");
nickname = resultMap.get("nickname");
} catch (Exception ignored) {}
} catch (Exception ignored) {
}
return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
} catch (WxErrorException e) {
@ -224,9 +210,9 @@ public class LoginServiceImpl implements ILoginService {
/**
* 公众号跳转url
*
* @author fzr
* @param url 连接
* @return String
* @author fzr
*/
@Override
public String oaCodeUrl(String url) {
@ -239,9 +225,9 @@ public class LoginServiceImpl implements ILoginService {
/**
* 扫码链接
*
* @author fzr
* @param session session
* @return String
* @author fzr
*/
@Override
public String scanCodeUrl(String url, HttpSession session) {
@ -280,11 +266,11 @@ public class LoginServiceImpl implements ILoginService {
/**
* 扫码登录
*
* @author fzr
* @param code 编码
* @param state 标识
* @param terminal 终端
* @param session 会话
* @author fzr
*/
@Override
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);
resultMap = MapUtils.jsonToMap(result);
} catch (Exception e) {
throw new OperateException("获取access_token失败:"+e.getMessage());
throw new OperateException("获取access_token失败:" + e.getMessage());
}
// 访问微信获取用户信息 (openId,unionId,昵称,头像等)
@ -322,7 +308,7 @@ public class LoginServiceImpl implements ILoginService {
String resultUserInfo = HttpUtils.sendGet(userInfoUrl);
userinfoMap = MapUtils.jsonToMap(resultUserInfo);
} catch (Exception e) {
throw new OperateException("获取用户信息失败:"+e.getMessage());
throw new OperateException("获取用户信息失败:" + e.getMessage());
}
String openId = userinfoMap.get("openid");
@ -356,13 +342,13 @@ public class LoginServiceImpl implements ILoginService {
if (StringUtils.equals(unionId, "0") == false) {
queryWrapper = new QueryWrapper<UserAuth>()
.nested(wq->wq
.nested(wq -> wq
.eq("unionid", unionId).or()
.eq("openid", openId)
).last("limit 1");
} else {
queryWrapper = new QueryWrapper<UserAuth>()
.nested(wq->wq
.nested(wq -> wq
.eq("openid", openId)
).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");
// 创建用户
if (StringUtils.isNull(user)) {
Integer sn = this.__generateSn();
Integer sn = registerService.__generateSn();
//user.setAvatar(defaultAvatar);
String defaultNickname = "用户" + sn;
if (StringUtils.isNotEmpty(avatar)) {
try {
Long time = System.currentTimeMillis();
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 savePath = YmlUtils.get("like.upload-directory") + path;
ToolUtils.download(avatar, savePath);
@ -445,11 +431,11 @@ public class LoginServiceImpl implements ILoginService {
/**
* 处理录令牌
*
* @author fzr
* @param userId 用户ID
* @param mobile 用户手机
* @param terminal 终端
* @return LoginTokenVo
* @author fzr
*/
private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) {
// 实现账号登录
@ -485,26 +471,4 @@ public class LoginServiceImpl implements ILoginService {
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;
}
}