lyhzzz 2 éve
szülő
commit
1baa430f8a
29 módosított fájl, 795 hozzáadás és 10 törlés
  1. 11 0
      pom.xml
  2. 9 0
      src/main/java/com/fdkankan/agent/common/OssPath.java
  3. 6 0
      src/main/java/com/fdkankan/agent/common/ResultCode.java
  4. 30 0
      src/main/java/com/fdkankan/agent/controller/SceneController.java
  5. 97 0
      src/main/java/com/fdkankan/agent/entity/IncrementType.java
  6. 102 0
      src/main/java/com/fdkankan/agent/entity/UserIncrement.java
  7. 1 1
      src/main/java/com/fdkankan/agent/generate/AutoGenerate.java
  8. 5 4
      src/main/java/com/fdkankan/agent/httpClient/client/FdKKClient.java
  9. 1 1
      src/main/java/com/fdkankan/agent/interceptor/TokenInterceptor.java
  10. 18 0
      src/main/java/com/fdkankan/agent/mapper/IIncrementTypeMapper.java
  11. 18 0
      src/main/java/com/fdkankan/agent/mapper/IUserIncrementMapper.java
  12. 2 0
      src/main/java/com/fdkankan/agent/service/ICameraDetailService.java
  13. 2 0
      src/main/java/com/fdkankan/agent/service/ICameraService.java
  14. 16 0
      src/main/java/com/fdkankan/agent/service/IIncrementTypeService.java
  15. 6 0
      src/main/java/com/fdkankan/agent/service/IScenePlusExtService.java
  16. 1 0
      src/main/java/com/fdkankan/agent/service/IScenePlusService.java
  17. 9 0
      src/main/java/com/fdkankan/agent/service/ISceneProService.java
  18. 17 0
      src/main/java/com/fdkankan/agent/service/IUserIncrementService.java
  19. 11 0
      src/main/java/com/fdkankan/agent/service/impl/CameraDetailServiceImpl.java
  20. 14 0
      src/main/java/com/fdkankan/agent/service/impl/CameraServiceImpl.java
  21. 20 0
      src/main/java/com/fdkankan/agent/service/impl/IncrementTypeServiceImpl.java
  22. 24 0
      src/main/java/com/fdkankan/agent/service/impl/ScenePlusExtServiceImpl.java
  23. 14 0
      src/main/java/com/fdkankan/agent/service/impl/ScenePlusServiceImpl.java
  24. 316 2
      src/main/java/com/fdkankan/agent/service/impl/SceneProServiceImpl.java
  25. 33 0
      src/main/java/com/fdkankan/agent/service/impl/UserIncrementServiceImpl.java
  26. 1 1
      src/main/resources/bootstrap-dev.yml
  27. 1 1
      src/main/resources/bootstrap-test.yml
  28. 5 0
      src/main/resources/mapper/agent/IncrementTypeMapper.xml
  29. 5 0
      src/main/resources/mapper/agent/UserIncrementMapper.xml

+ 11 - 0
pom.xml

@@ -29,6 +29,17 @@
             <version>3.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-fyun-oss</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-fyun-s3</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
 
         <dependency>
             <groupId>mysql</groupId>

+ 9 - 0
src/main/java/com/fdkankan/agent/common/OssPath.java

@@ -0,0 +1,9 @@
+package com.fdkankan.agent.common;
+
+public class OssPath {
+    public static String invoiceOssDir = "manage/invoice/";
+    public final static String v3_statusPath = "data/data%s/status.json";
+    public final static String v4_statusPath = "scene_view_data/%s/data/status.json";
+    public final static String localStatusPath = System.getProperty("java.io.tmpdir") +"status.json";   //获取临时文件目录
+
+}

+ 6 - 0
src/main/java/com/fdkankan/agent/common/ResultCode.java

