用户账号生成

This commit is contained in:
Xubx 2025-03-21 14:51:38 +08:00
parent bdb310da38
commit db79ce46bf
6 changed files with 183 additions and 11 deletions

View File

@ -11,6 +11,7 @@ import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesUser;
import org.jeecg.modules.entity.dto.CreateAccountDto;
import org.jeecg.modules.enums.IdentityEnum; import org.jeecg.modules.enums.IdentityEnum;
import org.jeecg.modules.enums.MajorEnum; import org.jeecg.modules.enums.MajorEnum;
import org.jeecg.modules.service.ICeesUserService; import org.jeecg.modules.service.ICeesUserService;
@ -70,12 +71,20 @@ public class CeesUserController extends JeecgController<CeesUser, ICeesUserServi
@ApiOperation(value = "CEES用户表-添加", notes = "CEES用户表-添加") @ApiOperation(value = "CEES用户表-添加", notes = "CEES用户表-添加")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody CeesUser ceesUser) { public Result<String> add(@RequestBody CeesUser ceesUser) {
ceesUser.setUserHeadingCode(ceesUserService.createIdentityID(ceesUser));
ceesUser.setWorkload(0);
ceesUserService.save(ceesUser); ceesUserService.save(ceesUser);
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
@PostMapping("/createAccount")
public Result<?> createAccount(@RequestBody CreateAccountDto createAccountDto) {
try {
ceesUserService.createAccount(createAccountDto);
} catch (Exception e) {
return Result.error(e.getMessage());
}
return Result.OK();
}
/** /**
* 编辑 * 编辑
* *

View File

@ -14,7 +14,7 @@ import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.time.LocalDateTime;
/** /**
* @Description: CEES用户表 * @Description: CEES用户表
@ -41,7 +41,7 @@ public class CeesUser implements Serializable {
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期") @ApiModelProperty(value = "创建日期")
private Date createTime; private LocalDateTime createTime;
/**更新人*/ /**更新人*/
@ApiModelProperty(value = "更新人") @ApiModelProperty(value = "更新人")
private String updateBy; private String updateBy;
@ -49,7 +49,7 @@ public class CeesUser implements Serializable {
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期") @ApiModelProperty(value = "更新日期")
private Date updateTime; private LocalDateTime updateTime;
/**所属部门*/ /**所属部门*/
@ApiModelProperty(value = "所属部门") @ApiModelProperty(value = "所属部门")
private String sysOrgCode; private String sysOrgCode;
@ -62,9 +62,9 @@ public class CeesUser implements Serializable {
@ApiModelProperty(value = "用户身份码") @ApiModelProperty(value = "用户身份码")
private String userId; private String userId;
/**用户识别码*/ /**用户识别码*/
@Excel(name = "用户识别码", width = 15) // @Excel(name = "用户识别码", width = 15)
@ApiModelProperty(value = "用户识别码") // @ApiModelProperty(value = "用户识别码")
private String userHeadingCode; // private String userHeadingCode;
/**工作量*/ /**工作量*/
@Excel(name = "工作量", width = 15) @Excel(name = "工作量", width = 15)
@ApiModelProperty(value = "工作量") @ApiModelProperty(value = "工作量")
@ -75,7 +75,7 @@ public class CeesUser implements Serializable {
private String groupId; private String groupId;
/**身份管理员1 学生2老师 3 外校老师4*/ /**身份管理员1 学生2老师 3 外校老师4*/
@Excel(name = "身份管理员1 学生2老师 3 外校老师4", width = 15) @Excel(name = "身份管理员1 学生2老师 3 外校老师4", width = 15)
@ApiModelProperty(value = "身份管理员1 学生2老师 3 外校老师4") @ApiModelProperty(value = "身份管理员1 学生2本校老师 3 外校老师4")
private Integer identity; private Integer identity;
/** /**
* 身份描述 * 身份描述

View File

@ -0,0 +1,10 @@
package org.jeecg.modules.entity.dto;
import lombok.Data;
@Data
public class CreateAccountDto {
private Integer group;
private Integer majorId;
private Integer num;
}

View File

@ -20,7 +20,7 @@ public enum IdentityEnum {
/** /**
* 老师 * 老师
*/ */
TEACHER(3, "老师"), TEACHER(3, "本校老师"),
/** /**
* 外校老师 * 外校老师
*/ */

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesUser;
import org.jeecg.modules.entity.dto.CreateAccountDto;
/** /**
* @Description: CEES用户表 * @Description: CEES用户表
@ -20,4 +21,6 @@ public interface ICeesUserService extends IService<CeesUser> {
Result<?> getUser(String userId); Result<?> getUser(String userId);
Result<?> getGroupName(String groupId); Result<?> getGroupName(String groupId);
void createAccount(CreateAccountDto createAccountDto);
} }

View File

@ -10,13 +10,17 @@ import org.jeecg.modules.entity.CeesLocalTeacher;
import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesUser;
import org.jeecg.modules.entity.CeesWaiTeacher; import org.jeecg.modules.entity.CeesWaiTeacher;
import org.jeecg.modules.entity.Student; import org.jeecg.modules.entity.Student;
import org.jeecg.modules.entity.dto.CreateAccountDto;
import org.jeecg.modules.enums.identity.MajorLetterEnum; import org.jeecg.modules.enums.identity.MajorLetterEnum;
import org.jeecg.modules.enums.identity.StudentLetterEnum; import org.jeecg.modules.enums.identity.StudentLetterEnum;
import org.jeecg.modules.mapper.*; import org.jeecg.modules.mapper.*;
import org.jeecg.modules.service.ICeesUserService; import org.jeecg.modules.service.ICeesUserService;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
/** /**
* @Description: CEES用户表 * @Description: CEES用户表
@ -41,6 +45,10 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
@Resource @Resource
CeesWaiTeacherMapper ceesWaiTeacherMapper; CeesWaiTeacherMapper ceesWaiTeacherMapper;
/**
* @param ceesUser
* @return {@link String }
*/
@Override @Override
public String createIdentityID(CeesUser ceesUser) { public String createIdentityID(CeesUser ceesUser) {
String res = null; String res = null;
@ -161,7 +169,7 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
jsonObject.put("router", "/waiTeacher"); jsonObject.put("router", "/waiTeacher");
jsonObject.put("status", "1"); //1是填写信息 jsonObject.put("status", "1"); //1是填写信息
return Result.ok(jsonObject); return Result.ok(jsonObject);
} else{ } else {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("userId", user.getUserId()); jsonObject.put("userId", user.getUserId());
jsonObject.put("router", "/mainPage"); jsonObject.put("router", "/mainPage");
@ -247,4 +255,146 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
public Result<?> getGroupName(String groupId) { public Result<?> getGroupName(String groupId) {
return Result.ok(ceesGroupMapper.selectById(groupId).getName()); return Result.ok(ceesGroupMapper.selectById(groupId).getName());
} }
/**
* @param createAccountDto
* @return
*/
@Override
public void createAccount(CreateAccountDto createAccountDto) {
Integer groupType = createAccountDto.getGroup();
Integer num = createAccountDto.getNum();
Integer majorId = createAccountDto.getMajorId();
// 参数校验
if (groupType == null || num == null || majorId == null || num <= 0) {
throw new IllegalArgumentException("参数无效");
}
// 存储已存在的用户ID
Set<String> set = new HashSet<>();
// 存储与majorID相关的用户专业id
List<String> userMIDList = new ArrayList<>();
// 存储新生成的用户对象
List<CeesUser> h5Users = new ArrayList<>();
// 获取所有用户
List<CeesUser> list = this.list();
// 遍历现有用户
list.forEach(item -> {
set.add(item.getUserId());
if (Objects.equals(item.getMajorId(), majorId)) {
userMIDList.add(item.getUserMajorId());
}
});
// 根据专业 ID 生成账号
String prefix = getPrefixByMajorId(majorId);
String startId = userMIDList.isEmpty() ? getDefaultStartId(majorId) : userMIDList.get(userMIDList.size() - 1);
saveAccount(num, set, groupType, h5Users, majorId, startId, prefix);
// 保存生成的用户账号
this.saveBatch(h5Users);
//TODO 邀请函生成
// if (groupType == 9) {
// List<H5Invitation> h5Invitations = h5Users.stream()
// .map(item -> new H5Invitation(item.getUserId(), item.getGroupId(), item.getUserMajorId(), item.getMajorId()))
// .collect(Collectors.toList());
// h5InvitationService.saveBatch(h5Invitations);
// }
// 清理资源
h5Users.clear();
set.clear();
userMIDList.clear();
}
private String getPrefixByMajorId(Integer majorId) {
switch (majorId) {
case 1:
return "W";
case 4:
return "D";
case 7:
return "L";
case 8:
return "M";
default:
throw new IllegalArgumentException("未知专业 ID");
}
}
private String getDefaultStartId(Integer majorId) {
switch (majorId) {
case 1:
return "W240000";
case 4:
return "D241000";
case 7:
return "L242000";
case 8:
return "M243000";
default:
throw new IllegalArgumentException("未知专业 ID");
}
}
public void saveAccount(
Integer num, Set<String> set, Integer groupType, List<CeesUser> h5Users,
Integer majorId, @NotNull String code, String label
) {
// 参数校验
if (num == null || num <= 0) {
throw new IllegalArgumentException("账号数量必须大于0");
}
if (groupType == null || majorId == null) {
throw new IllegalArgumentException("用户组类型和专业 ID 不能为空");
}
if (code == null || code.isEmpty()) {
throw new IllegalArgumentException("起始用户专业 ID 不能为空");
}
int newCode = Integer.parseInt(code.substring(1)); // 提取数字部分
while (num != 0) {
String randomNum = getRandomNum(8);
// 生成账号
String account = generateAccount(randomNum, groupType, majorId);
if (!set.contains(account)) {
num--;
CeesUser h5User = createH5User(account, groupType, majorId, label, newCode);
h5Users.add(h5User);
newCode++;
}
}
}
public static String getRandomNum(int length) {
StringBuilder sb = new StringBuilder();
sb.append((int) (Math.random() * 9) + 1); // 第一位不能为0
for (int i = 1; i < length; i++) {
sb.append((int) (Math.random() * 10));
}
return sb.toString();
}
private String generateAccount(String randomNum, Integer groupType, Integer majorId) {
//从随机数中提取前 3 位和后 3 拼接 groupType majorId生成 account
String prefix = randomNum.substring(0, 3);
String suffix = randomNum.substring(5, 8);
return prefix + groupType + majorId + suffix;
}
private CeesUser createH5User(String account, Integer groupType, Integer majorId, String label, int newCode) {
CeesUser h5User = new CeesUser();
h5User.setUserId(account);
h5User.setIdentity(groupType);
h5User.setUserName("");
h5User.setMajorId(majorId);
h5User.setUserMajorId(label + newCode);
h5User.setStatus(0);
h5User.setWorkload(0);
h5User.setCreateTime(LocalDateTime.now());
h5User.setUpdateTime(LocalDateTime.now());
return h5User;
}
} }