mirror of
https://github.com/suyiiyii/SIMS.git
synced 2025-06-02 00:16:11 +08:00
以更清晰地传达管理员处理撤销申请的流程。修改了批准状态下的返回消息,将其从"申请成功"更改为"修改成功",以准确描述该操作的结果。同时,通过添加description属性,增强了端点文档的清晰度,指明了status字段的可接受值及其含义。
136 lines
5.4 KiB
Java
136 lines
5.4 KiB
Java
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.*;
|
|
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
|
|
* @PackageName:top.suyiiyii.sims.controller
|
|
* @ClassName: RevokedController
|
|
* @Description: TODO
|
|
* @Version 1.0
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/revoked")
|
|
@Slf4j
|
|
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;
|
|
}
|
|
}
|