wuzeyu
2024-07-31 84df8663a1c6aa4dd456e136408b3d5fff079f8f
问题反馈增加、删除、改状态、分页查
11个文件已添加
4个文件已修改
939 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeFeedbackMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeFeedbackReplyMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeFeedback.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeFeedbackReply.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeFeedbackMapper.xml 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeFeedbackReplyMapper.xml 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrWebOperationApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/FeedbackCtrl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/FeedbackSv.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/QueryVo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/FeedbackReplyCtrl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/FeedbackReplySv.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/QueryVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeFeedbackMapper.java
New file
@@ -0,0 +1,34 @@
package com.dy.pipIrrGlobal.daoOp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeFeedback;
import com.dy.pipIrrGlobal.voOp.Vofeedback;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * @author :WuZeYu
 * @Date :2024/7/29  16:45
 * @LastEditTime :2024/7/29  16:45
 * @Description
 */
@Mapper
public interface OpeFeedbackMapper extends BaseMapper<OpeFeedback> {
    int deleteByPrimaryKey(Long id);
    int insert(OpeFeedback record);
    int insertSelective(OpeFeedback record);
    OpeFeedback selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(OpeFeedback record);
    int updateByPrimaryKey(OpeFeedback record);
    Long getRecordCount(Map<String, Object> params);
    List<Vofeedback> getFeedbacks(Map<String, Object> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeFeedbackReplyMapper.java
New file
@@ -0,0 +1,34 @@
package com.dy.pipIrrGlobal.daoOp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply;
import com.dy.pipIrrGlobal.voOp.Vofeedback;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * @author :WuZeYu
 * @Date :2024/7/31  15:35
 * @LastEditTime :2024/7/31  15:35
 * @Description
 */
@Mapper
public interface OpeFeedbackReplyMapper extends BaseMapper<OpeFeedbackReply> {
    int deleteByPrimaryKey(Long id);
    int insert(OpeFeedbackReply record);
    int insertSelective(OpeFeedbackReply record);
    OpeFeedbackReply selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(OpeFeedbackReply record);
    int updateByPrimaryKey(OpeFeedbackReply record);
    Long getRecordCount(Map<String, Object> params);
    List<Vofeedback> getFeedbackReplys(Map<String, Object> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeFeedback.java
New file
@@ -0,0 +1,100 @@
package com.dy.pipIrrGlobal.pojoOp;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dy.common.po.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author :WuZeYu
 * @Date :2024/7/29  16:45
 * @LastEditTime :2024/7/29  16:45
 * @Description
 */
/**
 * 问题反馈表
 */
@TableName(value="ope_feedback", autoResultMap = true)
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "问题反馈表")
public class OpeFeedback implements BaseEntity {
    /**
    * 主键
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @TableId(type = IdType.INPUT)
    private Long id;
    /**
    * 反馈内容
    */
    @Length(message = "反馈内容不大于{max}字",  max = 200)
    private String content;
    /**
    * 图片;最多3张图片
    */
    @Length(message = "图片不大于{max}字", max = 255)
    private String image;
    /**
    * 音频;最多1个
    */
    @Length(message = "音频不大于{max}字",  max = 255)
    private String audio;
    /**
    * 视频;最多1个
    */
    @Length(message = "视频不大于{max}字,",  max = 255)
    private String video;
    /**
    * 联系电话;联系电话
    */
    @Length(message = "联系电话不大于{max}字,不小于{min}字", min = 11, max = 11)
    private String phone;
    /**
    * 农户ID
    */
    private Long feedbackerId;
    /**
    * 反馈时间
    */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date feedbackTime;
    /**
    * 经度
    */
    private Double lng;
    /**
    * 纬度
    */
    private Double lat;
    /**
    * 反馈状态;0-进行中,1-管理员结束,2-管理员删除
    */
    private Byte state;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeFeedbackReply.java
New file
@@ -0,0 +1,63 @@
package com.dy.pipIrrGlobal.pojoOp;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dy.common.po.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import java.util.Date;
/**
 * @author :WuZeYu
 * @Date :2024/7/31  15:35
 * @LastEditTime :2024/7/31  15:35
 * @Description
 */
/**
 * 反馈回复记录表;
 */
@TableName(value="ope_feedback_reply", autoResultMap = true)
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "反馈回复记录表")
public class OpeFeedbackReply implements BaseEntity {
    /**
    * 主键
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @TableId(type = IdType.INPUT)
    private Long id;
    /**
    * 反馈编号
    */
    @NotNull
    private Long feedbackId;
    /**
    * 回复内容
    */
    @NotNull
    private String replyContent;
    /**
    * 回复时间
    */
    private Date replyTime;
    /**
    * 回复人ID
    */
    @NotNull
    private Long replierId;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java
New file
@@ -0,0 +1,63 @@
package com.dy.pipIrrGlobal.voOp;
import com.dy.common.po.BaseEntity;
import lombok.Data;
/**
 * @author :WuZeYu
 * @Date :2024/7/30  9:48
 * @LastEditTime :2024/7/30  9:48
 * @Description
 */
@Data
public class Vofeedback implements BaseEntity {
    private static final long serialVersionUID = 202407301133001L;
    /**
     * 主键id
     */
    private String id;
    /**
     * 反馈内容
     */
    private String content;
    /**
     * 反馈图片
     */
    private String image;
    /**
     * 反馈音频
     */
    private String audio;
    /**
     * 反馈视频
     */
    private String video;
    /**
     * 反馈人手机号
     */
    private String phone;
    /**
     * 反馈人id(农户ID)
     */
    private String feedbackerId;
    /**
     * 反馈人名称
     */
    private String feedbackerName;
    /**
     * 反馈时间
     */
    private String feedbackTime;
    /**
     * 反馈地址
     */
    private String lng;//经度
    private String lat;//纬度
    /**
     * 反馈状态
     */
    private Byte state;
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -72,7 +72,7 @@
pipIrr:
    global:
        dev: false   #是否开发阶段,true或false
        dev: true   #是否开发阶段,true或false
        dsName: ym  #开发阶段,设置临时的数据库名称
    mw:
        webPort: 8070
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeFeedbackMapper.xml
New file
@@ -0,0 +1,236 @@
<?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.dy.pipIrrGlobal.daoOp.OpeFeedbackMapper">
  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoOp.OpeFeedback">
    <!--@mbg.generated-->
    <!--@Table ope_feedback-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="content" jdbcType="VARCHAR" property="content" />
    <result column="image" jdbcType="VARCHAR" property="image" />
    <result column="audio" jdbcType="VARCHAR" property="audio" />
    <result column="video" jdbcType="VARCHAR" property="video" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="feedbacker_id" jdbcType="BIGINT" property="feedbackerId" />
    <result column="feedback_time" jdbcType="TIMESTAMP" property="feedbackTime" />
    <result column="lng" jdbcType="DOUBLE" property="lng" />
    <result column="lat" jdbcType="DOUBLE" property="lat" />
    <result column="state" jdbcType="TINYINT" property="state" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, content, image, audio, video, phone, feedbacker_id, feedback_time, lng, lat,
    `state`
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    <include refid="Base_Column_List" />
    from ope_feedback
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    <!--@mbg.generated-->
    delete from ope_feedback
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedback">
    <!--@mbg.generated-->
    insert into ope_feedback (id, content, image,
      audio, video, phone,
      feedbacker_id, feedback_time, lng,
      lat, `state`)
    values (#{id,jdbcType=BIGINT}, #{content,jdbcType=VARCHAR}, #{image,jdbcType=VARCHAR},
      #{audio,jdbcType=VARCHAR}, #{video,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR},
      #{feedbackerId,jdbcType=BIGINT}, #{feedbackTime,jdbcType=TIMESTAMP}, #{lng,jdbcType=DOUBLE},
      #{lat,jdbcType=DOUBLE}, #{state,jdbcType=TINYINT})
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedback">
    <!--@mbg.generated-->
    insert into ope_feedback
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="content != null">
        content,
      </if>
      <if test="image != null">
        image,
      </if>
      <if test="audio != null">
        audio,
      </if>
      <if test="video != null">
        video,
      </if>
      <if test="phone != null">
        phone,
      </if>
      <if test="feedbackerId != null">
        feedbacker_id,
      </if>
      <if test="feedbackTime != null">
        feedback_time,
      </if>
      <if test="lng != null">
        lng,
      </if>
      <if test="lat != null">
        lat,
      </if>
      <if test="state != null">
        `state`,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="content != null">
        #{content,jdbcType=VARCHAR},
      </if>
      <if test="image != null">
        #{image,jdbcType=VARCHAR},
      </if>
      <if test="audio != null">
        #{audio,jdbcType=VARCHAR},
      </if>
      <if test="video != null">
        #{video,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        #{phone,jdbcType=VARCHAR},
      </if>
      <if test="feedbackerId != null">
        #{feedbackerId,jdbcType=BIGINT},
      </if>
      <if test="feedbackTime != null">
        #{feedbackTime,jdbcType=TIMESTAMP},
      </if>
      <if test="lng != null">
        #{lng,jdbcType=DOUBLE},
      </if>
      <if test="lat != null">
        #{lat,jdbcType=DOUBLE},
      </if>
      <if test="state != null">
        #{state,jdbcType=TINYINT},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedback">
    <!--@mbg.generated-->
    update ope_feedback
    <set>
      <if test="content != null">
        content = #{content,jdbcType=VARCHAR},
      </if>
      <if test="image != null">
        image = #{image,jdbcType=VARCHAR},
      </if>
      <if test="audio != null">
        audio = #{audio,jdbcType=VARCHAR},
      </if>
      <if test="video != null">
        video = #{video,jdbcType=VARCHAR},
      </if>
      <if test="phone != null">
        phone = #{phone,jdbcType=VARCHAR},
      </if>
      <if test="feedbackerId != null">
        feedbacker_id = #{feedbackerId,jdbcType=BIGINT},
      </if>
      <if test="feedbackTime != null">
        feedback_time = #{feedbackTime,jdbcType=TIMESTAMP},
      </if>
      <if test="lng != null">
        lng = #{lng,jdbcType=DOUBLE},
      </if>
      <if test="lat != null">
        lat = #{lat,jdbcType=DOUBLE},
      </if>
      <if test="state != null">
        `state` = #{state,jdbcType=TINYINT},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedback">
    <!--@mbg.generated-->
    update ope_feedback
    set content = #{content,jdbcType=VARCHAR},
      image = #{image,jdbcType=VARCHAR},
      audio = #{audio,jdbcType=VARCHAR},
      video = #{video,jdbcType=VARCHAR},
      phone = #{phone,jdbcType=VARCHAR},
      feedbacker_id = #{feedbackerId,jdbcType=BIGINT},
      feedback_time = #{feedbackTime,jdbcType=TIMESTAMP},
      lng = #{lng,jdbcType=DOUBLE},
      lat = #{lat,jdbcType=DOUBLE},
      `state` = #{state,jdbcType=TINYINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--自定义查询数量-->
  <select id="getRecordCount" resultType="java.lang.Long">
    select
    count(*) AS recordCount
    from ope_feedback ofb
    left join se_client sc on ofb.feedbacker_id = sc.id
    <where>
      <if test="feedbackerId != null">
        and ofb.feedbacker_id = #{feedbackerId,jdbcType=BIGINT}
      </if>
      <if test="feedbackerName != null">
        and sc.name = #{feedbackerName,jdbcType=VARCHAR}
      </if>
      <if test="timeStart != null">
        and ofb.feedback_time &gt;= #{timeStart,jdbcType=TIMESTAMP}
      </if>
      <if test="timeStop != null">
        and ofb.feedback_time &lt;= #{timeStop,jdbcType=TIMESTAMP}
      </if>
      <if test="state != null">
        and ofb.`state` = #{state,jdbcType=TINYINT}
      </if>
    </where>
  </select>
  <!--自定义查询-->
  <select id="getFeedbacks" resultType="com.dy.pipIrrGlobal.voOp.Vofeedback">
    select
    cast(ofb.id as char) as id,
    ofb.content as content,
    ofb.image as image,
    ofb.audio as audio,
    ofb.video as video,
    ofb.phone as phone,
    cast(ofb.feedbacker_id as char) as feedbackerId,
    ofb.feedback_time as feedbackTime,
    ofb.lng as lng,
    ofb.lat as lat,
    ofb.`state` as state,
    sc.name feedbackerName
    from ope_feedback ofb
    left join se_client sc on ofb.feedbacker_id = sc.id
    <where>
      <if test="feedbackerId != null">
        and ofb.feedbacker_id = #{feedbackerId,jdbcType=BIGINT}
      </if>
      <if test="feedbackerName != null">
        and sc.name = #{feedbackerName,jdbcType=VARCHAR}
      </if>
      <if test="timeStart != null">
        and ofb.feedback_time &gt;= #{timeStart,jdbcType=TIMESTAMP}
      </if>
      <if test="timeStop != null">
        and ofb.feedback_time &lt;= #{timeStop,jdbcType=TIMESTAMP}
      </if>
      <if test="state != null">
        and ofb.`state` = #{state,jdbcType=TINYINT}
      </if>
    </where>
    order by ofb.id desc
    <if test="pageCurr != null and pageSize != null">
      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
    </if>
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeFeedbackReplyMapper.xml
New file
@@ -0,0 +1,102 @@
<?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.dy.pipIrrGlobal.daoOp.OpeFeedbackReplyMapper">
  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply">
    <!--@mbg.generated-->
    <!--@Table ope_feedback_reply-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="feedback_id" jdbcType="BIGINT" property="feedbackId" />
    <result column="reply_content" jdbcType="VARCHAR" property="replyContent" />
    <result column="reply_time" jdbcType="TIMESTAMP" property="replyTime" />
    <result column="replier_id" jdbcType="BIGINT" property="replierId" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, feedback_id, reply_content, reply_time, replier_id
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    <include refid="Base_Column_List" />
    from ope_feedback_reply
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    <!--@mbg.generated-->
    delete from ope_feedback_reply
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply">
    <!--@mbg.generated-->
    insert into ope_feedback_reply (id, feedback_id, reply_content,
      reply_time, replier_id)
    values (#{id,jdbcType=BIGINT}, #{feedbackId,jdbcType=BIGINT}, #{replyContent,jdbcType=VARCHAR},
      #{replyTime,jdbcType=TIMESTAMP}, #{replierId,jdbcType=BIGINT})
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply">
    <!--@mbg.generated-->
    insert into ope_feedback_reply
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="feedbackId != null">
        feedback_id,
      </if>
      <if test="replyContent != null">
        reply_content,
      </if>
      <if test="replyTime != null">
        reply_time,
      </if>
      <if test="replierId != null">
        replier_id,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="feedbackId != null">
        #{feedbackId,jdbcType=BIGINT},
      </if>
      <if test="replyContent != null">
        #{replyContent,jdbcType=VARCHAR},
      </if>
      <if test="replyTime != null">
        #{replyTime,jdbcType=TIMESTAMP},
      </if>
      <if test="replierId != null">
        #{replierId,jdbcType=BIGINT},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply">
    <!--@mbg.generated-->
    update ope_feedback_reply
    <set>
      <if test="feedbackId != null">
        feedback_id = #{feedbackId,jdbcType=BIGINT},
      </if>
      <if test="replyContent != null">
        reply_content = #{replyContent,jdbcType=VARCHAR},
      </if>
      <if test="replyTime != null">
        reply_time = #{replyTime,jdbcType=TIMESTAMP},
      </if>
      <if test="replierId != null">
        replier_id = #{replierId,jdbcType=BIGINT},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply">
    <!--@mbg.generated-->
    update ope_feedback_reply
    set feedback_id = #{feedbackId,jdbcType=BIGINT},
      reply_content = #{replyContent,jdbcType=VARCHAR},
      reply_time = #{replyTime,jdbcType=TIMESTAMP},
      replier_id = #{replierId,jdbcType=BIGINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrWebOperationApplication.java
@@ -18,7 +18,7 @@
                })
        }
)
@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa"})
@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa","com.dy.pipIrrGlobal.daoOp"})
public class PipIrrWebOperationApplication {
    public static void main(String[] args) {
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/FeedbackCtrl.java
@@ -1,9 +1,21 @@
package com.dy.pipIrrOperation.feedback;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.pojoOp.OpeFeedback;
import com.dy.pipIrrGlobal.voOp.Vofeedback;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
 * @author ZhuBaoMin
@@ -19,4 +31,105 @@
public class FeedbackCtrl {
    private final FeedbackSv feedbackSv;
    /**
     * 添加问题反馈
     * @param feedback
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop
    public BaseResponse<Boolean> add(@RequestBody @Valid OpeFeedback feedback, @Parameter(hidden = true) BindingResult bindingResult){
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if (feedback.getFeedbackerId() == null){
            return BaseResponseUtils.buildFail("请传入农户id");
        }
        Integer rec = Optional.ofNullable(feedbackSv.add(feedback)).orElse(0);
        if (rec == 0) {
            return BaseResponseUtils.buildFail("添加失败");
        }
        return BaseResponseUtils.buildSuccess(true);
    }
    /**
     * 修改问题反馈状态
     * @param feedback
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form表单json数据", required = true) @Valid OpeFeedback feedback, @Parameter(hidden = true) BindingResult bindingResult) {
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if (feedback.getId() == null){
            return BaseResponseUtils.buildFail("请传入id");
        }
        if (feedback.getState() == null){
            return BaseResponseUtils.buildFail("请传入状态");
        }
        int count ;
        try {
            count = feedbackSv.update(feedback);
        } catch (Exception e) {
            log.error("修改问题反馈状态异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
        if (count <= 0) {
            return BaseResponseUtils.buildFail("修改状态失败");
        } else {
            return BaseResponseUtils.buildSuccess(true);
        }
    }
    /**
     * 删除问题反馈
     * @param map
     * @return
     */
    @PostMapping(path = "delete")
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> delete(@RequestBody Map map) {
        if (map == null || map.size() <= 0) {
            return BaseResponseUtils.buildFail("请传入id");
        }
        Long id = Long.parseLong(map.get("id").toString());
        try {
            Integer recordCount = Optional.ofNullable(feedbackSv.delete(id)).orElse(0);
            if (recordCount == 0) {
                return BaseResponseUtils.buildFail("删除失败");
            } else {
                return BaseResponseUtils.buildSuccess(true);
            }
        } catch (Exception e) {
            log.error("删除异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 分页查询问题反馈
     * @param qo
     * @return
     */
    @GetMapping(path = "getFeedbacks")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<Vofeedback>>> getFeedbacks(QueryVo qo) {
        try {
            QueryResultVo<List<Vofeedback>> res = feedbackSv.getFeedbacks(qo);
            if (res == null) {
                return BaseResponseUtils.buildFail("查询失败");
            }
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("查询异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/FeedbackSv.java
@@ -1,8 +1,18 @@
package com.dy.pipIrrOperation.feedback;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoOp.OpeFeedbackMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeFeedback;
import com.dy.pipIrrGlobal.voOp.Vofeedback;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
@@ -15,4 +25,55 @@
@Service
@RequiredArgsConstructor
public class FeedbackSv {
    @Autowired
    private OpeFeedbackMapper opeFeedbackMapper;
    /**
     * 添加问题反馈
     * @param feedback
     * @return
     */
    public int add(OpeFeedback feedback) {
        feedback.setState((byte)0);
        feedback.setFeedbackTime(new Date());
        int i = opeFeedbackMapper.insertSelective(feedback);
        return i;
    }
    /**
     * 修改问题反馈状态
     * @param feedback
     * @return
     */
    public int update(OpeFeedback feedback) {
        int i = opeFeedbackMapper.updateByPrimaryKeySelective(feedback);
        return i;
    }
    /**
     * 删除问题反馈
     * @param id
     * @return
     */
    public int delete(Long id) {
        int i = opeFeedbackMapper.deleteByPrimaryKey(id);
        return i;
    }
    /**
     * 获取问题反馈
     * @param qo
     * @return
     */
    public QueryResultVo<List<Vofeedback>> getFeedbacks(QueryVo qo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        Long itemTotal = opeFeedbackMapper.getRecordCount(params);
        QueryResultVo<List<Vofeedback>> rsVo = new QueryResultVo<>();
        rsVo.pageSize = qo.pageSize;
        rsVo.pageCurr = qo.pageCurr;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = opeFeedbackMapper.getFeedbacks(params);
        return rsVo;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedback/QueryVo.java
New file
@@ -0,0 +1,45 @@
package com.dy.pipIrrOperation.feedback;
import com.dy.common.webUtil.QueryConditionVo;
import lombok.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author :WuZeYu
 * @Date :2024/7/30  9:32
 * @LastEditTime :2024/7/30  9:32
 * @Description
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QueryVo extends QueryConditionVo {
    /**
     * 反馈人id
     */
    private String feedbackerId;
    /**
     * 反馈人姓名
     */
    private String feedbackerName;
    /**
     * 反馈状态
     */
    private Byte state;
    /**
     * 查询开始日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date timeStart;
    /**
     * 查询结束日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date timeStop;
}
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/FeedbackReplyCtrl.java
New file
@@ -0,0 +1,60 @@
package com.dy.pipIrrOperation.feedbackReply;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.pojoOp.OpeFeedbackReply;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
import java.util.Optional;
/**
 * @author :WuZeYu
 * @Date :2024/7/31  16:19
 * @LastEditTime :2024/7/31  16:19
 * @Description
 */
@Slf4j
@RestController
@RequestMapping(path="feedbackReply")
@RequiredArgsConstructor
public class FeedbackReplyCtrl {
    private final FeedbackReplySv feedbackReplySv;
    /**
     * 添加问题反馈回复
     * @param reply
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop
    public BaseResponse<Boolean> add(@RequestBody @Valid OpeFeedbackReply reply, @Parameter(hidden = true) BindingResult bindingResult){
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Integer rec = Optional.ofNullable(feedbackReplySv.add(reply)).orElse(0);
        if (rec == 0) {
            return BaseResponseUtils.buildFail("添加失败");
        }
        return BaseResponseUtils.buildSuccess(true);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/FeedbackReplySv.java
New file
@@ -0,0 +1,10 @@
package com.dy.pipIrrOperation.feedbackReply;
/**
 * @author :WuZeYu
 * @Date :2024/7/31  16:19
 * @LastEditTime :2024/7/31  16:19
 * @Description
 */
public class FeedbackReplySv {
}
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/feedbackReply/QueryVo.java
New file
@@ -0,0 +1,10 @@
package com.dy.pipIrrOperation.feedbackReply;
/**
 * @author :WuZeYu
 * @Date :2024/7/31  16:20
 * @LastEditTime :2024/7/31  16:20
 * @Description
 */
public class QueryVo {
}