Merge pull request #29 from suyiiyii/wr3
Some checks failed
Docker Build and Publish / build (push) Has been cancelled
Gitea Sync / trigger-gitea-sync (push) Has been cancelled
Java CI with Maven / build (push) Has been cancelled

Wr3
This commit is contained in:
suyiiyii 2024-09-10 10:28:23 +08:00 committed by GitHub
commit 0eee7b6862
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 302 additions and 39 deletions

View File

@ -2,6 +2,8 @@ package top.suyiiyii.sims.controller;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
@ -17,6 +19,7 @@ import top.suyiiyii.sims.service.CategoryService;
import top.suyiiyii.sims.service.RecordService;
import top.suyiiyii.sims.service.RoleService;
import top.suyiiyii.sims.service.UserService;
import top.suyiiyii.sims.utils.JwtUtils;
import java.util.ArrayList;
import java.util.HashSet;
@ -98,6 +101,7 @@ RecordController {
}
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "添加奖惩记录")
@PostMapping("/admin/record")
@ -121,7 +125,6 @@ RecordController {
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
SearchRequest searchRequest) {
Integer s1;
List<Integer> studentIds = new ArrayList<>();
List<Record> records=new ArrayList<>();
@ -169,16 +172,10 @@ RecordController {
return Result.error("请选择正确奖惩类别");
}
List<Integer> idByCategoryName = categoryService.getIdByCategoryName(categoryName);
for (Integer i : idByCategoryName) {
List<Integer> sid = recordService.getSidByCategoryId(i);
studentIds.addAll(sid);
}
List<Record> records=new ArrayList<>();
HashSet<Integer> studentIds1= new HashSet<>(studentIds);
for (Integer Sid : studentIds1) {
if(Sid!=null){
records.addAll(recordService.getRecordsById(page,size,Sid));
}
for (Integer i : idByCategoryName) {
List<Record> recordsByCategoryId = recordService.getRecordsByCategoryId(page, size, i);
records.addAll(recordsByCategoryId);
}
List<RecordDto> RecordDtos = new ArrayList<>();
for (Record record : records) {
@ -198,25 +195,20 @@ RecordController {
@RequestParam(defaultValue = "10") int size,
String categoryName,HttpServletRequest request) {
int userId = JwtInterceptor.getUserIdFromReq(request);
List<Integer> studentIds = new ArrayList<>();
//CategoryName不是奖励或者惩罚
if (!categoryName.equals("奖励")
&& !categoryName.equals("惩罚")) {
return Result.error("请选择正确奖惩类别");
}
Integer studentId = userService.getStudentIdByUserId(userId);
List<Integer> idByCategoryName = categoryService.getIdByCategoryName(categoryName);
for (Integer i : idByCategoryName) {
List<Integer> sid = recordService.getSidByCategoryId(i);
if(sid!=null) {
studentIds.addAll(sid);
}
}
List<Record> records=new ArrayList<>();
HashSet<Integer> studentIds1= new HashSet<>(studentIds);
for (Integer Sid : studentIds1) {
Integer studentId1 =userService.getStudentIdByUserId(userId);
if (studentId1!= null && studentId1.equals(Sid)) {
records.addAll(recordService.getRecordsById(page, size, Sid));
for (Integer i : idByCategoryName) {
List<Record> records1 = recordService.getRecordsByCategoryId(page, size, i);
for (Record record : records1) {
if (record.getStudentId()==studentId) {
records.add(record);
}
}
}
List<RecordDto> RecordDtos = new ArrayList<>();

View File

@ -1,13 +1,30 @@
package top.suyiiyii.sims.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import top.suyiiyii.sims.common.AuthAccess;
import top.suyiiyii.sims.common.JwtInterceptor;
import top.suyiiyii.sims.common.Result;
import top.suyiiyii.sims.dto.CommonResponse;
import top.suyiiyii.sims.dto.RecordDto;
import top.suyiiyii.sims.dto.RevokeRequestDto;
import top.suyiiyii.sims.entity.RevokeRequest;
import top.suyiiyii.sims.exception.ServiceException;
import top.suyiiyii.sims.service.CategoryService;
import top.suyiiyii.sims.service.NotificationService;
import top.suyiiyii.sims.service.RecordService;
import top.suyiiyii.sims.service.RevokedService;
import java.util.ArrayList;
import java.util.List;
/**
* @Author tortoise
* @Date 2024/9/6 10:03
@ -22,9 +39,97 @@ import top.suyiiyii.sims.service.RevokedService;
public class RevokedController {
@Autowired
RevokedService revokedService;
@Autowired
ModelMapper modelMapper;
@Autowired
NotificationService notificationService;
@Autowired
CategoryService categoryService;
@Autowired
RecordService recordService;
//TODO 普通成员向管理员申请撤销
@AuthAccess(allowRoles = {"user"})
@Operation(summary = "成员申请撤销")
@PostMapping("")
public Result<CommonResponse> revoked(@RequestBody Request request) {
if(request.getReason().isBlank()) {
throw new ServiceException("撤销原因不能为空");
}
RevokeRequest revokeRequest = modelMapper.map(request, RevokeRequest.class);
revokedService.addRevokeRequest(revokeRequest);
//发送通知给管理员
notificationService.addNotification(revokeRequest);
return Result.success(CommonResponse.factory("申请成功"));
}
//TODO 管理员查看所有撤销申请
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "管理员查看所有撤销申请")
@GetMapping("")
public Result<List<RevokeRequestDto>> revoked(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
List<RevokeRequest> revokeRequests = revokedService.getAll(page, size);
List<RevokeRequestDto> revokeRequestDtos = new ArrayList<>();
for (RevokeRequest revokeRequest : revokeRequests) {
RevokeRequestDto revokeRequestDto = modelMapper.map(revokeRequest, RevokeRequestDto.class);
revokeRequestDto.setCategoryName(categoryService.getCategoryName(recordService.getCategoryIdById(revokeRequest.getRecordId())));
revokeRequestDto.setSubCategoryName(categoryService.getsubCategoryName(recordService.getCategoryIdById(revokeRequest.getRecordId())));
revokeRequestDtos.add(revokeRequestDto);
}
return Result.success(revokeRequestDtos);
}
//TODO 管理员可以撤销某一成员的奖励或惩罚记录需填写撤销原因撤销备注
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "管理员处理撤销申请",description = "status:批准/拒绝")
@PutMapping("/{id}")
public Result<CommonResponse> revoked(@PathVariable Integer id, RevokedRequest revokedRequest, HttpServletRequest request) {
String userId = String.valueOf(JwtInterceptor.getUserIdFromReq(request));
if(revokedRequest.getAdminRemark().isBlank()) {
throw new ServiceException("撤销备注不能为空");
}
if(!"批准".equals(revokedRequest.getStatus()) && !"拒绝".equals(revokedRequest.getStatus()) ) {
throw new ServiceException("状态不合法");
}
revokedService.updateRevokeRequest(id,
revokedRequest.getStatus(),revokedRequest.getAdminRemark(),
revokedRequest.getReason(),revokedRequest.getHandleTime());
//TODO 要加到记录里面去
if ("批准".equals(revokedRequest.getStatus())) {
revokedService.addRevokedRecord(id,userId,revokedRequest.getReason(),revokedRequest.getHandleTime());
}
return Result.success(CommonResponse.factory("修改成功"));
}
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "撤销单个奖惩记录")
@DeleteMapping("/admin/records/{id}")
public Result<CommonResponse> adminDeleteRecord(@PathVariable Integer id, String reason,String remark, HttpServletRequest request) {
Integer i = recordService.IsRecord(id);
String userId = String.valueOf(JwtInterceptor.getUserIdFromReq(request));
if(i==null) {
throw new RuntimeException("该记录不存在");
}
recordService.revokeUpdate(id,reason,remark,userId);
return Result.msg("撤销成功");
}
@Data
public static class Request {
private Integer userId;
private Integer recordId;
private String reason;
private Long requestTime;
}
@Data
public static class RevokedRequest {
private String status;
private String adminRemark;
private String reason;
private Long handleTime;
}
}

View File

@ -0,0 +1,32 @@
package top.suyiiyii.sims.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author tortoise
* @Date 2024/9/8 21:34
* @PackageName:top.suyiiyii.sims.dto
* @ClassName: RevokeRequestDto
* @Description: TODO
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RevokeRequestDto {
private Integer id;
private String categoryName;
private String subCategoryName;
private Integer userId;
private String reason;
private Long requestTime;
private String status;
//处理时间
private Long handleTime;
private String adminRemark;
}

View File

@ -27,7 +27,7 @@ public class Notification {
private String title;
private String content;
private Integer senderId;
private LocalDateTime createdAt;
private Long createdAt;
private String status;
private String type;
private Integer targetUserId;

View File

@ -27,10 +27,10 @@ public class RevokeRequest {
private Integer recordId;
private Integer userId;
private String reason;
private LocalDateTime requestTime;
private Long requestTime;
private String status;
//处理时间
private LocalDateTime handleTime;
private Long handleTime;
private String adminRemark;
}

View File

@ -31,7 +31,7 @@ public class RevokedRecord {
// 撤销原因
private String reason;
// 撤销时间
private LocalDateTime revokedTime;
private Long revokedTime;
}

View File

@ -1,15 +1,15 @@
package top.suyiiyii.sims.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.suyiiyii.sims.entity.RevokedRecord;
import top.suyiiyii.sims.entity.Notification;
/**
* @Author tortoise
* @Date 2024/9/6 10:04
* @Date 2024/9/8 20:50
* @PackageName:top.suyiiyii.sims.mapper
* @ClassName: MpRevRecordMapper
* @ClassName: MpNotificationMapper
* @Description: TODO
* @Version 1.0
*/
public interface MpRevRecordMapper extends BaseMapper<RevokedRecord> {
public interface MpNotificationMapper extends BaseMapper<Notification> {
}

View File

@ -0,0 +1,20 @@
package top.suyiiyii.sims.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import top.suyiiyii.sims.entity.RevokeRequest;
import top.suyiiyii.sims.entity.RevokedRecord;
/**
* @Author tortoise
* @Date 2024/9/9 10:08
* @PackageName:top.suyiiyii.sims.mapper
* @ClassName: MpRevRecord
* @Description: TODO
* @Version 1.0
*/
public interface MpRevRecord extends BaseMapper<RevokedRecord> {
@Insert("INSERT INTO revoked_record (admin_id, reason, revoked_time, record_id) VALUES (#{userId}, #{reason}, #{handleTime}, #{id})")
void addRevokedRecord(Integer id, String userId, String reason, Long handleTime);
}

View File

@ -0,0 +1,26 @@
package top.suyiiyii.sims.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import top.suyiiyii.sims.entity.RevokeRequest;
import java.util.List;
/**
* @Author tortoise
* @Date 2024/9/6 10:04
* @PackageName:top.suyiiyii.sims.mapper
* @ClassName: MpRevRequestMapper
* @Description: TODO
* @Version 1.0
*/
public interface MpRevRequestMapper extends BaseMapper<RevokeRequest> {
@Select("select * from revoke_request limit #{page},#{size}")
List<RevokeRequest> selectList(int page, int size);
@Update("update revoke_request set status=#{status},admin_remark=#{adminRemark} where id=#{id}")
void update(Integer id, String status, String adminRemark);
@Update("update revoke_request set status=#{status},admin_remark=#{adminRemark},reason=#{reason},handle_time=#{handleTime} where id=#{id}")
void update(Integer id, String status, String adminRemark, String reason, Long handleTime);
}

View File

@ -81,4 +81,12 @@ public interface RecordMapper {
List<Record> getRecordsById(int page, int size, Integer sid);
@Select("SELECT id FROM record WHERE id = #{id}")
Integer IsRecord(Integer id);
@Select("SELECT category_id FROM record WHERE id = #{id}")
Integer getCategoryIdById(Integer id);
@Update("UPDATE record SET is_revoked=#{isRevoked},operator_user_id=#{userId},revoke_remark = #{adminRemark}, revoke_reason = #{reason}, lsat_update_time = #{handleTime} WHERE id = #{id}")
void update(Integer id ,Boolean isRevoked,String userId, String adminRemark, String reason, Long handleTime);
@Update("UPDATE record SET is_revoked=#{isRevoked},operator_user_id=#{userId},revoke_remark = #{remark}, revoke_reason = #{reason} WHERE id = #{id}")
void Rupdate(Integer id,Boolean isRevoked,String reason,String remark , String userId);
@Select("SELECT * FROM record WHERE category_id = #{i} LIMIT #{page},#{size}")
List<Record> getRecordsByCategoryId(int page, int size, Integer i);
}

View File

@ -0,0 +1,33 @@
package top.suyiiyii.sims.service;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.entity.Notification;
import top.suyiiyii.sims.entity.RevokeRequest;
import top.suyiiyii.sims.mapper.MpNotificationMapper;
/**
* @Author tortoise
* @Date 2024/9/8 20:50
* @PackageName:top.suyiiyii.sims.service
* @ClassName: NotificationService
* @Description: TODO
* @Version 1.0
*/
@Service
public class NotificationService {
@Autowired
MpNotificationMapper mpNotificationMapper;
public void addNotification(RevokeRequest revokeRequest) {
Notification notification = new Notification();
notification.setSenderId(revokeRequest.getUserId());
notification.setTitle("申请撤销");
notification.setContent(revokeRequest.getReason());
notification.setType("申请");
notification.setCreatedAt(revokeRequest.getRequestTime());
notification.setStatus("未处理");
notification.setTargetUserId(-1);
mpNotificationMapper.insert(notification);
}
}

View File

@ -4,6 +4,7 @@ package top.suyiiyii.sims.service;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.dto.RecordDto;
import top.suyiiyii.sims.entity.Record;
import top.suyiiyii.sims.entity.RewardPunishmentCategory;
@ -63,7 +64,7 @@ public class RecordService {
//查看数据库里面是否有这个类别
String subCategoryName = categoryMapper.IsSubCategoryName(recordDto.getSubCategoryName());
if (subCategoryName == null) {
if(subCategoryName == null) {
//没有这个类别就加上
categoryMapper.addsubcategory(recordDto.getCategoryName(), recordDto.getSubCategoryName());
}
@ -75,11 +76,12 @@ public class RecordService {
}
public List<Record> getRecordsLike(int page, int size, Integer studentId, String userGroup, String grade) {
return recordMapper.getRecordsLike(page, size, studentId, userGroup, grade);
return recordMapper.getRecordsLike(page, size, studentId, userGroup,grade);
}
public List<Integer> getSidByCategoryId(Integer i) {
public List<Integer> getSidByCategoryId(Integer i) {
return recordMapper.getSidByCategoryId(i);
}
@ -106,4 +108,22 @@ public class RecordService {
List<Integer> availableCatIds = catIds.stream().filter(c -> (catMap.containsKey(c) && (catMap.get(c).getStatus() == null || catMap.get(c).getStatus().equals("enable")))).toList();
return recordDtos.stream().filter(r -> availableCatIds.contains(r.getCategoryId())).toList();
}
public void update(Integer id, String userId, String adminRemark, String reason, Long handleTime) {
Boolean isRevoked=true;
recordMapper.update(id, isRevoked,userId, adminRemark, reason, handleTime);
}
public void revokeUpdate(Integer id, String reason,String remark,String userId) {
Boolean isRevoked=true;
recordMapper.Rupdate(id, isRevoked,reason,remark,userId);
}
public Integer getCategoryIdById(Integer id) {
return recordMapper.getCategoryIdById(id);
}
public List<Record> getRecordsByCategoryId(int page, int size, Integer i) {
return recordMapper.getRecordsByCategoryId(page, size, i);
}
}

View File

@ -2,8 +2,14 @@ package top.suyiiyii.sims.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.mapper.MpRevRecordMapper;
import top.suyiiyii.sims.mapper.RoleMapper;
import top.suyiiyii.sims.controller.RevokedController;
import top.suyiiyii.sims.entity.RevokeRequest;
import top.suyiiyii.sims.mapper.MpRevRecord;
import top.suyiiyii.sims.mapper.MpRevRequestMapper;
import java.util.List;
/**
* @Author tortoise
@ -15,6 +21,27 @@ import top.suyiiyii.sims.mapper.RoleMapper;
*/
@Service
public class RevokedService {
@Autowired
MpRevRecordMapper mpRevRecordMapper;
MpRevRequestMapper mpRevRequestMapper;
@Autowired
MpRevRecord mpRevRecord;
public void addRevokeRequest(RevokeRequest revokeRequest) {
revokeRequest.setStatus("待审核");
mpRevRequestMapper.insert(revokeRequest);
}
public List<RevokeRequest> getAll(int page, int size){
return mpRevRequestMapper.selectList(page,size);
}
public void updateRevokeRequest(Integer id, String status, String adminRemark, String reason, Long handleTime) {
mpRevRequestMapper.update(id, status, adminRemark, reason, handleTime);
}
public void addRevokedRecord(Integer id, String userId, String reason, Long handleTime) {
mpRevRecord.addRevokedRecord(id, userId, reason, handleTime);
}
}