浏览代码

Merge branch 'feature-4.9.0-20230324-dsx' into release

dsx 2 年之前
父节点
当前提交
71c46d45b6
共有 21 个文件被更改,包括 390 次插入37 次删除
  1. 11 0
      src/main/java/com/fdkankan/scene/bean/SceneBean.java
  2. 21 0
      src/main/java/com/fdkankan/scene/controller/SceneCleanOrigController.java
  3. 63 0
      src/main/java/com/fdkankan/scene/entity/SceneCleanOrig.java
  4. 1 1
      src/main/java/com/fdkankan/scene/generate/AutoGenerate.java
  5. 18 0
      src/main/java/com/fdkankan/scene/mapper/ISceneCleanOrigMapper.java
  6. 6 0
      src/main/java/com/fdkankan/scene/mapper/IScenePlusMapper.java
  7. 6 0
      src/main/java/com/fdkankan/scene/mapper/ISceneProMapper.java
  8. 51 0
      src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java
  9. 20 0
      src/main/java/com/fdkankan/scene/service/ISceneCleanOrigService.java
  10. 3 0
      src/main/java/com/fdkankan/scene/service/IScenePlusService.java
  11. 3 0
      src/main/java/com/fdkankan/scene/service/ISceneProService.java
  12. 129 0
      src/main/java/com/fdkankan/scene/service/impl/SceneCleanOrigServiceImpl.java
  13. 1 1
      src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java
  14. 3 3
      src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java
  15. 14 5
      src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java
  16. 15 2
      src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java
  17. 1 0
      src/main/resources/bootstrap-test.yml
  18. 5 0
      src/main/resources/mapper/scene/SceneCleanOrigMapper.xml
  19. 10 1
      src/main/resources/mapper/scene/ScenePlusMapper.xml
  20. 9 1
      src/main/resources/mapper/scene/SceneProMapper.xml
  21. 0 23
      src/test/java/com/fdkankan/scene/SceneApplicationTests.java

+ 11 - 0
src/main/java/com/fdkankan/scene/bean/SceneBean.java

@@ -0,0 +1,11 @@
+package com.fdkankan.scene.bean;
+
+import lombok.Data;
+
+@Data
+public class SceneBean {
+
+    private String num;
+
+    private String dataSource;
+}

+ 21 - 0
src/main/java/com/fdkankan/scene/controller/SceneCleanOrigController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.scene.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 删除oss原始资源记录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-29
+ */
+@RestController
+@RequestMapping("/scene/sceneCleanOrig")
+public class SceneCleanOrigController {
+
+}
+

+ 63 - 0
src/main/java/com/fdkankan/scene/entity/SceneCleanOrig.java

@@ -0,0 +1,63 @@
+package com.fdkankan.scene.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 删除oss原始资源记录
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-29
+ */
+@Getter
+@Setter
+@TableName("t_scene_clean_orig")
+public class SceneCleanOrig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("num")
+    private String num;
+
+    /**
+     * 0-处理中,1-成功,-1失败
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 失败原因
+     */
+    @TableField("reason")
+    private String reason;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

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

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

+ 18 - 0
src/main/java/com/fdkankan/scene/mapper/ISceneCleanOrigMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.mapper;
+
+import com.fdkankan.scene.entity.SceneCleanOrig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 删除oss原始资源记录 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-29
+ */
+@Mapper
+public interface ISceneCleanOrigMapper extends BaseMapper<SceneCleanOrig> {
+
+}

+ 6 - 0
src/main/java/com/fdkankan/scene/mapper/IScenePlusMapper.java

@@ -1,9 +1,13 @@
 package com.fdkankan.scene.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.entity.ScenePlus;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  * 场景主表 Mapper 接口
@@ -15,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
 
+    List<SceneBean> selectCleanOrigScene(Date time);
+
 }

+ 6 - 0
src/main/java/com/fdkankan/scene/mapper/ISceneProMapper.java

@@ -1,9 +1,13 @@
 package com.fdkankan.scene.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.entity.ScenePro;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  * pro场景表 Mapper 接口
@@ -15,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ISceneProMapper extends BaseMapper<ScenePro> {
 
+    List<SceneBean> selectCleanOrigScene(Date time);
+
 }

+ 51 - 0
src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java

@@ -1,12 +1,19 @@
 package com.fdkankan.scene.schedule;
 
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.service.ISceneAsynOperLogService;
+import com.fdkankan.scene.service.ISceneCleanOrigService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+
 @RefreshScope
 @Log4j2
 @Component
