dsx 2 лет назад
Родитель
Сommit
f275da4943

+ 1 - 0
4dkankan-task/pom.xml

@@ -80,6 +80,7 @@
     </dependencies>
 
     <build>
+        <finalName>${artifactId}</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>

+ 111 - 0
4dkankan-task/src/main/java/com/fdkankan/task/entity/ScenePlus.java

@@ -0,0 +1,111 @@
+package com.fdkankan.task.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景主表
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus")
+public class ScenePlus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 场景名称
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 场景状态:0-未建好,1--已建好,-1-计算出错,-2--不在官网显示
+     */
+    @TableField("scene_status")
+    private Integer sceneStatus;
+
+    /**
+     * 场景来源:相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 支付状态:0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 场景类型  0-其他,1-文博,2-地产,3-电商,4-餐饮,5-家居,99-一件换装虚拟房源
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 是否推荐:0-否,1-是
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic("A")
+    private String recStatus;
+
+
+}

+ 153 - 0
4dkankan-task/src/main/java/com/fdkankan/task/entity/ScenePlusExt.java

@@ -0,0 +1,153 @@
+package com.fdkankan.task.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus_ext")
+public class ScenePlusExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * t_scene_plus主键
+     */
+    @TableField("plus_id")
+    private Long plusId;
+
+    /**
+     * 场景数据目录
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 场景链接
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 缩略图链接
+     */
+    @TableField("thumb")
+    private String thumb;
+
+    /**
+     * 方案:1-双目,2-转台,3-六目,4-八目,10-获取4k图,11-获取2k,12-获取1k
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 使用用量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 云服务器类型
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 点位数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 算法类型(slam、sfm)
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 算法类型(V2,V3)
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 分辨率(2k,4k)
+     */
+    @TableField("scene_resolution")
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    @TableField("scene_from")
+    private String sceneFrom;
+
+    /**
+     * 切图方式(tiles:瓦片图,face:切片图,pan:全景图 ,local:本地切片,cube:立体图)
+     */
+    @TableField("scene_kind")
+    private String sceneKind;
+
+    /**
+     * 计算耗时
+     */
+    @TableField("compute_time")
+    private String computeTime;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic("A")
+    private String recStatus;
+
+
+}

+ 18 - 0
4dkankan-task/src/main/java/com/fdkankan/task/mapper/IScenePlusExtMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.task.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.task.entity.ScenePlusExt;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Mapper
+public interface IScenePlusExtMapper extends BaseMapper<ScenePlusExt> {
+
+}

+ 18 - 0
4dkankan-task/src/main/java/com/fdkankan/task/mapper/IScenePlusMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.task.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.task.entity.ScenePlus;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Mapper
+public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
+
+}

+ 97 - 14
4dkankan-task/src/main/java/com/fdkankan/task/schedule/ScheduleJob.java

@@ -1,27 +1,39 @@
 package com.fdkankan.task.schedule;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.util.DateExtUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.task.entity.ScenePlus;
+import com.fdkankan.task.entity.ScenePlusExt;
 import com.fdkankan.task.entity.ScenePro;
+import com.fdkankan.task.service.IScenePlusExtService;
+import com.fdkankan.task.service.IScenePlusService;
 import com.fdkankan.task.service.ISceneProService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
 import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.util.Calendar;
+import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 @Slf4j
 @Component