@@ -12,6 +12,12 @@ public enum ResultCode {
     USER_NOT_LOGIN(4008,"用户未登录"),
     FD_ERROR(4009,"四维登录失败"),
     DEL_MINE(4010,"删除自己"),
+    SCENE_EMPTY(4011,"场景为空"),
+    CAMERA_EMPTY(4012,"相机为空"),
+    CAMERA_SPACE_ERROR(4013, "相机容量不足,不能迁移"),
+    SCENE_BUILD(4013, "场景正在计算中,请待计算完成后再操作。"),
+    CAMERA_TYPE_NOT_ERROR(4014, "必须迁移至相同的类型的相机下面!"),
+
 
     ;
     public int code;

+ 30 - 0
src/main/java/com/fdkankan/agent/controller/SceneController.java

@@ -2,9 +2,12 @@ package com.fdkankan.agent.controller;
 
 
 import com.fdkankan.agent.common.BaseController;
+import com.fdkankan.agent.common.ResultCode;
 import com.fdkankan.agent.common.ResultData;
+import com.fdkankan.agent.exception.BusinessException;
 import com.fdkankan.agent.request.SceneParam;
 import com.fdkankan.agent.service.ISceneProService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -29,5 +32,32 @@ public class SceneController extends BaseController {
         param.setAgentId(getAgent().getId());
         return ResultData.ok(sceneProService.pageList(param));
     }
+
+    /**
+     * 场景迁移
+     * num     迁移场景码
+     * snCode  迁移至相机snCode
+     */
+    @PostMapping("/move")
+    public ResultData move(@RequestBody SceneParam param){
+        if(StringUtils.isEmpty(param.getNum()) || StringUtils.isEmpty(param.getSnCode())){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        sceneProService.move(param);
+        return ResultData.ok();
+    }
+
+    /**
+     * 场景复制
+     * num      场景码
+     */
+    @PostMapping("/copy")
+    public ResultData copy(@RequestBody SceneParam param) throws Exception {
+        if(StringUtils.isEmpty(param.getNum())){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        sceneProService.copy(param.getNum());
+        return ResultData.ok();
+    }
 }
 

+ 97 - 0
src/main/java/com/fdkankan/agent/entity/IncrementType.java

@@ -0,0 +1,97 @@
+package com.fdkankan.agent.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 2022-11-10
+ */
+@Getter
+@Setter
+@TableName("t_increment_type")
+public class IncrementType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 权益类型名称
+     */
+    @TableField("name")
+    private String name;
+
+    @TableField("type")
+    private String type;
+
+    /**
+     * 下载次数,-1代表无限次
+     */
+    @TableField("download_num")
+    private Integer downloadNum;
+
+    /**
+     * 下载价格
+     */
+    @TableField("download_price")
+    private BigDecimal downloadPrice;
+
+    /**
+     * 相机容量 单位 G
+     */
+    @TableField("camera_capacity")
+    private Integer cameraCapacity;
+
+    /**
+     * 购买之后,有效期天数,-1代表无限制
+     */
+    @TableField("valid_time")
+    private Integer validTime;
+
+    /**
+     * 0:年;1:月:2:日
+     */
+    @TableField("valid_time_type")
+    private Integer validTimeType;
+
+    /**
+     * 权益价格
+     */
+    @TableField("price")
+    private BigDecimal price;
+
+    /**
+     * 价格符号
+     */
+    @TableField("symbol")
+    private String symbol;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 权益价格
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 102 - 0
src/main/java/com/fdkankan/agent/entity/UserIncrement.java

@@ -0,0 +1,102 @@
+package com.fdkankan.agent.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 2022-11-10
+ */
+@Getter
+@Setter
+@TableName("t_user_increment")
+public class UserIncrement implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 权益包标识
+     */
+    @TableField("key_word")
+    private String keyWord;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 会员权益类型Id
+     */
+    @TableField("increment_type_id")
+    private Integer incrementTypeId;
+
+    /**
+     * 结束时间
+     */
+    @TableField("increment_end_time")
+    private Date incrementEndTime;
+
+    /**
+     * 是否过期(1过期,0未过期)
+     */
+    @TableField("is_expired")
+    private Integer isExpired;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 扩容订单集合
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 生效时间
+     */
+    @TableField("increment_start_time")
+    private Date incrementStartTime;
+
+    @TableField("download_num")
+    private Integer downloadNum;
+
+
+}

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

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

+ 5 - 4
src/main/java/com/fdkankan/agent/httpClient/client/FdKKClient.java

@@ -1,15 +1,14 @@
 package com.fdkankan.agent.httpClient.client;
 
 import com.alibaba.fastjson.JSONObject;
-import com.dtflys.forest.annotation.Address;
-import com.dtflys.forest.annotation.Header;
-import com.dtflys.forest.annotation.JSONBody;
-import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.*;
 import com.fdkankan.agent.httpClient.address.FdkkAddressSource;
 import com.fdkankan.agent.httpClient.request.FdkkLoginRequest;
 import com.fdkankan.agent.httpClient.response.FdkkLoginVo;
 import com.fdkankan.agent.httpClient.response.FdkkResponse;
 
+import java.util.HashMap;
+
 /**
  * 获取,调用4dkk服务
  */
@@ -29,6 +28,8 @@ public interface FdKKClient {
     FdkkResponse getUserInfo(@JSONBody JSONObject jsonObject, @Header("token") String token);
 
 
+    @Get("/ucenter/_manage/_copy_scene")
+    JSONObject copyScene(@Query HashMap<String, Object> param , @Header("sign") String sign);
 
 
 }

+ 1 - 1
src/main/java/com/fdkankan/agent/interceptor/TokenInterceptor.java

@@ -29,7 +29,7 @@ public class TokenInterceptor implements HandlerInterceptor {
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-		response.setHeader(HttpHeaders.CONTENT_TYPE, ContentType.JSON.getValue());
+		response.setContentType("text/html;charset=UTF-8");
 		String token = request.getHeader("token");
 		if( request.getMethod().equals("GET")){
 			if(StringUtils.isBlank(token)){

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IIncrementTypeMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.IncrementType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 会员权益类型 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+@Mapper
+public interface IIncrementTypeMapper extends BaseMapper<IncrementType> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IUserIncrementMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.UserIncrement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户增值权益表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+@Mapper
+public interface IUserIncrementMapper extends BaseMapper<UserIncrement> {
+
+}

+ 2 - 0
src/main/java/com/fdkankan/agent/service/ICameraDetailService.java

@@ -16,4 +16,6 @@ import java.util.List;
 public interface ICameraDetailService extends IService<CameraDetail> {
 
     List<CameraDetail> getByUserName(Integer agentId,String userName);
+
+    CameraDetail getByCameraId(Long cameraId);
 }

+ 2 - 0
src/main/java/com/fdkankan/agent/service/ICameraService.java

@@ -15,4 +15,6 @@ import com.fdkankan.agent.request.CameraParam;
 public interface ICameraService extends IService<Camera> {
 
     Object pageList(CameraParam param);
+
+    Camera getBySnCode(String snCode);
 }

+ 16 - 0
src/main/java/com/fdkankan/agent/service/IIncrementTypeService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.IncrementType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 会员权益类型 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+public interface IIncrementTypeService extends IService<IncrementType> {
+
+}

+ 6 - 0
src/main/java/com/fdkankan/agent/service/IScenePlusExtService.java

@@ -3,6 +3,9 @@ package com.fdkankan.agent.service;
 import com.fdkankan.agent.entity.ScenePlusExt;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IScenePlusExtService extends IService<ScenePlusExt> {
 
+    ScenePlusExt getByPlusId(Long id);
+
+    HashMap<Long, ScenePlusExt> getByPlusIds(List<Long> plusIds);
 }

+ 1 - 0
src/main/java/com/fdkankan/agent/service/IScenePlusService.java

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IScenePlusService extends IService<ScenePlus> {
 
+    ScenePlus getByNum(String sceneNum);
 }

+ 9 - 0
src/main/java/com/fdkankan/agent/service/ISceneProService.java

@@ -1,5 +1,6 @@
 package com.fdkankan.agent.service;
 
+import com.fdkankan.agent.entity.CameraDetail;
 import com.fdkankan.agent.entity.ScenePro;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.agent.request.SceneParam;
@@ -15,4 +16,12 @@ import com.fdkankan.agent.request.SceneParam;
 public interface ISceneProService extends IService<ScenePro> {
 
     Object pageList(SceneParam param);
+
+    void move(SceneParam param);
+
+    void copy(String num) throws Exception;
+
+    ScenePro getByNum(String sceneNum);
+
+    void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, Integer payStatus);
 }

+ 17 - 0
src/main/java/com/fdkankan/agent/service/IUserIncrementService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.UserIncrement;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户增值权益表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+public interface IUserIncrementService extends IService<UserIncrement> {
+
+    UserIncrement getByCameraId(Long cameraId);
+}

+ 11 - 0
src/main/java/com/fdkankan/agent/service/impl/CameraDetailServiceImpl.java

@@ -44,4 +44,15 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
         }
         return null;
     }
+
+    @Override
+    public CameraDetail getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CameraDetail::getCameraId,cameraId);
+        List<CameraDetail> list = this.list(wrapper);
+        if(list == null || list.size() <=0){
+            return null;
+        }
+        return list.get(0);
+    }
 }

