lyhzzz 1 year ago
parent
commit
095d405be2
26 changed files with 936 additions and 2 deletions
  1. 39 0
      README.md
  2. 1 0
      src/main/java/com/fdkankan/manage/common/ResultCode.java
  3. 43 0
      src/main/java/com/fdkankan/manage/common/typehandle/ArrayStringTypeHandler.java
  4. 54 0
      src/main/java/com/fdkankan/manage/common/typehandle/JsonArrayTypeHandler.java
  5. 1 1
      src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java
  6. 48 0
      src/main/java/com/fdkankan/manage/controller/FeedbackController.java
  7. 63 0
      src/main/java/com/fdkankan/manage/controller/FeedbackOptionController.java
  8. 137 0
      src/main/java/com/fdkankan/manage/entity/Feedback.java
  9. 64 0
      src/main/java/com/fdkankan/manage/entity/FeedbackOption.java
  10. 42 0
      src/main/java/com/fdkankan/manage/entity/FeedbackOptionType.java
  11. 1 1
      src/main/java/com/fdkankan/manage/generate/AutoGenerate.java
  12. 26 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackMapper.java
  13. 18 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionMapper.java
  14. 18 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionTypeMapper.java
  15. 32 0
      src/main/java/com/fdkankan/manage/service/IFeedbackOptionService.java
  16. 16 0
      src/main/java/com/fdkankan/manage/service/IFeedbackOptionTypeService.java
  17. 22 0
      src/main/java/com/fdkankan/manage/service/IFeedbackService.java
  18. 95 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionServiceImpl.java
  19. 20 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionTypeServiceImpl.java
  20. 130 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackServiceImpl.java
  21. 8 0
      src/main/java/com/fdkankan/manage/vo/request/FeedbackOptionParam.java
  22. 26 0
      src/main/java/com/fdkankan/manage/vo/request/FeedbackParam.java
  23. 11 0
      src/main/java/com/fdkankan/manage/vo/response/GroupByAvg.java
  24. 11 0
      src/main/resources/mapper/manage/FeedbackMapper.xml
  25. 5 0
      src/main/resources/mapper/manage/FeedbackOptionMapper.xml
  26. 5 0
      src/main/resources/mapper/manage/FeedbackOptionTypeMapper.xml

+ 39 - 0
README.md

@@ -67,3 +67,42 @@
 9.本地版授权
 9.本地版授权
     http://120.25.146.52:3090/project/102/interface/api/cat_1713
     http://120.25.146.52:3090/project/102/interface/api/cat_1713
 ~~~~
 ~~~~
+
+
+所在行业:
+
+智慧城市 Smart City
+文博古建 Museums & Site
+房产营销 Real Estate
+公共安全 Public Security
+消防火调 Fire Investigation
+应急管理 Emergency Management
+装修家装 Home Decoration
+工程建设 Project Construction
+展览展会 Online Exhibition
+国土资源 Land Resources
+其它     Other
+
+硬件产品:
+
+四维深光 4DKanKan Meta
+四维深时 4DKanKan Mega
+四维看见 4DKanKan Minion
+四维看看 4DKanKan KanKan
+无            None
+
+软件产品:
+
+四维看看Pro(App)      4DKanKanPro(App)
+四维看看(App)         4DKanKan(App)
+场景编辑(点云)           Point Cloud Scene Editing Platform
+场景编辑(mesh)        Mesh Scene Editing Platform
+四维看看本地版          4DKanKan Local
+随心装                  AI-Staging
+四维全景                4Dpano
+四维带看                LI-Stream
+消防火调平台            -
+四维现勘平台            -
+四维工地管家
+四维指房宝              -
+无                     None

+ 1 - 0
src/main/java/com/fdkankan/manage/common/ResultCode.java