@@ -29,6 +41,15 @@ public class ScheduleJob {
 
     private static String indexKey = "deleteV3Dir:index";
     private static String numKey = "deleteV3Dir:num";
+    private static String dataPathFormat = "data/data%s/";
+    private static String imgPathFormat = "images/images%s/";
+    private static String videoPathFormat = "video/video%s/";
+    private static String voicePathFormat = "voice/voice%s/";
+
+    @Value("${userId}")
+    private Long userId;
+    @Value("${oss.bucket}")
+    private String bucket;
 
     @Autowired
     private ISceneProService sceneProService;
@@ -36,29 +57,91 @@ public class ScheduleJob {
     private UploadToOssUtil uploadToOssUtil;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
 
-    @Scheduled(fixedDelay = 10*1000)
+    @Scheduled(fixedDelay = 2*24*60*60*1000)
     public void deleteV3Dir(){
 
-        long index = redisUtil.incr(indexKey, 1) -1;
-
         DateTime date = DateUtil.beginOfDay(DateUtil.offset(Calendar.getInstance().getTime(), DateField.DAY_OF_MONTH, -2));
 
-        ScenePro scenePro = sceneProService.getOne(
-                new LambdaQueryWrapper<ScenePro>()
-                        .lt(ScenePro::getCreateTime, date)
-                        .eq(ScenePro::getStatus, -2)
-                        .eq(ScenePro::getIsUpgrade, 1).last("limit " + index + " 1"));
-
-        if(Objects.isNull(scenePro)){
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<ScenePro>();
+        wrapper.select(ScenePro::getNum);
+        wrapper.lt(ScenePro::getCreateTime, date);
+        wrapper.eq(ScenePro::getStatus, -2);
+        wrapper.eq(ScenePro::getIsUpgrade, 1);
+        if(Objects.nonNull(userId)){
+            wrapper.eq(ScenePro::getUserId, userId);
+        }
+        List<ScenePro> list = sceneProService.list(wrapper);
+        if(CollUtil.isEmpty(list)){
             return;
         }
+        Set<String> numSet = redisUtil.sGet(numKey);
+        for (ScenePro scenePro : list) {
+            String num = scenePro.getNum();
+
+            try {
+
+                String dataPath = String.format(dataPathFormat, num);
+
+                ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+                ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+                String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
+                String sceneJsonPath = dataViewPath + "scene.json";
+//                if(!numSet.contains(num)){
+                    if(StrUtil.isNotEmpty(scenePlusExt.getVideos()) && scenePlusExt.getVideos().contains(dataPath)){
+                        scenePlusExt.setVideos(scenePlusExt.getVideos().replaceAll(dataPath, dataViewPath));
+                        scenePlusExtService.updateById(scenePlusExt);
+                    }
+                    String sceneJson = uploadToOssUtil.getObjectContent(bucket, sceneJsonPath);
+                    JSONObject sceneJsonObj = JSON.parseObject(sceneJson);
+                    sceneJsonObj.put("videos", JSON.parseObject(scenePlusExt.getVideos()));
+                    uploadToOssUtil.upload(sceneJsonObj.toJSONString().getBytes(), sceneJsonPath);
+
+                    redisUtil.del(String.format(RedisKey.SCENE_JSON, num));
+
+
+//                }
+
+                //删除data目录
+                List<String> dataList = uploadToOssUtil.listKeys(dataPath);
+                if(CollUtil.isNotEmpty(dataList)){
+                    uploadToOssUtil.deleteFile(dataPath);
+                }
+
+                //删除img目录
+                String imgPath = String.format(imgPathFormat, num);
+                List<String> imgList = uploadToOssUtil.listKeys(imgPath);
+                if(CollUtil.isNotEmpty(imgList)){
+                    uploadToOssUtil.deleteFile(imgPath);
+                }
+
+                //删除video目录
+                String videoPath = String.format(videoPathFormat, num);
+                List<String> videoList = uploadToOssUtil.listKeys(videoPath);
+                if(CollUtil.isNotEmpty(videoList)){
+                    uploadToOssUtil.deleteFile(videoPath);
+                }
+
+                //删除voice目录
+                String voicePath = String.format(voicePathFormat, num);
+                List<String> voiceList = uploadToOssUtil.listKeys(voicePath);
+                if(CollUtil.isNotEmpty(voiceList)){
+                    uploadToOssUtil.deleteFile(voicePath);
+                }
+
+                redisUtil.sSet(numKey, num);
+
+            }catch (Exception e){
+                log.error("处理失败,num" + num, e);
+            }
 
-        //处理文件
-        // TODO: 2023/3/8
+        }
 
-        //写入场景码
-        redisUtil.sSet(numKey, scenePro.getNum());
 
     }
 

+ 18 - 0
4dkankan-task/src/main/java/com/fdkankan/task/service/IScenePlusExtService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.task.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.task.entity.ScenePlusExt;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+public interface IScenePlusExtService extends IService<ScenePlusExt> {
+
+    ScenePlusExt getScenePlusExtByPlusId(long plusId);
+
+}

+ 21 - 0
4dkankan-task/src/main/java/com/fdkankan/task/service/IScenePlusService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.task.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.task.entity.ScenePlus;
+
+/**
+ * <p>
+ * 场景主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+public interface IScenePlusService extends IService<ScenePlus> {
+
+    ScenePlus getScenePlusByNum(String num);
+
+
+
+
+}

+ 25 - 0
4dkankan-task/src/main/java/com/fdkankan/task/service/impl/ScenePlusExtServiceImpl.java

@@ -0,0 +1,25 @@
+package com.fdkankan.task.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.task.entity.ScenePlusExt;
+import com.fdkankan.task.mapper.IScenePlusExtMapper;
+import com.fdkankan.task.service.IScenePlusExtService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Service
+public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
+
+    @Override
+    public ScenePlusExt getScenePlusExtByPlusId(long plusId) {
+        return this.getOne(new LambdaQueryWrapper<ScenePlusExt>().eq(ScenePlusExt::getPlusId, plusId));
+    }
+}

+ 28 - 0
4dkankan-task/src/main/java/com/fdkankan/task/service/impl/ScenePlusServiceImpl.java

@@ -0,0 +1,28 @@
+package com.fdkankan.task.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.task.entity.ScenePlus;
+import com.fdkankan.task.mapper.IScenePlusMapper;
+import com.fdkankan.task.service.IScenePlusService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 场景主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Slf4j
+@Service
+public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
+
+    @Override
+    public ScenePlus getScenePlusByNum(String num) {
+        return this.getOne(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num));
+    }
+
+}

+ 1 - 1
4dkankan-task/src/main/resources/logback-spring.xml

@@ -10,7 +10,7 @@
 
 	<contextName>logback</contextName>
 	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
-	<property name="log.path" value="${LOG_PATH}/scene" />
+	<property name="log.path" value="${LOG_PATH}/task" />
 
 	<!-- 彩色日志 -->
 	<!-- 彩色日志依赖的渲染类 -->