一、软件架构
讲师积分管理系统毕业设计
Spring Boot + Spring + MyBatis + Spring MVC + MysqL + Layui
或者是
Spring Boot + Spring + MyBatis + Spring MVC + MysqL + Vue + Element
两个版本都是前后端分离的项目
项目经理可对讲师申请的标准进行申请
讲师可查看自己的申请 和项目排名
二、系统设计
1.教学管理部模块
(1)在系统的登录界面,用户输入教学管理部特定的用户名密码,经过后台验证后跳转到教学管理部模块。
(2)教学管理部可以对积分条目进行增删改查,在增加积分条目的时候具体的积分拥有三个指标,分别为一级指标、二级指标和三级指标。通过这三级指标更加细化了积分的分类。同时需要指定为项目部积分还是讲师积分,项目部积分是由项目经理申请后,再由讲师进行选择申请。讲师积分可以直接由讲师进行申请。
(3)教学管理部可以对讲师积分进行终审的操作,终审后驳回给对应的项目经理。同时也可以对项目部积分进行审核。
(4)可以查看所有讲师积分的排名情况,同时也可以进行准确的搜索查询,以及查看每个项目部的积分排名情况。
2.项目经理模块
(1)在系统的登录界面,用户输入项目经理特定的用户名密码,经过后台验证后跳转到项目经理模块。
(2)项目经理可以查看项目部可申请的积分条目,选择对应的条目后进行申请操作。
(3)可以对讲师积分申请进行初审,初审时需要输入具体的意见。同时项目经理可以对终审驳回的数据进行操作,选择继续向下驳回或者是修改后提交。
(4)项目经理可以查看整个项目部内讲师积分申请的排名以及具体的情况。
3.讲师模块
(1)在系统的登录界面,用户输入讲师特定的用户名密码,经过后台验证后跳转到讲师模块。
(2)讲师可以查看到的积分标准分为两种:教学管理部规定的讲师积分标准、项目部审核通过的项目部积分标准。可以查看具体积分标准的申请要求。
(3)选择对应的积分标准进行申请的操作。申请的时候需要上传指定格式的佐证材料,选择申请积分的数量以及输入具体的积分名称。
(4)讲师可以查看自己已经申请积分的状态,这里状态分为六种:待初审、待终审、初审通过、终审通过、初审驳回以及终审驳回。可以点击具体的申请条目,跳转到具体积分申请详情页面。
讲师可以查看自己项目部积分排名情况。
三、代码实现
1.积分标准Controller
/** 讲师查询积分标准(包含讲师可申请的积分项 + 项目部审核通过的积分项)
* 讲师的方法
* @param standard 封装了条件
* @return
*/
@PostMapping("/qLectureStandard")
public ResponseResult queryStandard(@RequestBody Pointsstandard standard, Integer pageNum, Integer pageSize, @RequestHeader HttpHeaders headers){
//判断请求头中是否有token
if (headers.get(RedisConstant.TOKEN_PREFIX) == null){
return ResponseResult.error(HttpStatus.UNAUTHORIZED, RtnConstant.NOT_LOGIN);
}
String token = RedisConstant.LOGIN_TOKEN_KEY + headers.get(RedisConstant.TOKEN_PREFIX).get(0);
Users users = redisUtil.getCacheObject(token);
//判断Redis中是否有token对应的用户
if (users == null){
return ResponseResult.error(HttpStatus.UNAUTHORIZED, RtnConstant.NOT_LOGIN);
}
pageHelper.startPage(pageNum,pageSize);
PageInfo<Pointsstandard> res = new PageInfo<>(sandardService.queryStandard(standard,users.getDepId()));
return ResponseResult.success(res);
}
/** 查询项目部可申请的积分标准
* 项目部方法
* @param standard
* @param pageNum
* @param pageSize
* @return
*/
@PostMapping("/queryDeptStandard")
public ResponseResult queryDeptStandard(@RequestBody Pointsstandard standard, Integer pageNum, Integer pageSize){
pageHelper.startPage(pageNum,pageSize);
PageInfo<Pointsstandard> info = new PageInfo<>(sandardService.queryDeptStandard(standard));
return ResponseResult.success(info);
}
/** 查询所有的积分标准
* 管理部的方法
* @param standard
* @param pageNum
* @param pageSize
* @return
*/
@PostMapping("/queryAllStandard")
public ResponseResult queryAllStandard(@RequestBody Pointsstandard standard, Integer pageNum, Integer pageSize){
pageHelper.startPage(pageNum,pageSize);
PageInfo<Pointsstandard> info = new PageInfo<>(sandardService.queryAllStandard(standard));
return ResponseResult.success(info);
}
/** 查询所有的积分标准指标 封装为前端需要的数据结构
* 公用方法
* @return
*/
@GetMapping("/queryLevelTreeSelect")
public ResponseResult queryLevelTreeSelect(){
List<TreeSelect> list = sandardService.queryAllLevel();
return ResponseResult.success(list);
}
/** 查询系数树状结构
* 公用方法
* @return
*/
@PostMapping("/queryCoeffcientTree")
public ResponseResult queryCoeffcient(@RequestBody ArrayEntity arrayEntity){
List<TreeSelect> tree = sandardService.queryCoeffcient(arrayEntity.getCids());
return ResponseResult.success(tree);
}
2. 提交积分Controller
/** 提交积分申请
* 公共方法
* @param pointId
* @param detailName
* @param applyCount
* @param arrayEntity
* @param flag 是否为内部调用
* @return
*/
@MyLog(title = ModelConstant.POINT_MODEL, businessType = BusinessTypeConstant.APPLY)
@PostMapping("/submitApplication")
public ResponseResult submitApplication(String pointId, String detailName, String applyCount, @RequestBody ArrayEntity arrayEntity, @RequestHeader HttpHeaders headers, Boolean flag){
//判断请求头中是否有token
if (headers.get(RedisConstant.TOKEN_PREFIX) == null){
return ResponseResult.error(HttpStatus.UNAUTHORIZED, RtnConstant.NOT_LOGIN);
}
String token = RedisConstant.LOGIN_TOKEN_KEY + headers.get(RedisConstant.TOKEN_PREFIX).get(0);
Users users = redisUtil.getCacheObject(token);
//判断Redis中是否有token对应的用户
if (users == null){
return ResponseResult.error(HttpStatus.UNAUTHORIZED, RtnConstant.NOT_LOGIN);
}
UserPoints userPoints = new UserPoints();
userPoints.setApplyCount(Integer.parseInt(applyCount));
userPoints.setApplyDate(new Date());
//将审批人Id数组转化为 1,2,3 格式
StringBuilder sb = new StringBuilder();
for(int i=0;i<arrayEntity.getShenheUser().length;i++){
sb.append(arrayEntity.getShenheUser()[i]);
if (i != arrayEntity.getShenheUser().length-1){
sb.append(",");
}
}
userPoints.setApproverId(sb.toString());
//转化系数ID数组
Integer[] cids = arrayEntity.getCids();
StringBuilder cid = new StringBuilder();
if (cids != null){
for(int i=0;i<cids.length;i++){
cid.append(cids[i]);
if (i != cids.length-1){
cid.append(",");
}
}
}
userPoints.setCoefficientIds(cid.toString());
userPoints.setDetailName(detailName);
userPoints.setPointId(pointId);
userPoints.setState(1);
//判断为讲师积分申请还是项目部积分申请
if (flag == null || flag == false){
userPoints.setType(1);
}else {
userPoints.setType(0);
}
userPoints.setUPointId(UUID.randomUUID().toString().replace("-",""));
String[] fileNameArray = arrayEntity.getFileNameArray();
String[] filePathArray = arrayEntity.getFilePathArray();
StringBuilder filePath = new StringBuilder();
StringBuilder fileName = new StringBuilder();
for(int i=0;i<filePathArray.length;i++){
filePath.append(filePathArray[i]);
fileName.append(fileNameArray[i]);
if (i != filePathArray.length-1){
fileName.append(",");
filePath.append(",");
}
}
userPoints.setMaterialsPath(filePath.toString());
userPoints.setRealName(fileName.toString());
userPoints.setUserId(users.getUId());
userPointsService.apply(userPoints);
return ResponseResult.success();
}
3. 查询积分详情
@GetMapping("/queryApplicationById")
public ResponseResult queryApplicationById(String id){
UserPoints userPoints = userPointsService.queryApplicationById(id);
String coefficientIds = userPoints.getCoefficientIds();
String [] arr;
if (coefficientIds != null && !coefficientIds.equals("")){
if (coefficientIds.contains(",")){
arr = coefficientIds.split(",");
}else {
arr = new String[1];
arr[0] = coefficientIds;
}
List<String> list = Arrays.asList(arr);
List<TreeSelect> treeSelects = sandardService.queryCoeffBySelected(list);
userPoints.setTree(treeSelects);
}
String eMsgid = userPoints.getEMsgid();
List<String> msgids = new ArrayList<>();
if (!StringUtils.isEmpty(eMsgid)){
if (eMsgid.contains(",")){
msgids = Arrays.asList(eMsgid.split(","));
}else {
msgids.add(eMsgid);
}
List<examineMsg> msgList = userPointsService.queryMsgList(msgids);
userPoints.setexamineMsg(msgList);
}
return ResponseResult.success(userPoints);
}