Merge remote-tracking branch 'CEES-CMD/new-1.0' into new-1.0

# Conflicts:
#	jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICeesUserService.java
#	jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CeesUserServiceImpl.java
This commit is contained in:
Qi 2025-04-28 22:07:29 +08:00
commit 461705254b
9 changed files with 463 additions and 38 deletions

View File

@ -0,0 +1,155 @@
package org.jeecg.modules.contoller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
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.CeesAdminInfo;
import org.jeecg.modules.service.ICeesAdminInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: cees_admin_info
* @Author: jeecg-boot
* @Date: 2025-04-27
* @Version: V1.0
*/
@Api(tags="cees_admin_info")
@RestController
@RequestMapping("/cees/ceesAdminInfo")
@Slf4j
public class CeesAdminInfoController extends JeecgController<CeesAdminInfo, ICeesAdminInfoService> {
@Autowired
private ICeesAdminInfoService ceesAdminInfoService;
/**
* 分页列表查询
*
* @param ceesAdminInfo
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "cees_admin_info-分页列表查询")
@ApiOperation(value="cees_admin_info-分页列表查询", notes="cees_admin_info-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CeesAdminInfo>> queryPageList(CeesAdminInfo ceesAdminInfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CeesAdminInfo> queryWrapper = QueryGenerator.initQueryWrapper(ceesAdminInfo, req.getParameterMap());
Page<CeesAdminInfo> page = new Page<CeesAdminInfo>(pageNo, pageSize);
IPage<CeesAdminInfo> pageList = ceesAdminInfoService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param ceesAdminInfo
* @return
*/
@AutoLog(value = "cees_admin_info-添加")
@ApiOperation(value="cees_admin_info-添加", notes="cees_admin_info-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CeesAdminInfo ceesAdminInfo) {
ceesAdminInfoService.save(ceesAdminInfo);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param ceesAdminInfo
* @return
*/
@AutoLog(value = "cees_admin_info-编辑")
@ApiOperation(value="cees_admin_info-编辑", notes="cees_admin_info-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CeesAdminInfo ceesAdminInfo) {
ceesAdminInfoService.updateById(ceesAdminInfo);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "cees_admin_info-通过id删除")
@ApiOperation(value="cees_admin_info-通过id删除", notes="cees_admin_info-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
ceesAdminInfoService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "cees_admin_info-批量删除")
@ApiOperation(value="cees_admin_info-批量删除", notes="cees_admin_info-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.ceesAdminInfoService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "cees_admin_info-通过id查询")
@ApiOperation(value="cees_admin_info-通过id查询", notes="cees_admin_info-通过id查询")
@GetMapping(value = "/queryById")
public Result<CeesAdminInfo> queryById(@RequestParam(name="id",required=true) String id) {
CeesAdminInfo ceesAdminInfo = ceesAdminInfoService.getById(id);
if(ceesAdminInfo==null) {
return Result.error("未找到对应数据");
}
return Result.OK(ceesAdminInfo);
}
/**
* 导出excel
*
* @param request
* @param ceesAdminInfo
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CeesAdminInfo ceesAdminInfo) {
return super.exportXls(request, ceesAdminInfo, CeesAdminInfo.class, "cees_admin_info");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CeesAdminInfo.class);
}
}

View File

@ -78,11 +78,11 @@ public class CeesUserController extends JeecgController<CeesUser, ICeesUserServi
@PostMapping("/createAccount")
public Result<?> createAccount(@RequestBody CreateAccountDto createAccountDto) {
try {
ceesUserService.createAccount(createAccountDto);
return Result.OK(ceesUserService.createAccount(createAccountDto));
} catch (Exception e) {
return Result.error(e.getMessage());
}
return Result.OK();
}
/**

View File

@ -0,0 +1,89 @@
package org.jeecg.modules.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: cees_admin_info
* @Author: jeecg-boot
* @Date: 2025-04-27
* @Version: V1.0
*/
@Data
@TableName("cees_admin_info")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="cees_admin_info对象", description="cees_admin_info")
public class CeesAdminInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private Integer id;
/**工号*/
@Excel(name = "工号", width = 15)
@ApiModelProperty(value = "工号")
private String workNumber;
/**姓名*/
@Excel(name = "姓名", width = 15)
@ApiModelProperty(value = "姓名")
private String userName;
/**用户id*/
@Excel(name = "用户id", width = 15)
@ApiModelProperty(value = "用户id")
private String userId;
/**用户专业id*/
@Excel(name = "用户专业id", width = 15)
@ApiModelProperty(value = "用户专业id")
private String userMajorId;
/**专业id,0表示未选择*/
@Excel(name = "专业id,0表示未选择", width = 15)
@ApiModelProperty(value = "专业id,0表示未选择")
private Integer majorId;
/**组别*/
@Excel(name = "组别", width = 15)
@ApiModelProperty(value = "组别")
private String groupId;
/**组级别*/
@Excel(name = "组级别", width = 15)
@ApiModelProperty(value = "组级别")
private String beforeGroupLevel;
/**组级别*/
@Excel(name = "组级别", width = 15)
@ApiModelProperty(value = "组级别")
private String groupLevel;
/**之前的职务*/
@Excel(name = "之前的职务", width = 15)
@ApiModelProperty(value = "之前的职务")
private String beforeDuty;
/**职务*/
@Excel(name = "职务", width = 15)
@ApiModelProperty(value = "职务")
private String duty;
/**部门*/
@Excel(name = "部门", width = 15)
@ApiModelProperty(value = "部门")
private String department;
/**岗位*/
@Excel(name = "岗位", width = 15)
@ApiModelProperty(value = "岗位")
private String job;
/**时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "时间")
private Date updateTime;
}

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.entity.CeesAdminInfo;
/**
* @Description: cees_admin_info
* @Author: jeecg-boot
* @Date: 2025-04-27
* @Version: V1.0
*/
public interface CeesAdminInfoMapper extends BaseMapper<CeesAdminInfo> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.mapper.CeesAdminInfoMapper">
</mapper>

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.entity.CeesAdminInfo;
/**
* @Description: cees_admin_info
* @Author: jeecg-boot
* @Date: 2025-04-27
* @Version: V1.0
*/
public interface ICeesAdminInfoService extends IService<CeesAdminInfo> {
}

View File

@ -22,9 +22,10 @@ public interface ICeesUserService extends IService<CeesUser> {
Result<?> getGroupName(String groupId);
void createAccount(CreateAccountDto createAccountDto);
// void createAccount(CreateAccountDto createAccountDto);
Result<?> getGenerativeRules();
Result<?> updateGenerateRule(Long id, Integer groupType, Integer majorId);
Result<?> createAccount(CreateAccountDto createAccountDto);
}

View File

@ -0,0 +1,18 @@
package org.jeecg.modules.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.entity.CeesAdminInfo;
import org.jeecg.modules.mapper.CeesAdminInfoMapper;
import org.jeecg.modules.service.ICeesAdminInfoService;
import org.springframework.stereotype.Service;
/**
* @Description: cees_admin_info
* @Author: jeecg-boot
* @Date: 2025-04-27
* @Version: V1.0
*/
@Service
public class CeesAdminInfoServiceImpl extends ServiceImpl<CeesAdminInfoMapper, CeesAdminInfo> implements ICeesAdminInfoService {
}

View File

@ -39,6 +39,8 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
@Resource
CeesGroupMapper ceesGroupMapper;
@Resource
CeesAdminInfoMapper ceesAdminInfoMapper;
@Resource
CeesLocalTeacherMapper ceesLocalTeacherMapper;
@Resource
CeesWaiTeacherMapper ceesWaiTeacherMapper;
@ -116,9 +118,20 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
}
// 检查四个身份
switch (user.getIdentity().toString()) {
//1管理
//1行政人
case "1":
LambdaQueryWrapper<CeesAdminInfo> adminInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
adminInfoLambdaQueryWrapper.eq(CeesAdminInfo::getUserId, user.getUserId());
CeesAdminInfo ceesAdminInfo = ceesAdminInfoMapper.selectOne(adminInfoLambdaQueryWrapper);
if (ceesAdminInfo != null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("userId", user.getUserId());
jsonObject.put("router", "/leaderShip");
jsonObject.put("status", "2"); //无需填写信息
return Result.ok(jsonObject);
} else {
return Result.error("管理员账号还未申请通过!");
}
// 2学生
case "2":
LambdaQueryWrapper<Student> studentLambdaQueryWrapper = new LambdaQueryWrapper<>();
@ -194,6 +207,19 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
JSONObject jsonObject = new JSONObject();
if (ceesUser.getIdentity() == 1) {
// 管理员
jsonObject.put("show0", false);
jsonObject.put("show1", true);
jsonObject.put("show3", false);
jsonObject.put("show5", false);
jsonObject.put("show6", true);
jsonObject.put("show7", true);
jsonObject.put("show8", false);
LambdaQueryWrapper<CeesAdminInfo> adminInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
adminInfoLambdaQueryWrapper.eq(CeesAdminInfo::getUserId, userId);
CeesAdminInfo ceesAdminInfo = ceesAdminInfoMapper.selectOne(adminInfoLambdaQueryWrapper);
if (ceesAdminInfo != null) {
jsonObject.put("user", ceesAdminInfo);
}
} else if (ceesUser.getIdentity() == 2) {
// 学生
jsonObject.put("show0", true);
@ -258,15 +284,14 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
/**
* @param createAccountDto
* @param groupType
* @param majorId
* @return
*/
@Override
public void createAccount(CreateAccountDto createAccountDto) {
public Result<?> createAccount(CreateAccountDto createAccountDto) {
Integer groupType = createAccountDto.getGroup();
Integer num = createAccountDto.getNum();
Integer majorId = createAccountDto.getMajorId();
if (groupType != 1) {
// 参数校验
if (groupType == null || num == null || majorId == null || num <= 0) {
throw new IllegalArgumentException("参数无效");
@ -315,6 +340,12 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
h5Users.clear();
set.clear();
userMIDList.clear();
return Result.ok("生成账号成功!");
} else {
//行政人员账号生成
createAdminAccount(num, groupType);
return Result.ok("生成账号成功!");
}
}
// 获取生成规则---用户前端获取rule
@ -463,4 +494,102 @@ public class CeesUserServiceImpl extends ServiceImpl<CeesUserMapper, CeesUser> i
h5User.setUpdateTime(LocalDateTime.now());
return h5User;
}
/**
* 生成行政人员账号
* @param num 生成数量
* @param groupType 账号类型(1表示行政人员)
*/
private void createAdminAccount(Integer num, Integer groupType) {
// 参数校验
if (num == null || num <= 0) {
throw new IllegalArgumentException("生成数量必须大于0");
}
if (groupType == null || groupType != 1) {
throw new IllegalArgumentException("账号类型必须是行政人员(1)");
}
// 获取生成规则
CeesGenerativeRules rules = getGenerativeRules();
if (rules == null) {
throw new IllegalArgumentException("找不到对应的账号生成规则");
}
// 存储已存在的用户ID
Set<String> existingAccounts = new HashSet<>();
// 存储新生成的用户对象
List<CeesUser> newUsers = new ArrayList<>();
// 获取所有已有账号
this.list().forEach(user -> existingAccounts.add(user.getUserId()));
// 生成账号
while (num > 0) {
String randomNum = getRandomNum(8);
// 生成账号 - 只考虑groupType不需要majorId
String account = generateAdminAccount(randomNum, groupType, rules);
if (!existingAccounts.contains(account)) {
num--;
CeesUser adminUser = createAdminUser(account, groupType);
newUsers.add(adminUser);
}
}
// 批量保存新账号
if (!newUsers.isEmpty()) {
this.saveBatch(newUsers);
}
}
/**
* 生成行政人员账号
* @param randomNum 随机数
* @param groupType 账号类型
* @param rules 生成规则
* @return 生成的账号
*/
private String generateAdminAccount(String randomNum, Integer groupType, CeesGenerativeRules rules) {
char[] accountParts = new char[8]; // 账号长度为8
char[] randomDigits = randomNum.toCharArray();
// 填充随机数部分
int randomIndex = 0;
for (int i = 0; i < accountParts.length; i++) {
// 检查当前位置是否被规则占用(只需要处理groupType位置)
boolean isGroupTypePos = (i + 1) == rules.getGroupType();
if (isGroupTypePos) {
accountParts[i] = groupType.toString().charAt(0);
} else {
// 使用随机数填充
if (randomIndex < randomDigits.length) {
accountParts[i] = randomDigits[randomIndex++];
} else {
accountParts[i] = '0'; // 默认值
}
}
}
return new String(accountParts);
}
/**
* 创建行政人员用户对象
* @param account 账号
* @param groupType 账号类型(1)
* @return 用户对象
*/
private CeesUser createAdminUser(String account, Integer groupType) {
CeesUser adminUser = new CeesUser();
adminUser.setUserId(account);
adminUser.setIdentity(groupType);
adminUser.setUserName(""); // 初始为空后续由用户填写
adminUser.setMajorId(null); // 行政人员无学科类别
adminUser.setUserMajorId("A" + account); // 行政人员专业ID前缀为A
adminUser.setStatus(0); // 初始状态
adminUser.setWorkload(0); // 初始工作量为0
adminUser.setCreateTime(LocalDateTime.now());
adminUser.setUpdateTime(LocalDateTime.now());
return adminUser;
}
}