+ 14 - 0
src/main/java/com/fdkankan/agent/service/impl/CameraServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.agent.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.agent.common.PageInfo;
 import com.fdkankan.agent.entity.Camera;
@@ -10,6 +11,8 @@ import com.fdkankan.agent.service.ICameraService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 相机主表 服务实现类
@@ -27,4 +30,15 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         Page<CameraDetailVo> voPage = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
         return PageInfo.PageInfo(voPage);
     }
+
+    @Override
+    public Camera getBySnCode(String snCode) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Camera::getSnCode,snCode);
+        List<Camera> list = this.list(wrapper);
+        if(list == null || list.size() <=0 ){
+            return null;
+        }
+        return list.get(0);
+    }
 }

+ 20 - 0
src/main/java/com/fdkankan/agent/service/impl/IncrementTypeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.IncrementType;
+import com.fdkankan.agent.mapper.IIncrementTypeMapper;
+import com.fdkankan.agent.service.IIncrementTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 会员权益类型 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+@Service
+public class IncrementTypeServiceImpl extends ServiceImpl<IIncrementTypeMapper, IncrementType> implements IIncrementTypeService {
+
+}

+ 24 - 0
src/main/java/com/fdkankan/agent/service/impl/ScenePlusExtServiceImpl.java

@@ -1,11 +1,15 @@
 package com.fdkankan.agent.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.agent.entity.ScenePlusExt;
 import com.fdkankan.agent.mapper.IScenePlusExtMapper;
 import com.fdkankan.agent.service.IScenePlusExtService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +21,24 @@ import org.springframework.stereotype.Service;
 @Service
 public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
 
