From db79ce46bfa619e1c399666927b83adf16754915 Mon Sep 17 00:00:00 2001 From: Xubx <1827135378@qq.com> Date: Fri, 21 Mar 2025 14:51:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B4=A6=E5=8F=B7=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/contoller/CeesUserController.java | 13 +- .../org/jeecg/modules/entity/CeesUser.java | 14 +- .../modules/entity/dto/CreateAccountDto.java | 10 ++ .../org/jeecg/modules/enums/IdentityEnum.java | 2 +- .../modules/service/ICeesUserService.java | 3 + .../service/impl/CeesUserServiceImpl.java | 152 +++++++++++++++++- 6 files changed, 183 insertions(+), 11 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/dto/CreateAccountDto.java diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/contoller/CeesUserController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/contoller/CeesUserController.java index f9305852..94d5496b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/contoller/CeesUserController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/contoller/CeesUserController.java @@ -11,6 +11,7 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.entity.CeesUser; +import org.jeecg.modules.entity.dto.CreateAccountDto; import org.jeecg.modules.enums.IdentityEnum; import org.jeecg.modules.enums.MajorEnum; import org.jeecg.modules.service.ICeesUserService; @@ -70,12 +71,20 @@ public class CeesUserController extends JeecgController add(@RequestBody CeesUser ceesUser) { - ceesUser.setUserHeadingCode(ceesUserService.createIdentityID(ceesUser)); - ceesUser.setWorkload(0); ceesUserService.save(ceesUser); 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(); + } + /** * 编辑 * diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CeesUser.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CeesUser.java index 8bd73728..4cdac697 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CeesUser.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CeesUser.java @@ -14,7 +14,7 @@ import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; -import java.util.Date; +import java.time.LocalDateTime; /** * @Description: CEES用户表 @@ -41,7 +41,7 @@ public class CeesUser implements Serializable { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建日期") - private Date createTime; + private LocalDateTime createTime; /**更新人*/ @ApiModelProperty(value = "更新人") private String updateBy; @@ -49,7 +49,7 @@ public class CeesUser implements Serializable { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新日期") - private Date updateTime; + private LocalDateTime updateTime; /**所属部门*/ @ApiModelProperty(value = "所属部门") private String sysOrgCode; @@ -62,9 +62,9 @@ public class CeesUser implements Serializable { @ApiModelProperty(value = "用户身份码") private String userId; /**用户识别码*/ - @Excel(name = "用户识别码", width = 15) - @ApiModelProperty(value = "用户识别码") - private String userHeadingCode; +// @Excel(name = "用户识别码", width = 15) +// @ApiModelProperty(value = "用户识别码") +// private String userHeadingCode; /**工作量*/ @Excel(name = "工作量", width = 15) @ApiModelProperty(value = "工作量") @@ -75,7 +75,7 @@ public class CeesUser implements Serializable { private String groupId; /**身份:管理员1 学生2,老师 3 ,外校老师4*/ @Excel(name = "身份:管理员1 学生2,老师 3 ,外校老师4", width = 15) - @ApiModelProperty(value = "身份:管理员1 学生2,老师 3 ,外校老师4") + @ApiModelProperty(value = "身份:管理员1 学生2,本校老师 3 ,外校老师4") private Integer identity; /** * 身份描述 diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/dto/CreateAccountDto.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/dto/CreateAccountDto.java new file mode 100644 index 00000000..194049e0 --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/dto/CreateAccountDto.java @@ -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; +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/enums/IdentityEnum.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/enums/IdentityEnum.java index c7f63ee9..9a70dd6b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/enums/IdentityEnum.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/enums/IdentityEnum.java @@ -20,7 +20,7 @@ public enum IdentityEnum { /** * 老师 */ - TEACHER(3, "老师"), + TEACHER(3, "本校老师"), /** * 外校老师 */ diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICeesUserService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICeesUserService.java index 317b081e..e5bdf374 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICeesUserService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICeesUserService.java @@ -3,6 +3,7 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.CeesUser; +import org.jeecg.modules.entity.dto.CreateAccountDto; /** * @Description: CEES用户表 @@ -20,4 +21,6 @@ public interface ICeesUserService extends IService { Result getUser(String userId); Result getGroupName(String groupId); + + void createAccount(CreateAccountDto createAccountDto); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CeesUserServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CeesUserServiceImpl.java index bfed1a92..2f634284 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CeesUserServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CeesUserServiceImpl.java @@ -10,13 +10,17 @@ import org.jeecg.modules.entity.CeesLocalTeacher; import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesWaiTeacher; 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.StudentLetterEnum; import org.jeecg.modules.mapper.*; import org.jeecg.modules.service.ICeesUserService; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.*; /** * @Description: CEES用户表 @@ -41,6 +45,10 @@ public class CeesUserServiceImpl extends ServiceImpl i @Resource CeesWaiTeacherMapper ceesWaiTeacherMapper; + /** + * @param ceesUser + * @return {@link String } + */ @Override public String createIdentityID(CeesUser ceesUser) { String res = null; @@ -161,7 +169,7 @@ public class CeesUserServiceImpl extends ServiceImpl i jsonObject.put("router", "/waiTeacher"); jsonObject.put("status", "1"); //1是填写信息 return Result.ok(jsonObject); - } else{ + } else { JSONObject jsonObject = new JSONObject(); jsonObject.put("userId", user.getUserId()); jsonObject.put("router", "/mainPage"); @@ -247,4 +255,146 @@ public class CeesUserServiceImpl extends ServiceImpl i public Result getGroupName(String groupId) { 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 set = new HashSet<>(); + // 存储与majorID相关的用户专业id + List userMIDList = new ArrayList<>(); + // 存储新生成的用户对象 + List h5Users = new ArrayList<>(); + // 获取所有用户 + List 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 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 set, Integer groupType, List 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; + } }