wuweihao %!s(int64=2) %!d(string=hai) anos
pai
achega
de27704dcd
Modificáronse 33 ficheiros con 1922 adicións e 251 borrados
  1. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-dev.properties
  2. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-locPro.properties
  3. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-locSit.properties
  4. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-locSitAws.properties
  5. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-pro.properties
  6. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-proAws.properties
  7. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-sit.properties
  8. 3 2
      720yun_fd_manage/gis_application/src/main/resources/application-sitAws.properties
  9. 15 0
      720yun_fd_manage/gis_common/pom.xml
  10. 72 0
      720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java
  11. 57 57
      720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java
  12. 79 0
      720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/RedisConfig.java
  13. 9 0
      720yun_fd_manage/gis_common/src/main/java/com/gis/common/constant/RedisConstant.java
  14. 1118 108
      720yun_fd_manage/gis_common/src/main/java/com/gis/common/util/RedisUtil.java
  15. 34 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/ReportDto.java
  16. 32 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/UserTrentDto.java
  17. 3 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/ReportEntity.java
  18. 36 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/po/ReportPo.java
  19. 28 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/ReportVo.java
  20. 3 0
      720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/FodderMapper.java
  21. 9 0
      720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/ReportMapper.java
  22. 3 0
      720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/WorkMapper.java
  23. 21 0
      720yun_fd_manage/gis_oss/src/main/java/com/gis/oss/util/FileUtils.java
  24. 3 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/FodderService.java
  25. 8 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/ReportService.java
  26. 4 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkService.java
  27. 53 3
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/FodderServiceImpl.java
  28. 140 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/ReportServiceImpl.java
  29. 16 6
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java
  30. 99 50
      720yun_fd_manage/gis_service/src/main/java/com/gis/task/VisitTask.java
  31. 45 8
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/AgeController.java
  32. 1 1
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/LoginController.java
  33. 10 2
      720yun_fd_manage/pom.xml

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-dev.properties

@@ -52,7 +52,8 @@ spring.rabbitmq.password=admin123
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -78,7 +79,7 @@ swagger.description=${swagger.title}
 swagger.version=1.0
 
 #log
-logging.path=/root/data/${project.name}_log
+logging.file.path=/root/data/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-locPro.properties

@@ -59,7 +59,8 @@ spring.rabbitmq.password=guest
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -85,7 +86,7 @@ swagger.version=1.0
 
 
 #log
-logging.path=E:/log/${project.name}_log
+logging.file.path=E:/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-locSit.properties

@@ -73,7 +73,8 @@ spring.rabbitmq.password=guest
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -107,7 +108,7 @@ swagger.version=1.0
 
 
 #log
-logging.path=E:/log/${project.name}_log
+logging.file.path=E:/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-locSitAws.properties

@@ -68,7 +68,8 @@ spring.rabbitmq.password=123456
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -100,7 +101,7 @@ swagger.description=${swagger.title}
 swagger.version=1.0
 
 #log
-logging.path=E:/log/${project.name}_log
+logging.file.path=E:/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-pro.properties

@@ -64,7 +64,8 @@ spring.rabbitmq.password=guest
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -91,7 +92,7 @@ swagger.description=${swagger.title}
 swagger.version=1.0
 
 #log
-logging.path=/root/log/${project.name}_log
+logging.file.path=/root/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-proAws.properties

@@ -60,7 +60,8 @@ spring.rabbitmq.password=guest
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -88,7 +89,7 @@ swagger.description=${swagger.title}
 swagger.version=1.2.0
 
 #log
-logging.path=/home/log/${project.name}_log
+logging.file.path=/home/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=info
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-sit.properties

@@ -68,7 +68,8 @@ spring.rabbitmq.password=4dagecui2019$
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -94,7 +95,7 @@ swagger.description=${swagger.title}
 swagger.version=1.0
 
 #log
-logging.path=/root/log/${project.name}_log
+logging.file.path=/root/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 3 - 2
720yun_fd_manage/gis_application/src/main/resources/application-sitAws.properties

@@ -63,7 +63,8 @@ spring.rabbitmq.password=123456
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 # confirm\u0123\u02BD
-spring.rabbitmq.publisher-confirms=true
+#spring.rabbitmq.publisher-confirms=true
+spring.rabbitmq.publisher-confirm-type=correlated
 # return\uFFFD\uFFFD\uFFFD\uFFFD
 spring.rabbitmq.publisher-returns=true
 # \uFFFD\uFFFDreturn\uFFFD\uFFFD\uFFFD\u01BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
@@ -91,7 +92,7 @@ swagger.description=${swagger.title}
 swagger.version=1.0
 
 #log
-logging.path=/home/log/${project.name}_log
+logging.file.path=/home/log/${project.name}_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.gis=debug
 

+ 15 - 0
720yun_fd_manage/gis_common/pom.xml

@@ -32,6 +32,14 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+
+
+
         <!--springboot中的redis依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -155,6 +163,13 @@
             <artifactId>core</artifactId>
         </dependency>
 