+    @Override
+    public ScenePlusExt getByPlusId(Long plusId) {
+        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlusExt::getPlusId,plusId);
+        List<ScenePlusExt> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public HashMap<Long, ScenePlusExt> getByPlusIds(List<Long> plusIds) {
+        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePlusExt::getPlusId,plusIds);
+        List<ScenePlusExt> list = this.list(wrapper);
+        HashMap<Long,ScenePlusExt> map = new HashMap<>();
+        list.forEach(entity -> map.put(entity.getPlusId(),entity));
+        return map;
+    }
 }

+ 14 - 0
src/main/java/com/fdkankan/agent/service/impl/ScenePlusServiceImpl.java

@@ -1,11 +1,14 @@
 package com.fdkankan.agent.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.agent.entity.ScenePlus;
 import com.fdkankan.agent.mapper.IScenePlusMapper;
 import com.fdkankan.agent.service.IScenePlusService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 场景主表 服务实现类
@@ -17,4 +20,15 @@ import org.springframework.stereotype.Service;
 @Service
 public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
 
+
+    @Override
+    public ScenePlus getByNum(String sceneNum) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlus::getNum,sceneNum);
+        List<ScenePlus> list = this.list(wrapper);
+        if(list!=null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
 }

+ 316 - 2
src/main/java/com/fdkankan/agent/service/impl/SceneProServiceImpl.java

