Browse Source

Merge branch 'test'

lyhzzz 1 năm trước cách đây
mục cha
commit
26f60137c7
41 tập tin đã thay đổi với 1362 bổ sung37 xóa
  1. 39 0
      README.md
  2. 8 6
      src/main/java/com/fdkankan/manage/aop/VisitLogInterceptor.java
  3. 4 0
      src/main/java/com/fdkankan/manage/common/CacheUtil.java
  4. 3 0
      src/main/java/com/fdkankan/manage/common/RedisKeyUtil.java
  5. 1 0
      src/main/java/com/fdkankan/manage/common/ResultCode.java
  6. 43 0
      src/main/java/com/fdkankan/manage/common/typehandle/ArrayStringTypeHandler.java
  7. 54 0
      src/main/java/com/fdkankan/manage/common/typehandle/JsonArrayTypeHandler.java
  8. 1 1
      src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java
  9. 1 1
      src/main/java/com/fdkankan/manage/controller/CommonController.java
  10. 51 0
      src/main/java/com/fdkankan/manage/controller/FeedbackController.java
  11. 59 0
      src/main/java/com/fdkankan/manage/controller/FeedbackOptionController.java
  12. 46 0
      src/main/java/com/fdkankan/manage/controller/h5/FeedbackH5Controller.java
  13. 138 0
      src/main/java/com/fdkankan/manage/entity/Feedback.java
  14. 65 0
      src/main/java/com/fdkankan/manage/entity/FeedbackOption.java
  15. 42 0
      src/main/java/com/fdkankan/manage/entity/FeedbackOptionType.java
  16. 1 1
      src/main/java/com/fdkankan/manage/generate/AutoGenerate.java
  17. 4 0
      src/main/java/com/fdkankan/manage/httpClient/service/LaserService.java
  18. 26 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackMapper.java
  19. 18 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionMapper.java
  20. 18 0
      src/main/java/com/fdkankan/manage/mapper/IFeedbackOptionTypeMapper.java
  21. 1 1
      src/main/java/com/fdkankan/manage/service/ICommonService.java
  22. 32 0
      src/main/java/com/fdkankan/manage/service/IFeedbackOptionService.java
  23. 16 0
      src/main/java/com/fdkankan/manage/service/IFeedbackOptionTypeService.java
  24. 29 0
      src/main/java/com/fdkankan/manage/service/IFeedbackService.java
  25. 21 12
      src/main/java/com/fdkankan/manage/service/impl/CommonServiceImpl.java
  26. 95 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionServiceImpl.java
  27. 20 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackOptionTypeServiceImpl.java
  28. 205 0
      src/main/java/com/fdkankan/manage/service/impl/FeedbackServiceImpl.java
  29. 5 2
      src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java
  30. 1 1
      src/main/java/com/fdkankan/manage/service/impl/SceneResourceCameraServiceImpl.java
  31. 9 0
      src/main/java/com/fdkankan/manage/service/impl/UserIncrementServiceImpl.java
  32. 28 12
      src/main/java/com/fdkankan/manage/util/ProvinceUtils.java
  33. 8 0
      src/main/java/com/fdkankan/manage/vo/request/FeedbackOptionParam.java
  34. 26 0
      src/main/java/com/fdkankan/manage/vo/request/FeedbackParam.java
  35. 192 0
      src/main/java/com/fdkankan/manage/vo/response/FeedbackVo.java
  36. 11 0
      src/main/java/com/fdkankan/manage/vo/response/GroupByAvg.java
  37. 16 0
      src/main/java/com/fdkankan/manage/vo/response/IpAddressVo.java
  38. 4 0
      src/main/java/com/fdkankan/manage/vo/response/SceneVo.java
  39. 11 0
      src/main/resources/mapper/manage/FeedbackMapper.xml
  40. 5 0
      src/main/resources/mapper/manage/FeedbackOptionMapper.xml
  41. 5 0
      src/main/resources/mapper/manage/FeedbackOptionTypeMapper.xml

+ 39 - 0
README.md

@@ -67,3 +67,42 @@
 9.本地版授权
     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

+ 8 - 6
src/main/java/com/fdkankan/manage/aop/VisitLogInterceptor.java