+        <!-- redis-config 需要此包 -->
+        <!--<dependency>-->
+            <!--<groupId>com.fasterxml.jackson.core</groupId>-->
+            <!--<artifactId>jackson-databind</artifactId>-->
+            <!--<version>2.11.2</version>-->
+        <!--</dependency>-->
+
 
     </dependencies>
 

+ 72 - 0
720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java

@@ -0,0 +1,72 @@
+package com.gis.common.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+import org.springframework.util.Assert;
+
+import java.nio.charset.Charset;
+
+/**
+ * Redis使用FastJson序列化
+ * 
+ * @author fdkk
+ */
+public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
+{
+    @SuppressWarnings("unused")
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
+
+    private Class<T> clazz;
+
+    static
+    {
+        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
+    }
+
+    public FastJson2JsonRedisSerializer(Class<T> clazz)
+    {
+        super();
+        this.clazz = clazz;
+    }
+
+    @Override
+    public byte[] serialize(T t) throws SerializationException
+    {
+        if (t == null)
+        {
+            return new byte[0];
+        }
+        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
+    }
+
+    @Override
+    public T deserialize(byte[] bytes) throws SerializationException
+    {
+        if (bytes == null || bytes.length <= 0)
+        {
+            return null;
+        }
+        String str = new String(bytes, DEFAULT_CHARSET);
+
+        return JSON.parseObject(str, clazz);
+    }
+
+    public void setObjectMapper(ObjectMapper objectMapper)
+    {
+        Assert.notNull(objectMapper, "'objectMapper' must not be null");
+        this.objectMapper = objectMapper;
+    }
+
+    protected JavaType getJavaType(Class<?> clazz)
+    {
+        return TypeFactory.defaultInstance().constructType(clazz);
+    }
+}

+ 57 - 57
720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java

@@ -1,57 +1,57 @@
-package com.gis.common.config;
-
-import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-/**
- * Created by owen on 2021/7/16 0016 17:21
- *
- * redis 全局序列化
- * redis管理界面可以看到参数
- * 对象序列化有字段泛型字段值不丢失
- *
- * 不序列化有机会拿不到redis数据
- */
-
-@Configuration
-public class MyRedisConfig {
-
-
-
-        @Bean
-        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
-            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
-            redisTemplate.setConnectionFactory(connectionFactory);
-
-            // 使用Jackson2JsonRedisSerialize替换默认序列化
-            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
-
-            ObjectMapper objectMapper = new ObjectMapper();
-            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-
-            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
-
-            // 设置key和value的序列化规则
-            redisTemplate.setKeySerializer(new StringRedisSerializer());
-            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
-            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-            redisTemplate.setHashValueSerializer(new StringRedisSerializer());
-            redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
-
-            redisTemplate.afterPropertiesSet();
-
-            return redisTemplate;
-
-        }
-
-
-}
+//package com.gis.common.config;
+//
+//import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
+//import com.fasterxml.jackson.annotation.JsonAutoDetect;
+//import com.fasterxml.jackson.annotation.PropertyAccessor;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.data.redis.connection.RedisConnectionFactory;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+//import org.springframework.data.redis.serializer.StringRedisSerializer;
+//
+///**
+// * Created by owen on 2021/7/16 0016 17:21
+// *
+// * redis 全局序列化
+// * redis管理界面可以看到参数
+// * 对象序列化有字段泛型字段值不丢失
+// *
+// * 不序列化有机会拿不到redis数据
+// */
+//
+//@Configuration
+//public class MyRedisConfig {
+//
+//
+//
+//        @Bean
+//        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+//            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+//            redisTemplate.setConnectionFactory(connectionFactory);
+//
+//            // 使用Jackson2JsonRedisSerialize替换默认序列化
+//            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+//
+//            ObjectMapper objectMapper = new ObjectMapper();
+//            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+//            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+//
+//            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+//
+//            // 设置key和value的序列化规则
+//            redisTemplate.setKeySerializer(new StringRedisSerializer());
+//            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+//            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+//            redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+//            redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
+//
+//            redisTemplate.afterPropertiesSet();
+//
+//            return redisTemplate;
+//
+//        }
+//
+//
+//}

+ 79 - 0
720yun_fd_manage/gis_common/src/main/java/com/gis/common/config/RedisConfig.java