@@ -1,18 +1,34 @@
 package com.fdkankan.agent.service.impl;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.json.JSONUtil;
+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.agent.common.OssPath;
 import com.fdkankan.agent.common.PageInfo;
-import com.fdkankan.agent.entity.ScenePro;
+import com.fdkankan.agent.common.ResultCode;
+import com.fdkankan.agent.entity.*;
+import com.fdkankan.agent.exception.BusinessException;
+import com.fdkankan.agent.httpClient.client.FdKKClient;
 import com.fdkankan.agent.httpClient.service.LaserService;
 import com.fdkankan.agent.mapper.ISceneProMapper;
 import com.fdkankan.agent.request.SceneParam;
 import com.fdkankan.agent.response.SceneVo;
-import com.fdkankan.agent.service.ISceneProService;
+import com.fdkankan.agent.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.agent.util.SceneStatusUtil;
+import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -26,10 +42,28 @@ import java.util.stream.Collectors;
  * @since 2022-11-09
  */
 @Service
+@Slf4j
 public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
 
     @Autowired
     LaserService laserService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+    @Resource
+    FdKKClient fdKKClient;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IIncrementTypeService incrementTypeService;
+    @Resource
+    FYunFileServiceInterface fYunFileService;
+
 
     @Override
     public Object pageList(SceneParam param) {
@@ -42,4 +76,284 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 //        }
         return PageInfo.PageInfo(page);
     }