@@ -85,6 +85,7 @@ public enum ResultCode  {
     SCENE_REBUILD_ERROR2(50066, "原始资源已冻结,重算失败。"),
     SCENE_REBUILD_ERROR2(50066, "原始资源已冻结,重算失败。"),
     CAMERA_AUTHORIZE_ERROR(50067, "相机授权目前不支持四维看看相机类型"),
     CAMERA_AUTHORIZE_ERROR(50067, "相机授权目前不支持四维看看相机类型"),
     CAMERA_AUTHORIZE_TYPE_ERROR(50068, "请更换相同类型的相机"),
     CAMERA_AUTHORIZE_TYPE_ERROR(50068, "请更换相同类型的相机"),
+    FEEDBACK_OPTION_DELETE_ERROR(50069, "数据不存在或者预设数据不可删除"),
 
 
     ;
     ;
 
 

+ 43 - 0
src/main/java/com/fdkankan/manage/common/typehandle/ArrayStringTypeHandler.java

@@ -0,0 +1,43 @@
+package com.fdkankan.manage.common.typehandle;
+
+import cn.hutool.json.JSONUtil;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ *  存储到数据库, 将String数组转换成字符串;
+ *  从数据库获取数据, 将字符串转为LONG数组.
+ */
+@MappedTypes({String[].class})
+@MappedJdbcTypes({JdbcType.VARCHAR})
+public class ArrayStringTypeHandler extends BaseTypeHandler<String[]> {
+    private static String[] l = new String[]{};
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i,
+                                    String[] parameter, JdbcType jdbcType) throws SQLException {
+        ps.setString(i, JSONUtil.toJsonStr(parameter));
+    }
+    @Override
+    public String[] getNullableResult(ResultSet rs, String columnName)
+            throws SQLException {
+        return JSONUtil.parseArray(rs.getString(columnName)).toArray(l);
+    }
+    @Override
+    public String[] getNullableResult(ResultSet rs, int columnIndex)
+            throws SQLException {
+        return JSONUtil.parseArray(rs.getString(columnIndex)).toArray(l);
+    }
+    @Override
+    public String[] getNullableResult(CallableStatement cs, int columnIndex)
+            throws SQLException {
+        return JSONUtil.parseArray(cs.getString(columnIndex)).toArray(l);
+    }
+}
+

+ 54 - 0
src/main/java/com/fdkankan/manage/common/typehandle/JsonArrayTypeHandler.java

@@ -0,0 +1,54 @@
+package com.fdkankan.manage.common.typehandle;
+
+import com.alibaba.fastjson.JSONArray;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ *  存储到数据库, 将JSON数组对象转换成字符串;
+ *  从数据库获取数据, 将字符串转为JSON数组对象.
+ */
+@MappedTypes({JSONArray.class})
+@MappedJdbcTypes({JdbcType.VARCHAR})
+public class JsonArrayTypeHandler extends BaseTypeHandler<JSONArray> {
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, JSONArray parameter,
+                                    JdbcType jdbcType) throws SQLException {
+        ps.setString(i, JSONArray.toJSONString(parameter));
+    }
+    @Override
+    public JSONArray getNullableResult(ResultSet rs, String columnName)
+            throws SQLException {
+        return parseArray(rs.getString(columnName));
+    }
+    @Override
+    public JSONArray getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        return parseArray(rs.getString(columnIndex));
+    }
+    @Override
+    public JSONArray getNullableResult(CallableStatement cs, int columnIndex)
+            throws SQLException {
+        return parseArray(cs.getString(columnIndex));
+    }
+
+    public static JSONArray parseArray(String content) {
+        if(StringUtils.isBlank(content)){
+            return new JSONArray();
+        }
+        try {
+            return JSONArray.parseArray(content);
+        } catch (Exception e) {
+            return new JSONArray();
+        }
+    }
+
+}
+

+ 1 - 1
src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java