@@ -0,0 +1,79 @@
+package com.gis.common.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * redis配置
+ * 
+ * @author fdkk
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig extends CachingConfigurerSupport
+{
+    @Bean
+    @SuppressWarnings(value = { "unchecked", "rawtypes" })
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+    {
+        RedisTemplate<Object, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+
+        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+        serializer.setObjectMapper(mapper);
+
+        // 使用StringRedisSerializer来序列化和反序列化redis的key值
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(serializer);
+
+        // Hash的key也采用StringRedisSerializer的序列化方式
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+
+        template.afterPropertiesSet();
+        return template;
+    }
+
+    @Bean
+    public DefaultRedisScript<Long> limitScript()
+    {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptText(limitScriptText());
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+
+    /**
+     * 限流脚本
+     */
+    private String limitScriptText()
+    {
+        return "local key = KEYS[1]\n" +
+                "local count = tonumber(ARGV[1])\n" +
+                "local time = tonumber(ARGV[2])\n" +
+                "local current = redis.call('get', key);\n" +
+                "if current and tonumber(current) > count then\n" +
+                "    return tonumber(current);\n" +
+                "end\n" +
+                "current = redis.call('incr', key)\n" +
+                "if tonumber(current) == 1 then\n" +
+                "    redis.call('expire', key, time)\n" +
+                "end\n" +
+                "return tonumber(current);";
+    }
+}

+ 9 - 0
720yun_fd_manage/gis_common/src/main/java/com/gis/common/constant/RedisConstant.java

@@ -13,4 +13,13 @@ public class RedisConstant {
 
     /**定时删除空作品Key*/
     public static final String WORK_DEL = "workDel";
+
+    /**用户报告相关*/
+    public static final String REPORT_USER = "report:user:";
+
+    /**新增容量*/
+    public static final String REPORT_VOLUME = "report:addVolume:";
+
+    /**新增作品*/
+    public static final String REPORT_WORK = "report:addWork:";
 }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1118 - 108
720yun_fd_manage/gis_common/src/main/java/com/gis/common/util/RedisUtil.java


+ 34 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/ReportDto.java

@@ -0,0 +1,34 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by owen on 2021/2/22 0022 10:24
+ */
+@Data
+public class ReportDto {
+
+    @ApiModelProperty(value = "统计维度类型: add:新增 | all:总数")
+    private String infoType;
+
+
+    @NotBlank(message = "时间粒度")
+    @ApiModelProperty(value = "时间粒度,day:日 | week:周 | month:月", required = true)
+    private String timeType;
+
+    /**
+     * 开始时间
+     * 需要用字符串接收
+     */
+    @ApiModelProperty(value = "开始时间, yyyy-mm-dd", name = "startTime")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间,yyyy-mm-dd", name = "endTime")
+    private String endTime;
+
+
+}

+ 32 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/UserTrentDto.java

@@ -0,0 +1,32 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by owen on 2021/2/22 0022 10:24
+ */
+@Data
+public class UserTrentDto {
+
+
+
+    @NotBlank(message = "时间粒度")
+    @ApiModelProperty(value = "时间粒度,day:日 | week:周 | month:月", required = true)
+    private String timeType;
+
+    /**
+     * 开始时间
+     * 需要用字符串接收
+     */
+    @ApiModelProperty(value = "开始时间, yyyy-mm-dd", name = "startTime")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间,yyyy-mm-dd", name = "endTime")
+    private String endTime;
+
+
+}

+ 3 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/ReportEntity.java

@@ -20,6 +20,9 @@ public class ReportEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "类型: work:作品 | user:用户 | volume:容量")
     private String type;
 
+    @ApiModelProperty(value = "统计维度类型: add:新增 | all:总数")
+    private String infoType;
+
     @ApiModelProperty(value = "日期")
     private LocalDate day;
 

+ 36 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/po/ReportPo.java

@@ -0,0 +1,36 @@
+package com.gis.domain.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by owen on 2022/12/20 0020 11:19
+ */
+@Data
+public class ReportPo {
+
+
+
+    @NotBlank(message = "时间粒度")
+    @ApiModelProperty(value = "时间粒度,day:日 | week:周 | month:月", required = true)
+    private String timeType;
+
+    @ApiModelProperty(value = "统计维度类型: add:新增 | total:总数")
+    private String infoType;
+
+    /**
+     * 开始时间
+     * 需要用字符串接收
+     */
+    @ApiModelProperty(value = "开始时间, yyyy-mm-dd", name = "startTime")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间,yyyy-mm-dd", name = "endTime")
+    private String endTime;
+
+    @ApiModelProperty(value = "实体类型: work:作品 | user:用户 | volume:容量")
+    private String poType;
+}

+ 28 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/ReportVo.java

@@ -0,0 +1,28 @@
+package com.gis.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDate;
+
+/**
+ * Created by owen on 2022/12/20 0020 11:19
+ */
+@Data
+public class ReportVo {
+
+
+
+    @ApiModelProperty(value = "日期")
+    private String groupKey;
+
+    @ApiModelProperty(value = "全景作品数量-pano")
+    private Integer pano;
+
+    @ApiModelProperty(value = "全景作品数量-4dkk")
+    private Integer age;
+
+    @ApiModelProperty(value = "全景作品数量-mix")
+    private Integer mix;
+}

+ 3 - 0
720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/FodderMapper.java

@@ -47,4 +47,7 @@ public interface FodderMapper extends IBaseMapper<FodderEntity, Long> {
 
     @Select("select sum(file_size) from tb_fodder where is_delete=0")
     String sumSize();
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    Integer countIntSize(String format);
 }

+ 9 - 0
720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/ReportMapper.java

@@ -1,14 +1,23 @@
 package com.gis.mapper;
 
 
+import com.gis.common.mapper.provider.BaseProvider;
 import com.gis.domain.entity.ReportEntity;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 
 @Component
 @Mapper
 public interface ReportMapper extends IBaseMapper<ReportEntity, Long> {
 
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    List<Map> listMapSql(String toString);
 
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    Integer countIntSql(String format);
 }

