From 9c6150c879432b21816618a256c166dc3801b1a2 Mon Sep 17 00:00:00 2001
From: wl <173@qq.com>
Date: 星期二, 19 七月 2022 14:11:44 +0800
Subject: [PATCH] 群公告 导入导出

---
 src/main/java/com/example/jz/modle/entity/Cause.java                   |   22 
 src/main/java/com/example/jz/modle/vo/ExportExcelReportVo.java         |   55 +++
 src/main/java/com/example/jz/dao/ReportDao.java                        |    2 
 src/main/java/com/example/jz/controller/ReportController.java          |   19 +
 src/main/java/com/example/jz/service/impl/AnnouncementServiceImpl.java |   64 ++++
 src/main/java/com/example/jz/controller/CauseController.java           |   18 +
 src/main/java/com/example/jz/enums/CauseEnums.java                     |   31 ++
 src/main/java/com/example/jz/service/impl/CauseServiceImpl.java        |   66 +++
 pom.xml                                                                |    5 
 src/main/java/com/example/jz/service/AnnouncementService.java          |   26 +
 /dev/null                                                              |  131 ---------
 src/main/java/com/example/jz/modle/dto/CauseLoadDto.java               |   43 +++
 src/main/java/com/example/jz/service/ReportService.java                |    3 
 src/main/java/com/example/jz/controller/UserController.java            |   70 +---
 src/main/java/com/example/jz/modle/vo/AnnouncementVo.java              |   23 +
 src/main/java/com/example/jz/controller/GroupUserController.java       |   85 ++++++
 src/main/java/com/example/jz/modle/dto/CauseDto.java                   |    1 
 src/main/java/com/example/jz/service/CauseService.java                 |   11 
 src/main/java/com/example/jz/modle/dto/ReportParamDto.java             |    2 
 src/main/java/com/example/jz/controller/AnnouncementController.java    |   87 ++---
 src/main/java/com/example/jz/service/impl/ReportServiceImpl.java       |   73 +++++
 21 files changed, 566 insertions(+), 271 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9b62808..8b63f80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,11 @@
             <artifactId>swagger-bootstrap-ui</artifactId>
             <version>1.9.6</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.0.5</version>
+        </dependency>
         <!-- hutool 宸ュ叿鍖� -->
         <dependency>
             <groupId>cn.hutool</groupId>
diff --git a/src/main/java/com/example/jz/controller/AnnouncementController.java b/src/main/java/com/example/jz/controller/AnnouncementController.java
index d537234..9e658d6 100644
--- a/src/main/java/com/example/jz/controller/AnnouncementController.java
+++ b/src/main/java/com/example/jz/controller/AnnouncementController.java
@@ -1,17 +1,14 @@
 package com.example.jz.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.api.ApiController;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.example.jz.modle.entity.Announcement;
 import com.example.jz.modle.R;
+import com.example.jz.modle.entity.Announcement;
 import com.example.jz.service.AnnouncementService;
