Bladeren bron

用户反馈

fangqing 5 dagen geleden
bovenliggende
commit
d464848ffb

+ 212 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/CommunityFeedbackController.java

@@ -0,0 +1,212 @@
+package com.ruoyi.generator.controller;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.exception.user.ProjectException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.generator.domain.Community.CommunityArticleImages;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackImages;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackUser;
+import com.ruoyi.generator.domain.Community.CommunityReportUser;
+import com.ruoyi.generator.mapper.community.CommunityFeedbackUserMapper;
+import com.ruoyi.generator.mapper.community.CommunityReportUserMapper;
+import com.ruoyi.generator.service.ICommunityFeedbackUserService;
+import com.ruoyi.generator.service.ICommunityReportUserService;
+import com.ruoyi.generator.vo.CommunityArticleVo;
+import com.ruoyi.generator.vo.CommunityFeedbackUserVo;
+import com.ruoyi.generator.vo.CommunityImagesVo;
+import com.ruoyi.generator.vo.CommunityReportUserVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 社区用户反馈
+ *
+ * @author fangQing
+ * @date 2025/6/13 10:39
+ */
+
+@Api(tags = "社区用户反馈")
+@RestController
+@RequestMapping("/community/feedback")
+public class CommunityFeedbackController {
+
+    @Autowired
+    private ICommunityFeedbackUserService communityFeedbackUserService;
+
+    @Autowired
+    private CommunityFeedbackUserMapper communityFeedbackUserMapper;
+
+    /**
+     * 用户反馈
+     * @param communityFeedbackUser
+     * @return
+     */
+    @ApiOperation("用户反馈")
+    @PostMapping("/feedbackTypes")
+    public AjaxResult feedbackTypes(@RequestBody CommunityFeedbackUser communityFeedbackUser) {
+
+        if (Objects.isNull(communityFeedbackUser.getType())) {
+            return AjaxResult.error("请填写反馈类型!");
+        }
+
+        if (Objects.isNull(communityFeedbackUser.getUserFeedback())) {
+            return AjaxResult.error("请填写反馈内容!");
+        }
+        try {
+            communityFeedbackUserService.insertCommunityFeedbacktUser(communityFeedbackUser);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            throw new ProjectException();
+        }
+        return AjaxResult.success("反馈成功!");
+    }
+
+
+    /**
+     * 管理员反馈
+     * @param communityFeedbackUser
+     * @return
+     */
+    @ApiOperation("管理员反馈")
+    @PostMapping("/punishTypes")
+    public AjaxResult punishTypes(@RequestBody CommunityFeedbackUser communityFeedbackUser) {
+        if (Objects.isNull(communityFeedbackUser.getId())) {
+            return AjaxResult.error("请填写回执ID!");
+        }
+        if (Objects.isNull(communityFeedbackUser.getPunishFeedback())) {
+            return AjaxResult.error("请管理员填写反馈内容!");
+        }
+        try {
+            communityFeedbackUserService.updateCommunityFeedbacktUser(communityFeedbackUser);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            throw new ProjectException();
+        }
+        return AjaxResult.success("反馈成功!");
+    }
+
+    /**
+     * 查询反馈
+     * @return
+     */
+    @ApiOperation("查询反馈")
+    @GetMapping("/feedbackUsers")
+    public AjaxResult feedbackUsers(Long id, Long type, String userId) {
+        int total = 0;
+        List<CommunityFeedbackUserVo> communityFeedbackUserVos = null;
+        try {
+
+            int pageNum = Convert.toInt(ServletUtils.getParameter("pageNum"), 1);
+            int pageSize = Convert.toInt(ServletUtils.getParameter("pageSize"), 10);
+            int offset = (pageNum - 1) * pageSize;
+            int searchType = Convert.toInt(ServletUtils.getParameter("searchType"), 0);
+
+            communityFeedbackUserVos = communityFeedbackUserMapper.selectFeedbackUserVo(offset, pageSize, searchType, id, type, userId);
+
+
+            List<CommunityFeedbackUserVo> feedbackVos_copy = new ArrayList<>(communityFeedbackUserVos);
+
+            for (CommunityFeedbackUserVo feedbackVo : feedbackVos_copy) {
+
+                //获取用户传的图片
+                List<Map<String, Object>> userImageList = feedbackVo.getUserImages();
+
+                //创建视屏数组
+                List<CommunityFeedbackImages> videoList = new ArrayList<>();
+                CommunityFeedbackImages userVideos = null;
+                List<Map<String, Object>> userImageList_copy = new ArrayList<>(userImageList);
+                for (Map<String, Object> image : userImageList_copy) {
+                    String imageUrl = image.get("imageUrl").toString();
+                    //判断是否是视频
+                    boolean isVideo = isVideoFile(imageUrl);
+                    if (isVideo) {
+                        userImageList.remove(image);
+                        userVideos = JSONObject.parseObject(JSONObject.toJSONString(image), CommunityFeedbackImages.class);
+                        //BeanUtils.copyProperties(image, videos);
+                        videoList.add(userVideos);
+                    }
+                }
+                feedbackVo.setUserVideoList(videoList);
+
+
+                //获取管理员传的图片
+                List<Map<String, Object>> punishImageList = feedbackVo.getPunishImages();
+
+                //创建视屏数组
+                List<CommunityFeedbackImages> punishVideoList = new ArrayList<>();
+                CommunityFeedbackImages punishVideos = null;
+                List<Map<String, Object>> punishImageList_copy = new ArrayList<>(punishImageList);
+                for (Map<String, Object> image : punishImageList_copy) {
+                    String imageUrl = image.get("imageUrl").toString();
+                    //判断是否是视频
+                    boolean isVideo = isVideoFile(imageUrl);
+                    if (isVideo) {
+                        punishImageList.remove(image);
+                        punishVideos = JSONObject.parseObject(JSONObject.toJSONString(image), CommunityFeedbackImages.class);
+                        //BeanUtils.copyProperties(image, videos);
+                        punishVideoList.add(punishVideos);
+                    }
+                }
+                feedbackVo.setPunishVideoList(punishVideoList);
+
+            }
+
+/*
+
+            total = communityReportUserMapper.selectList(new QueryWrapper<CommunityReportUser>()
+                    .and((wrapper) -> {
+                        wrapper.ne("is_delete", true).or().isNull("is_delete");
+                    })).size();
+*/
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println(e.getMessage());
+            throw new ProjectException();
+        }
+        return AjaxResult.success(communityFeedbackUserVos);
+    }
+
+    /**
+     * 判断是否是视频文件
+     *
+     * @param fileUrl 文件地址
+     * @return 结果
+     */
+    public static boolean isVideoFile(String fileUrl) {
+        try {
+            // 打开 HTTP 连接
+            URL url = new URL(fileUrl);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+
+            // 获取文件类型
+            String mimeType = connection.getContentType();
+
+            // 判断是否为视频类型
+            return mimeType != null && mimeType.startsWith("video");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+
+
+}

+ 106 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityFeedbackImages.java

@@ -0,0 +1,106 @@
+package com.ruoyi.generator.domain.Community;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+* 用户反馈图片表
+* @TableName community_feedback_images
+*/
+@TableName("community_feedback_images")
+@Data
+public class CommunityFeedbackImages implements Serializable {
+
+    /**
+     * id
+     */
+    @NotNull(message = "[id]不能为空")
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 反馈ID
+     */
+    @ApiModelProperty("反馈ID")
+    private Long feedbackId;
+
+
+	/**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+	/**
+     * 管理员ID
+     */
+    @ApiModelProperty("管理员ID")
+    private Long punishId;
+
+    /**
+     * 图片地址
+     */
+    @ApiModelProperty("图片地址")
+    private String imageUrl;
+
+	/**
+     * 缩略图
+     */
+    @ApiModelProperty("缩略图")
+    private String compressUrl;
+
+
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+
+    /**
+     * 是否已删除
+     */
+    @ApiModelProperty("是否已删除")
+    private Boolean isDelete;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty("创建人")
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+}

+ 113 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityFeedbackUser.java

@@ -0,0 +1,113 @@
+package com.ruoyi.generator.domain.Community;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.ruoyi.generator.vo.CommunityImagesVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+* 用户反馈记录表
+* @TableName community_feedback_user
+*/
+@TableName("community_feedback_user")
+@Data
+public class CommunityFeedbackUser implements Serializable {
+
+    /**
+     * id
+     */
+    @NotNull(message = "[id]不能为空")
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+
+    /**
+     * 反馈类型
+     */
+    @ApiModelProperty("type")
+    private Long type;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+
+    /**
+     * 用户反馈内容
+     */
+    @ApiModelProperty("用户反馈内容")
+    private String userFeedback;
+
+    /**
+     * 管理员ID
+     */
+    @ApiModelProperty("管理员ID")
+    private Long punishId;
+
+    /**
+     * 管理员回执
+     */
+    @ApiModelProperty("管理员回执")
+    private String punishFeedback;
+
+
+    /**
+     * 用户图片地址
+     */
+    @ApiModelProperty("用户图片地址")
+    @TableField(exist = false)
+    private List<CommunityImagesVo> userImages;
+
+    /**
+     * 管理员图片地址
+     */
+    @ApiModelProperty("管理员图片地址")
+    @TableField(exist = false)
+    private List<CommunityImagesVo> punishImages;
+
+    /**
+     * 是否已删除
+     */
+    @ApiModelProperty("是否已删除")
+    private Boolean isDelete;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty("创建人")
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+}

+ 16 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/community/CommunityFeedbackImagesMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.generator.mapper.community;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackImages;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * @author fangqing
+ * @description 针对表【community_feedback_images(用户反馈上传的图片)】的数据库操作Mapper
+ * @createDate 2025/6/13 11:10
+ * @Entity com.ruoyi.generator.domain.Community.CommunityFeedbackImages
+ */
+@Mapper
+public interface CommunityFeedbackImagesMapper  extends BaseMapper<CommunityFeedbackImages> {
+}

+ 32 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/community/CommunityFeedbackUserMapper.java

@@ -0,0 +1,32 @@
+package com.ruoyi.generator.mapper.community;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackUser;
+import com.ruoyi.generator.vo.CommunityFeedbackUserVo;
+import com.ruoyi.generator.vo.CommunityReportUserVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author fangqing
+ * @date 2025/6/13 10:51
+ */
+@Mapper
+public interface CommunityFeedbackUserMapper  extends BaseMapper<CommunityFeedbackUser> {
+
+
+    /**
+     * 查询用户反馈的具体信息
+     * @param offset
+     * @param limit
+     * @return
+     */
+    List<CommunityFeedbackUserVo> selectFeedbackUserVo               (@Param("offset") int offset,
+                                                                      @Param("limit") int limit,
+                                                                      @Param("searchType") int searchType,
+                                                                      @Param("id") Long  id,
+                                                                      @Param("type") Long  type,
+                                                                      @Param("userId") String  userId);
+}

+ 114 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/CommunityFeedbackUserServiceImpl.java

@@ -0,0 +1,114 @@
+package com.ruoyi.generator.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.generator.domain.Community.CommunityArticleImages;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackImages;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackUser;
+import com.ruoyi.generator.domain.Community.CommunityReportImages;
+import com.ruoyi.generator.mapper.community.CommunityFeedbackImagesMapper;
+import com.ruoyi.generator.mapper.community.CommunityFeedbackUserMapper;
+import com.ruoyi.generator.vo.CommunityImagesVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author fangqing
+ * @date 2025/6/13 10:49
+ */
+@Service
+public class CommunityFeedbackUserServiceImpl extends ServiceImpl<CommunityFeedbackUserMapper, CommunityFeedbackUser> implements ICommunityFeedbackUserService {
+
+    @Autowired
+    private CommunityFeedbackUserMapper communityFeedbackUserMapper;
+
+    @Autowired
+    private CommunityFeedbackImagesMapper communityFeedbackImagesMapper;
+
+
+    /**
+     * 用户反馈
+     * @param communityFeedbackUser
+     * @return
+     */
+    @Override
+    public CommunityFeedbackUser insertCommunityFeedbacktUser(CommunityFeedbackUser communityFeedbackUser) {
+        //创建一个新的对象匹配
+        CommunityFeedbackUser feedbackUser = new CommunityFeedbackUser();
+
+        Long userId = communityFeedbackUser.getUserId();
+        if (userId == null){
+            userId = SecurityUtils.getUserId();
+        }
+
+        feedbackUser.setType(communityFeedbackUser.getType());
+        feedbackUser.setUserId(userId);
+        feedbackUser.setUserFeedback(communityFeedbackUser.getUserFeedback());
+        feedbackUser.setCreateBy(userId);
+        feedbackUser.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
+
+        communityFeedbackUserMapper.insert(feedbackUser);
+        System.out.println(communityFeedbackUser);
+        //插入图片日志
+        List<CommunityImagesVo> images = communityFeedbackUser.getUserImages();
+        if (images != null && !images.isEmpty()) {
+            CommunityFeedbackImages feedbackImages = null;
+            for (CommunityImagesVo image : images) {
+                feedbackImages = new CommunityFeedbackImages();
+                feedbackImages.setFeedbackId(feedbackUser.getId());
+                feedbackImages.setUserId(userId);
+                feedbackImages.setImageUrl(image.getImages());
+                feedbackImages.setCompressUrl(image.getCompressedImages());
+                feedbackImages.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
+                feedbackImages.setCreateBy(userId);
+                communityFeedbackImagesMapper.insert(feedbackImages);
+            }
+        }
+
+        return feedbackUser;
+    }
+
+    /**
+     * 管理员反馈
+     * @param communityFeedbackUser
+     * @return
+     */
+    @Override
+    public CommunityFeedbackUser updateCommunityFeedbacktUser(CommunityFeedbackUser communityFeedbackUser) {
+        //创建一个新的对象匹配
+        CommunityFeedbackUser feedbackUser = new CommunityFeedbackUser();
+
+        Long punishId = communityFeedbackUser.getPunishId();
+        if (punishId == null){
+            punishId = SecurityUtils.getUserId();
+        }
+
+        feedbackUser.setId(communityFeedbackUser.getId());
+        feedbackUser.setPunishId(punishId);
+        feedbackUser.setPunishFeedback(communityFeedbackUser.getPunishFeedback());
+        feedbackUser.setUpdateBy(punishId);
+        feedbackUser.setUpdateTime(DateUtils.parseDate(DateUtils.getTime()));
+        communityFeedbackUserMapper.updateById(feedbackUser);
+
+        //插入管理员图片日志
+        List<CommunityImagesVo> images = communityFeedbackUser.getPunishImages();
+        if (images != null && !images.isEmpty()) {
+            CommunityFeedbackImages feedbackImages = null;
+            for (CommunityImagesVo image : images) {
+                feedbackImages = new CommunityFeedbackImages();
+                feedbackImages.setFeedbackId(feedbackUser.getId());
+                feedbackImages.setPunishId(punishId);
+                feedbackImages.setImageUrl(image.getImages());
+                feedbackImages.setCompressUrl(image.getCompressedImages());
+                feedbackImages.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
+                feedbackImages.setCreateBy(punishId);
+                communityFeedbackImagesMapper.insert(feedbackImages);
+            }
+        }
+
+        return feedbackUser;
+    }
+}

+ 27 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/ICommunityFeedbackUserService.java

@@ -0,0 +1,27 @@
+package com.ruoyi.generator.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackUser;
+
+
+public interface ICommunityFeedbackUserService extends IService<CommunityFeedbackUser> {
+
+    /**
+     * 插入用户反馈信息
+     * @param communityFeedbackUser
+     * @return
+     */
+    CommunityFeedbackUser insertCommunityFeedbacktUser (CommunityFeedbackUser communityFeedbackUser);
+
+
+
+    /**
+     * 管理员反馈
+     * @param communityFeedbackUser
+     * @return
+     */
+    CommunityFeedbackUser updateCommunityFeedbacktUser (CommunityFeedbackUser communityFeedbackUser);
+
+
+
+}

+ 1 - 1
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityArticleVo.java

@@ -135,7 +135,7 @@ public class CommunityArticleVo extends BaseEntity implements Serializable {
     private List<Map<String, Object>> comments;
 
     @ApiModelProperty("评论数量")
-    @TableField("comments")
+    @TableField("commentCount")
     private Integer commentCount;
 
     @ApiModelProperty("文章标签")

+ 132 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityFeedbackUserVo.java

@@ -0,0 +1,132 @@
+package com.ruoyi.generator.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.ruoyi.generator.domain.Community.CommunityArticleImages;
+import com.ruoyi.generator.domain.Community.CommunityFeedbackImages;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+* 用户反馈记录表
+* @TableName community_feedback_user
+*/
+@TableName("community_feedback_user")
+@Data
+public class CommunityFeedbackUserVo implements Serializable {
+
+    /**
+     * id
+     */
+    @NotNull(message = "[id]不能为空")
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+
+    /**
+     * 反馈类型
+     */
+    @ApiModelProperty("type")
+    private Long type;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+
+    /**
+     * 用户反馈内容
+     */
+    @ApiModelProperty("用户反馈内容")
+    private String userFeedback;
+
+    /**
+     * 管理员ID
+     */
+    @ApiModelProperty("管理员ID")
+    private Long punishId;
+
+    /**
+     * 管理员回执
+     */
+    @ApiModelProperty("管理员回执")
+    private String punishFeedback;
+
+
+    /**
+     * 用户图片地址
+     */
+    @ApiModelProperty("用户图片地址")
+    @TableField(exist = false)
+    private List<Map<String, Object>> userImages;
+
+
+    /**
+     * 用户视频地址
+     */
+    @ApiModelProperty("用户视频地址")
+    @TableField(exist = false)
+    private List<CommunityFeedbackImages> userVideoList;
+
+
+    /**
+     * 管理员图片地址
+     */
+    @ApiModelProperty("管理员图片地址")
+    @TableField(exist = false)
+    private List<Map<String, Object>> punishImages;
+
+    /**
+     * 管理员视频地址
+     */
+    @ApiModelProperty("管理员视频地址")
+    @TableField(exist = false)
+    private List<CommunityFeedbackImages> punishVideoList;
+
+
+    /**
+     * 是否已删除
+     */
+    @ApiModelProperty("是否已删除")
+    private Boolean isDelete;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty("创建人")
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+}

+ 108 - 0
ruoyi-generator/src/main/resources/mapper/community/CommunityFeedbackUserMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.generator.mapper.community.CommunityFeedbackUserMapper">
+
+    <resultMap type="com.ruoyi.generator.vo.CommunityFeedbackUserVo" id="CommunityFeedbackUserVoResult">
+        <id property="id" column="user_id"/>
+        <result property="type" column="user_type"/>
+        <result property="userId" column="user_userId"/>
+        <result property="userFeedback" column="user_userFeedback"/>
+        <result property="punishId" column="user_punishd"/>
+        <result property="punishFeedback" column="user_punishFeedback"/>
+        <result property="isDelete" column="user_isDelete"/>
+        <result property="createBy" column="user_createBy"/>
+        <result property="createTime" column="user_createTime"/>
+        <result property="updateBy" column="user_updateBy"/>
+        <result property="updateTime" column="user_updateTime"/>
+        <result column="userImages" property="userImages" javaType="java.util.List" typeHandler="com.ruoyi.common.utils.bean.JSONTypeHandler"/>
+        <result column="punishImages" property="punishImages" javaType="java.util.List" typeHandler="com.ruoyi.common.utils.bean.JSONTypeHandler"/>
+    </resultMap>
+
+    <select id="selectFeedbackUserVo" parameterType="CommunityFeedbackUser" resultMap="CommunityFeedbackUserVoResult">
+
+        select
+            a.id               as  user_id,
+            a.type             as  user_type,
+            a.user_id          as  user_userId,
+            a.user_feedback    as  user_userFeedback,
+            a.punish_id        as  user_punishd,
+            a.punish_feedback  as  user_punishFeedback,
+            a.is_delete 			 as  user_isDelete,
+            a.create_by        as  user_createBy,
+            a.create_time 	   as  user_createTime,
+            a.update_by        as  user_updateBy,
+            a.update_time      as  user_updateTime,
+            COALESCE((
+                         SELECT
+                             JSON_ARRAYAGG(
+                                     CASE
+                                         WHEN b.id IS NOT NULL THEN
+                                             JSON_OBJECT(
+                                                     'id', IFNULL(b.id,''),
+                                                     'feedbackId', IFNULL(b.feedback_id,''),
+                                                     'userId', IFNULL(b.user_id,''),
+                                                     'imageUrl', IFNULL(b.image_url,''),
+                                                     'compressUrl', IFNULL(b.compress_url,''),
+                                                     'createBy', IFNULL(b.create_by,''),
+                                                     'createTime', IFNULL(DATE_FORMAT(b.create_time,'%Y-%m-%d %H:%i:%s'),''),
+                                                     'updateBy', IFNULL(b.update_by,''),
+                                                     'updateTime', IFNULL(DATE_FORMAT(b.update_time,'%Y-%m-%d %H:%i:%s'),'')
+                                                 )
+                                         ELSE NULL
+                                         END
+                                 )
+                         FROM
+                             community_feedback_images b
+                         WHERE
+                             b.feedback_id = a.id and b.user_id = a.user_id
+                           and (b.is_delete != 1 or b.is_delete is null)
+                     ), '[]') AS userImages,
+            COALESCE((
+                         SELECT
+                             JSON_ARRAYAGG(
+                                     CASE
+                                         WHEN c.id IS NOT NULL THEN
+                                             JSON_OBJECT(
+                                                     'id', IFNULL(c.id,''),
+                                                     'feedbackId', IFNULL(c.feedback_id,''),
+                                                     'punishId', IFNULL(c.punish_id,''),
+                                                     'imageUrl', IFNULL(c.image_url,''),
+                                                     'compressUrl', IFNULL(c.compress_url,''),
+                                                     'createBy', IFNULL(c.create_by,''),
+                                                     'createTime', IFNULL(DATE_FORMAT(c.create_time,'%Y-%m-%d %H:%i:%s'),''),
+                                                     'updateBy', IFNULL(c.update_by,''),
+                                                     'updateTime', IFNULL(DATE_FORMAT(c.update_time,'%Y-%m-%d %H:%i:%s'),'')
+                                                 )
+                                         ELSE NULL
+                                         END
+                                 )
+                         FROM
+                             community_feedback_images c
+                         WHERE
+                             c.feedback_id = a.id and c.punish_id = a.punish_id
+                           and (c.is_delete != 1 or c.is_delete is null)
+                     ), '[]') AS punishImages
+        from community_feedback_user a
+        <where>
+            <if test="id != null and id != ''">
+                AND a.id = #{id}
+            </if>
+            <if test="type != null and type != ''">
+                AND a.type = #{type}
+            </if>
+            <if test="userId != null and userId != ''">
+                AND a.user_id = #{userId}
+            </if>
+        </where>
+        <if test="searchType == 1">
+            order by a.create_time desc
+        </if>
+        <if test="searchType == 2">
+            order by a.create_time asc
+        </if>
+        limit #{offset},#{limit}
+
+    </select>
+</mapper>