+ 3 - 0
720yun_fd_manage/gis_mapper/src/main/java/com/gis/mapper/WorkMapper.java

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 
 @Component
@@ -48,4 +49,6 @@ public interface WorkMapper extends IBaseStrMapper<WorkEntity, String> {
 
     @Select("select id from tb_work where is_delete=0 and status=#{status}")
     List<String> getIdByStatus(int status);
+
+    Map mapSql(String format);
 }

+ 21 - 0
720yun_fd_manage/gis_oss/src/main/java/com/gis/oss/util/FileUtils.java

@@ -23,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.*;
+import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -857,6 +858,26 @@ public class FileUtils {
     }
 
 
+    /**
+     * 转换文件单位
+     * @param unit KB 默认
+     * @param num
+     * @return
+     */
+    public int convertUnit(String unit, int num){
+        String volume = num + "";
+        BigDecimal decimal = new BigDecimal(volume);
+        if ("KB".equals(unit) || StrUtil.isBlank(unit)){
+            log.info("KB: {}", volume);
+        } else if ("MB".equals(unit)){
+            decimal = decimal.divide(new BigDecimal("1024"),  BigDecimal.ROUND_HALF_UP);
+            log.info("MB: {}", decimal.toString());
+        } else if ("GB".equals(unit)){
+            decimal = decimal.divide(new BigDecimal("1024"),  BigDecimal.ROUND_HALF_UP);
+            log.info("GB: {}", decimal);
+        }
+        return Integer.valueOf(decimal.toString());
+    }
 
 
 }

+ 3 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/FodderService.java

@@ -8,6 +8,7 @@ import com.gis.domain.dto.PageDto;
 import com.gis.domain.entity.FodderEntity;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
 import java.util.List;
 
 
@@ -45,4 +46,6 @@ public interface FodderService extends IBaseService<FodderEntity, Long> {
     List<String> getSceneCodeByParentIds(String dirs);
 
     Integer getVolume(String unit);
+
+    int getTodaySize(LocalDate today , String unit);
 }

+ 8 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/ReportService.java

@@ -5,10 +5,18 @@ import com.gis.domain.dto.DirDto;
 import com.gis.domain.dto.DirMoveDto;
 import com.gis.domain.entity.DirEntity;
 import com.gis.domain.entity.ReportEntity;
+import com.gis.domain.po.ReportPo;
 
 /**
  * Created by owen on 2022/12/1 0001 15:22
  */
 public interface ReportService extends IBaseService<ReportEntity, Long>{
 
+
+
+    Result trend(ReportPo po);
+
+    Result reportWork();
+
+    Result workTrend(ReportPo po);
 }

+ 4 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkService.java

@@ -9,7 +9,9 @@ import com.gis.domain.dto.WorkDto;
 import com.gis.domain.entity.WorkEntity;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -44,4 +46,6 @@ public interface WorkService extends IBaseService<WorkEntity, String> {
 
     // 获取用户作品
     List<WorkEntity> getUserWork();
+
+    Map countByType(LocalDate today);
 }

+ 53 - 3
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/FodderServiceImpl.java

@@ -8,6 +8,7 @@ import com.gis.common.config.RabbitConfig;
 import com.gis.common.constant.CmdConstant;
 import com.gis.common.constant.ConfigConstant;
 import com.gis.common.constant.ErrorEnum;
+import com.gis.common.constant.RedisConstant;
 import com.gis.common.exception.BaseRuntimeException;
 import com.gis.common.util.*;
 import com.gis.domain.dto.*;
@@ -29,14 +30,16 @@ import org.junit.Test;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.entity.Condition;
 
 import javax.transaction.Transactional;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -48,8 +51,7 @@ import java.util.*;
 public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> implements FodderService {
 
     @Autowired
-    private FodderMapper entityMapper;
-
+    FodderMapper entityMapper;
 
     @Autowired
     RabbitTemplate rabbitTemplate;
@@ -63,15 +65,20 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
     @Autowired
     FileUtils fileUtils;
 
+    @Lazy
     @Autowired
     WorkService workService;
 
     @Autowired
     FileAndOssUtil fileAndOssUtil;
 
+    @Lazy
     @Autowired
     DirService dirService;
 
+    @Autowired
+    RedisUtil redisUtil;
+
 
 
     // 用户最大空间3G
@@ -119,6 +126,8 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         String newName = time + "." + suffix;
         String dirType = "fodder/";
         long size = file.getSize();
+//        // 2022-12-20 新增容量
+//        addSize(size);
         size = size / 1024;
         log.info("fileSize: " + size);
 
@@ -231,6 +240,17 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         return Result.success(entity);
     }
 