@@ -14,6 +21,10 @@ public class ScheduleJob {
 
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
+    @Autowired
+    private ISceneCleanOrigService sceneCleanOrigService;
+    @Autowired
+    private RedisLockUtil redisLockUtil;
 
     /**
      * 每天凌晨一点执行
@@ -24,4 +35,44 @@ public class ScheduleJob {
         sceneAsynOperLogService.cleanDownloadPanorama();
         log.info("定时清除全景图压缩包完毕");
     }
+
+    /**
+     * 删除场景原始资源
+     * 每天凌晨执行
+     */
+    @Scheduled(cron="0 0 1 * * ?")
+    public void cleanOssHomeV3() {
+        log.info("删除v3场景原始资源开始");
+        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V3;
+        try {
+            boolean lock = redisLockUtil.lock(lockKey, RedisKey.CAMERA_EXPIRE_7_TIME);
+            if(!lock){
+                return;
+            }
+            sceneCleanOrigService.cleanOrigV3();
+        }finally {
+            redisLockUtil.unlockLua(lockKey);
+        }
+        log.info("删除v3场景原始资源结束");
+    }
+
+    /**
+     * 删除场景原始资源
+     * 每天凌晨执行
+     */
+    @Scheduled(cron="0 0 1 * * ?")
+    public void cleanOssHomeV4() {
+        log.info("删除v4场景原始资源开始");
+        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V4;
+        try {
+            boolean lock = redisLockUtil.lock(lockKey, RedisKey.CAMERA_EXPIRE_7_TIME);
+            if(!lock){
+                return;
+            }
+            sceneCleanOrigService.cleanOrigV4();
+        }finally {
+            redisLockUtil.unlockLua(lockKey);
+        }
+        log.info("删除v4场景原始资源结束");
+    }
 }

+ 20 - 0
src/main/java/com/fdkankan/scene/service/ISceneCleanOrigService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.scene.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.entity.SceneCleanOrig;
+
+/**
+ * <p>
+ * 删除oss原始资源记录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-29
+ */
+public interface ISceneCleanOrigService extends IService<SceneCleanOrig> {
+
+    void cleanOrigV3();
+
+    void cleanOrigV4();
+
+}

+ 3 - 0
src/main/java/com/fdkankan/scene/service/IScenePlusService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.scene.vo.BaseSceneParamVO;
 import java.util.List;
@@ -34,4 +35,6 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     ResultData uploadShareLogo(String num, MultipartFile file) throws Exception;
 
+    List<SceneBean> listCleanOrigScene(int cleanOrigMonth);
+
 }

+ 3 - 0
src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.vo.BaseDataParamVO;
@@ -49,4 +50,6 @@ public interface ISceneProService extends IService<ScenePro> {
 
     ScenePro getByNum(String num);
 
+    List<SceneBean> listCleanOrigScene(int cleanOrigMonth);
+
 }

+ 129 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneCleanOrigServiceImpl.java

