diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/controller/SysFeedbackController.java b/intc-modules/intc-system/src/main/java/com/intc/system/controller/SysFeedbackController.java new file mode 100644 index 0000000..7535633 --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/controller/SysFeedbackController.java @@ -0,0 +1,139 @@ +package com.intc.system.controller; + +import java.util.List; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import com.intc.common.core.utils.poi.ExcelUtil; +import com.intc.common.core.web.controller.BaseController; +import com.intc.common.core.web.domain.AjaxResult; +import com.intc.common.core.web.page.TableDataInfo; +import com.intc.common.log.annotation.Log; +import com.intc.common.log.enums.BusinessType; +import com.intc.common.security.annotation.RequiresPermissions; +import com.intc.common.security.utils.SecurityUtils; +import com.intc.system.domain.SysFeedback; +import com.intc.system.domain.dto.SysFeedbackDto; +import com.intc.system.domain.vo.SysFeedbackVo; +import com.intc.system.service.ISysFeedbackService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 意见反馈Controller + * + * @author intc + * @date 2026-07-12 + */ +@Api(tags = "意见反馈") +@RestController +@RequestMapping("/feedback") +public class SysFeedbackController extends BaseController +{ + @Resource + private ISysFeedbackService sysFeedbackService; + + /** + * 查询意见反馈列表(后台管理) + */ + @ApiOperation(value = "查询意见反馈列表") + @RequiresPermissions("system:feedback:list") + @GetMapping("/list") + public TableDataInfo list(SysFeedbackDto sysFeedbackDto) + { + startPage(); + List list = sysFeedbackService.selectSysFeedbackList(sysFeedbackDto); + return getDataTable(list); + } + + /** + * 导出意见反馈列表 + */ + @ApiOperation(value = "导出意见反馈列表") + @RequiresPermissions("system:feedback:export") + @Log(title = "意见反馈", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysFeedbackDto sysFeedbackDto) + { + List list = sysFeedbackService.selectSysFeedbackList(sysFeedbackDto); + ExcelUtil util = new ExcelUtil(SysFeedbackVo.class); + util.exportExcel(response, list, "意见反馈数据"); + } + + /** + * 获取意见反馈详细信息 + */ + @ApiOperation(value = "获取意见反馈详细信息") + @RequiresPermissions("system:feedback:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(sysFeedbackService.selectSysFeedbackById(id)); + } + + /** + * 新增意见反馈(后台管理) + */ + @ApiOperation(value = "新增意见反馈") + @RequiresPermissions("system:feedback:add") + @Log(title = "意见反馈", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysFeedback sysFeedback) + { + sysFeedback.setCreateBy(SecurityUtils.getUsername()); + return toAjax(sysFeedbackService.insertSysFeedback(sysFeedback)); + } + + /** + * 提交意见反馈(H5/小程序端,需登录) + *

+ * 前端通过文件上传接口(/file/upload)先上传截图获取URL, + * 再将多个截图URL以逗号分隔传入 images 字段。 + */ + @ApiOperation(value = "提交意见反馈(H5/小程序端)") + @Log(title = "意见反馈", businessType = BusinessType.INSERT) + @PostMapping("/submit") + public AjaxResult submit(@Validated @RequestBody SysFeedback sysFeedback) + { + sysFeedback.setCreateBy(SecurityUtils.getUsername()); + return toAjax(sysFeedbackService.insertSysFeedback(sysFeedback)); + } + + /** + * 修改意见反馈 + */ + @ApiOperation(value = "修改意见反馈") + @RequiresPermissions("system:feedback:edit") + @Log(title = "意见反馈", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysFeedback sysFeedback) + { + return toAjax(sysFeedbackService.updateSysFeedback(sysFeedback)); + } + + /** + * 回复意见反馈 + */ + @ApiOperation(value = "回复意见反馈") + @RequiresPermissions("system:feedback:reply") + @Log(title = "意见反馈", businessType = BusinessType.UPDATE) + @PutMapping("/reply") + public AjaxResult reply(@RequestBody SysFeedback sysFeedback) + { + return toAjax(sysFeedbackService.replySysFeedback(sysFeedback)); + } + + /** + * 删除意见反馈 + */ + @ApiOperation(value = "删除意见反馈") + @RequiresPermissions("system:feedback:remove") + @Log(title = "意见反馈", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysFeedbackService.deleteSysFeedbackByIds(ids)); + } +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysFeedback.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysFeedback.java new file mode 100644 index 0000000..4485c26 --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysFeedback.java @@ -0,0 +1,97 @@ +package com.intc.system.domain; + +import com.intc.common.core.annotation.Excel; +import com.intc.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 意见反馈对象 sys_feedback + * + * @author intc + * @date 2026-07-12 + */ +@ApiModel("意见反馈对象") +@Data +public class SysFeedback extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 反馈类型(功能建议/问题反馈/数据异常/其他) */ + @ApiModelProperty(value = "反馈类型") + @Excel(name = "反馈类型") + private String feedbackType; + + /** 反馈内容 */ + @ApiModelProperty(value = "反馈内容") + @NotBlank(message = "反馈内容不能为空") + @Size(min = 0, max = 500, message = "反馈内容不能超过500个字符") + @Excel(name = "反馈内容") + private String content; + + /** 联系方式 */ + @ApiModelProperty(value = "联系方式") + @Excel(name = "联系方式") + private String contact; + + /** 截图URL列表,多个用逗号分隔 */ + @ApiModelProperty(value = "截图URL列表,多个用逗号分隔") + private String images; + + /** 反馈来源(小程序/H5/App等) */ + @ApiModelProperty(value = "反馈来源") + @Excel(name = "反馈来源") + private String source; + + /** 状态(0待处理 1已处理 2已回复) */ + @ApiModelProperty(value = "状态") + @Excel(name = "状态") + private String status; + + /** 回复内容 */ + @ApiModelProperty(value = "回复内容") + private String replyContent; + + /** 回复人 */ + @ApiModelProperty(value = "回复人") + private String replyBy; + + /** 回复时间 */ + @ApiModelProperty(value = "回复时间") + private Date replyTime; + + /** 删除标志(0存在 1删除) */ + private String delFlag; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("feedbackType", getFeedbackType()) + .append("content", getContent()) + .append("contact", getContact()) + .append("images", getImages()) + .append("source", getSource()) + .append("status", getStatus()) + .append("replyContent", getReplyContent()) + .append("replyBy", getReplyBy()) + .append("replyTime", getReplyTime()) + .append("createBy", getCreateBy()) + .append("createName", getCreateName()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/dto/SysFeedbackDto.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/dto/SysFeedbackDto.java new file mode 100644 index 0000000..11dcf72 --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/dto/SysFeedbackDto.java @@ -0,0 +1,36 @@ +package com.intc.system.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 意见反馈Dto对象 sys_feedback + * + * @author intc + * @date 2026-07-12 + */ +@ApiModel("意见反馈Dto对象") +@Data +public class SysFeedbackDto implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 反馈类型 */ + @ApiModelProperty(value = "反馈类型") + private String feedbackType; + + /** 状态 */ + @ApiModelProperty(value = "状态") + private String status; + + /** 反馈来源 */ + @ApiModelProperty(value = "反馈来源") + private String source; + + /** 创建者(查询某用户的反馈) */ + @ApiModelProperty(value = "创建者") + private String createBy; +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysFeedbackVo.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysFeedbackVo.java new file mode 100644 index 0000000..d17deaa --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysFeedbackVo.java @@ -0,0 +1,24 @@ +package com.intc.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.intc.system.domain.SysFeedback; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 意见反馈Vo对象 sys_feedback + * + * @author intc + * @date 2026-07-12 + */ +@ApiModel("意见反馈Vo对象") +@Data +public class SysFeedbackVo extends SysFeedback +{ + /** 截图URL数组(由 images 逗号分隔字符串拆分得到) */ + @ApiModelProperty(value = "截图URL数组") + private String[] imageList; +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/mapper/SysFeedbackMapper.java b/intc-modules/intc-system/src/main/java/com/intc/system/mapper/SysFeedbackMapper.java new file mode 100644 index 0000000..ac98cbb --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/mapper/SysFeedbackMapper.java @@ -0,0 +1,63 @@ +package com.intc.system.mapper; + +import java.util.List; +import com.intc.system.domain.SysFeedback; +import com.intc.system.domain.dto.SysFeedbackDto; +import com.intc.system.domain.vo.SysFeedbackVo; + +/** + * 意见反馈 数据层 + * + * @author intc + * @date 2026-07-12 + */ +public interface SysFeedbackMapper +{ + /** + * 查询意见反馈信息 + * + * @param id 意见反馈ID + * @return 意见反馈信息 + */ + public SysFeedbackVo selectSysFeedbackById(Long id); + + /** + * 查询意见反馈列表 + * + * @param sysFeedbackDto 意见反馈查询对象 + * @return 意见反馈集合 + */ + public List selectSysFeedbackList(SysFeedbackDto sysFeedbackDto); + + /** + * 新增意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + public int insertSysFeedback(SysFeedback sysFeedback); + + /** + * 修改意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + public int updateSysFeedback(SysFeedback sysFeedback); + + /** + * 删除意见反馈(逻辑删除) + * + * @param id 意见反馈ID + * @return 结果 + */ + public int deleteSysFeedbackById(Long id); + + /** + * 批量删除意见反馈(逻辑删除) + * + * @param ids 需要删除的意见反馈ID + * @return 结果 + */ + public int deleteSysFeedbackByIds(Long[] ids); +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/service/ISysFeedbackService.java b/intc-modules/intc-system/src/main/java/com/intc/system/service/ISysFeedbackService.java new file mode 100644 index 0000000..b637686 --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/service/ISysFeedbackService.java @@ -0,0 +1,71 @@ +package com.intc.system.service; + +import java.util.List; +import com.intc.system.domain.SysFeedback; +import com.intc.system.domain.dto.SysFeedbackDto; +import com.intc.system.domain.vo.SysFeedbackVo; + +/** + * 意见反馈 服务层 + * + * @author intc + * @date 2026-07-12 + */ +public interface ISysFeedbackService +{ + /** + * 查询意见反馈信息 + * + * @param id 意见反馈ID + * @return 意见反馈信息 + */ + public SysFeedbackVo selectSysFeedbackById(Long id); + + /** + * 查询意见反馈列表 + * + * @param sysFeedbackDto 意见反馈查询对象 + * @return 意见反馈集合 + */ + public List selectSysFeedbackList(SysFeedbackDto sysFeedbackDto); + + /** + * 新增意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + public int insertSysFeedback(SysFeedback sysFeedback); + + /** + * 修改意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + public int updateSysFeedback(SysFeedback sysFeedback); + + /** + * 回复意见反馈 + * + * @param sysFeedback 意见反馈信息(含回复内容) + * @return 结果 + */ + public int replySysFeedback(SysFeedback sysFeedback); + + /** + * 删除意见反馈 + * + * @param id 意见反馈ID + * @return 结果 + */ + public int deleteSysFeedbackById(Long id); + + /** + * 批量删除意见反馈 + * + * @param ids 需要删除的意见反馈ID + * @return 结果 + */ + public int deleteSysFeedbackByIds(Long[] ids); +} diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/service/impl/SysFeedbackServiceImpl.java b/intc-modules/intc-system/src/main/java/com/intc/system/service/impl/SysFeedbackServiceImpl.java new file mode 100644 index 0000000..27d7ff6 --- /dev/null +++ b/intc-modules/intc-system/src/main/java/com/intc/system/service/impl/SysFeedbackServiceImpl.java @@ -0,0 +1,148 @@ +package com.intc.system.service.impl; + +import java.util.Arrays; +import java.util.List; +import javax.annotation.Resource; +import org.springframework.stereotype.Service; +import com.intc.common.core.utils.DateUtils; +import com.intc.common.core.utils.IdWorker; +import com.intc.common.security.utils.SecurityUtils; +import com.intc.system.domain.SysFeedback; +import com.intc.system.domain.dto.SysFeedbackDto; +import com.intc.system.domain.vo.SysFeedbackVo; +import com.intc.system.mapper.SysFeedbackMapper; +import com.intc.system.service.ISysFeedbackService; + +/** + * 意见反馈 服务层实现 + * + * @author intc + * @date 2026-07-12 + */ +@Service +public class SysFeedbackServiceImpl implements ISysFeedbackService +{ + @Resource + private SysFeedbackMapper sysFeedbackMapper; + + /** + * 查询意见反馈信息 + * + * @param id 意见反馈ID + * @return 意见反馈信息 + */ + @Override + public SysFeedbackVo selectSysFeedbackById(Long id) + { + SysFeedbackVo vo = sysFeedbackMapper.selectSysFeedbackById(id); + fillImageList(vo); + return vo; + } + + /** + * 查询意见反馈列表 + * + * @param sysFeedbackDto 意见反馈查询对象 + * @return 意见反馈集合 + */ + @Override + public List selectSysFeedbackList(SysFeedbackDto sysFeedbackDto) + { + List list = sysFeedbackMapper.selectSysFeedbackList(sysFeedbackDto); + for (SysFeedbackVo vo : list) + { + fillImageList(vo); + } + return list; + } + + /** + * 新增意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + @Override + public int insertSysFeedback(SysFeedback sysFeedback) + { + sysFeedback.setId(IdWorker.getId()); + sysFeedback.setCreateTime(DateUtils.getNowDate()); + if (sysFeedback.getStatus() == null || sysFeedback.getStatus().isEmpty()) + { + sysFeedback.setStatus("0"); + } + if (sysFeedback.getDelFlag() == null || sysFeedback.getDelFlag().isEmpty()) + { + sysFeedback.setDelFlag("0"); + } + return sysFeedbackMapper.insertSysFeedback(sysFeedback); + } + + /** + * 修改意见反馈 + * + * @param sysFeedback 意见反馈信息 + * @return 结果 + */ + @Override + public int updateSysFeedback(SysFeedback sysFeedback) + { + sysFeedback.setUpdateBy(SecurityUtils.getUsername()); + sysFeedback.setUpdateTime(DateUtils.getNowDate()); + return sysFeedbackMapper.updateSysFeedback(sysFeedback); + } + + /** + * 回复意见反馈 + * + * @param sysFeedback 意见反馈信息(含回复内容) + * @return 结果 + */ + @Override + public int replySysFeedback(SysFeedback sysFeedback) + { + sysFeedback.setStatus("2"); + sysFeedback.setReplyBy(SecurityUtils.getUsername()); + sysFeedback.setReplyTime(DateUtils.getNowDate()); + sysFeedback.setUpdateBy(SecurityUtils.getUsername()); + sysFeedback.setUpdateTime(DateUtils.getNowDate()); + return sysFeedbackMapper.updateSysFeedback(sysFeedback); + } + + /** + * 删除意见反馈 + * + * @param id 意见反馈ID + * @return 结果 + */ + @Override + public int deleteSysFeedbackById(Long id) + { + return sysFeedbackMapper.deleteSysFeedbackById(id); + } + + /** + * 批量删除意见反馈 + * + * @param ids 需要删除的意见反馈ID + * @return 结果 + */ + @Override + public int deleteSysFeedbackByIds(Long[] ids) + { + return sysFeedbackMapper.deleteSysFeedbackByIds(ids); + } + + /** + * 填充截图URL数组 + * + * @param vo 意见反馈Vo + */ + private void fillImageList(SysFeedbackVo vo) + { + if (vo != null && vo.getImages() != null && !vo.getImages().isEmpty()) + { + vo.setImageList(vo.getImages().split(",")); + } + } +} diff --git a/intc-modules/intc-system/src/main/resources/mapper/system/SysFeedbackMapper.xml b/intc-modules/intc-system/src/main/resources/mapper/system/SysFeedbackMapper.xml new file mode 100644 index 0000000..b38b2e2 --- /dev/null +++ b/intc-modules/intc-system/src/main/resources/mapper/system/SysFeedbackMapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, feedback_type, content, contact, images, source, status, reply_content, reply_by, reply_time, + del_flag, create_by, create_name, create_dept_id, create_time, update_by, update_time, remark + from sys_feedback + where del_flag = '0' + + + + + + + + insert into sys_feedback + + id, + feedback_type, + content, + contact, + images, + source, + status, + reply_content, + reply_by, + reply_time, + create_by, + create_name, + create_dept_id, + create_time, + update_by, + update_time, + remark, + + + #{id}, + #{feedbackType}, + #{content}, + #{contact}, + #{images}, + #{source}, + #{status}, + #{replyContent}, + #{replyBy}, + #{replyTime}, + #{createBy}, + #{createName}, + #{createDeptId}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update sys_feedback + + feedback_type = #{feedbackType}, + content = #{content}, + contact = #{contact}, + images = #{images}, + source = #{source}, + status = #{status}, + reply_content = #{replyContent}, + reply_by = #{replyBy}, + reply_time = #{replyTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + update sys_feedback set del_flag = '1' where id = #{id} + + + + update sys_feedback set del_flag = '1' where id in + + #{id} + + + +