-import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.io.Serializable;
-import java.util.List;
 
 /**
  * 鍏憡琛�(Announcement)琛ㄦ帶鍒跺眰
@@ -28,59 +25,45 @@
     @Resource
     private AnnouncementService announcementService;
 
-    /**
-     * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
-     *
-     * @param page         鍒嗛〉瀵硅薄
-     * @param announcement 鏌ヨ瀹炰綋
-     * @return 鎵�鏈夋暟鎹�
-     */
-    @GetMapping
-    public R<Page<Announcement>> selectAll(Page<Announcement> page, Announcement announcement) {
-        return R.ok(this.announcementService.page(page, new QueryWrapper<>(announcement)));
+    @ApiOperation(httpMethod = "GET", value = "缇ゅ叕鍛婃煡璇�")
+    @GetMapping("/getAnnouncements")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public R getAnnouncements(@RequestParam(value = "size") Integer size,
+                              @RequestParam(value = "current") Integer current,
+                              @RequestParam(value = "groupId") Integer groupId,
+                              @RequestParam(value = "content", required = false) String content,
+                              @RequestParam(value = "status", required = false) Integer status) {
+        return R.ok(announcementService.getAnnouncements(size, current, content, status, groupId));
     }
 
-    /**
-     * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
-     *
-     * @param id 涓婚敭
-     * @return 鍗曟潯鏁版嵁
-     */
-    @GetMapping("{id}")
-    public R selectOne(@PathVariable Serializable id) {
-        return R.ok(this.announcementService.getById(id));
+    @ApiOperation(httpMethod = "POST", value = "缇ゅ叕鍛婃坊鍔�")
+    @PostMapping("/add")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public R insert(@RequestParam(value = "groupId") Integer groupId, @RequestBody Announcement announcement) {
+        return R.ok(announcementService.add(groupId, announcement));
     }
 
-    /**
-     * 鏂板鏁版嵁
-     *
-     * @param announcement 瀹炰綋瀵硅薄
-     * @return 鏂板缁撴灉
-     */
-    @PostMapping
-    public R insert(@RequestBody Announcement announcement) {
-        return R.ok(this.announcementService.save(announcement));
+    @ApiOperation(httpMethod = "PUT", value = "缇ゅ叕鍛婂彂甯�")
+    @PutMapping("/updateStatusPublic")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public R updateStatusPublic(@RequestParam(value = "id") Integer id) {
+        announcementService.updateStatus(id);
+        return R.ok();
     }
 
-    /**
-     * 淇敼鏁版嵁
-     *
-     * @param announcement 瀹炰綋瀵硅薄
-     * @return 淇敼缁撴灉
-     */
-    @PutMapping
-    public R update(@RequestBody Announcement announcement) {
-        return R.ok(this.announcementService.updateById(announcement));
+    @ApiOperation(httpMethod = "PUT", value = "缇ゅ叕鍛婁笅鏋�")
+    @PutMapping("/updateStatusUnshelve")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public R updateStatusUnshelve(@RequestParam(value = "id") Integer id) {
+        announcementService.updateStatusUnshelve(id);
+        return R.ok();
     }
 
-    /**
-     * 鍒犻櫎鏁版嵁
-     *
-     * @param idList 涓婚敭缁撳悎
-     * @return 鍒犻櫎缁撴灉
-     */
-    @DeleteMapping
-    public R delete(@RequestParam("idList") List<Long> idList) {
-        return R.ok(this.announcementService.removeByIds(idList));
+    @ApiOperation(httpMethod = "DELETE", value = "缇ゅ叕鍛婂垹闄�")
+    @DeleteMapping("/delete")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public R delete(@RequestParam(value = "id") Integer id) {
+        announcementService.removeById(id);
+        return R.ok();
     }
 }
diff --git a/src/main/java/com/example/jz/controller/CauseController.java b/src/main/java/com/example/jz/controller/CauseController.java
index fbe2d62..a5cde56 100644
--- a/src/main/java/com/example/jz/controller/CauseController.java
+++ b/src/main/java/com/example/jz/controller/CauseController.java
@@ -8,16 +8,18 @@
 import com.example.jz.modle.dto.AddReportDto;
 import com.example.jz.modle.dto.CauseDto;
 import com.example.jz.modle.dto.ReportParamDto;
-import com.example.jz.modle.entity.Report;
 import com.example.jz.modle.vo.ReportListVo;
 import com.example.jz.service.CauseService;
 import com.example.jz.service.ReportService;
-import com.example.jz.service.UserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
 
 /**
  * 妗堜欢琛�(Cause)琛ㄦ帶鍒跺眰
@@ -27,11 +29,12 @@
  */
 @RestController
 @RequestMapping("cause")
-@Api(tags = "妗堜欢鍖�")
+@Api(tags = "妗堜欢鍖�-妗堜欢褰曞叆")
 public class CauseController extends ApiController {
     /**
      * 鏈嶅姟瀵硅薄
      */
+    @Resource
     private CauseService causeService;
     private ReportService reportService;
 
@@ -98,6 +101,15 @@
         return R.ok();
     }
 
+    @ApiOperation(httpMethod = "POST", value = "妗堜欢瀵煎叆")
+    @PostMapping("/upload")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    @SneakyThrows
+    public R upload(@RequestParam(value = "multipartFile") MultipartFile multipartFile) {
+        causeService.loadFile(multipartFile);
+        return R.ok();
+    }
+
     @ApiOperation(httpMethod = "GET", value = "鏍规嵁缇ょ粍id鏌ヨ妗堜欢鍒嗛〉")
     @GetMapping("/getAllReportList")
     @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
diff --git a/src/main/java/com/example/jz/controller/GroupUserController.java b/src/main/java/com/example/jz/controller/GroupUserController.java
new file mode 100644
index 0000000..12deb72
--- /dev/null
+++ b/src/main/java/com/example/jz/controller/GroupUserController.java
@@ -0,0 +1,85 @@
+package com.example.jz.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.api.ApiController;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.example.jz.modle.entity.GroupUser;
+import com.example.jz.service.GroupUserService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鍜岀兢涓棿琛�(GroupUser)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2022-07-11 16:35:57
+ */
+@RestController
+@RequestMapping("groupUser")
+public class GroupUserController extends ApiController {
+    /**
+     * 鏈嶅姟瀵硅薄
+     */
+    @Resource
+    private GroupUserService groupUserService;
+
+    /**
+     * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
+     *
+     * @param page 鍒嗛〉瀵硅薄
+     * @param groupUser 鏌ヨ瀹炰綋
+     * @return 鎵�鏈夋暟鎹�
+     */
+    @GetMapping
+    public R selectAll(Page<GroupUser> page, GroupUser groupUser) {
+        return success(this.groupUserService.page(page, new QueryWrapper<>(groupUser)));
+    }
+
+    /**
+     * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
+     *
+     * @param id 涓婚敭
+     * @return 鍗曟潯鏁版嵁
+     */
+    @GetMapping("{id}")
+    public R selectOne(@PathVariable Serializable id) {
+        return success(this.groupUserService.getById(id));
+    }
+
+    /**
+     * 鏂板鏁版嵁
+     *
+     * @param groupUser 瀹炰綋瀵硅薄
+     * @return 鏂板缁撴灉
+     */
+    @PostMapping
+    public R insert(@RequestBody GroupUser groupUser) {
+        return success(this.groupUserService.save(groupUser));
+    }
+
+    /**
+     * 淇敼鏁版嵁
+     *
+     * @param groupUser 瀹炰綋瀵硅薄
+     * @return 淇敼缁撴灉
+     */
+    @PutMapping
+    public R update(@RequestBody GroupUser groupUser) {
+        return success(this.groupUserService.updateById(groupUser));
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     *
+     * @param idList 涓婚敭缁撳悎
+     * @return 鍒犻櫎缁撴灉
+     */
+    @DeleteMapping
+    public R delete(@RequestParam("idList") List<Long> idList) {
+        return success(this.groupUserService.removeByIds(idList));
+    }
+}
diff --git a/src/main/java/com/example/jz/controller/ReportController.java b/src/main/java/com/example/jz/controller/ReportController.java
index f2cc3f0..821f17b 100644
--- a/src/main/java/com/example/jz/controller/ReportController.java
+++ b/src/main/java/com/example/jz/controller/ReportController.java
@@ -1,5 +1,6 @@
 package com.example.jz.controller;
 
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.api.ApiController;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +15,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -25,7 +27,7 @@
  */
 @RestController
 @RequestMapping("report")
-@Api(value = "鎶ユ鎺ュ彛", tags = "鎶ユ鎺ュ彛")
+@Api(value = "妗堜欢鍖�-妗堜欢浜哄憳", tags = "妗堜欢鍖�-妗堜欢浜哄憳")
 public class ReportController extends ApiController {
     /**
      * 鏈嶅姟瀵硅薄
@@ -36,7 +38,7 @@
     /**
      * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
      *
-     * @param page   鍒嗛〉瀵硅薄
+     * @param page           鍒嗛〉瀵硅薄
      * @param reportParamDto 鏌ヨ瀹炰綋
      * @return 鎵�鏈夋暟鎹�
      */
@@ -97,17 +99,24 @@
     @ApiOperation(httpMethod = "DELETE", value = "鎶ユ浜轰汉鍛橀��缇�")
     @DeleteMapping("/leaveGroup")
     @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
-    public R leaveGroup( @RequestParam(value = "id") Integer id,@RequestParam(value = "groupId") Integer groupId) {
-       reportService.leaveGroup(id,groupId);
+    public R leaveGroup(@RequestParam(value = "id") Integer id, @RequestParam(value = "groupId") Integer groupId) {
+        reportService.leaveGroup(id, groupId);
         return R.ok();
     }
 
     @ApiOperation(httpMethod = "DELETE", value = "鍒犻櫎鎶ユ浜�")
     @DeleteMapping("/deleteReporter")
     @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
-    public R deleteReporter( @RequestParam(value = "id") Integer id) {
+    public R deleteReporter(@RequestParam(value = "id") Integer id) {
         reportService.removeById(id);
         return R.ok();
     }
+
+    @ApiOperation(httpMethod = "POST", value = "瀵煎嚭鏉愭枡")
+    @PostMapping("/exportReporter")
+    @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+    public void exportReport(@RequestParam(value = "id") Integer id, HttpServletResponse response) {
+        reportService.exportReporter(id, response);
+    }
 }
 
diff --git a/src/main/java/com/example/jz/controller/UserController.java b/src/main/java/com/example/jz/controller/UserController.java
index 20d0031..6b2c106 100644
--- a/src/main/java/com/example/jz/controller/UserController.java
+++ b/src/main/java/com/example/jz/controller/UserController.java
@@ -3,16 +3,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.api.ApiController;
 import com.baomidou.mybatisplus.extension.api.R;
-import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.example.jz.modle.entity.User;
 import com.example.jz.service.UserService;
-import com.example.jz.utils.Md5Utils;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -22,19 +15,17 @@
 /**
  * 鐢ㄦ埛琛�(User)琛ㄦ帶鍒跺眰
  *
- * @author 瀹夌懢鐒�
+ * @author makejava
  * @since 2022-07-11 16:35:57
  */
 @RestController
 @RequestMapping("user")
-@Api(tags = "鐢ㄦ埛绠$悊")
 public class UserController extends ApiController {
+    /**
+     * 鏈嶅姟瀵硅薄
+     */
+    @Resource
     private UserService userService;
-
-    @Autowired
-    public void setUserService(UserService userService) {
-        this.userService = userService;
-    }
 
     /**
      * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
@@ -44,7 +35,6 @@
      * @return 鎵�鏈夋暟鎹�
      */
     @GetMapping
-    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�")
     public R selectAll(Page<User> page, User user) {
         return success(this.userService.page(page, new QueryWrapper<>(user)));
     }
@@ -56,9 +46,19 @@
      * @return 鍗曟潯鏁版嵁
      */
     @GetMapping("{id}")
-    @ApiOperation("閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁")
     public R selectOne(@PathVariable Serializable id) {
         return success(this.userService.getById(id));
+    }
+
+    /**
+     * 鏂板鏁版嵁
+     *
+     * @param user 瀹炰綋瀵硅薄
+     * @return 鏂板缁撴灉
+     */
+    @PostMapping
+    public R insert(@RequestBody User user) {
+        return success(this.userService.save(user));
     }
 
     /**
@@ -68,9 +68,8 @@
      * @return 淇敼缁撴灉
      */
     @PutMapping
-    @ApiOperation("淇敼鐢ㄦ埛鏁版嵁")
     public R update(@RequestBody User user) {
-        return success(userService.updateById(user));
+        return success(this.userService.updateById(user));
     }
 
     /**
@@ -80,42 +79,7 @@
      * @return 鍒犻櫎缁撴灉
      */
     @DeleteMapping
-    @ApiOperation("鍒犻櫎鐢ㄦ埛鏁版嵁")
     public R delete(@RequestParam("idList") List<Long> idList) {
         return success(this.userService.removeByIds(idList));
-    }
-
-    /**
-     * 娣诲姞绠$悊鍛�
-     *
-     * @param id       鐢ㄦ埛id
-     * @param username 绠$悊鍛樼敤鎴峰悕
-     * @param password 绠$悊鍛樺瘑鐮�
-     * @return
-     */
-    @PostMapping("/addAdmin/{id}")
-    @ApiOperation("娣诲姞绠$悊鍛�")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "password", value = "瀵嗙爜", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "username", value = "鐢ㄦ埛鍚�", required = true, dataType = "String")
-    })
-    public R addAdmin(@PathVariable Serializable id, String username, String password) {
-        User user = userService.getById(id).setLoginUsername(username).setLoginPassword(Md5Utils.md5(password)).setRole(1);
-        return success(userService.updateById(user));
-    }
-
-    /**
-     * 閲嶇疆绠$悊鍛樺瘑鐮�
-     *
-     * @param id 鐢ㄦ埛id
-     * @return
-     */
-    @GetMapping("/resetPassword/{id}")
-    @ApiOperation("閲嶇疆绠$悊鍛樺瘑鐮�")
-    public R resetPassword(@PathVariable Serializable id) {
-        User user = userService.getById(id);
-        // 閲嶇疆鍒濆瀵嗙爜涓鸿韩浠借瘉鍚庡叚浣�
-        user.setLoginPassword(Md5Utils.md5(user.getUserIdcard().substring(user.getUserIdcard().length() - 6)));
-        return success(userService.updateById(user));
     }
 }
diff --git a/src/main/java/com/example/jz/dao/ReportDao.java b/src/main/java/com/example/jz/dao/ReportDao.java
index eee3b7d..53fd686 100644
--- a/src/main/java/com/example/jz/dao/ReportDao.java
+++ b/src/main/java/com/example/jz/dao/ReportDao.java
@@ -19,7 +19,7 @@
 @Mapper
 public interface ReportDao extends BaseMapper<Report> {
 
-    Page<ReportListVo> getPage(Page<ReportListVo> page,@Param("reportParamDto") ReportParamDto reportParamDto);
+    Page<ReportListVo> getPage(Page<ReportListVo> page,@Param("reportDto") ReportParamDto reportParamDto);
 
     ReportListVo getReportListVoById(Serializable id);
 
diff --git a/src/main/java/com/example/jz/enums/CauseEnums.java b/src/main/java/com/example/jz/enums/CauseEnums.java
new file mode 100644
index 0000000..dcf6862
--- /dev/null
+++ b/src/main/java/com/example/jz/enums/CauseEnums.java
@@ -0,0 +1,31 @@
+package com.example.jz.enums;
+
+public enum CauseEnums {
+
+    //鏈鏍�
+    UNCHECKED(0,"鏈鏍�"),
+    //涓嶄簣绔嬫
+    NOTTOPUTONRECORD(1,"涓嶄簣绔嬫"),
+    //鍙楃悊涓�
+    UNDERCONSIDERATION(2,"鍙楃悊涓�"),
+    //宸茬粨妗�
+    CASECLOSED(3,"宸茬粨妗�"),
+    //宸叉挙妗�
+    HASBEENDROPPED(4,"宸叉挙妗�");
+
+    private final int value;
+
+    private final String msg;
+
+    CauseEnums(int value,String msg){
+        this.value = value;
+        this.msg = msg;
+    }
+    public int value() {
+        return this.value;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+}
diff --git a/src/main/java/com/example/jz/modle/dto/CauseDto.java b/src/main/java/com/example/jz/modle/dto/CauseDto.java
index e62c1ea..b0b2ed7 100644
--- a/src/main/java/com/example/jz/modle/dto/CauseDto.java
+++ b/src/main/java/com/example/jz/modle/dto/CauseDto.java
@@ -19,7 +19,6 @@
 
     //绗竴娆℃鍙戞椂闂�
     @ApiModelProperty(dataType = "Date", value = "绗竴娆℃鍙戞椂闂�")
-//    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
     private Date firstTime;
 
     //璐熻矗浜篿d
diff --git a/src/main/java/com/example/jz/modle/dto/CauseLoadDto.java b/src/main/java/com/example/jz/modle/dto/CauseLoadDto.java
new file mode 100644
index 0000000..9247020
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/dto/CauseLoadDto.java
@@ -0,0 +1,43 @@
+package com.example.jz.modle.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "妗堜欢褰曞叆瀵煎叆", value = "CauseLoadDto")
+public class CauseLoadDto {
+    //妗堜欢缂栧彿
+    @ApiModelProperty(dataType = "String", value = "妗堜欢缂栧彿")
+    @ExcelProperty(value = "妗堜欢缂栧彿",index = 0)
+    private String number;
+
+    //妗堜欢鍚嶇О
+    @ApiModelProperty(dataType = "String", value = "妗堜欢鍚嶇О")
+    @ExcelProperty(value = "妗堜欢鍚嶇О",index = 1)
+    private String name;
+
+    //鏈�鏃╂妗堝彂鏃堕棿
+    @ApiModelProperty(dataType = "Date", value = "鏈�鏃╁彂妗堟椂闂�")
+    @ExcelProperty(value = "鏈�鏃╁彂妗堟椂闂�",index = 2)
+    private Date firstTime;
+
+    //妗堜欢鐘舵��
+    @ApiModelProperty(dataType = "String", value = "妗堜欢鐘舵��")
+    @ExcelProperty(value = "妗堜欢鐘舵��",index = 3)
+    private String status;
+
+    //璐熻矗浜�
+    @ApiModelProperty(dataType = "String", value = "璐熻矗浜�")
+    @ExcelProperty(value = "璐熻矗浜�",index = 4)
+    private String userName;
+
+    //妗堜欢鎻忚堪
+    @ApiModelProperty(dataType = "String", value = "妗堜欢鎻忚堪")
+    @ExcelProperty(value = "妗堜欢鎻忚堪",index = 5)
+    private String description;
+
+}
diff --git a/src/main/java/com/example/jz/modle/dto/ReportParamDto.java b/src/main/java/com/example/jz/modle/dto/ReportParamDto.java
index f991a22..7708269 100644
--- a/src/main/java/com/example/jz/modle/dto/ReportParamDto.java
+++ b/src/main/java/com/example/jz/modle/dto/ReportParamDto.java
@@ -18,7 +18,7 @@
 @AllArgsConstructor
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
-@ApiModel("鎶ユ鏌ヨ鏉′欢")
+@ApiModel("淇濆畨鏌ヨ鏉′欢")
 public class ReportParamDto {
     /**
      * 鏌ヨ鏉′欢 鍙互鏄鍚嶄篃鍙互鏄韩浠借瘉鍙�
diff --git a/src/main/java/com/example/jz/modle/entity/Cause.java b/src/main/java/com/example/jz/modle/entity/Cause.java
index 3469987..a0d9934 100644
--- a/src/main/java/com/example/jz/modle/entity/Cause.java
+++ b/src/main/java/com/example/jz/modle/entity/Cause.java
@@ -1,11 +1,10 @@
 package com.example.jz.modle.entity;
 
-import java.util.Date;
-
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 妗堜欢琛�(Cause)琛ㄥ疄浣撶被
@@ -26,7 +25,7 @@
     //鍒涘缓鏃堕棿
     private Date ctime;
     //鐘舵�� 0鏈鏍� 1涓嶄簣绔嬫 2鍙楃悊涓� 3宸茬粨妗�
-    private String status;
+    private Integer status;
     //璐熻矗浜篿d
     private Integer userId;
     //妗堜欢鎻忚堪
@@ -73,13 +72,6 @@
         this.ctime = ctime;
     }
 
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
 
     public Integer getUserId() {
         return userId;
@@ -106,5 +98,13 @@
     protected Serializable pkVal() {
         return this.id;
     }
+
+    public Integer getStatus() {
+        return status;
     }
 
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}
+
diff --git a/src/main/java/com/example/jz/modle/vo/AnnouncementVo.java b/src/main/java/com/example/jz/modle/vo/AnnouncementVo.java
index f5089db..a5d0ef6 100644
--- a/src/main/java/com/example/jz/modle/vo/AnnouncementVo.java
+++ b/src/main/java/com/example/jz/modle/vo/AnnouncementVo.java
@@ -9,9 +9,32 @@
 @ApiModel(description = "妗堜欢缇ゅ叕鍛�",value = "AnnouncementVo")
 public class AnnouncementVo {
 
+    /**
+     * 鍏憡鍐呭
+     */
     private String text;
+    /**
+     * 缇d
+     */
+    private Integer groupId;
+    /**
+     * 鍏憡id
+     */
+    private Integer id;
     /**
      * 鍒涘缓鏃堕棿
      */
     private Date ctime;
+
+    //鍏憡鏈夋晥寮�濮嬫椂闂�
+    private Date effectiveStime;
+
+    //鍏叡鏈夋晥缁撴潫鏃堕棿
+    private Date effectiveEtime;
+
+    //鍒涘缓浜�
+    private String createName;
+
+    //鐘舵��
+    private Integer status;
 }
diff --git a/src/main/java/com/example/jz/modle/vo/ExportExcelReportVo.java b/src/main/java/com/example/jz/modle/vo/ExportExcelReportVo.java
new file mode 100644
index 0000000..7003186
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/vo/ExportExcelReportVo.java
@@ -0,0 +1,55 @@
+package com.example.jz.modle.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.BooleanEnum;
+import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
+import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
+import com.alibaba.excel.metadata.data.ImageData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(description = "瀵煎嚭excel鎶ユ鏉愭枡", value = "ExportExcelReportVo")
+@ContentRowHeight(120)
+@HeadRowHeight(20)
+@ColumnWidth(25)
+public class ExportExcelReportVo {
+
+    @ExcelProperty(value = "鎶ユ浜�", index = 0)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private String realName;
+
+    @ExcelProperty(value = "鎵嬫満鍙�", index = 1)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private String userMobile;
+
+    @ExcelProperty(value = "韬唤璇佸彿", index = 2)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private String userIdcard;
+    //琚獥鏃堕棿
+    @ExcelProperty(value = "琚獥鏃堕棿", index = 3)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private Date cheatTime;
+
+    //娑夋閲戦
+    @ExcelProperty(value = "娑夋閲戦", index = 4)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private Double amountInvolved;
+
+    //琛ュ厖淇℃伅
+    @ExcelProperty(value = "琛ュ厖淇℃伅", index = 5)
+    @ContentStyle(wrapped = BooleanEnum.TRUE, horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+    private String information;
+
+    @ExcelProperty(value = "妗堜欢鏉愭枡", index = 6)
+    @ColumnWidth(120)
+    private WriteCellData<List<ImageData>> writeCellData;
+}
diff --git a/src/main/java/com/example/jz/service/AnnouncementService.java b/src/main/java/com/example/jz/service/AnnouncementService.java
index 1bcd219..3f16e7d 100644
--- a/src/main/java/com/example/jz/service/AnnouncementService.java
+++ b/src/main/java/com/example/jz/service/AnnouncementService.java
@@ -1,7 +1,11 @@
 package com.example.jz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.example.jz.modle.PageParam;
 import com.example.jz.modle.entity.Announcement;
+import com.example.jz.modle.vo.AnnouncementVo;
+
+import java.util.List;
 
 /**
  * 鍏憡琛�(Announcement)琛ㄦ湇鍔℃帴鍙�
@@ -11,5 +15,27 @@
  */
 public interface AnnouncementService extends IService<Announcement> {
 
+    /**
+     * @Description 鏌ヨ鍏叡瀹d紶閫氬憡id
+     * @Param [size, current, content, status, groupId]
+     * @return com.example.jz.modle.PageParam<com.example.jz.modle.entity.Announcement>
+     **/
+    PageParam<AnnouncementVo> getAnnouncements(Integer size, Integer current, String content, Integer status,Integer groupId);
+
+    /**
+     * @Description 鍙戝竷
+     * @Param [id]
+     * @return java.lang.Integer
+     **/
+    Integer updateStatus(Integer id);
+
+    /**
+     * @Description 涓嬫灦
+     * @Param [id]
+     * @return java.lang.Integer
+     **/
+    Integer updateStatusUnshelve(Integer id);
+
+    Integer add(Integer groupId, Announcement announcement);
 }
 
diff --git a/src/main/java/com/example/jz/service/CauseService.java b/src/main/java/com/example/jz/service/CauseService.java
index 20f6c79..769f683 100644
--- a/src/main/java/com/example/jz/service/CauseService.java
+++ b/src/main/java/com/example/jz/service/CauseService.java
@@ -4,11 +4,13 @@
 import com.example.jz.modle.PageParam;
 import com.example.jz.modle.dto.AddReportDto;
 import com.example.jz.modle.dto.CauseDto;
+import com.example.jz.modle.entity.Announcement;
 import com.example.jz.modle.entity.Cause;
 import com.example.jz.modle.vo.AnnouncementVo;
 import com.example.jz.modle.vo.CauseReportVo;
 import com.example.jz.modle.vo.CauseVo;
 import com.example.jz.modle.vo.UserVo;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -60,7 +62,7 @@
      * @Param [groupId]
      * @return java.util.List<com.example.jz.modle.vo.AnnouncementVo>
      **/
-    List<AnnouncementVo> getGroupAnnouncement(Integer groupId);
+    List<Announcement> getGroupAnnouncement(Integer groupId);
 
     /**
      * @Description 鍒犻櫎妗堜欢
@@ -69,6 +71,13 @@
      **/
     void deleteCause(Integer id);
 
+    /**
+     * @Description 鏂囦欢瀵煎叆
+     * @Param [multipartFile]
+     * @return void
+     **/
+    void loadFile(MultipartFile multipartFile);
+
     Boolean addReportPeople(AddReportDto addReportDto);
 }
 
diff --git a/src/main/java/com/example/jz/service/ReportService.java b/src/main/java/com/example/jz/service/ReportService.java
index 95cfc6c..33e0b6f 100644
--- a/src/main/java/com/example/jz/service/ReportService.java
+++ b/src/main/java/com/example/jz/service/ReportService.java
@@ -6,6 +6,7 @@
 import com.example.jz.modle.entity.Report;
 import com.example.jz.modle.vo.ReportListVo;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.Serializable;
 
 /**
@@ -20,6 +21,8 @@
 
     void leaveGroup(Integer id, Integer groupId);
 
+    void exportReporter(Integer id, HttpServletResponse response);
+
     Page<ReportListVo> getPage(Page<ReportListVo> page, ReportParamDto reportParamDto);
 
     ReportListVo getReportListVoById(Serializable id);
diff --git a/src/main/java/com/example/jz/service/impl/AnnouncementServiceImpl.java b/src/main/java/com/example/jz/service/impl/AnnouncementServiceImpl.java
index 0887f7e..5e343a3 100644
--- a/src/main/java/com/example/jz/service/impl/AnnouncementServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/AnnouncementServiceImpl.java
@@ -1,10 +1,23 @@
 package com.example.jz.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.jz.dao.AnnouncementDao;
+import com.example.jz.dao.UserDao;
+import com.example.jz.modle.PageParam;
 import com.example.jz.modle.entity.Announcement;
+import com.example.jz.modle.entity.User;
+import com.example.jz.modle.vo.AnnouncementVo;
 import com.example.jz.service.AnnouncementService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 鍏憡琛�(Announcement)琛ㄦ湇鍔″疄鐜扮被
@@ -15,4 +28,55 @@
 @Service("announcementService")
 public class AnnouncementServiceImpl extends ServiceImpl<AnnouncementDao, Announcement> implements AnnouncementService {
 
+    @Resource
+    AnnouncementDao announcementDao;
+    @Resource
+    UserDao userDao;
+
+    @Override
+    public PageParam<AnnouncementVo> getAnnouncements(Integer size, Integer current, String content, Integer status, Integer groupId) {
+        PageParam<Announcement> announcementPageParam = new PageParam<>();
+        announcementPageParam.setSize(size);
+        announcementPageParam.setCurrent(current);
+        QueryWrapper<Announcement> announcementQueryWrapper = new QueryWrapper<>();
+        if (StringUtils.isNotBlank(content)) {
+            announcementQueryWrapper.like("text", content);
+        }
+        if (status != null) {
+            announcementQueryWrapper.eq("status", status);
+        }
+        announcementQueryWrapper.eq("group_id", groupId);
+        announcementQueryWrapper.orderByDesc("ctime");
+        PageParam<Announcement> announcementPageParamList = announcementDao.selectPage(announcementPageParam, announcementQueryWrapper);
+        List<AnnouncementVo> announcementVoList = announcementPageParamList.getRecords().stream().map(
+                a -> {
+                    AnnouncementVo announcementVo = new AnnouncementVo();
+                    BeanUtils.copyProperties(a, announcementVo);
+                    announcementVo.setCreateName(userDao.selectOne(new QueryWrapper<User>().eq("id", a.getCreator())).getRealName());
+                    return announcementVo;
+                }
+        ).collect(Collectors.toList());
+        PageParam<AnnouncementVo> announcementVoPageParam = new PageParam<>();
+        BeanUtils.copyProperties(announcementPageParamList, announcementVoPageParam);
+        announcementVoPageParam.setRecords(announcementVoList);
+        return announcementVoPageParam;
+    }
+
+    @Override
+    public Integer updateStatus(Integer id) {
+        return announcementDao.update(new Announcement().setStatus(1), new UpdateWrapper<Announcement>().eq("id", id));
+    }
+
+    @Override
+    public Integer updateStatusUnshelve(Integer id) {
+        return announcementDao.update(new Announcement().setStatus(2), new UpdateWrapper<Announcement>().eq("id", id));
+    }
+
+    @Override
+    public Integer add(Integer groupId, Announcement announcement) {
+        announcement.setStatus(0);
+        announcement.setCtime(new Date());
+        announcement.setGroupId(groupId);
+        return announcementDao.insert(announcement);
+    }
 }
diff --git a/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java b/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
index bcc2ce5..5be530f 100644
--- a/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
@@ -1,30 +1,37 @@
 package com.example.jz.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.jz.dao.*;
+import com.example.jz.enums.CauseEnums;
 import com.example.jz.modle.PageParam;
 import com.example.jz.modle.dto.AddReportDto;
 import com.example.jz.modle.dto.CauseDto;
+import com.example.jz.modle.dto.CauseLoadDto;
 import com.example.jz.modle.entity.*;
-import com.example.jz.modle.vo.AnnouncementVo;
 import com.example.jz.modle.vo.CauseReportVo;
 import com.example.jz.modle.vo.CauseVo;
 import com.example.jz.modle.vo.UserVo;
 import com.example.jz.service.CauseService;
+import lombok.SneakyThrows;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * 锟斤拷锟斤拷锟斤拷(Cause)锟斤拷锟斤拷锟绞碉拷锟斤拷锟�
+ * 妗堜欢琛�(Cause)琛ㄦ湇鍔″疄鐜扮被
  *
  * @author makejava
  * @since 2022-07-13 11:52:58
@@ -56,7 +63,7 @@
         BeanUtils.copyProperties(causeDto, cause);
         cause.setCtime(new Date());
         causeService.save(cause);
-        //锟斤拷锟斤拷群锟斤拷
+        //鍒涘缓缇ょ粍
         Group group = new Group();
         group.setCtime(new Date());
         group.setGroupName(causeDto.getName());
@@ -136,15 +143,8 @@
     }
 
     @Override
-    public List<AnnouncementVo> getGroupAnnouncement(Integer groupId) {
-        return announcementDao.selectList(new QueryWrapper<Announcement>().eq("group_id", groupId)).stream()
-                .map(
-                        a -> {
-                            AnnouncementVo announcementVo = new AnnouncementVo();
-                            BeanUtils.copyProperties(a, announcementVo);
-                            return announcementVo;
-                        }
-                ).collect(Collectors.toList());
+    public List<Announcement> getGroupAnnouncement(Integer groupId) {
+        return announcementDao.selectList(new QueryWrapper<Announcement>().eq("group_id", groupId));
     }
 
     @Override
@@ -153,6 +153,48 @@
     }
 
     @Override
+    @SneakyThrows
+    public void loadFile(MultipartFile multipartFile) {
+        ArrayList<CauseLoadDto> causeLoadDtos = new ArrayList<>();
+        EasyExcel.read(multipartFile.getInputStream(),CauseLoadDto.class, new AnalysisEventListener<CauseLoadDto>() {
+                    @Override
+                    public void invoke(CauseLoadDto data, AnalysisContext context) {
+                        causeLoadDtos.add(data);
+                    }
+
+                    @Override
+                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+                    }
+                })
+                .autoCloseStream(true)
+                .doReadAll();
+        causeLoadDtos.forEach(
+                a -> {
+                    Cause cause = new Cause();
+                    BeanUtils.copyProperties(a, cause);
+                    if (a.getStatus().equals(CauseEnums.UNCHECKED.getMsg())) {
+                        cause.setStatus(CauseEnums.UNCHECKED.value());
+                    }
+                    if (a.getStatus().equals(CauseEnums.NOTTOPUTONRECORD.getMsg())) {
+                        cause.setStatus(CauseEnums.NOTTOPUTONRECORD.value());
+                    }
+                    if (a.getStatus().equals(CauseEnums.UNDERCONSIDERATION.getMsg())) {
+                        cause.setStatus(CauseEnums.UNDERCONSIDERATION.value());
+                    }
+                    if (a.getStatus().equals(CauseEnums.CASECLOSED.getMsg())) {
+                        cause.setStatus(CauseEnums.CASECLOSED.value());
+                    }
+                    if (a.getStatus().equals(CauseEnums.HASBEENDROPPED.getMsg())) {
+                        cause.setStatus(CauseEnums.HASBEENDROPPED.value());
+                    }
+                    cause.setCtime(new Date());
+                    cause.setUserId(userDao.selectOne(new QueryWrapper<User>().eq("real_name", a.getUserName())).getId());
+                    causeDao.insert(cause);
+                });
+    }
+
+    @Override
     @Transactional
     public Boolean addReportPeople(AddReportDto addReportDto) {
         User user = userDao.selectOne(new LambdaQueryWrapper<User>(User.class).eq(User::getUserIdcard, addReportDto.getIdcard()));
diff --git a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
index e3ff882..679896c 100644
--- a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
@@ -1,5 +1,11 @@
 package com.example.jz.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.metadata.data.ImageData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.util.IoUtils;
+import com.alibaba.excel.util.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,13 +18,28 @@
 import com.example.jz.modle.entity.GroupUser;
 import com.example.jz.modle.entity.Report;
 import com.example.jz.modle.vo.ReportListVo;
+import com.example.jz.dao.*;
+import com.example.jz.modle.entity.*;
+import com.example.jz.modle.vo.ExportExcelReportVo;
+import com.example.jz.service.MinIOService;
 import com.example.jz.service.ReportService;
+import lombok.SneakyThrows;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鎶ユ琛�(Report)琛ㄦ湇鍔″疄鐜扮被
@@ -35,6 +56,15 @@
     private GroupDao groupDao;
     @Autowired
     private GroupUserDao groupUserDao;
+
+    @Resource
+    CauseDao causeDao;
+
+    @Resource
+    UserDao userDao;
+
+    @Resource
+    MinIOService minIOService;
 
     /**
      * 瀹℃牳鎶ユ
@@ -62,6 +92,49 @@
     }
 
     @Override
+    @SneakyThrows
+    public void exportReporter(Integer id, HttpServletResponse response) {
+        //鏌ヨ鎶ユ浜虹浉鍏充俊鎭�氳繃妗堜欢
+        List<Report> reports = reportDao.selectList(new QueryWrapper<Report>().eq("cause_id", id).orderByDesc());
+        ArrayList<ExportExcelReportVo> exportExcelReportVos = new ArrayList<>();
+        reports.forEach(
+                a -> {
+                    ExportExcelReportVo exportExcelReportVo = new ExportExcelReportVo();
+                    User user = userDao.selectOne(new QueryWrapper<User>().eq("id", a.getUserId()));
+                    BeanUtils.copyProperties(a, exportExcelReportVo);
+                    exportExcelReportVo.setUserIdcard(user.getUserIdcard());
+                    exportExcelReportVo.setUserMobile(user.getUserMobile());
+                    exportExcelReportVo.setRealName(user.getRealName());
+                    WriteCellData<List<ImageData>> objectWriteCellData = new WriteCellData<>();
+                    ArrayList<ImageData> imageDataList = new ArrayList<>();
+                    if (StringUtils.isNotBlank(a.getReportMaterials())) {
+                        String[] urls = a.getReportMaterials().split(",");
+                        for (int i = 0; i < urls.length; i++) {
+                            int width=600;
+                            try {
+                                ImageData imageData = new ImageData();
+                                imageData.setImage(IoUtils.toByteArray(new URL(minIOService.getPreviewFileUrl(urls[i])).openConnection().getInputStream()));
+                                imageData.setLeft(width/ urls.length*i);
+                                imageData.setRight(width-width/ urls.length*(i+1));
+                                imageDataList.add(imageData);
+                            } catch (Exception e) {
+                                throw new RuntimeException(e);
+                            }
+                        }
+                        }
+                        objectWriteCellData.setImageDataList(imageDataList);
+                        exportExcelReportVo.setWriteCellData(objectWriteCellData);
+                        exportExcelReportVos.add(exportExcelReportVo);
+                }
+        );
+        String name = causeDao.selectOne(new QueryWrapper<Cause>().eq("id", id)).getName();
+        response.setHeader("Content-disposition", "attachment;filename="+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))+URLEncoder.encode(name+".xlsx","utf-8"));
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("application/vnd.ms-excel");
+        EasyExcel.write(response.getOutputStream(), ExportExcelReportVo.class).sheet("鏉愭枡瀵煎嚭").doWrite(exportExcelReportVos);
+    }
+
+    @Override
     public Page<ReportListVo> getPage(Page<ReportListVo> page, ReportParamDto reportParamDto) {
         Page<ReportListVo> aaa = reportDao.getPage(page, reportParamDto);
         aaa.getRecords().stream().forEach(x -> x.setIdcard(x.getIdcard().replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*")));
diff --git a/src/main/java/com/example/jz/utils/MD5Utils.java b/src/main/java/com/example/jz/utils/MD5Utils.java
deleted file mode 100644
index 4112d5e..0000000
--- a/src/main/java/com/example/jz/utils/MD5Utils.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.example.jz.utils;
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Base64;
-
-/**
- * @author 瀹夌懢鐒�
- * @data 2022/7/18 - 10:52 AM
- * @description 鍔犲瘑宸ュ叿绫�
- */
-public class Md5Utils {
-
-    public static String md5(String str) {
-        try {
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            md.update(str.getBytes());
-            byte b[] = md.digest();
-
-            str = byteToStr(b);
-        } catch (Exception e) {
-            e.printStackTrace();
-
-        }
-        return str;
-    }
-
-    public static String byteToStr(byte[] b){
-        int i;
-        StringBuffer buf = new StringBuffer("");
-        for (int offset = 0; offset < b.length; offset++) {
-            i = b[offset];
-            //System.out.println(i);
-            if (i < 0)
-                i += 256;
-            if (i < 16)
-                buf.append("0");
-            buf.append(Integer.toHexString(i));
-        }
-        return buf.toString();
-    }
-
-    /**
-     * 浼犲叆鏂囨湰鍐呭锛岃繑鍥� SHA-256 涓�
-     *
-     * @param strText
-     * @return
-     */
-    public static String SHA256(final String strText)
-    {
-        return SHA(strText, "SHA-256");
-    }
-
-    public static String SHA1(final String strText)
-    {
-        return SHA(strText, "SHA-1");
-    }
-
-    /**
-     * 浼犲叆鏂囨湰鍐呭锛岃繑鍥� SHA-512 涓�
-     *
-     * @param strText
-     * @return
-     */
-    public static String SHA512(final String strText)
-    {
-        return SHA(strText, "SHA-512");
-    }
-
-    /**
-     * 瀛楃涓� SHA 鍔犲瘑
-     *
-     * @param strText
-     * @return
-     */
-    private static String SHA(final String strText, final String strType)
-    {
-        // 杩斿洖鍊�
-        String strResult = null;
-
-        // 鏄惁鏄湁鏁堝瓧绗︿覆
-        if (strText != null && strText.length() > 0)
-        {
-            try
-            {
-                // SHA 鍔犲瘑寮�濮�
-                MessageDigest messageDigest = MessageDigest.getInstance(strType);
-                // 浼犲叆瑕佸姞瀵嗙殑瀛楃涓�
-                messageDigest.update(strText.getBytes("utf-8"));
-                // 寰楀埌 byte 绫诲瀷鐨勭粨鏋�
-                byte byteBuffer[] = messageDigest.digest();
-                strResult = byteToStr(byteBuffer);
-            }
-            catch (NoSuchAlgorithmException e)
-            {
-                e.printStackTrace();
-            }catch (UnsupportedEncodingException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-
-        }
-
-        return strResult;
-    }
-
-    public static String base64(String str){
-        String baseStr = null;
-        Base64.Encoder encoder = Base64.getEncoder();
-        byte[] textByte;
-        try {
-            textByte = str.getBytes("UTF-8");
-            baseStr = encoder.encodeToString(textByte);
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-
-        return baseStr;
-
-    }
-
-    public static void main(String[] args) {
-        String password = "bunana1";
-        System.out.println(md5(password));
-        //String base64 = base64(sha512);
-        //System.out.println(base64);
-        //String pwd1 = md5(base64);
-        //System.out.println(pwd1);
-    }
-}

--
Gitblit v1.8.0