@@ -101,12 +101,14 @@ public class VisitLogInterceptor {
 			 nickName = (String)StpUtil.getExtra("nickName");
 		}catch (Exception e){
 			e.printStackTrace();
-			JSONObject paramObj = JSONObject.parseObject(params);
-			userName = paramObj.getString("userName");
-			SysUser sysUser = userService.getByUserName(userName);
-			if(sysUser != null){
-				userId = sysUser.getId();
-				nickName = sysUser.getNickName();
+			if(uri.contains("/login")){
+				JSONObject paramObj = JSONObject.parseObject(params);
+				userName = paramObj.getString("userName");
+				SysUser sysUser = userService.getByUserName(userName);
+				if(sysUser != null){
+					userId = sysUser.getId();
+					nickName = sysUser.getNickName();
+				}
 			}
 		}
 		if("GET".equals(method)){

+ 4 - 0
src/main/java/com/fdkankan/manage/common/CacheUtil.java

@@ -1,6 +1,7 @@
 package com.fdkankan.manage.common;
 
 import com.fdkankan.manage.vo.request.AgentNewLogParam;
+import com.fdkankan.manage.vo.request.FeedbackParam;
 import com.fdkankan.manage.vo.request.OrderParam;
 
 public class CacheUtil {
@@ -14,5 +15,8 @@ public class CacheUtil {
     public static String laserRegEnv;
     public static OrderParam orderParam = new OrderParam();
     public static AgentNewLogParam agentParam = new AgentNewLogParam();
+    public static FeedbackParam feedbackParam = new FeedbackParam();
+
+
 
 }

+ 3 - 0
src/main/java/com/fdkankan/manage/common/RedisKeyUtil.java

@@ -14,5 +14,8 @@ public class RedisKeyUtil {
     public static final String loginToken= "manage:login:token:%s";
     public static final String SCENE_COOPERATION_NUM_USERID = "scene:cooperation:num:userId";
 
+    public static final String ipAddress= "manage:ip_address:%s";
+
+
 
 }

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

@@ -85,6 +85,7 @@ public enum ResultCode  {
     SCENE_REBUILD_ERROR2(50066, "原始资源已冻结,重算失败。"),
     CAMERA_AUTHORIZE_ERROR(50067, "相机授权目前不支持四维看看相机类型"),
     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() {
         return new SaServletFilter()
                 // 指定 拦截路由 与 放行路由
-                .addInclude("/**").addExclude("/**/reMyselfPassword","/**/test/**","/**/inner/**")
+                .addInclude("/**").addExclude("/**/reMyselfPassword","/**/test/**","/**/inner/**","/**/feedback/h5/**","/**/common/**")
                 // 认证函数: 每次请求执行
                 .setAuth(obj -> {
                     // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录

+ 1 - 1
src/main/java/com/fdkankan/manage/controller/CommonController.java

@@ -33,7 +33,7 @@ public class CommonController {
     @RequestMapping(value = "/upload/files", method = RequestMethod.POST)
     public ResultData uploads(
         @RequestParam(value = "file") MultipartFile file) throws Exception {
-        return commonService.uploadFile(file);
+        return ResultData.ok(commonService.uploadFile(file));
     }
 
 }

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

@@ -0,0 +1,51 @@
+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.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+@RestController
+@RequestMapping("/service/manage/feedback")
+public class FeedbackController extends BaseController{
+
+    @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();
+    }
+
+
+    @GetMapping("/scoreAug")
+    public ResultData scoreAug(){
+        return ResultData.ok( feedbackService.scoreAug());
+    }
+
+    @GetMapping("/export")
+    public void export(){
+        feedbackService.export(request,response);
+    }
+}
+

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

@@ -0,0 +1,59 @@
+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());
+    }
+
+    @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();
+    }
+
+}
+

+ 46 - 0
src/main/java/com/fdkankan/manage/controller/h5/FeedbackH5Controller.java

@@ -0,0 +1,46 @@
+package com.fdkankan.manage.controller.h5;
+
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.controller.BaseController;
+import com.fdkankan.manage.entity.Feedback;
+import com.fdkankan.manage.service.IFeedbackOptionService;
+import com.fdkankan.manage.service.IFeedbackService;
+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/h5")
+public class FeedbackH5Controller extends BaseController {
+
+    @Autowired
+    IFeedbackService feedbackService;
+    @Autowired
+    IFeedbackOptionService feedbackOptionService;
+
+
+    @PostMapping("/add")
+    public ResultData add(@RequestBody Feedback param){
+        feedbackService.save(param);
+        return ResultData.ok();
+    }
+
+    @GetMapping("/getDefaultAddress")
+    public ResultData getDefaultAddress(){
+        return ResultData.ok(feedbackService.getDefaultAddress(request));
+    }
+
+    @GetMapping("/getAllByTypeId/{typeId}")
+    public ResultData getAllByTypeId(@PathVariable Integer typeId){
+        return ResultData.ok(feedbackOptionService.getAllByTypeId(typeId));
+    }
+}
+

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

@@ -0,0 +1,138 @@
+package com.fdkankan.manage.entity;
+
+import com.alibaba.fastjson.JSONArray;
+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 JSONArray 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 JSONArray 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;
+}

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

@@ -0,0 +1,65 @@
+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 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("is_system")
+    private Integer isSystem;
+
+    @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 BigDecimal 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");
 
         generate(path,"manage", getTables(new String[]{
-                "t_camera_wifi_prefix"
+                "t_feedback"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 4 - 0
src/main/java/com/fdkankan/manage/httpClient/service/LaserService.java

@@ -109,6 +109,10 @@ public class LaserService {
                 }
                 this.getLaserSceneGps(vo);
                 vo.setAddressComponent(commonService.getAddressComponent(vo.getGps()));
+
+                if( vo.getMixture() == 0 && vo.getLocation() != null && vo.getLocation().equals(6)){
+                    vo.setShootCount(0);
+                }
                 sceneVoList.add(vo);
             }
 

+ 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> {
+
+}

+ 1 - 1
src/main/java/com/fdkankan/manage/service/ICommonService.java

@@ -16,7 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
  **/
 public interface ICommonService {
 
-    ResultData uploadFile(MultipartFile file) throws IOException;
+    String uploadFile(MultipartFile file) throws IOException;
 
 
     AddressComponent getAddressComponent(String gps);

+ 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> {
+
+}

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

@@ -0,0 +1,29 @@
+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;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-24
+ */
+public interface IFeedbackService extends IService<Feedback> {
+
+    Object pageList(FeedbackParam param);
+
+    void handle(Feedback param);
+
+    Object scoreAug();
+
+    Object getDefaultAddress(HttpServletRequest request);
+
+    void export(HttpServletRequest request, HttpServletResponse response);
+}

+ 21 - 12
src/main/java/com/fdkankan/manage/service/impl/CommonServiceImpl.java

@@ -4,9 +4,11 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.manage.common.OssPath;
 import com.fdkankan.manage.common.RedisKeyUtil;
+import com.fdkankan.manage.common.ResultCode;
 import com.fdkankan.manage.common.ResultData;
 import com.fdkankan.common.util.DateExtUtil;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.service.ICommonService;
 import java.io.File;
 import java.io.IOException;
@@ -44,18 +46,25 @@ public class CommonServiceImpl implements ICommonService {
     RedisUtil redisUtil;
 
     @Override
-    public ResultData uploadFile(MultipartFile file) throws IOException {
-        String uuid = UUID.randomUUID().toString();
-        String originalFilename = file.getOriginalFilename();
-        String  extName = originalFilename.substring(originalFilename.lastIndexOf("."));
-        String ossPath = String.format(OssPath.MANAGE_FILE_PATH, DateUtil.format(Calendar.getInstance()
-            .getTime(), DateExtUtil.dateStyle6), uuid + extName);
-        File tempFile = File.createTempFile(uuid ,extName);
-        file.transferTo(tempFile);
-        fYunFileServiceInterface.uploadFile(tempFile.getPath(), ossPath);
-        tempFile.deleteOnExit();
-        String url = this.ossUrlPrefix + ossPath;
-        return ResultData.ok(url);
+    public String uploadFile(MultipartFile file) throws IOException {
+        File tempFile = null;
+        try {
+            String uuid = UUID.randomUUID().toString();
+            String originalFilename = file.getOriginalFilename();
+            String  extName = originalFilename.substring(originalFilename.lastIndexOf("."));
+            String ossPath = String.format(OssPath.MANAGE_FILE_PATH, DateUtil.format(Calendar.getInstance()
+                    .getTime(), DateExtUtil.dateStyle6), uuid + extName);
+            tempFile = File.createTempFile(uuid ,extName);
+            file.transferTo(tempFile);
+            fYunFileServiceInterface.uploadFile(tempFile.getPath(), ossPath);
+            return this.ossUrlPrefix + ossPath;
+        }catch (Exception e){
+            throw new BusinessException(ResultCode.UPLOAD_FILE_ERROR);
+        }finally {
+            if(tempFile!= null){
+                tempFile.delete();
+            }
+        }
 
     }
 

+ 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::getNameCn,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.getIsSystem() == 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 {
+
+}

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

@@ -0,0 +1,205 @@
+package com.fdkankan.manage.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.extra.servlet.ServletUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.fastjson.JSONObject;
+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.CacheUtil;
+import com.fdkankan.manage.common.PageInfo;
+import com.fdkankan.manage.common.RedisKeyUtil;
+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.IExcelService;
+import com.fdkankan.manage.service.IFeedbackOptionService;
+import com.fdkankan.manage.service.IFeedbackService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.manage.util.ProvinceUtils;
+import com.fdkankan.manage.vo.request.FeedbackParam;
+import com.fdkankan.manage.vo.request.OrderParam;
+import com.fdkankan.manage.vo.response.DownOrderVo;
+import com.fdkankan.manage.vo.response.FeedbackVo;
+import com.fdkankan.manage.vo.response.GroupByAvg;
+import com.fdkankan.manage.vo.response.IpAddressVo;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+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) {
+        CacheUtil.feedbackParam = param;
+        return PageInfo.PageInfo(this.pageListByParam(param));
+    }
+
+    private  Page<FeedbackVo> pageListByParam(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());
+        }
+        wrapper.orderByDesc(Feedback::getId);
+        List<FeedbackVo> listVo = new ArrayList<>();
+        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()));
+            }
+            FeedbackVo feedbackVo = new FeedbackVo();
+            BeanUtil.copyProperties(record,feedbackVo);
+            listVo.add(feedbackVo);
+        }
+
+        Page<FeedbackVo> voPage = new Page<>(param.getPageNum(),param.getPageSize());
+        voPage.setRecords(listVo);
+        voPage.setTotal(page.getTotal());
+        return voPage;
+    }
+
+    @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.getAvgCount()));
+        list2.forEach(e ->map.put(e.getId(),e.getAvgCount()));
+
+        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(3)).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.getId());
+            if(value == null ){
+                feedbackOption.setScore(null);
+                continue;
+            }
+            BigDecimal bigDecimal = value.setScale(1, RoundingMode.HALF_UP);
+            feedbackOption.setScore(bigDecimal);
+        }
+    }
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public Object getDefaultAddress(HttpServletRequest request) {
+        //获取ip地址
+        String clientIP = ServletUtil.getClientIP(request);
+        if(StringUtils.isBlank(clientIP)){
+            return new IpAddressVo();
+        }
+        String redisKey = String.format(RedisKeyUtil.ipAddress,clientIP);
+        if(redisUtil.hasKey(redisKey)){
+            return JSONObject.parseObject(redisUtil.get(redisKey));
+        }
+        IpAddressVo addressByIp = ProvinceUtils.getAddressByIp(clientIP);
+        redisUtil.set(redisKey,JSONObject.toJSONString(addressByIp));
+        return  addressByIp;
+    }
+
+    @Autowired
+    IExcelService excelService;
+
+    @Override
+    public void export(HttpServletRequest req, HttpServletResponse resp) {
+        FeedbackParam feedbackParam = CacheUtil.feedbackParam;
+        feedbackParam.setPageNum(1);
+        feedbackParam.setPageSize(5000);
+        Page<FeedbackVo> page = this.pageListByParam(feedbackParam);
+
+        ExcelWriter excelWriter = null;
+        try {
+            excelWriter = EasyExcel.write(resp.getOutputStream(),FeedbackVo.class).build();
+            excelService.commonExport(req,resp,"用户反馈列表",page.getRecords(),excelWriter);
+            while (page.hasNext()){
+                feedbackParam.setPageNum(feedbackParam.getPageNum()+1);
+                page = this.pageListByParam(feedbackParam);
+                if(page.getRecords().size() >0){
+                    excelService.commonExport(req,resp,"用户反馈列表",page.getRecords(),excelWriter);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if(excelWriter !=null){
+                excelWriter.finish();
+            }
+        }
+    }
+}

+ 5 - 2
src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java

@@ -561,8 +561,11 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
         HashMap<String, Object> param = new HashMap<>();
         param.put("num",sceneNum);
-        fdKKClient.copyScene(param,"m_a_n_a_g_e");
-
+        JSONObject jsonObject = fdKKClient.copyScene(param, "m_a_n_a_g_e");
+        Integer code = jsonObject.getInteger("code");
+        if(code != 0){
+            throw new BusinessException(jsonObject.getInteger("code"),jsonObject.getString("message"));
+        }
     }
 
     @Override

