DynamicReportController.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.zhentao.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.zhentao.common.Result;
  5. import com.zhentao.entity.Dynamic;
  6. import com.zhentao.entity.DynamicReport;
  7. import com.zhentao.mapper.DynamicMapper;
  8. import com.zhentao.mapper.DynamicReportMapper;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.*;
  11. import java.time.LocalDateTime;
  12. import java.util.HashMap;
  13. import java.util.HashSet;
  14. import java.util.Map;
  15. import java.util.Set;
  16. @RestController
  17. @RequestMapping("/admin/report")
  18. @CrossOrigin(origins = "*")
  19. public class DynamicReportController {
  20. @Autowired
  21. private DynamicReportMapper reportMapper;
  22. @Autowired
  23. private DynamicMapper dynamicMapper;
  24. /** 举报列表 */
  25. @GetMapping("/list")
  26. public Result<Map<String, Object>> list(
  27. @RequestParam(value = "page", defaultValue = "1") Integer page,
  28. @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
  29. @RequestParam(value = "status", required = false) Integer status,
  30. @RequestParam(value = "dynamicId", required = false) Long dynamicId) {
  31. Page<DynamicReport> p = new Page<>(page, pageSize);
  32. LambdaQueryWrapper<DynamicReport> qw = new LambdaQueryWrapper<>();
  33. if (status != null) qw.eq(DynamicReport::getStatus, status);
  34. if (dynamicId != null) qw.eq(DynamicReport::getDynamicId, dynamicId);
  35. qw.orderByDesc(DynamicReport::getCreatedAt);
  36. Page<DynamicReport> res = reportMapper.selectPage(p, qw);
  37. // 批量查询举报人昵称和被举报人昵称
  38. try {
  39. java.util.Set<Long> reporterIds = new java.util.HashSet<>();
  40. java.util.Set<Integer> dynamicIds = new java.util.HashSet<>();
  41. for (DynamicReport r : res.getRecords()) {
  42. if (r.getReporterId() != null) reporterIds.add(r.getReporterId());
  43. if (r.getDynamicId() != null) dynamicIds.add(r.getDynamicId().intValue());
  44. }
  45. // 查询举报人昵称
  46. if (!reporterIds.isEmpty()) {
  47. java.util.List<java.util.Map<String, Object>> rows = reportMapper.findNicknamesByUserIds(new java.util.ArrayList<>(reporterIds));
  48. java.util.Map<Long, String> id2name = new java.util.HashMap<>();
  49. for (java.util.Map<String, Object> row : rows) {
  50. Object uid = row.get("user_id");
  51. Object nick = row.get("nickname");
  52. if (uid != null && nick != null) {
  53. id2name.put(Long.parseLong(uid.toString()), nick.toString());
  54. }
  55. }
  56. for (DynamicReport r : res.getRecords()) {
  57. r.setReporterName(id2name.get(r.getReporterId()));
  58. }
  59. }
  60. // 查询被举报人昵称(动态作者)
  61. if (!dynamicIds.isEmpty()) {
  62. System.out.println("查询被举报人,动态ID列表: " + dynamicIds);
  63. java.util.List<java.util.Map<String,Object>> rows = reportMapper.findAuthorNickByDynamicIds(new java.util.ArrayList<>(dynamicIds));
  64. System.out.println("查询结果数量: " + (rows != null ? rows.size() : 0));
  65. java.util.Map<Integer, String> d2author = new java.util.HashMap<>();
  66. for (java.util.Map<String, Object> row : rows) {
  67. Object did = row.get("dynamic_id");
  68. Object nick = row.get("nickname");
  69. System.out.println("动态ID: " + did + ", 昵称: " + nick);
  70. if (did != null && nick != null) {
  71. d2author.put(Integer.parseInt(did.toString()), nick.toString());
  72. }
  73. }
  74. for (DynamicReport r : res.getRecords()) {
  75. if (r.getDynamicId() != null) {
  76. String authorName = d2author.get(r.getDynamicId().intValue());
  77. System.out.println("设置举报ID=" + r.getReportId() + ", 动态ID=" + r.getDynamicId() + " 的被举报人为: " + authorName);
  78. r.setReportedName(authorName);
  79. }
  80. }
  81. }
  82. } catch (Exception ex) {
  83. System.err.println("批量查询昵称异常:" + ex.getMessage());
  84. ex.printStackTrace();
  85. }
  86. Map<String, Object> data = new HashMap<>();
  87. data.put("list", res.getRecords());
  88. data.put("total", res.getTotal());
  89. data.put("page", page);
  90. data.put("pageSize", pageSize);
  91. return Result.success(data);
  92. }
  93. /** 举报详情 */
  94. @GetMapping("/detail/{reportId}")
  95. public Result<DynamicReport> detail(@PathVariable Long reportId) {
  96. DynamicReport r = reportMapper.selectById(reportId);
  97. if (r == null) return Result.error("举报不存在");
  98. // 通过 report_id 直接查询动态详情(包含用户昵称)
  99. try {
  100. Dynamic dynamic = reportMapper.findDynamicByReportId(reportId);
  101. if (dynamic != null) {
  102. r.setDynamic(dynamic);
  103. }
  104. } catch (Exception e) {
  105. System.err.println("通过report_id查询动态详情异常: " + e.getMessage());
  106. }
  107. return Result.success(r);
  108. }
  109. /** 处理举报 */
  110. @PostMapping("/handle/{reportId}")
  111. public Result<String> handle(@PathVariable Long reportId, @RequestBody Map<String, Object> body) {
  112. DynamicReport r = reportMapper.selectById(reportId);
  113. if (r == null) return Result.error("举报不存在");
  114. Integer status = (Integer) body.get("status");
  115. String handleResult = (String) body.getOrDefault("handleResult", "");
  116. if (status == null) return Result.error("状态不能为空");
  117. r.setStatus(status);
  118. r.setHandleResult(handleResult);
  119. r.setHandleTime(LocalDateTime.now());
  120. // 简化:处理人ID固定为1,可接入登录态后替换
  121. r.setHandlerId(1L);
  122. reportMapper.updateById(r);
  123. return Result.success("处理成功");
  124. }
  125. }