+//    /**
+//     * 2022-12-20 当天容量保存到redis
+//     * @param size
+//     */
+//    private void addSize(long size) {
+//        String key = RedisConstant.REPORT_VOLUME + LocalDate.now();
+//        Long aLong = redisUtil.incrBy(key, size, 1, TimeUnit.DAYS);
+//        log.info("当前节点:{} 新增容量:{} KB", key, aLong);
+//    }
+
+
 
     /**
      * 2021-04-27
@@ -380,6 +400,9 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
     public Result listAndDir(FodderPageDto param) {
 
         String userName = getUserNameForToken();
+        // 2022-12-20 记录用户登录-数据统计使用
+        userRecord(userName);
+
         String type = param.getType();
         String searchKey = param.getSearchKey();
         Long dirId = param.getDirId();
@@ -443,6 +466,24 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         return Result.success(pageInfo);
     }
 
+    /**
+     * 2022-12-20 记录用户登录-数据统计使用
+     * @param userName
+     */
+    private void userRecord(String userName) {
+        String baseKey = RedisConstant.REPORT_USER + LocalDate.now();
+        String key = baseKey +  "_" + userName;
+        log.info("该用户:{} redis key:{}", userName, key);
+        if (redisUtil.hasKey(key)){
+            return;
+        }
+
+
+        redisUtil.setEx(key, key, 1, TimeUnit.DAYS);
+        Long aLong = redisUtil.incrBy(baseKey, 1);
+        log.info("key:{}, value:{}", baseKey, aLong);
+    }
+
 
     @Override
     public void updateDirId(Long parentId, String fodderIds) {
@@ -483,6 +524,15 @@ public class FodderServiceImpl extends IBaseServiceImpl<FodderEntity, Long> impl
         return Integer.valueOf(decimal.toString());
     }
 