+ 1 - 1
src/main/java/com/fdkankan/manage/service/impl/SceneResourceCameraServiceImpl.java

@@ -52,8 +52,8 @@ public class SceneResourceCameraServiceImpl extends ServiceImpl<ISceneResourceCa
 
     @Override
     public void setCooperationUser(CameraDetail cameraDetail, String num) {
+        sceneCooperationService.delByNum(num);
         if(cameraDetail.getCooperationUser() == null){
-            sceneCooperationService.delByNum(num);
             return;
         }
         List<SceneResourceCamera> list = this.getByCameraId(cameraDetail.getCameraId());

+ 9 - 0
src/main/java/com/fdkankan/manage/service/impl/UserIncrementServiceImpl.java

@@ -222,6 +222,15 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
             wrapper.eq(User::getId,user.getId());
             wrapper.setSql("download_num_total = download_num_total + " +  param.getCount() * incrementType.getDownloadNum());
             userService.update(wrapper);
+
+            Set<Long> ids = userIncrementList.stream().map(UserIncrement::getId).collect(Collectors.toSet());
+            List<UserIncrement> userIncrements = this.listByIds(ids);
+            Set<Long> cameraIds = userIncrements.stream().map(UserIncrement::getCameraId).filter(Objects::nonNull).collect(Collectors.toSet());
+            for (Long cameraId : cameraIds) {
+                if(cameraId != null){
+                    sceneProService.lockOrUnLockBySpace(cameraId);
+                }
+            }
         }
     }
 

