dengsixing 9 ماه پیش
والد
کامیت
b5d95802e5

+ 1 - 1
pom.xml

@@ -102,7 +102,7 @@
       <groupId>cn.easyproject</groupId>
       <artifactId>orai18n</artifactId>
       <version>12.1.0.2.0</version>
-      <scope>provided</scope>
+<!--      <scope>provided</scope>-->
     </dependency>
 
     <!--mybatis-plus整合依赖-->

+ 8 - 1
src/main/java/com/fdkankan/Application.java

@@ -1,7 +1,10 @@
 package com.fdkankan;
 
+import cn.hutool.core.util.StrUtil;
 import com.dtflys.forest.springboot.annotation.ForestScan;
+import com.fdkankan.project.tieta.constant.Constant;
 import com.fdkankan.project.tieta.service.IConvertService;
+import com.fdkankan.redis.util.RedisClient;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
@@ -12,6 +15,8 @@ import org.springframework.core.convert.ConversionService;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+import javax.annotation.Resource;
+
 @SpringBootApplication
 @EnableScheduling
 @EnableAsync
@@ -21,6 +26,8 @@ public class Application implements CommandLineRunner {
 
     @Autowired
     private IConvertService convertService;
+    @Resource
+    private RedisClient redisClient;
 
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
@@ -28,7 +35,7 @@ public class Application implements CommandLineRunner {
 
     @Override
     public void run(String... args) throws Exception {
-        convertService.scenePushHistory();
+//        convertService.scenePushHistory();
     }
 }
 

+ 4 - 0
src/main/java/com/fdkankan/project/tieta/constant/Constant.java

@@ -6,4 +6,8 @@ public class Constant {
 
     public static final String REDIS_SCENE_CONVERT_HISTORY = "scene:convert2:history:%s";
 
+    public static final String REDIS_SCENE_CONVERT_STARTTIME = "scene:convert:starttime";
+
+    public static final String REDIS_LOCK_SCENE_CONVERT = "lock-scene-convert";
+
 }

+ 108 - 0
src/main/java/com/fdkankan/project/tieta/entity/FullphotoUprecord.java

@@ -0,0 +1,108 @@
+package com.fdkankan.project.tieta.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author
+ * @since 2024-09-18
+ */
+@Getter
+@Setter
+@TableName("RES_FILE.T_FULLPHOTO_UPRECORD")
+public class FullphotoUprecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 上传数据id
+     */
+    @TableId(value = "UPLOAD_ID", type = IdType.AUTO)
+    private String uploadId;
+
+    /**
+     * 站址编码
+     */
+    @TableField("STATION_CODE")
+    private String stationCode;
+
+    /**
+     * 机房id
+     */
+    @TableField("ENTITY_ID")
+    private String entityId;
+
+    /**
+     * 机房名称
+     */
+    @TableField("ENTITY_NAME")
+    private String entityName;
+
+    /**
+     * jpg图片数量
+     */
+    @TableField("PHOTO_NUMBER")
+    private BigDecimal photoNumber;
+
+    /**
+     * 3D模型文件大小(字节数)
+     */
+    @TableField("MODEL_SIZE")
+    private BigDecimal modelSize;
+
+    /**
+     * 场景文件大小(字节数)
+     */
+    @TableField("SCENE_SIZE")
+    private BigDecimal sceneSize;
+
+    /**
+     * 小地图文件大小(字节数)
+     */
+    @TableField("SMALLMAP_SIZE")
+    private BigDecimal smallmapSize;
+
+    /**
+     * 状态:  2-已删除 3-删除失败
+     */
+    @TableField("STATUS")
+    private String status;
+
+    /**
+     * 上传时间
+     */
+    @TableField("UP_TIME")
+    private Date upTime;
+
+    /**
+     * 上传用户
+     */
+    @TableField("USER_NAME")
+    private String userName;
+
+    /**
+     * 上传厂商标记信息
+     */
+    @TableField("MANU_FACT")
+    private String manuFact;
+
+    /**
+     * 上传记录版本timestamp信息
+     */
+    @TableField("UP_VERSION")
+    private String upVersion;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/project/tieta/generator/AutoGenerate.java

@@ -95,7 +95,7 @@ public class AutoGenerate {
                             .enableMapperAnnotation()
                             .formatXmlFileName("%sMapper");
                 })
-//                 .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
+//                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                 .execute();
     }
 }

+ 18 - 0
src/main/java/com/fdkankan/project/tieta/mapper/FullphotoUprecordMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.project.tieta.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.project.tieta.entity.FullphotoUprecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-09-18
+ */
+@Mapper
+public interface FullphotoUprecordMapper extends BaseMapper<FullphotoUprecord> {
+
+}

+ 82 - 0
src/main/java/com/fdkankan/project/tieta/schedule/Job.java