+    @Override
+    public int getTodaySize(LocalDate today, String unit) {
+        Integer num = entityMapper.countIntSize(StrUtil.format("select sum(file_size) from tb_fodder " +
+                "where is_delete=0 and DATA_FORMAT(create_time, '%Y-%m-%d') = '{}' ", today));
+        num = num == null ? 0 : num;
+        int gb = fileUtils.convertUnit("GB", num);
+        return gb;
+    }
+
     @Test
     public void testVolume(){
         String volume = "10250";

+ 140 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/ReportServiceImpl.java

@@ -1,14 +1,24 @@
 package com.gis.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.gis.common.util.Result;
 import com.gis.domain.entity.ReportEntity;
+import com.gis.domain.po.ReportPo;
+import com.gis.domain.vo.ReportVo;
 import com.gis.mapper.IBaseMapper;
 import com.gis.mapper.ReportMapper;
 import com.gis.service.FodderService;
 import com.gis.service.ReportService;
 import com.gis.service.WorkService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.entity.Condition;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDate;
+import java.util.*;
 
 
 /**
@@ -33,5 +43,135 @@ public class ReportServiceImpl extends IBaseServiceImpl<ReportEntity, Long> impl
     }
 
 
+    @Override
+    public Result trend(ReportPo po) {
+
+        return Result.success(getTrent(po));
+
+    }
+
+    private List<Map> getTrent(ReportPo po){
+        StringBuilder builder = new StringBuilder();
+
+
+        String startTime = po.getStartTime();
+        String endTime = po.getEndTime();
+        String timeType = po.getTimeType();
+        String type = po.getPoType();
+        String infoType = po.getInfoType();
+        if (StrUtil.isBlank(infoType)){
+            infoType = "all";
+        }
+        if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)){
+
+            if ("day".equals(timeType)){
+                builder.append("select DATE_FORMAT( day, '%Y-%m-%d' ) as groupKey, total as count, type from tb_report where is_delete=0 ");
+                builder.append(" and day between '").append(startTime).append("' and '").append(endTime).append("'");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+
+            } else if ("week".equals(timeType)){
+                builder.append(" select groupKey, sum(total) as count,type from (");
+                builder.append(" select DATE_FORMAT(DATE_ADD(day,INTERVAL- (WEEKDAY(day)) day),  '%Y-%m-%d' )  as groupKey, total,type from tb_report where is_delete=0 ");
+                builder.append(" and day between '").append(startTime).append("' and '").append(endTime).append("'");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+                builder.append(" ) as a group by groupKey");
+            } else {
+                builder.append(" select groupKey, sum(total) as count,type from (");
+                builder.append(" select DATE_FORMAT(day, '%Y-%m')  as groupKey, total,type from tb_report where is_delete=0");
+                builder.append(" and day between '").append(startTime).append("' and '").append(endTime).append("'");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+                builder.append(" ) as a group by groupKey");
+            }
+
+        } else {
+
+            if ("day".equals(timeType)){ // 默认最近30天
+                builder.append("select DATE_FORMAT( day, '%Y-%m-%d' ) as groupKey, total as count, type from tb_report where is_delete=0  and DATE(day)>=DATE_SUB(CURDATE(), INTERVAL 30 DAY)");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+            } else if ("week".equals(timeType)){ // 默认最近半年
+                builder.append(" select groupKey, sum(total) as count,type from (");
+                builder.append(" select DATE_FORMAT(DATE_ADD(day,INTERVAL- (WEEKDAY(day)) day),  '%Y-%m-%d' )  as groupKey, total,type from tb_report where is_delete=0  and DATE(day)>=DATE_SUB(CURDATE(), INTERVAL 200 DAY)");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+                builder.append(" ) as a group by groupKey");
+            } else { // 默认最近6个月
+                builder.append(" select groupKey, sum(total) as count,type from (");
+                builder.append(" select DATE_FORMAT(day, '%Y-%m')  as groupKey, total,type from tb_report where is_delete=0");
+                builder.append( " and DATE(day) >= DATE_FORMAT(DATE_SUB( now(), INTERVAL 6 MONTH),'%Y-%m')");
+                builder.append(" and type='").append(type).append("'");
+                builder.append(" and info_type='").append(infoType).append("'");
+                builder.append(" ) as a group by groupKey");
+            }
+        }
+
+
+        builder.append(" order by groupKey desc");
+
+        List<Map> res = entityMapper.listMapSql(builder.toString());
+        return res;
+    }
+
+    @Override
+    public Result reportWork() {
+        Map map = workService.countByType(null);
+        HashMap<Object, Object> res = null;
+        if (map.size() != 3){
+
+            Integer mix = convert((Integer)map.get("mix")) ;
+            Integer age = convert((Integer)map.get("4dkk")) ;
+            Integer pano = convert((Integer)map.get("pano")) ;
+
+            map.put("mix", mix);
+            map.put("age", age);
+            map.put("pano", pano);
+
+        }
+
+        return Result.success(map);
+    }
+
+    @Override
+    public Result workTrend(ReportPo po) {
+        List<Map> trent = this.getTrent(po);
+        Condition condition = new Condition(ReportEntity.class);
+        condition.and().andEqualTo("infoType", po.getInfoType());
+        condition.and().andEqualTo("type", po.getPoType());
+        List<ReportEntity> all = this.findAll(condition);
+
+        List<ReportVo> res = new ArrayList<>();
+        for (Map map : trent) {
+            for (Object key : map.keySet()) {
+                String groupKey = (String) key;
+                for (ReportEntity entity : all) {
+                    String day = entity.getDay().toString();
+                    if (groupKey.contains(day)){
+                        ReportVo vo = new ReportVo();
+                        BeanUtils.copyProperties(entity, vo);
+                        vo.setGroupKey(groupKey);
+                        res.add(vo);
+
+                    }
+                }
+            }
+        }
 
+        return Result.success(res);
+    }
+
+    private Integer convert(Integer num){
+        return num == null ? 0 : num;
+
+    }
+
+
+
+
+    private int total(String type){
+        Integer count = entityMapper.countIntSql(StrUtil.format("select sum(total) as count, type from tb_report where is_delete=0 and type='{}'", type));
+        return count == null ? 0 : count;
+    }
 }

+ 16 - 6
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java

@@ -30,16 +30,14 @@ import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.entity.Condition;
 
 import java.io.IOException;
 import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 
@@ -66,6 +64,7 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
     @Autowired
     RedisUtil redisUtil;
 
+    @Lazy
     @Autowired
     FodderService fodderService;
 
@@ -162,7 +161,6 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
         String ossKeyPath = configConstant.ossBasePath + id + "/someData.json";
 
         try {
-//            aliyunOssUtil.upload(jsonObject.toJSONString().getBytes(), ossKeyPath);
             fileAndOssUtil.upload(jsonObject.toJSONString().getBytes(), ossKeyPath);
 
         } catch (IOException e) {
@@ -218,7 +216,7 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
         this.update(entity);
 
         // 删除redis
-        redisUtil.del(RedisConstant.WORK_ID + id);
+        redisUtil.delete(RedisConstant.WORK_ID + id);
 
         // 删除无效作品数据
         delByTime();
@@ -255,6 +253,18 @@ public class WorkServiceImpl extends IBaseStrServiceImpl<WorkEntity, String> imp
     }
 
     @Override
+    public Map countByType(LocalDate today) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT type, count(*) as pcs FROM tb_work WHERE is_delete=0 and status=1");
+        if (today != null){
+            builder.append(" and DATA_FORMAT(create_time, '%Y-%m-%d') = '").append(today).append("'");
+        }
+        builder.append(" GROUP BY type");
+
+        return entityMapper.mapSql(builder.toString());
+    }
+
+    @Override
     public Result edit(SomeDataDto param) {
         long startTime = System.currentTimeMillis();
 

+ 99 - 50
720yun_fd_manage/gis_service/src/main/java/com/gis/task/VisitTask.java

@@ -1,8 +1,10 @@
 package com.gis.task;
 
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.io.FileUtil;
+import com.gis.common.constant.RedisConstant;
 import com.gis.common.util.RedisUtil;
 import com.gis.domain.entity.ReportEntity;
+import com.gis.oss.util.FileUtils;
 import com.gis.service.FodderService;
 import com.gis.service.ReportService;
 import com.gis.service.WorkService;
@@ -13,7 +15,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
-import java.util.List;
+import java.util.Map;
 
 /**
  * Created by owen on 2022/11/9 0009 16:42
@@ -35,6 +37,7 @@ public class VisitTask {
     @Autowired
     FodderService fodderService;
 
+
     /**
      * 需要在启动类加入注解
      * 每天24点检查未开始的活动
@@ -52,7 +55,15 @@ public class VisitTask {
             // 当前时间的前一天
             LocalDate yesterday = LocalDate.now().plusDays(-1);
             // 更新容量到数据库
+            allVolume(yesterday);
+            // 更新登陆趋势
+            allUser(yesterday);
+            // 更新作品信息
+            allWork(yesterday);
+            
+            // 新增部分
             addVolume(yesterday);
+            addWork(yesterday);
 
             log.warn("执行完成定时任务:redis访问量数据同步到数据库");
         } catch (Exception e) {
@@ -62,77 +73,115 @@ public class VisitTask {
     }
 
 
-//    private void visitUpdateToDb(){
-//        // 当前时间的前一天
-//        String yesterday = LocalDate.now().plusDays(-1).toString();
-//
-//        List<ProjectEntity> list = projectService.list();
-//        // String key = now + "_" + type + "_" + projectId + "_" + moduleType;
-//        VisitEntity visitEntity = null;
-//        // 每个项目
-//        for (ProjectEntity entity : list) {
-//            Long projectId = entity.getId();
-//            String visitType = entity.getVisitType();
-//            if (StrUtil.isBlank(visitType)){
-//                log.error("项目visitType为空结束本次循环, 项目id : {}", projectId);
-//                continue;
-//            }
-//            String[] split = visitType.split(",");
-//            // 每个类型
-//            for (String type : split) {
-//                String visitKey = yesterday + "_visit_" + projectId + "_" + type;
-//                visitEntity = new VisitEntity();
-//                visitEntity.setToday(yesterday);
-//                visitEntity.setModuleType(type);
-//                visitEntity.setPcsVisit(getRedisValue(visitKey));
-//                visitEntity.setProjectId(projectId);
-//                // visitEntity.setPcsStar(pcsStar);
-//
-//                visitService.save(visitEntity);
-//
-//            // 删除过期key
-//            redisUtil.delete(visitKey);
-//            }
-//        }
-//
-//    }
+
+    private void addVolume(LocalDate today) {
+        int volume = fodderService.getTodaySize(today, "GB");
+        ReportEntity entity = new ReportEntity();
+        entity.setType("volume");
+        entity.setTotal(volume); // 容量是GB
+        entity.setDay(today);
+        entity.setInfoType("add");
+        reportService.save(entity);
+        log.info("保存容量完成, 当前容量:{} GB", volume);
+        
+    }
+
+    /**
+     * 保存当天登陆用户数据
+     * @param today
+     */
+    private void allUser(LocalDate today) {
+        String key = RedisConstant.REPORT_USER + today;
+        Integer count = (Integer)redisUtil.get(key);
+        if (count == null){
+            count = 0;
+            log.error("当天用户登录次数:{} 请检查数据是否正确", count);
+        }
+
+        ReportEntity entity = new ReportEntity();
+        entity.setType("user");
+        entity.setTotal(count); // 容量是GB
+        entity.setDay(today);
+        reportService.save(entity);
+        log.info("保存用户上线数据完成, 当前数量:{} ", count);
+
+    }
+
+
+
 
     /**
      * 保存当天的素材容量
      * @param today
      */
-    private void addVolume(LocalDate today){
+    private void allVolume(LocalDate today){
 
         Integer volume = fodderService.getVolume("GB");
         ReportEntity entity = new ReportEntity();
         entity.setType("volume");
         entity.setTotal(volume); // 容量是GB
         entity.setDay(today);
+        entity.setInfoType("all");
         reportService.save(entity);
         log.info("保存容量完成, 当前容量:{} GB", volume);
 
     }
 
+    /**
+     * 保存当天的作品数量
+     * @param today
+     */
+    private void allWork(LocalDate today){
+
+       Map res =  workService.countByType(null);
+        Integer mix = convert((Integer)res.get("mix")) ;
+        Integer age = convert((Integer)res.get("4dkk")) ;
+        Integer pano = convert((Integer)res.get("pano")) ;
+
+        ReportEntity entity = new ReportEntity();
+        entity.setType("work");
+        entity.setAge(age);
+        entity.setMix(mix);
+        entity.setPano(pano);
+        int total = mix + age + pano;
+        entity.setTotal(total); // 容量是GB
+        entity.setDay(today);
+        entity.setInfoType("all");
+        reportService.save(entity);
+        log.info("保存作品完成, 当前作品数量:{} ", total);
+
+    }
+
     private void addWork(LocalDate today){
 
-//        workService.countByType();
-//        ReportEntity entity = new ReportEntity();
-//        entity.setType("work");
-//        entity.setTotal(volume); // 容量是GB
-//        entity.setDay(today);
-//        reportService.save(entity);
-//        log.info("保存容量完成, 当前容量:{} GB", volume);
+        Map res =  workService.countByType(today);
+        Integer mix = convert((Integer)res.get("mix")) ;
+        Integer age = convert((Integer)res.get("4dkk")) ;
+        Integer pano = convert((Integer)res.get("pano")) ;
+
+        ReportEntity entity = new ReportEntity();
+        entity.setType("work");
+        entity.setAge(age);
+        entity.setMix(mix);
+        entity.setPano(pano);
+        int total = mix + age + pano;
+        entity.setTotal(total); // 容量是GB
+        entity.setDay(today);
+        entity.setInfoType("add");
+        reportService.save(entity);
+        log.info("保存作品完成, 当前作品数量:{} ", total);
 
     }
 
-    private int getRedisValue(String key){
-        log.info("redis key: {}", key);
-        Integer pcsVisit = (Integer)redisUtil.get(key);
-        pcsVisit = pcsVisit == null ? 0 : pcsVisit;
-        log.info("{} 的数据:{}", key, pcsVisit);
-        return pcsVisit;
+
+
+    private Integer convert(Integer num){
+        return num == null ? 0 : num;
+
     }
 
+
+
     @Test
     public void test(){
         String a = "1";

+ 45 - 8
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/AgeController.java

@@ -1,16 +1,22 @@
 package com.gis.web.controller;
 
-import com.gis.common.service.IBaseService;
 import com.gis.common.util.Result;
 import com.gis.domain.dto.AgePageDto;
-import com.gis.domain.dto.PageDto;
+import com.gis.domain.dto.ReportDto;
+import com.gis.domain.dto.UserTrentDto;
 import com.gis.domain.entity.WorkEntity;
+import com.gis.domain.po.ReportPo;
+import com.gis.service.ReportService;
 import com.gis.service.WorkService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+import java.util.Map;
+
 /**
  * Created by owen on 2022/6/28 0028 16:56
  *
@@ -23,9 +29,10 @@ public class AgeController {
     @Autowired
     WorkService workService;
 
-
     @Autowired
-    IBaseService iBaseService;
+    ReportService reportService;
+
+
     /**
      * 获取所有场景
      * 使用超级管理员权限的
@@ -35,17 +42,47 @@ public class AgeController {
     @ApiOperation(value = "场景-列表")
     @PostMapping("/list")
     public Result<WorkEntity> list(@RequestBody AgePageDto param) {
-//        Integer isAdmin = iBaseService.getIsAdmin();
-//        BaseRuntimeException.isTrue(isAdmin != 1, 3100, "非法用户");
         return workService.search(param, true);
     }
 
     @ApiOperation(value = "场景-删除")
     @PostMapping("/remove/{id}")
     public Result remove( @PathVariable String id) {
-//        Integer isAdmin = iBaseService.getIsAdmin();
-//        BaseRuntimeException.isTrue(isAdmin != 1, 3100, "非法用户");
         return workService.remove(id);
     }
 
+
+    @ApiOperation(value = "v1.3-报表-用户活跃度")
+    @PostMapping("/report/userTrend")
+    public Result reportUser(@Valid @RequestBody UserTrentDto param) {
+        ReportPo po = new ReportPo();
+        BeanUtils.copyProperties(param, po);
+        po.setPoType("user");
+        return reportService.trend(po);
+    }
+
+
+    @ApiOperation(value = "v1.3-报表-用量趋势")
+    @PostMapping("/report/volumeTrend")
+    public Result reportVolume(@Valid @RequestBody ReportDto param) {
+        ReportPo po = new ReportPo();
+        BeanUtils.copyProperties(param, po);
+        po.setPoType("volume");
+        return reportService.trend(po);
+    }
+
+    @ApiOperation(value = "v1.3-报表-作品类型统计")
+    @GetMapping("/report/work")
+    public Result reportWork() {
+        return reportService.reportWork();
+    }
+
+    @ApiOperation(value = "v1.3-报表-作品趋势")
+    @PostMapping("/report/workTrend")
+    public Result workTrend(@Valid @RequestBody ReportDto param) {
+        ReportPo po = new ReportPo();
+        BeanUtils.copyProperties(param, po);
+        po.setPoType("work");
+        return reportService.workTrend(po);
+    }
 }

+ 1 - 1
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/LoginController.java

@@ -51,7 +51,7 @@ public class LoginController {
         if (StringUtils.isBlank(token)) {
             log.info("token is null");
         }
-        redisUtil.del(configConstant.redisTokenPrefix + token);
+        redisUtil.delete(configConstant.redisTokenPrefix + token);
         return Result.success();
     }
 

+ 10 - 2
720yun_fd_manage/pom.xml

@@ -13,7 +13,8 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.1.0.RELEASE</version>
+        <!--<version>2.1.0.RELEASE</version>-->
+        <version>2.3.4.RELEASE</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
 
@@ -31,7 +32,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
-        <spring.boot.version>2.1.0.RELEASE</spring.boot.version>
+        <spring.boot.version>2.3.4.RELEASE</spring.boot.version>
         <gis.version>1.0.0</gis.version>
         <fastjson.version>1.2.83</fastjson.version>
         <druid.version>1.1.14</druid.version>
@@ -132,6 +133,13 @@
                 <version>${spring.boot.version}</version>
             </dependency>
 
+            <!--询资料发现从SpringBoot 2.3.0之后放弃了默认对javax.validation 的支持-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-validation</artifactId>
+                <version>${spring.boot.version}</version>
+            </dependency>
+
             <!--springboot中的redis依赖-->
             <dependency>
                 <groupId>org.springframework.boot</groupId>