+ 28 - 12
src/main/java/com/fdkankan/manage/util/ProvinceUtils.java

@@ -3,8 +3,12 @@ import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.vo.response.AddressComponent;
+import com.fdkankan.manage.vo.response.IpAddressVo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URL;
@@ -15,18 +19,6 @@ import java.util.Objects;
 public class ProvinceUtils {
 
 
-    public static void main(String[] args) {
-        //{
-        //  "altitude": 22.34735107421875,
-        //  "horizontalAccuracy": 4.9379683,
-        //  "latitude": 22.36707762,
-        //  "longitude": 113.59580565,
-        //  "timestamp": 1638779141699,
-        //  "verticalAccuracy": 7.5588307
-        //}
-        AddressComponent addressComponent = pointsToLocationsAll("113.595673,22.36707762");
-        System.out.println(addressComponent);
-    }
 
     private static String getProvince(String log, String lat ){
         //lat 小  log  大
@@ -112,4 +104,28 @@ public class ProvinceUtils {
         return null;
     }
 
+
+    public static String getAddressByIpHost ="https://restapi.amap.com/v3/ip?ip=%s&key=%s";
+
+    public static IpAddressVo getAddressByIp(String ip){
+        //GPS坐标转为高德地图坐标
+        try {
+            String s = HttpUtil.get(String.format(getAddressByIpHost,ip,amapKey));
+            JSONObject jsonObject = JSON.parseObject(s);
+            IpAddressVo javaObject = JSONObject.toJavaObject(jsonObject, IpAddressVo.class);
+            if(StringUtils.isNotBlank(javaObject.getProvince())){
+                javaObject.setCountry("中国");
+                javaObject.setCountryEn("China");
+            }
+            return javaObject;
+        }catch (Exception e){
+            log.info("ip地址转换地址失败:{},{}",ip,e);
+        }
+       return new IpAddressVo();
+    }
+
+    public static void main(String[] args) {
+        System.out.println( getAddressByIp("127"));
+    }
+
 }

+ 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;
+}