+
+    @Override
+    public void move(SceneParam param) {
+        Camera camera = cameraService.getBySnCode(param.getSnCode());
+        if(camera == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+        if(cameraDetail == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+        ScenePro scenePro = this.getByNum(param.getNum());
+        ScenePlus scenePlus = scenePlusService.getByNum(param.getNum());
+        if((scenePro == null || scenePro.getCameraId() == null ) && (scenePlus== null || scenePlus.getCameraId() == null)){
+            throw new BusinessException(ResultCode.SCENE_EMPTY);
+        }
+        Integer status =  scenePro == null ? scenePlus.getSceneStatus() : scenePro.getStatus();
+        if(status == 0){
+            throw new BusinessException(ResultCode.SCENE_BUILD);
+        }
+
+        Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
+        Long space = scenePro == null ? 0 :scenePro.getSpace();
+        if(scenePlus !=null){
+            ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+            space = scenePlusExt.getSpace();
+        }
+        space = space == null ? 0 :space;
+        Long newUseSpace = space + cameraDetail.getUsedSpace();
+        Long totalSpace = cameraDetail.getTotalSpace();
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
+        if(userIncrement!=null){
+            IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
+            if(incrementType!=null){
+                if(incrementType.getCameraCapacity() == -1){
+                    totalSpace   = -1L;
+                }else {
+                    totalSpace = incrementType.getCameraCapacity() * 1024 * 1024L;
+                }
+            }
+        }
+
+        //深时场景无限容量
+        if(cameraDetail.getType() != 10 && totalSpace !=-1 &&  newUseSpace  > totalSpace){
+            throw new BusinessException(ResultCode.CAMERA_SPACE_ERROR);
+        }
+
+        Camera oldCamera = cameraService.getById(cameraId);
+        if(oldCamera == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+        CameraDetail oldCameraDetail = cameraDetailService.getByCameraId(oldCamera.getId());
+        if(oldCameraDetail == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+        if(!oldCameraDetail.getType().equals(cameraDetail.getType())){
+            throw new BusinessException(ResultCode.CAMERA_TYPE_NOT_ERROR);
+        }
+
+        Long oldUseSpace = oldCameraDetail.getUsedSpace() - space < 0 ? 0 : oldCameraDetail.getUsedSpace() - space;
+        oldCameraDetail.setUsedSpace(oldUseSpace);
+        Long subSpace =  oldCameraDetail.getTotalSpace() - oldUseSpace;
+        if(cameraDetail.getType() != 10 && subSpace >0){    //有剩余容量解封容量内场景
+            this.lockOrUnLockBySpace(oldCameraDetail,oldCameraDetail.getCameraId(),1);
+        }
+        cameraDetailService.updateById(oldCameraDetail);
+        cameraDetail.setUsedSpace(newUseSpace);
+        cameraDetailService.updateById(cameraDetail);
+
+        if(scenePro!=null){
+            LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(ScenePro::getId,scenePro.getId());
+            wrapper.set(ScenePro::getCameraId,camera.getId());
+            wrapper.set(ScenePro::getUserId,cameraDetail.getUserId());
+            this.update(wrapper);
+        }
+        if(scenePlus!=null){
+            LambdaUpdateWrapper<ScenePlus> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(ScenePlus::getId,scenePlus.getId());
+            wrapper.set(ScenePlus::getCameraId,camera.getId());
+            wrapper.set(ScenePlus::getUserId,cameraDetail.getUserId());
+            scenePlusService.update(wrapper);
+        }
+        if(cameraDetail.getType() == 10){       //深时场景
+            laserService.move(param.getNum(),oldCamera.getSnCode(),camera.getSnCode());
+        }
+
+    }
+
+    @Override
+    public void copy(String sceneNum) throws Exception {
+        ScenePro scenePro = this.getByNum(sceneNum);
+        ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
+        if((scenePro == null || scenePro.getCameraId() == null ) && (scenePlus== null || scenePlus.getCameraId() == null)){
+            throw new BusinessException(ResultCode.SCENE_EMPTY);
+        }
+        Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
+        Camera camera = cameraService.getById(cameraId);
+        if(camera == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+        CameraDetail detailEntity = cameraDetailService.getByCameraId(cameraId);
+        if(detailEntity == null){
+            throw new BusinessException(ResultCode.CAMERA_EMPTY);
+        }
+
+        HashMap<String, Object> param = new HashMap<>();
+        param.put("num",sceneNum);
+        fdKKClient.copyScene(param,"m_a_n_a_g_e");
+
+    }
+
+    @Override
+    public ScenePro getByNum(String num) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePro::getNum,num);
+        wrapper.eq(ScenePro::getIsUpgrade,0);
+        List<ScenePro> list = this.list(wrapper);
+        if(list == null || list.size() <=0){
+            return null;
+        }
+        return list.get(0);
+    }
+
+    /**
+     * @param payStatus -2 封存,为 1 解封
+     */
+    @Override
+    public void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, Integer payStatus) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<ScenePlus> plusWr = new LambdaQueryWrapper<>();
+        Long totalSpace = cameraDetail.getTotalSpace();
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
+        if(userIncrement!=null){
+            IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
+            if(incrementType!=null){
+                if(incrementType.getCameraCapacity() == -1){
+                    totalSpace   = -1L;
+                }else {
+                    totalSpace = incrementType.getCameraCapacity() * 1024 * 1024L;
+                }
+            }
+        }
+
+        log.info("lockOrUnLockBySpace---cameraId:{},payStatus:{},totalSpace:{},useSpace{}",
+                cameraId,payStatus,totalSpace,cameraDetail.getUsedSpace());
+        if(payStatus == 1){         //解封,判断用户权益,用户会员权益无限容量
+            wrapper.orderByAsc(ScenePro::getCreateTime);
+            plusWr.orderByAsc(ScenePlus::getCreateTime);
+            wrapper.eq(ScenePro::getPayStatus,-2);
+            plusWr.eq(ScenePlus::getPayStatus,-2);
+        }else {
+            if (totalSpace >= cameraDetail.getUsedSpace()) {
+                // 总容量大于已使用容量,不予封存
+                return;
+            }
+            wrapper.orderByDesc(ScenePro::getCreateTime);
+            plusWr.orderByDesc(ScenePlus::getCreateTime);
+            wrapper.eq(ScenePro::getPayStatus,1);
+            plusWr.eq(ScenePlus::getPayStatus,1);
+        }
+
+        wrapper.eq(ScenePro::getCameraId,cameraId)
+                .eq(ScenePro::getIsUpgrade,0);
+
+        plusWr.eq(ScenePlus::getCameraId,cameraId);
+
+        List<ScenePro> list = this.list(wrapper);
+        List<ScenePlus> plusList = scenePlusService.list(plusWr);
+
+        Long beyondSpace = Math.abs(cameraDetail.getUsedSpace() - totalSpace);
+        Long accumulateSpace = 0L;
+        List<Long> lockedIds = new ArrayList<>();
+        if(payStatus == 1){
+            Long doSpace = getScenePlusLockedIds(lockedIds, plusList, totalSpace, beyondSpace, accumulateSpace);
+            beyondSpace -= doSpace;
+            getSceneLockedIds(lockedIds,list,totalSpace,beyondSpace,accumulateSpace);
+        }else {
+            Long doSpace = getSceneLockedIds(lockedIds, list, totalSpace, beyondSpace, accumulateSpace);
+            beyondSpace -= doSpace;
+            getScenePlusLockedIds(lockedIds,plusList,totalSpace,beyondSpace,accumulateSpace);
+        }
+
+        lockOrUnLockScenes(lockedIds,payStatus);
+    }
+
+    private Long getSceneLockedIds(List<Long> lockedIds ,List<ScenePro> list,Long count,Long beyondSpace,Long accumulateSpace){
+        if (list != null && list.size() > 0){
+            for (ScenePro scenePro : list){
+                accumulateSpace += scenePro.getSpace();
+                if (count ==-1 && accumulateSpace.compareTo(beyondSpace) > 0){
+                    return  accumulateSpace - scenePro.getSpace();
+                }
+                lockedIds.add(scenePro.getId());
+            }
+        }
+        return  accumulateSpace;
+    }
+    private Long getScenePlusLockedIds(List<Long> lockedIds , List<ScenePlus> list, Long count, Long beyondSpace, Long accumulateSpace){
+        if (list != null && list.size() > 0){
+            List<Long> plusIds = list.parallelStream().map(ScenePlus::getId).collect(Collectors.toList());
+            HashMap<Long, ScenePlusExt> byPlusIds = scenePlusExtService.getByPlusIds(plusIds);
+            for (ScenePlus scenePlus : list){
+                ScenePlusExt scenePlusExt = byPlusIds.get(scenePlus.getId());
+                accumulateSpace += scenePlusExt.getSpace();
+                if (count ==-1 && accumulateSpace.compareTo(beyondSpace) > 0){
+                    return  accumulateSpace - scenePlusExt.getSpace();
+                }
+                lockedIds.add(scenePlus.getId());
+            }
+        }
+        return accumulateSpace;
+    }
+
+    // payStatus 为 -2 封存,为 1 解封
+    private void lockOrUnLockScenes(List<Long> lockedIds,Integer payStatus) {
+        if (lockedIds == null || lockedIds.size() == 0){
+            return;
+        }
+        LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ScenePro::getPayStatus,payStatus)
+                .eq(ScenePro::getIsUpgrade,0)
+                .in(ScenePro::getId,lockedIds);
+        this.update(updateWrapper);
+
+        LambdaUpdateWrapper<ScenePlus> updatePlusWrapper = new LambdaUpdateWrapper<>();
+        updatePlusWrapper.set(ScenePlus::getPayStatus,payStatus)
+                .in(ScenePlus::getId,lockedIds);
+        scenePlusService.update(updatePlusWrapper);
+
+        this.updateOssStatus(lockedIds,payStatus);
+    }
+
+    /**
+     *  修改oss status.json中 payStatus
+     */
+    private void updateOssStatus(List<Long> lockedIds, Integer payStatus) {
+        LambdaQueryWrapper<ScenePro> proWr = new LambdaQueryWrapper<>();
+        proWr.eq(ScenePro::getIsUpgrade,0);
+        proWr.in(ScenePro::getId,lockedIds);
+        List<ScenePro> proList = this.list(proWr);
+
+        LambdaQueryWrapper<ScenePlus> pluWr = new LambdaQueryWrapper<>();
+        pluWr.in(ScenePlus::getId,lockedIds);
+        List<ScenePlus> plusList = scenePlusService.list(pluWr);
+        for (ScenePro scenePro : proList) {
+            this.updateOssStatus(String.format(OssPath.v3_statusPath,scenePro.getNum()),payStatus);
+        }
+        for (ScenePlus scenePlus : plusList) {
+            this.updateOssStatus(String.format(OssPath.v4_statusPath,scenePlus.getNum()),payStatus);
+        }
+
+    }
+
+    /**
+     * 从oss中获取文件,并重写,上传替换
+     */
+    private void updateOssStatus(String path,Integer payStatus) {
+        try {
+            if(!fYunFileService.fileExist(path)){
+                return;
+            }
+            String data = fYunFileService.getFileContent("4dkankan",path);
+            if(StringUtils.isBlank(data)){
+                return;
+            }
+            JSONObject jsonObject = JSONObject.parseObject(data);
+            jsonObject.put("payStatus",payStatus);
+            String json = JSONUtil.toJsonStr(jsonObject);
+            FileUtils.writeFile(OssPath.localStatusPath ,json);
+            log.info("updateOssStatus--localPath:{},ossPath:{}",OssPath.localStatusPath,path);
+            fYunFileService.uploadFile(OssPath.localStatusPath,path);
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            FileUtil.del(OssPath.localStatusPath);
+        }
+    }
+
+
 }

