dengsixing 2 ay önce
ebeveyn
işleme
4b615f1a68

+ 3 - 0
src/main/java/com/fdkankan/contro/entity/ScenePlus.java

@@ -134,4 +134,7 @@ public class ScenePlus implements Serializable {
      */
     @TableField("has_floorplan_ai")
     private Integer hasFloorplanAi;
+
+    @TableField("build_fail_reason")
+    private String buildFailReason;
 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 28 - 8
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java


+ 3 - 1
src/main/java/com/fdkankan/contro/service/IJmgaService.java

@@ -1,10 +1,12 @@
 package com.fdkankan.contro.service;
 
+import com.alibaba.fastjson.JSONObject;
+
 import java.util.Map;
 
 public interface IJmgaService {
 
-    boolean checkFileWhole(String dataSource);
+    void checkFileWhole(String uuid, String dataSource, JSONObject fdageData);
 
     void sendStatus(Map<String, Object> param);
 

+ 35 - 29
src/main/java/com/fdkankan/contro/service/impl/JmgaServiceImpl.java

@@ -8,14 +8,12 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.entity.OrigFileUpload;
 import com.fdkankan.contro.entity.OrigFileUploadBatch;
 import com.fdkankan.contro.service.IJmgaService;
 import com.fdkankan.contro.service.IOrigFileUploadBatchService;
 import com.fdkankan.contro.service.IOrigFileUploadService;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
-import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +21,10 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -101,7 +102,7 @@ public class JmgaServiceImpl implements IJmgaService {
     @Override
     public void checkLackFile(String dataSource) {
 
-        String dataFdagePath = dataSource.concat(File.separator).concat("data.fdage");
+        String dataFdagePath = dataSource.concat(File.separator).concat("capture").concat(File.separator).concat("data.fdage");
         if(!FileUtil.exist(dataFdagePath)){
             throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage("data.fdage"));
         }
@@ -113,8 +114,25 @@ public class JmgaServiceImpl implements IJmgaService {
         }
 
         int camType = fdageData.getJSONObject("cam").getIntValue("type");
-        if(camType == ){
+        if(camType == 1 || camType == 2 || camType == 9 || camType == 10 || camType == 11){
+            Integer shootCount = fdageData.getJSONArray("points").size();
+            if(shootCount > 0){//有点位代表架站式
+                String parametersPath = dataSource.concat(File.separator).concat("capture").concat(File.separator).concat("parameters.json");
+                if(!FileUtil.exist(parametersPath)){
+                    throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage("parameters.json"));
+                }
+
+                String sfmDataBinPath = dataSource.concat(File.separator).concat("capture").concat(File.separator).concat("sfm_data.bin");
+                if(!FileUtil.exist(sfmDataBinPath)){
+                    throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage("sfm_data.bin"));
+                }
 
+                String upName = camType > 2 ? "Up.txt" : "Up.xml";
+                String upTxtPath = dataSource.concat(File.separator).concat("capture").concat(File.separator).concat(upName);
+                if(!FileUtil.exist(upTxtPath)){
+                    throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage(upName));
+                }
+            }
         }
 
         //从data.fdage中获取需要上传的文件列表
@@ -123,45 +141,33 @@ public class JmgaServiceImpl implements IJmgaService {
             return;
         }
 
-        List<String> fileList = new ArrayList<>();
         for (Object point : points) {
             JSONObject pointJson = (JSONObject) point;
             if(camType == 5){//圆周率相机
                 String name = pointJson.getString("name");
-                fileList.add(name);
+                this.checkFileAvailable(dataSource, name);
             }else{//四维相机
                 JSONArray imgs = pointJson.getJSONArray("imgs");
-                if(CollUtil.isEmpty(imgs)){
-                    continue;
-                }
                 for (Object img : imgs) {
                     JSONObject imgJson = (JSONObject) img;
                     String name = imgJson.getString("name");
-                    fileList.add(name);
+                    this.checkFileAvailable(dataSource, name);
                 }
             }
         }
+    }
 
-        //查询当前待通知计算批次文件是否存在
-        List<OrigFileUploadBatch> batchList = origFileUploadBatchService.list(new LambdaQueryWrapper<OrigFileUploadBatch>().eq(OrigFileUploadBatch::getUuid, uuid));
-        if(CollUtil.isNotEmpty(batchList)){
-            Set<String> batchIds = batchList.stream().map(v -> v.getBatchId()).collect(Collectors.toSet());
-            List<OrigFileUpload> origFileList = origFileUploadService.list(new LambdaQueryWrapper<OrigFileUpload>().in(OrigFileUpload::getBatchId, batchIds));
-            //过滤出不存在的
-            fileList = fileList.stream().filter(v -> origFileList.stream().noneMatch(k -> k.getFileName().equals(v))).collect(Collectors.toList());
+    private void checkFileAvailable(String dataSource, String fileName){
+        List<File> fileList = FileUtil.loopFiles(dataSource.concat(File.separator).concat("capture"));
+        if(CollUtil.isEmpty(fileList)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage(fileName));
         }
-
-//        //查询oss文件目录是否存在
-//        String homePath = SceneUtil.getHomePath(dataSource);
-//        List<String> ossKeyList = fileServiceInterface.listRemoteFiles(homePath);
-//        fileList = fileList.stream().filter(v->ossKeyList.stream().noneMatch(k->FileUtil.getName(k).equals(v))).collect(Collectors.toList());
-//
-        if(CollUtil.isNotEmpty(fileList)){
-            String args = JSON.toJSONString(fileList);
-            if(fileList.size() > 5){
-                args =  fileList.size() +  "个文件";
+        for (File file : fileList) {
+            if(file.getName().equals(fileName) && file.length() > 0){
+                return;
             }
-            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, args);
         }
+        throw new BusinessException(ErrorCode.FAILURE_CODE_4001.code(), ErrorCode.FAILURE_CODE_4001.formatMessage(fileName));
     }
+
 }