@@ -0,0 +1,82 @@
+package com.fdkankan.project.tieta.schedule;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.project.tieta.constant.Constant;
+import com.fdkankan.project.tieta.dto.ScenePushDTO;
+import com.fdkankan.project.tieta.entity.FullphotoFileindex;
+import com.fdkankan.project.tieta.entity.FullphotoUprecord;
+import com.fdkankan.project.tieta.service.FullphotoFileindexService;
+import com.fdkankan.project.tieta.service.FullphotoUprecordService;
+import com.fdkankan.project.tieta.service.IConvertService;
+import com.fdkankan.redis.util.RedisClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class Job {
+
+    private static final String startTime = "2024-09-10 00:00:00";
+
+    @Resource
+    private RedisClient redisClient;
+
+    @Autowired
+    private FullphotoUprecordService fullphotoUprecordService;
+    @Autowired
+    private IConvertService convertService;
+    @Autowired
+    private FullphotoFileindexService fullphotoFileindexService;
+
+    @Scheduled(fixedDelay = 10*60*1000)
+    public void push(){
+        Map<String, Object> lockMap = redisClient.lockLeaseTime(Constant.REDIS_LOCK_SCENE_CONVERT, 30 * 60 * 1000);
+        boolean lock = (Boolean) lockMap.get("lock");
+        if(!lock){
+            return;
+        }
+        String uniqueFlag = (String) lockMap.get("uniqueFlag");
+        try {
+            String startTimeStr = redisClient.get(Constant.REDIS_SCENE_CONVERT_STARTTIME);
+            if(StrUtil.isEmpty(startTimeStr)){
+                startTimeStr = "2020-09-01 00:00:00";
+                redisClient.add(Constant.REDIS_SCENE_CONVERT_STARTTIME, startTimeStr);
+            }
+            DateTime start = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
+            List<FullphotoUprecord> list = fullphotoUprecordService.list(new LambdaQueryWrapper<FullphotoUprecord>().eq(FullphotoUprecord::getStatus, 1).gt(FullphotoUprecord::getUpTime, start));
+            if(CollUtil.isEmpty(list)){
+                return;
+            }
+
+            Date maxTime = start;
+            for (FullphotoUprecord item : list) {
+                //判断是否有obj,有obj才推送
+                List<FullphotoFileindex> objList = fullphotoFileindexService.list(new LambdaQueryWrapper<FullphotoFileindex>().eq(FullphotoFileindex::getUploadId, item.getUploadId()).eq(FullphotoFileindex::getFileType, "11").eq(FullphotoFileindex::getStatus, 1));
+                if(CollUtil.isEmpty(objList)){
+                    continue;
+                }
+
+                convertService.scenePush(ScenePushDTO.builder().stationCode(item.getStationCode()).entityId(item.getEntityId()).build(), null);
+                if(maxTime.before(item.getUpTime())){
+                    maxTime = item.getUpTime();
+                    redisClient.add(Constant.REDIS_SCENE_CONVERT_STARTTIME, DateUtil.format(maxTime, "yyyy-MM-dd HH:mm:ss"));
+                }
+            }
+
+        }finally {
+            if(lock){
+                redisClient.unLock(Constant.REDIS_LOCK_SCENE_CONVERT, uniqueFlag);
+            }
+        }
+    }
+
+}

+ 16 - 0
src/main/java/com/fdkankan/project/tieta/service/FullphotoUprecordService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.project.tieta.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.project.tieta.entity.FullphotoUprecord;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-09-18
+ */
+public interface FullphotoUprecordService extends IService<FullphotoUprecord> {
+
+}

+ 20 - 0
src/main/java/com/fdkankan/project/tieta/service/impl/FullphotoUprecordServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.project.tieta.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.project.tieta.entity.FullphotoUprecord;
+import com.fdkankan.project.tieta.mapper.FullphotoUprecordMapper;
+import com.fdkankan.project.tieta.service.FullphotoUprecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-09-18
+ */
+@Service
+public class FullphotoUprecordServiceImpl extends ServiceImpl<FullphotoUprecordMapper, FullphotoUprecord> implements FullphotoUprecordService {
+
+}

+ 36 - 0
src/main/java/com/fdkankan/redis/util/RedisClient.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.project.tieta.httpclient.HttpClient;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.logging.Log;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -13,6 +15,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
+@Slf4j
 @Component
 public class RedisClient {
 
@@ -22,6 +25,10 @@ public class RedisClient {
 
     public final static String url_str_del = "/redis/string/delete";
 
+    public final static String URL_REDISSON_LOCKLEASETIME = "/redis/redisson/lockLeaseTime";
+
+    public final static String URL_REDISSON_UNLOCK = "/redis/redisson/unlock";
+
     @Value("${redis.host}")
     private String host;
 
@@ -68,6 +75,35 @@ public class RedisClient {
         return jsonObject.getString("data");
     }
 
+    public Map<String, Object> lockLeaseTime(String key, long expirTime){
+        Map<String, Object> result = new HashMap<>();
+        result.put("lock", false);
+        String url = host + URL_REDISSON_LOCKLEASETIME;
+        Map<String, Object> params = new HashMap<>();
+        params.put("lockName", this.genKey(key));
+        params.put("leaseTime", expirTime);
+        JSONObject jsonObject = httpClient.postJson(url, params);
+        log.info("获取分布式锁,key:{}, result:{}", this.genKey(key), jsonObject);
+        if(Objects.nonNull(jsonObject) && "0".equals(jsonObject.getString("status"))){
+            result.put("lock", true);
+            result.put("uniqueFlag", jsonObject.getString("data"));
+        }
+        return result;
+    }
+
+    public boolean unLock(String key, String uniqueFlag){
+        String url = host + URL_REDISSON_UNLOCK;
+        Map<String, Object> params = new HashMap<>();
+        params.put("lockName", this.genKey(key));
+        params.put("uniqueFlag", uniqueFlag);
+        JSONObject jsonObject = httpClient.postJson(url, params);
+        log.info("释放分布式锁,key:{},uniqueFlag:{}, result:{}", this.genKey(key), uniqueFlag, jsonObject);
+        if(Objects.nonNull(jsonObject) && "0".equals(jsonObject.getString("status"))){
+            return true;
+        }
+        return false;
+    }
+
     private String genKey(String key){
          return sysCode + "_" + serverName + "_" + key;
     }

+ 5 - 0
src/main/resources/mapper/project.tieta.generator/FullphotoUprecordMapper.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.project.tieta.generator.mapper.FullphotoUprecordMapper">
+
+</mapper>