@@ -45,7 +45,7 @@ public class SaTokenConfigure {
     public SaServletFilter getSaServletFilter() {
     public SaServletFilter getSaServletFilter() {
         return new SaServletFilter()
         return new SaServletFilter()
                 // 指定 拦截路由 与 放行路由
                 // 指定 拦截路由 与 放行路由
-                .addInclude("/**").addExclude("/**/reMyselfPassword","/**/test/**","/**/inner/**")
+                .addInclude("/**").addExclude("/**/reMyselfPassword","/**/test/**","/**/inner/**","/**/feedback/add")
                 // 认证函数: 每次请求执行
                 // 认证函数: 每次请求执行
                 .setAuth(obj -> {
                 .setAuth(obj -> {
                     // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
                     // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录

+ 48 - 0
src/main/java/com/fdkankan/manage/controller/FeedbackController.java

@@ -0,0 +1,48 @@
+package com.fdkankan.manage.controller;
+
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.Feedback;
+import com.fdkankan.manage.service.IFeedbackService;
+import com.fdkankan.manage.vo.request.FeedbackParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+@RestController
+@RequestMapping("/service/manage/feedback")
+public class FeedbackController {
+
+    @Autowired
+    IFeedbackService feedbackService;
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody FeedbackParam param){
+        return ResultData.ok(feedbackService.pageList(param));
+    }
+
+    @PostMapping("/handle")
+    public ResultData handle(@RequestBody Feedback param){
+        feedbackService.handle(param);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/add")
+    public ResultData add(@RequestBody Feedback param){
+        feedbackService.save(param);
+        return ResultData.ok();
+    }
+
+    @GetMapping("/scoreAug")
+    public ResultData scoreAug(){
+        return ResultData.ok( feedbackService.scoreAug());
+    }
+}
+

+ 63 - 0
src/main/java/com/fdkankan/manage/controller/FeedbackOptionController.java

@@ -0,0 +1,63 @@
+package com.fdkankan.manage.controller;
+
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.fdkankan.manage.httpClient.address.FdkkAddressSource;
+import com.fdkankan.manage.service.IFeedbackOptionService;
+import com.fdkankan.manage.service.IFeedbackOptionTypeService;
+import com.fdkankan.manage.vo.request.FeedbackOptionParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@RestController
+@RequestMapping("/service/manage/feedbackOption")
+public class FeedbackOptionController {
+
+    @Autowired
+    IFeedbackOptionService feedbackOptionService;
+    @Autowired
+    IFeedbackOptionTypeService feedbackOptionTypeService;
+
+    @GetMapping("/getTypeList")
+    public ResultData getTypeList(){
+        return  ResultData.ok(feedbackOptionTypeService.list());
+    }
+
+    @GetMapping("/getAllByTypeId/{typeId}")
+    public ResultData getAllByTypeId(@PathVariable Integer typeId){
+        return ResultData.ok(feedbackOptionService.getAllByTypeId(typeId));
+    }
+    @PostMapping("/list")
+    public  ResultData list(@RequestBody FeedbackOptionParam param){
+        return ResultData.ok(feedbackOptionService.pageList(param));
+    }
+
+    @PostMapping("/add")
+    public ResultData add(@RequestBody FeedbackOption param){
+        feedbackOptionService.add(param);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/update")
+    public ResultData update(@RequestBody FeedbackOption param){
+        feedbackOptionService.updateByEntity(param);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody FeedbackOption param){
+        feedbackOptionService.delete(param);
+        return ResultData.ok();
+    }
+
+}
+

+ 137 - 0
src/main/java/com/fdkankan/manage/entity/Feedback.java

@@ -0,0 +1,137 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.fdkankan.manage.common.typehandle.JsonArrayTypeHandler;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+@Getter
+@Setter
+@TableName(value = "t_feedback",autoResultMap = true)
+public class Feedback implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 问题描述
+     */
+    @TableField("problem_desc")
+    private String problemDesc;
+
+    @TableField(typeHandler= JsonArrayTypeHandler.class)
+    private String problemDescImgs;
+
+    /**
+     * 硬件产品id
+     */
+    @TableField("hardware_option_id")
+    private Integer hardwareOptionId;
+    /**
+     * 软件产品id
+     */
+    @TableField("software_option_id")
+    private Integer softwareOptionId;
+    /**
+     * 所在行业id
+     */
+    @TableField("industry_option_id")
+    private Integer industryOptionId;
+
+    /**
+     * 解决方案
+     */
+    @TableField("solution")
+    private String solution;
+
+    @TableField(typeHandler= JsonArrayTypeHandler.class)
+    private String solutionImgs;
+
+    /**
+     * 姓名
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 联系方式
+     */
+    @TableField("phone")
+    private String phone;
+
+    /**
+     * 地址
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 评分
+     */
+    @TableField("score")
+    private BigDecimal score;
+
+    /**
+     * 评分理由
+     */
+    @TableField("score_reason")
+    private String scoreReason;
+
+    /**
+     * 处理状态 0未处理,1已处理
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 处理结果
+     */
+    @TableField("result")
+    private String result;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+
+    /**
+     * 硬件产品id
+     */
+    @TableField(exist = false)
+    private Object hardwareOption;
+    /**
+     * 软件产品id
+     */
+    @TableField(exist = false)
+    private Object softwareOption;
+    /**
+     * 所在行业id
+     */
+    @TableField(exist = false)
+    private Object industryOption;
+}

+ 64 - 0
src/main/java/com/fdkankan/manage/entity/FeedbackOption.java

@@ -0,0 +1,64 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Getter
+@Setter
+@TableName("t_feedback_option")
+public class FeedbackOption implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name_cn")
+    private String nameCn;
+
+    @TableField("name_en")
+    private String nameEn;
+
+    /**
+     * 0所在行业,1硬件产品,2软件产品
+     */
+    @TableField("type_id")
+    private Integer typeId;
+
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 1系统预设,0自定义添加
+     */
+    @TableField("system")
+    private Integer system;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private String score;
+}

+ 42 - 0
src/main/java/com/fdkankan/manage/entity/FeedbackOptionType.java

@@ -0,0 +1,42 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Getter
+@Setter
+@TableName("t_feedback_option_type")
+public class FeedbackOptionType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/manage/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
         String path =System.getProperty("user.dir");
 
 
         generate(path,"manage", getTables(new String[]{
         generate(path,"manage", getTables(new String[]{
-                "t_camera_wifi_prefix"
+                "t_feedback"
         }));
         }));
 
 
 //        generate(path,"goods", getTables(new String[]{
 //        generate(path,"goods", getTables(new String[]{

+ 26 - 0
src/main/java/com/fdkankan/manage/mapper/IFeedbackMapper.java

@@ -0,0 +1,26 @@
+package com.fdkankan.manage.mapper;
+
+import cn.hutool.db.Page;
+import com.fdkankan.manage.entity.Feedback;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.manage.vo.request.FeedbackParam;
+import com.fdkankan.manage.vo.response.GroupByAvg;
+import com.fdkankan.manage.vo.response.GroupByCount;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+@Mapper
+public interface IFeedbackMapper extends BaseMapper<Feedback> {
+
+    List<GroupByAvg> scoreAugSoftware();
+    List<GroupByAvg> scoreAugHardware();
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Mapper
+public interface IFeedbackOptionMapper extends BaseMapper<FeedbackOption> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionTypeMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.FeedbackOptionType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Mapper
+public interface IFeedbackOptionTypeMapper extends BaseMapper<FeedbackOptionType> {
+
+}

+ 32 - 0
src/main/java/com/fdkankan/manage/service/IFeedbackOptionService.java

@@ -0,0 +1,32 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.manage.vo.request.FeedbackOptionParam;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+public interface IFeedbackOptionService extends IService<FeedbackOption> {
+
+    Object pageList(FeedbackOptionParam param);
+
+    void add(FeedbackOption feedbackOption);
+
+    void updateByEntity(FeedbackOption feedbackOption);
+
+    void delete(FeedbackOption param);
+
+    List<FeedbackOption> getAllByTypeId(Integer typeId);
+
+    HashMap<Integer, FeedbackOption> getMapByIds(HashSet<Integer> optionIds);
+}

+ 16 - 0
src/main/java/com/fdkankan/manage/service/IFeedbackOptionTypeService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.FeedbackOptionType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+public interface IFeedbackOptionTypeService extends IService<FeedbackOptionType> {
+
+}

+ 22 - 0
src/main/java/com/fdkankan/manage/service/IFeedbackService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.Feedback;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.manage.vo.request.FeedbackParam;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+public interface IFeedbackService extends IService<Feedback> {
+
+    Object pageList(FeedbackParam param);
+
+    void handle(Feedback param);
+
+    Object scoreAug();
+}

+ 95 - 0
src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionServiceImpl.java

@@ -0,0 +1,95 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.manage.common.PageInfo;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.mapper.IFeedbackOptionMapper;
+import com.fdkankan.manage.service.IFeedbackOptionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.manage.vo.request.FeedbackOptionParam;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.sql.BatchUpdateException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Service
+public class FeedbackOptionServiceImpl extends ServiceImpl<IFeedbackOptionMapper, FeedbackOption> implements IFeedbackOptionService {
+
+    @Override
+    public Object pageList(FeedbackOptionParam param) {
+        LambdaQueryWrapper<FeedbackOption> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(FeedbackOption::getTypeId,param.getTypeId());
+        wrapper.orderByAsc(FeedbackOption::getId);
+        Page<FeedbackOption> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public void add(FeedbackOption feedbackOption) {
+        if(feedbackOption.getTypeId() == null || StringUtils.isBlank(feedbackOption.getNameCn()) || StringUtils.isBlank(feedbackOption.getNameEn())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        this.save(feedbackOption);
+    }
+
+    @Override
+    public void updateByEntity(FeedbackOption feedbackOption) {
+        if(feedbackOption.getId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        LambdaUpdateWrapper<FeedbackOption> updateWrapper = new LambdaUpdateWrapper<>();
+        if(StringUtils.isNotBlank(feedbackOption.getNameCn())){
+            updateWrapper.set(FeedbackOption::getNameEn,feedbackOption.getNameCn());
+        }
+        if(StringUtils.isNotBlank(feedbackOption.getNameEn())){
+            updateWrapper.set(FeedbackOption::getNameEn,feedbackOption.getNameEn());
+        }
+        updateWrapper.eq(FeedbackOption::getId,feedbackOption.getId());
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public void delete(FeedbackOption param) {
+        if(param.getId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        FeedbackOption feedbackOption = this.getById(param.getId());
+        if(feedbackOption == null || feedbackOption.getSystem() == 1){
+            throw new BusinessException(ResultCode.FEEDBACK_OPTION_DELETE_ERROR);
+        }
+        this.removeById(param.getId());
+    }
+
+    @Override
+    public List<FeedbackOption> getAllByTypeId(Integer typeId) {
+        LambdaQueryWrapper<FeedbackOption> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(FeedbackOption::getTypeId,typeId);
+        return list(wrapper);
+    }
+
+    @Override
+    public HashMap<Integer, FeedbackOption> getMapByIds(HashSet<Integer> optionIds) {
+        HashMap<Integer, FeedbackOption> map = new HashMap<>();
+        if(ObjectUtils.isNotEmpty(optionIds)){
+            List<FeedbackOption> feedbackOptions = this.listByIds(optionIds);
+            feedbackOptions.forEach(e -> map.put(e.getId(),e));
+        }
+        return map;
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionTypeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.service.impl;
+
+import com.fdkankan.manage.entity.FeedbackOptionType;
+import com.fdkankan.manage.mapper.IFeedbackOptionTypeMapper;
+import com.fdkankan.manage.service.IFeedbackOptionTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-23
+ */
+@Service
+public class FeedbackOptionTypeServiceImpl extends ServiceImpl<IFeedbackOptionTypeMapper, FeedbackOptionType> implements IFeedbackOptionTypeService {
+
+}

+ 130 - 0
src/main/java/com/fdkankan/manage/service/impl/FeedbackServiceImpl.java

@@ -0,0 +1,130 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.manage.common.PageInfo;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.entity.Feedback;
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.mapper.IFeedbackMapper;
+import com.fdkankan.manage.service.IFeedbackOptionService;
+import com.fdkankan.manage.service.IFeedbackService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.manage.vo.request.FeedbackParam;
+import com.fdkankan.manage.vo.response.GroupByAvg;
+import com.fdkankan.manage.vo.response.GroupByCount;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+@Service
+public class FeedbackServiceImpl extends ServiceImpl<IFeedbackMapper, Feedback> implements IFeedbackService {
+
+    @Autowired
+    IFeedbackOptionService feedbackOptionService;
+
+
+    @Override
+    public Object pageList(FeedbackParam param) {
+        LambdaQueryWrapper<Feedback> wrapper = new LambdaQueryWrapper<>();
+        if(param.getHardwareOptionId() != null){
+            wrapper.eq(Feedback::getHardwareOptionId,param.getHardwareOptionId());
+        }
+        if(param.getSoftwareOptionId() != null){
+            wrapper.eq(Feedback::getSoftwareOptionId,param.getSoftwareOptionId());
+        }
+        if(param.getIndustryOptionId() != null){
+            wrapper.eq(Feedback::getIndustryOptionId,param.getIndustryOptionId());
+        }
+        if(param.getStatus() != null){
+            wrapper.eq(Feedback::getStatus,param.getStatus());
+        }
+        Page<Feedback> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        HashSet<Integer> optionIds = new HashSet<>();
+        Set<Integer> collect = page.getRecords().stream().map(Feedback::getHardwareOptionId).collect(Collectors.toSet());
+        Set<Integer> collect1 = page.getRecords().stream().map(Feedback::getSoftwareOptionId).collect(Collectors.toSet());
+        Set<Integer> collect2 = page.getRecords().stream().map(Feedback::getIndustryOptionId).collect(Collectors.toSet());
+        optionIds.addAll(collect);
+        optionIds.addAll(collect1);
+        optionIds.addAll(collect2);
+        HashMap<Integer, FeedbackOption> map = feedbackOptionService.getMapByIds(optionIds);
+        for (Feedback record : page.getRecords()) {
+            if(record.getHardwareOptionId()!=null && map.get(record.getHardwareOptionId())!= null){
+                record.setHardwareOption(map.get(record.getHardwareOptionId()));
+            }
+            if(record.getSoftwareOptionId()!=null && map.get(record.getSoftwareOptionId())!= null){
+                record.setSoftwareOption(map.get(record.getSoftwareOptionId()));
+            }
+            if(record.getIndustryOptionId()!=null && map.get(record.getIndustryOptionId())!= null){
+                record.setIndustryOption(map.get(record.getIndustryOptionId()));
+            }
+        }
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public void handle(Feedback param) {
+        if(param.getId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        LambdaUpdateWrapper<Feedback> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(Feedback::getId,param.getId());
+        if(StringUtils.isNotBlank(param.getResult())){
+            wrapper.set(Feedback::getResult,param.getResult());
+        }
+        wrapper.set(Feedback::getStatus,1);
+        this.update(wrapper);
+    }
+
+    @Override
+    public Object scoreAug() {
+
+        HashMap<Integer,BigDecimal> map = new HashMap<>();
+        List<GroupByAvg> list = this.getBaseMapper().scoreAugHardware();
+        List<GroupByAvg> list2 = this.getBaseMapper().scoreAugSoftware();
+        list.forEach(e ->map.put(e.getId(),e.getAvg()));
+        list2.forEach(e ->map.put(e.getId(),e.getAvg()));
+
+        List<FeedbackOption> options = feedbackOptionService.list();
+
+        List<FeedbackOption> hardwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList());
+        List<FeedbackOption> softwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList());
+
+        setScore(hardwareList,map);
+        setScore(softwareList,map);
+        HashMap<String,Object> result = new HashMap<>();
+        result.put("hardware",hardwareList);
+        result.put("software",softwareList);
+        return result;
+    }
+
+    private void setScore(List<FeedbackOption> list,HashMap<Integer,BigDecimal> map){
+        for (FeedbackOption feedbackOption : list) {
+            BigDecimal value = map.get(feedbackOption.getTypeId());
+            if(value == null){
+                feedbackOption.setScore("暂无评分");
+                continue;
+            }
+            BigDecimal bigDecimal = value.setScale(1, RoundingMode.HALF_UP);
+            feedbackOption.setScore(bigDecimal.toString());
+        }
+    }
+}

+ 8 - 0
src/main/java/com/fdkankan/manage/vo/request/FeedbackOptionParam.java

@@ -0,0 +1,8 @@
+package com.fdkankan.manage.vo.request;
+
+import lombok.Data;
+
+@Data
+public class FeedbackOptionParam extends RequestBase{
+    private Integer typeId = 1;
+}

+ 26 - 0
src/main/java/com/fdkankan/manage/vo/request/FeedbackParam.java

@@ -0,0 +1,26 @@
+package com.fdkankan.manage.vo.request;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+@Data
+public class FeedbackParam extends RequestBase{
+
+    /**
+     * 硬件产品id
+     */
+    private Integer hardwareOptionId;
+    /**
+     * 软件产品id
+     */
+    private Integer softwareOptionId;
+    /**
+     * 所在行业id
+     */
+    private Integer industryOptionId;
+
+    /**
+     * 处理状态 0未处理,1已处理
+     */
+    private Integer status;
+}

+ 11 - 0
src/main/java/com/fdkankan/manage/vo/response/GroupByAvg.java

@@ -0,0 +1,11 @@
+package com.fdkankan.manage.vo.response;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GroupByAvg {
+    private Integer id;
+    private BigDecimal avg;
+}

+ 11 - 0
src/main/resources/mapper/manage/FeedbackMapper.xml

@@ -0,0 +1,11 @@
+<?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.fdkankan.manage.mapper.IFeedbackMapper">
+
+    <select id="scoreAugHardware" resultType="com.fdkankan.manage.vo.response.GroupByAvg">
+        select hardware_option_id as id ,avg(score) as count from t_feedback group by hardware_option_id
+    </select>
+    <select id="scoreAugSoftware" resultType="com.fdkankan.manage.vo.response.GroupByAvg">
+        select software_option_id as id ,avg(score) as count  from t_feedback group by software_option_id
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/manage/FeedbackOptionMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.manage.mapper.IFeedbackOptionMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/manage/FeedbackOptionTypeMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.manage.mapper.IFeedbackOptionTypeMapper">
+
+</mapper>