+ 2 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -1085,6 +1085,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             scenePlus.setRecStatus(RecStatus.VALID.code());
             scenePlus.setPayStatus(PayStatus.NOT_PAY.code());
             scenePlus.setCreateTime(Calendar.getInstance().getTime());
+            scenePlus.setBuildFailReason("");
 
             ScenePlusExt oldSceneExt = scenePlusExtService.getScenePlusExtByPlusId(oldScene.getId());
             scenePlusExt.setSpace(oldSceneExt.getSpace());
@@ -1423,6 +1424,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
             .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
+            .set(ScenePlus::getBuildFailReason, null)
             .eq(ScenePlus::getNum, num));
 
         if(ModelKind.THREE_D_TILE.code().equals(modelKind)

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

@@ -2,4 +2,11 @@ spring:
   profiles:
     active: test
   application:
-    name: model-control
+    name: model-control
+
+# 不配默认为false
+tlog:
+  enable-invoke-time-print: true
+
+logging:
+  config: classpath:logback-nacos.xml

+ 215 - 0
src/main/resources/logback-nacos.xml

@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+	<!--需要使用springProperty,才可使用application.properties(或application.yml)中的值 -->
+	<springProperty name="app.name" source="spring.application.name" default="modeling-control"/>
+	<springProperty name="LOG_PATH" source="log.path" default="/www/VR/4dkankan/modeling-control/logs"/>
+
+	<!-- 定义日志目录 -->
+	<property name="SQL_LOG_PATH" value="${LOG_PATH}/logs/sql"/>
+	<property name="DEBUG_LOG_PATH" value="${LOG_PATH}/logs/debug"/>
+	<property name="INFO_LOG_PATH" value="${LOG_PATH}/logs/info"/>
+	<property name="WARN_LOG_PATH" value="${LOG_PATH}/logs/warn"/>
+	<property name="ERROR_LOG_PATH" value="${LOG_PATH}/logs/error"/>
+	<!-- 定义日志保留天数 -->
+	<property name="MAX_HISTORY" value="180"/>
+	<!-- 定义日志文件总大小 -->
+	<property name="TOTAL_SIZE_CAP" value="10GB"/>
+	<!-- 定义单个日志文件大小 -->
+	<property name="MAX_FILE_SIZE" value="100MB"/>
+
+
+	<!-- 输出到控制台 -->
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<!-- 日志输出格式 -->
+			<!--<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>-->
+			<!--日期 日志等级 PID 线程名 类路径 方法名 java源文件 行号 打印信息 换行-->
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5p) %green(${PID:- }) - %magenta([%15.15t]) %cyan(%C.%M\(%F:%L\)) : %msg%n</pattern>
+			<!--同上, 仅输出类路径, 不输出 方法名 java源文件 行号 -->
+			<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5p) %green(${PID:- }) - %magenta([%15.15t]) %cyan(%-40.40logger{40}) : %msg%n</pattern>-->
+		</encoder>
+	</appender>
+
+	<!-- 只输出DEBUG日志 -->
+	<appender name="DEBUG_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${DEBUG_LOG_PATH}/debug.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${DEBUG_LOG_PATH}/debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>DEBUG</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出INFO日志 -->
+	<appender name="INFO_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${INFO_LOG_PATH}/info.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${INFO_LOG_PATH}/info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>INFO</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出WARN日志 -->
+	<appender name="WARN_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${WARN_LOG_PATH}/warn.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${WARN_LOG_PATH}/warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>WARN</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出ERROR日志 -->
+	<appender name="ERROR_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${ERROR_LOG_PATH}/error.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${ERROR_LOG_PATH}/error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>ERROR</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
+        name:用来指定受此logger约束的某一个包或者具体的某一个类。
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
+              如果未设置此属性,那么当前logger将会继承上级的级别。
+        addtivity:是否向上级logger传递打印信息。默认是true -->
+	<!--
+        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
+        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
+        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
+     -->
+	<!--    <logger name="com.xmc.biz.mapper" level="DEBUG" />-->
+	<!--
+        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
+        默认是DEBUG  可以包含零个或多个元素,标识这个appender将会添加到这个logger。
+    -->
+
+	<!--输出到文件的Appender配置  SQL执行日志-->
+	<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${SQL_LOG_PATH}/sql.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${SQL_LOG_PATH}/sql-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>TRACE</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+<!--			<onMismatch>DENY</onMismatch>-->
+		</filter>
+	</appender>
+
+	<!-- 多环境配置 -->
+	<springProfile name="dev,test,prod">
+
+		<!--单独设置mapper包下的日志级别为DEBUG,因为输出执行的sql需要DEBUG级别-->
+		<logger name="com.fdkankan.contro.mapper" level="trace">
+			<appender-ref ref="SQL_FILE"/>
+		</logger>
+		<!-- root -->
+		<root level="INFO">
+			<appender-ref ref="CONSOLE"/>
+			<appender-ref ref="INFO_LOG_FILE"/>
+			<appender-ref ref="WARN_LOG_FILE"/>
+			<appender-ref ref="ERROR_LOG_FILE"/>
+		</root>
+	</springProfile>
+
+</configuration>

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -149,7 +149,7 @@
 	<!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
 	<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
 
-	<root level="info">
+	<root level="debug">
 		<appender-ref ref="CONSOLE" />
 		<appender-ref ref="DEBUG_FILE" />
 		<appender-ref ref="INFO_FILE" />