@@ -0,0 +1,129 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.exceptions.ExceptionUtil;
+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.CommonStatus;
+import com.fdkankan.common.constant.CommonSuccessStatus;
+import com.fdkankan.common.constant.OperationType;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.scene.bean.SceneBean;
+import com.fdkankan.scene.entity.SceneCleanOrig;
+import com.fdkankan.scene.mapper.ISceneCleanOrigMapper;
+import com.fdkankan.scene.mapper.IScenePlusExtMapper;
+import com.fdkankan.scene.service.ISceneCleanOrigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.IScenePlusService;
+import com.fdkankan.scene.service.ISceneProService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+import sun.font.TextRecord;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 删除oss原始资源记录 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-29
+ */
+@RefreshScope
+@Slf4j
+@Service
+public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper, SceneCleanOrig> implements ISceneCleanOrigService {
+
+    @Value("${scene.cleanOrig.month}")
+    private Integer cleanOrigMonth;
+
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+
+    @Override
+    public void cleanOrigV4() {
+        //查询所有计算时间超过限定时间的场景,计算成功、未被删除、最后一次计算后未被删除过的
+        List<SceneBean> sceneBeans = scenePlusService.listCleanOrigScene(cleanOrigMonth);
+        if(CollUtil.isEmpty(sceneBeans)){
+            return;
+        }
+
+        sceneBeans.parallelStream().forEach(scene->{
+            this.cleanOrigHandler(scene);
+        });
+    }
+
+    @Override
+    public void cleanOrigV3() {
+        //查询所有计算时间超过限定时间的场景,计算成功、未被删除
+        List<SceneBean> sceneBeans = sceneProService.listCleanOrigScene(cleanOrigMonth);
+        if(CollUtil.isEmpty(sceneBeans)){
+            return;
+        }
+
+        sceneBeans.parallelStream().forEach(scene->{
+            this.cleanOrigHandler(scene);
+        });
+    }
+
+    private void cleanOrigHandler(SceneBean scene){
+        try {
+            int successStatus = CommonSuccessStatus.SUCCESS.code();
+            String reason = null;
+            String dataSource = scene.getDataSource();
+            if(StrUtil.isNotEmpty(dataSource)){
+                String homePath = dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, ConstantFilePath.OSS_PREFIX);
+                //由于国内测试和生产用的bucket是同一个,这里需要做一个安全校验,保证不会删错
+                String fileContent = fYunFileService.getFileContent(homePath.concat("/").concat("data.fdage"));
+                if(StrUtil.isNotBlank(fileContent)){
+                    JSONObject jsonObject = JSON.parseObject(fileContent);
+                    String snCode = jsonObject.getJSONObject("cam").getString("uuid");
+                    String uuidTime = jsonObject.getString("uuidtime");
+                    if(StrUtil.isEmpty(snCode)
+                            || StrUtil.isEmpty(uuidTime)
+                            || !homePath.contains(snCode)
+                            || !homePath.contains(uuidTime)){
+                        successStatus = CommonSuccessStatus.FAIL.code();
+                        reason = "dataSource与data.fdage文件不匹配";
+                    }else{
+                        fYunFileService.deleteFolder(homePath);
+                    }
+                }
+            }
+            this.saveLog(scene.getNum(), successStatus, reason);
+        }catch (Exception e){
+            log.error("删除原始资源失败,num : " + scene.getNum(), e);
+            this.saveLog(scene.getNum(), CommonSuccessStatus.FAIL.code(), ExceptionUtil.stacktraceToString(e, 3000));
+        }
+    }
+
+
+
+
+    private void saveLog(String num, int status, String reason){
+        //清除旧的日志
+        this.remove(new LambdaQueryWrapper<SceneCleanOrig>().eq(SceneCleanOrig::getNum, num));
+        SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
+        sceneCleanOrig.setNum(num);
+        sceneCleanOrig.setState(status);
+        sceneCleanOrig.setReason(reason);
+        this.saveOrUpdate(sceneCleanOrig);
+    }
+
+}

+ 1 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -474,7 +474,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
         sceneInfoVO.setControls(BeanUtil.copyProperties(sceneEditControls, SceneEditControlsVO.class));
         sceneInfoVO.setNum(num);
-        sceneInfoVO.setCreateTime(scenePlus.getCreateTime());
+        sceneInfoVO.setCreateTime(scenePlusExt.getAlgorithmTime());
 
         sceneInfoVO.setSceneResolution(scenePlusExt.getSceneResolution());
         sceneInfoVO.setSceneFrom(scenePlusExt.getSceneFrom());

+ 3 - 3
src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java

@@ -131,9 +131,9 @@ public class SceneEditServiceImpl implements ISceneEditService {
         sceneAuthVO.setInclude(new ArrayList<>());
         sceneAuthVO.setCompany(null);
 
-        //判断本地资源是否已本删除,如果已删除,前端根据字段值为true提示用户不能使用某些功能,需要重算
-        Date algorithmTime = scenePlusExt.getAlgorithmTime() == null ? scenePlus.getCreateTime() : scenePlusExt.getAlgorithmTime();
-        if (!ObjectUtils.isEmpty(expiredMonth) && com.fdkankan.common.util.DateUtil.delay(algorithmTime, expiredMonth, Calendar.MONTH).before(new Date())) {
+        //判断data.json是否存在,如果存在,则证明计算在未被定时任务删除前上传过oss
+        boolean exist = fYunFileService.fileExist(String.format(UploadFilePath.scene_result_data_path, num).concat("data.json"));
+        if(!exist){
             sceneAuthVO.setSourceExpired(true);
         }
 

+ 14 - 5
src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
@@ -15,6 +17,7 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
@@ -37,9 +40,8 @@ import com.fdkankan.scene.vo.BaseSceneParamVO;
 import com.fdkankan.scene.vo.SceneCheckKeyParamVO;
 import com.fdkankan.scene.vo.SceneDataDownloadVO;
 import java.io.File;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
+import java.util.*;
+
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -222,8 +224,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+num+"_en.png";
 
         String webSize = mainUrl + "/" + sceneProNewUrl + num;
-        QrCodeUtil.generate(webSize, QrConfig.create().setImg(logoPath).setWidth(512).setHeight(512), FileUtil.file(outPathZh));
-        QrCodeUtil.generate(webSize + "&lang=en", QrConfig.create().setImg(logoPath).setWidth(512).setHeight(512), FileUtil.file(outPathEn));
+        QrCodeUtil.generate(webSize, QrConfig.create().setImg(logoPath).setWidth(1024).setHeight(1024), FileUtil.file(outPathZh));
+        QrCodeUtil.generate(webSize + "&lang=en", QrConfig.create().setImg(logoPath).setWidth(1024).setHeight(1024), FileUtil.file(outPathEn));
         //上传logo图片
         String ossLogoPath = String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + "shareLogo" + extName;
         fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), logoPath, ossLogoPath);