+ 33 - 0
src/main/java/com/fdkankan/agent/service/impl/UserIncrementServiceImpl.java

@@ -0,0 +1,33 @@
+package com.fdkankan.agent.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.agent.entity.UserIncrement;
+import com.fdkankan.agent.mapper.IUserIncrementMapper;
+import com.fdkankan.agent.service.IUserIncrementService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户增值权益表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-10
+ */
+@Service
+public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper, UserIncrement> implements IUserIncrementService {
+
+    @Override
+    public UserIncrement getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserIncrement::getCameraId,cameraId);
+        List<UserIncrement> list = this.list(wrapper);
+        if(list !=null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+}

+ 1 - 1
src/main/resources/bootstrap-dev.yml

@@ -1,6 +1,6 @@
 spring:
   application:
-    name: 4dkankan-center-ucenter
+    name: 4dkankan-center-agent
   cloud:
     nacos:
       config:

+ 1 - 1
src/main/resources/bootstrap-test.yml

@@ -1,6 +1,6 @@
 spring:
   application:
-    name: 4dkankan-center-ucenter
+    name: 4dkankan-center-agent
   cloud:
     nacos:
       config:

+ 5 - 0
src/main/resources/mapper/agent/IncrementTypeMapper.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.agent.mapper.IIncrementTypeMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/agent/UserIncrementMapper.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.agent.mapper.IUserIncrementMapper">
+
+</mapper>