diff --git a/src/main/java/top/suyiiyii/sims/controller/RecordController.java b/src/main/java/top/suyiiyii/sims/controller/RecordController.java index 7c20a46..36e0a70 100644 --- a/src/main/java/top/suyiiyii/sims/controller/RecordController.java +++ b/src/main/java/top/suyiiyii/sims/controller/RecordController.java @@ -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; diff --git a/src/main/java/top/suyiiyii/sims/controller/RevokedController.java b/src/main/java/top/suyiiyii/sims/controller/RevokedController.java index f13741f..7244f4f 100644 --- a/src/main/java/top/suyiiyii/sims/controller/RevokedController.java +++ b/src/main/java/top/suyiiyii/sims/controller/RevokedController.java @@ -1,13 +1,32 @@ 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 org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import top.suyiiyii.sims.service.RevokedService; +import java.util.ArrayList; +import java.util.List; + /** * @Author tortoise * @Date 2024/9/6 10:03 @@ -22,9 +41,100 @@ 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 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> revoked( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size) { + List revokeRequests = revokedService.getAll(page, size); + List 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 = "管理员处理撤销申请") + @PutMapping("/{id}") + public Result 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("状态不合法"); + } +/* if("批准".equals(revokedRequest.getStatus())){ + recordService.update(id,userId,revokedRequest.getStatus(),revokedRequest.getAdminRemark(), + revokedRequest.getReason(),revokedRequest.getHandleTime()); + }*/ + + revokedService.updateRevokeRequest(id, + revokedRequest.getStatus(),revokedRequest.getAdminRemark(), + revokedRequest.getReason(),revokedRequest.getHandleTime()); + //TODO 要加到记录里面去 + revokedService.addRevokedRecord(id,userId,revokedRequest.getReason(),revokedRequest.getHandleTime()); + + return Result.success(CommonResponse.factory("申请成功")); + } + @AuthAccess(allowRoles = {"admin"}) + @Operation(summary = "撤销单个奖惩记录") + @DeleteMapping("/admin/records/{id}") + public Result adminDeleteRecord(@PathVariable Integer id, String reason, HttpServletRequest request) { + Integer i = recordService.IsRecord(id); + String userId = String.valueOf(JwtInterceptor.getUserIdFromReq(request)); + if(i==null) { + throw new RuntimeException("该记录不存在"); + } + recordService.revokeUpdate(id,reason,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; + } } diff --git a/src/main/java/top/suyiiyii/sims/mapper/MpRevRecord.java b/src/main/java/top/suyiiyii/sims/mapper/MpRevRecord.java new file mode 100644 index 0000000..9cffa50 --- /dev/null +++ b/src/main/java/top/suyiiyii/sims/mapper/MpRevRecord.java @@ -0,0 +1,17 @@ +package top.suyiiyii.sims.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +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 { + void addRevokedRecord(Integer id, String userId, String reason, Long handleTime); +} diff --git a/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java b/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java index a35517c..5c56ab4 100644 --- a/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java +++ b/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java @@ -81,4 +81,10 @@ public interface RecordMapper { List 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 = #{reason}, revoke_reason = #{revokeReason} WHERE id = #{id}") + void Rupdate(Integer id, String reason, Boolean isRevoked,String revokeReason, String userId); } diff --git a/src/main/java/top/suyiiyii/sims/service/RecordService.java b/src/main/java/top/suyiiyii/sims/service/RecordService.java index a364583..fcb2cd2 100644 --- a/src/main/java/top/suyiiyii/sims/service/RecordService.java +++ b/src/main/java/top/suyiiyii/sims/service/RecordService.java @@ -106,4 +106,15 @@ public class RecordService { List 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 userId) { + String revokeReason="申请撤销"; + Boolean isRevoked=true; + recordMapper.Rupdate(id, reason,isRevoked,revokeReason,userId); + } } diff --git a/src/main/java/top/suyiiyii/sims/service/RevokedService.java b/src/main/java/top/suyiiyii/sims/service/RevokedService.java index 7ff5a4c..9dd6340 100644 --- a/src/main/java/top/suyiiyii/sims/service/RevokedService.java +++ b/src/main/java/top/suyiiyii/sims/service/RevokedService.java @@ -2,6 +2,12 @@ package top.suyiiyii.sims.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +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; import top.suyiiyii.sims.mapper.MpRevRecordMapper; import top.suyiiyii.sims.mapper.RoleMapper; @@ -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 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); + } }