@@ -242,4 +244,11 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
         return ResultData.ok();
     }
+
+    @Override
+    public List<SceneBean> listCleanOrigScene(int cleanOrigMonth) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -cleanOrigMonth));
+        return this.baseMapper.selectCleanOrigScene(time);
+    }
 }

+ 15 - 2
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.RuntimeUtil;
 import cn.hutool.core.util.StrUtil;
@@ -16,6 +18,7 @@ import com.fdkankan.model.constants.ConstantFileName;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.model.utils.ComputerUtil;
 import com.fdkankan.model.utils.ConvertUtils;
@@ -1068,8 +1071,10 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
     public static void main(String[] args) {
 
-        ZipUtil.zip("C:\\Users\\dsx\\Desktop\\新建文件夹\\temp\\mesh\\aaa\\mesh", "C:\\Users\\dsx\\Desktop\\新建文件夹\\temp\\mesh\\aaa\\mesh\\mesh.zip");
-        System.out.println(123);
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -12));
+        System.out.println(time);
+
     }
 
 
@@ -1122,4 +1127,12 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         FileUtil.del(zipPath);
         return ResultData.ok(url);
     }
+
+    @Override
+    public List<SceneBean> listCleanOrigScene(int cleanOrigMonth) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -cleanOrigMonth));
+        return this.baseMapper.selectCleanOrigScene(time);
+    }
+
 }

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

@@ -34,6 +34,7 @@ spring:
             refresh: true
       discovery:
         namespace: ${spring.cloud.nacos.namespace}
+#        namespace: public
 
 
 

+ 5 - 0
src/main/resources/mapper/scene/SceneCleanOrigMapper.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.scene.mapper.ISceneCleanOrigMapper">
+
+</mapper>

+ 10 - 1
src/main/resources/mapper/scene/ScenePlusMapper.xml

@@ -1,5 +1,14 @@
 <?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.com.fdkankan.scene.mapper.IScenePlusMapper">
+<mapper namespace="com.fdkankan.scene.mapper.IScenePlusMapper">
+
+    <select id="selectCleanOrigScene" resultType="com.fdkankan.scene.bean.SceneBean">
+        select plus.num, ext.data_source
+        from t_scene_plus plus
+        left join t_scene_plus_ext ext on plus.id = ext.plus_id
+        where plus.scene_status in (1,-2) and ext.algorithm_time <![CDATA[ < ]]> #{time}
+        and ext.data_source is NOT null
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = plus.num and ext.algorithm_time <![CDATA[ < ]]> o.create_time)
+    </select>
 
 </mapper>

+ 9 - 1
src/main/resources/mapper/scene/SceneProMapper.xml

@@ -1,5 +1,13 @@
 <?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.com.fdkankan.scene.mapper.ISceneProMapper">
+<mapper namespace="com.fdkankan.scene.mapper.ISceneProMapper">
+
+    <select id="selectCleanOrigScene" resultType="com.fdkankan.scene.bean.SceneBean">
+        select pro.num, pro.data_source
+        from t_scene_pro pro
+        where pro.status in (1,-2) and pro.create_time <![CDATA[ < ]]> #{time}
+        and pro.data_source is not null
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = pro.num and pro.create_time <![CDATA[ < ]]> o.create_time)
+    </select>
 
 </mapper>

+ 0 - 23
src/test/java/com/fdkankan/scene/SceneApplicationTests.java

@@ -1,23 +0,0 @@
-package com.fdkankan.scene;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class ApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-
-
-    @Test
-    public String test2() throws Exception {
-
-
-        return "123";
-
-    }
-
-}