+ 192 - 0
src/main/java/com/fdkankan/manage/vo/response/FeedbackVo.java

@@ -0,0 +1,192 @@
+package com.fdkankan.manage.vo.response;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fdkankan.manage.common.typehandle.JsonArrayTypeHandler;
+import com.fdkankan.manage.entity.FeedbackOption;
+import com.fdkankan.manage.util.Dateutils;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Date;
+
+@Data
+public class FeedbackVo {
+
+    @ExcelIgnore
+    private Integer id;
+
+    /**
+     * 硬件产品id
+     */
+    @ExcelIgnore
+    private Integer hardwareOptionId;
+    /**
+     * 软件产品id
+     */
+    @ExcelIgnore
+    private Integer softwareOptionId;
+    /**
+     * 所在行业id
+     */
+    @ExcelIgnore
+    private Integer industryOptionId;
+
+    @ExcelIgnore
+    private JSONArray problemDescImgs;
+
+    @ExcelIgnore
+    private JSONArray solutionImgs;
+
+    /**
+     * 硬件产品id
+     */
+    @ExcelIgnore
+    private FeedbackOption hardwareOption;
+    /**
+     * 软件产品id
+     */
+    @ExcelIgnore
+    private FeedbackOption softwareOption;
+    /**
+     * 所在行业id
+     */
+    @ExcelIgnore
+    private FeedbackOption industryOption;
+
+    /**
+     * 问题描述
+     */
+    @ExcelProperty("问题描述")
+    private String problemDesc;
+
+    /**
+     * 硬件产品id
+     */
+    @ExcelProperty("硬件产品")
+    private String hardwareOptionName;
+    /**
+     * 软件产品id
+     */
+    @ExcelProperty("软件产品")
+    private String softwareOptionName;
+    /**
+     * 所在行业id
+     */
+    @ExcelProperty("所在行业")
+    private String industryOptionName;
+
+    /**
+     * 解决方案
+     */
+    @ExcelProperty("期望解决方案")
+    private String solution;
+
+
+    /**
+     * 姓名
+     */
+    @ExcelProperty("姓名")
+    private String nickName;
+
+    /**
+     * 联系方式
+     */
+    @ExcelProperty("联系方式")
+    private String phone;
+
+    /**
+     * 地址
+     */
+    @ExcelProperty("国家和地区")
+    private String address;
+
+    /**
+     * 评分
+     */
+    @ExcelIgnore
+    private BigDecimal score;
+
+    @ExcelProperty("评分")
+    private String scoreStr;
+
+    /**
+     * 评分理由
+     */
+    @ExcelProperty("评分理由")
+    private String scoreReason;
+
+
+    @ExcelIgnore
+    private Date createTime;
+
+    @ExcelProperty("反馈时间")
+    private String createTimeStr;
+
+    /**
+     * 处理状态 0未处理,1已处理
+     */
+    @ExcelIgnore
+    private Integer status;
+
+    @ExcelProperty("处理状态")
+    private String statusStr;
+
+    /**
+     * 处理结果
+     */
+    @ExcelProperty("处理结果")
+    private String result;
+
+
+    public String getStatusStr() {
+        if(status != null){
+            switch (status){
+                case 0 : return "待处理";
+                case 1 : return "已处理";
+            }
+        }
+        return statusStr;
+    }
+
+    public String getHardwareOptionName() {
+        if(hardwareOption != null){
+            return hardwareOption.getNameCn();
+        }
+        return hardwareOptionName;
+    }
+
+    public String getSoftwareOptionName() {
+        if(softwareOption != null){
+            return softwareOption.getNameCn();
+        }
+        return softwareOptionName;
+    }
+
+    public String getIndustryOptionName() {
+        if(industryOption != null){
+            return industryOption.getNameCn();
+        }
+        return industryOptionName;
+    }
+
+    public String getScoreStr() {
+        if(score != null){
+            BigDecimal bigDecimal = score.setScale(1, RoundingMode.HALF_UP);
+            return bigDecimal.toString();
+        }
+        return scoreStr;
+    }
+
+    public String getCreateTimeStr() {
+        if(createTime != null){
+            return Dateutils.getDate(createTime);
+        }
+        return createTimeStr;
+    }
+}

+ 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 avgCount;
+}

+ 16 - 0
src/main/java/com/fdkankan/manage/vo/response/IpAddressVo.java

@@ -0,0 +1,16 @@
+package com.fdkankan.manage.vo.response;
+
+import lombok.Data;
+
+@Data
+public class IpAddressVo {
+    private String status;
+    private String info;
+    private String infocode;
+    private String country;
+    private String countryEn;
+    private String province;
+    private String city;
+    private String adcode;
+    private String rectangle;
+}

+ 4 - 0
src/main/java/com/fdkankan/manage/vo/response/SceneVo.java

@@ -45,4 +45,8 @@ public class SceneVo {
     private Long userId;
 
     private Long cameraId;
+
+    private Integer location;
+
+    private Integer mixture = 0; // 0否 1是
 }

+ 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 avgCount from t_feedback where score !=0 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 avgCount  from t_feedback where score !=0 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>