From 29f4a8b88752ecbfa85125cd10644c5537a17892 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Thu, 18 Aug 2022 15:23:17 +0800
Subject: [PATCH] 风场模型统计相关代码

---
 screen-job/src/main/java/com/moral/api/entity/WindModel.java                            |   37 ++++
 screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java              |   16 +
 screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java          |   16 +
 screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java                |   16 +
 screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java     |   20 ++
 screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java           |  109 ++++++++++++
 screen-job/src/main/resources/mapper/WindModelConfigMapper.xml                          |   12 +
 screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java                  |   82 +++++++++
 screen-job/src/main/java/com/moral/api/task/WindModelTask.java                          |   40 ++++
 screen-job/src/main/resources/mapper/WindModelMapper.xml                                |   17 +
 screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java                      |   37 ++++
 screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml                      |   19 ++
 screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java |   20 ++
 screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java                      |   20 ++
 screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java            |   16 +
 screen-job/src/main/java/com/moral/api/service/WindModelService.java                    |   20 ++
 16 files changed, 497 insertions(+), 0 deletions(-)

diff --git a/screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java b/screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java
new file mode 100644
index 0000000..df09a08
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java
@@ -0,0 +1,82 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BenchmarkWindConfig extends Model<BenchmarkWindConfig> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * ������
+     */
+    private String name;
+
+    /**
+     * ������
+     */
+    private String benchmark;
+
+    /**
+     * ������������������������
+     */
+    private String preservation;
+
+    /**
+     * ���������������������
+     */
+    private String destinationTab;
+
+    /**
+     * ������id
+     */
+    private Integer organizationId;
+
+    /**
+     * ������������
+     */
+    private String regionCode;
+
+    /**
+     * ������������
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * ������������
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * ������������
+     */
+    private String isDelete;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/WindModel.java b/screen-job/src/main/java/com/moral/api/entity/WindModel.java
new file mode 100644
index 0000000..a243f5f
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/WindModel.java
@@ -0,0 +1,37 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WindModel extends Model<WindModel> {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String json;
+
+    private String value;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java b/screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java
new file mode 100644
index 0000000..40c8482
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java
@@ -0,0 +1,37 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WindModelConfig extends Model<WindModelConfig> {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer organizationId;
+
+    private String isDelete;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java b/screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java
new file mode 100644
index 0000000..5336d26
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.BenchmarkWindConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+public interface BenchmarkWindConfigMapper extends BaseMapper<BenchmarkWindConfig> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java b/screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java
new file mode 100644
index 0000000..feb9745
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.WindModelConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-18
+ */
+public interface WindModelConfigMapper extends BaseMapper<WindModelConfig> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java b/screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java
new file mode 100644
index 0000000..8b6b06f
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java
@@ -0,0 +1,20 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.WindModel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+public interface WindModelMapper extends BaseMapper<WindModel> {
+
+    void insert(Map map);
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java b/screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java
new file mode 100644
index 0000000..8d82e78
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java
@@ -0,0 +1,16 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.BenchmarkWindConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+public interface BenchmarkWindConfigService extends IService<BenchmarkWindConfig> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java b/screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java
new file mode 100644
index 0000000..f9119e2
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java
@@ -0,0 +1,16 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.WindModelConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-18
+ */
+public interface WindModelConfigService extends IService<WindModelConfig> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/WindModelService.java b/screen-job/src/main/java/com/moral/api/service/WindModelService.java
new file mode 100644
index 0000000..230b409
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/WindModelService.java
@@ -0,0 +1,20 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.WindModel;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+public interface WindModelService extends IService<WindModel> {
+
+    void windFieldStatistics();
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java
new file mode 100644
index 0000000..94ad2da
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java
@@ -0,0 +1,20 @@
+package com.moral.api.service.impl;
+
+import com.moral.api.entity.BenchmarkWindConfig;
+import com.moral.api.mapper.BenchmarkWindConfigMapper;
+import com.moral.api.service.BenchmarkWindConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+@Service
+public class BenchmarkWindConfigServiceImpl extends ServiceImpl<BenchmarkWindConfigMapper, BenchmarkWindConfig> implements BenchmarkWindConfigService {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java
new file mode 100644
index 0000000..d64c146
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java
@@ -0,0 +1,20 @@
+package com.moral.api.service.impl;
+
+import com.moral.api.entity.WindModelConfig;
+import com.moral.api.mapper.WindModelConfigMapper;
+import com.moral.api.service.WindModelConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-18
+ */
+@Service
+public class WindModelConfigServiceImpl extends ServiceImpl<WindModelConfigMapper, WindModelConfig> implements WindModelConfigService {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java
new file mode 100644
index 0000000..0c8e08c
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java
@@ -0,0 +1,109 @@
+package com.moral.api.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.BenchmarkWindConfig;
+import com.moral.api.entity.Device;
+import com.moral.api.entity.WindModel;
+import com.moral.api.entity.WindModelConfig;
+import com.moral.api.mapper.BenchmarkWindConfigMapper;
+import com.moral.api.mapper.DeviceMapper;
+import com.moral.api.mapper.WindModelConfigMapper;
+import com.moral.api.mapper.WindModelMapper;
+import com.moral.api.service.WindModelService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.constant.Constants;
+import com.moral.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2022-08-10
+ */
+@Service
+public class WindModelServiceImpl extends ServiceImpl<WindModelMapper, WindModel> implements WindModelService {
+
+    @Autowired
+    private BenchmarkWindConfigMapper benchmarkWindConfigMapper;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Autowired
+    private WindModelMapper windModelMapper;
+
+    @Autowired
+    private DeviceMapper deviceMapper;
+
+    @Autowired
+    private WindModelConfigMapper windModelConfigMapper;
+
+    @Override
+    public void windFieldStatistics() {
+        QueryWrapper<WindModelConfig> windModelConfigQueryWrapper = new QueryWrapper<>();
+        windModelConfigQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
+        List<WindModelConfig> windModelConfigs = windModelConfigMapper.selectList(windModelConfigQueryWrapper);
+        List<Integer> orgIdList = windModelConfigs.stream().map(WindModelConfig::getOrganizationId).collect(Collectors.toList());
+        QueryWrapper<BenchmarkWindConfig> benchmarkWindConfigQueryWrapper = new QueryWrapper<>();
+        benchmarkWindConfigQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
+        benchmarkWindConfigQueryWrapper.in("organization_id",orgIdList);
+        List<Map<String, Object>> benchmarkWindConfigMaps = benchmarkWindConfigMapper.selectMaps(benchmarkWindConfigQueryWrapper);
+        for (Map<String, Object> benchmarkWindConfig:benchmarkWindConfigMaps) {
+            String benchmark = benchmarkWindConfig.get("benchmark").toString();
+            String preservation = benchmarkWindConfig.get("preservation").toString();
+            JSONObject benchmarkJson = JSONObject.parseObject(benchmark);
+            JSONObject preservationJson = JSONObject.parseObject(preservation);
+            Iterator benchmarkJsonIter = benchmarkJson.entrySet().iterator();
+            Iterator preservationJsonIter = preservationJson.entrySet().iterator();
+            JSONObject windModelJson = new JSONObject();
+            while (benchmarkJsonIter.hasNext()) {
+                Map.Entry entry = (Map.Entry) benchmarkJsonIter.next();
+                if (redisTemplate.opsForHash().hasKey("data_second",entry.getValue())){
+                    Object benchmarkObject = redisTemplate.opsForHash().get("data_second",entry.getValue());
+                    Map benchmarkMap = JSONObject.parseObject(JSONObject.toJSONString(benchmarkObject), Map.class);
+                    windModelJson.put(entry.getKey().toString(),benchmarkMap.get("a01008"));
+                }
+            }
+            JSONObject windModelValue = new JSONObject();
+            while (preservationJsonIter.hasNext()) {
+                Map.Entry entry = (Map.Entry) preservationJsonIter.next();
+                if (redisTemplate.opsForHash().hasKey("data_second",entry.getValue())){
+                    Object preservationObject = redisTemplate.opsForHash().get("data_second",entry.getValue());
+                    QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
+                    deviceQueryWrapper.eq("is_delete", Constants.NOT_DELETE);
+                    deviceQueryWrapper.eq("mac",entry.getValue());
+                    Device device = deviceMapper.selectOne(deviceQueryWrapper);
+                    Map preservationMap = JSONObject.parseObject(JSONObject.toJSONString(preservationObject), Map.class);
+                    Object[] preservationArray = new Object[4];
+                    preservationArray[0] = device.getLongitude();
+                    preservationArray[1] = device.getLatitude();
+                    preservationArray[2] = preservationMap.get("a01007");
+                    preservationArray[3] = preservationMap.get("a01008");
+                    windModelValue.put(entry.getKey().toString(),preservationArray);
+                }
+            }
+            int dayOfMonth = DateUtils.getDay(new Date());
+            int remainder = dayOfMonth % 15;
+            String remainderStr = "";
+            if (remainder<10){
+                remainderStr = "0"+remainder;
+            }else {
+                remainderStr = remainder+"";
+            }
+            Map<String,Object> insertMap = new HashMap<>();
+            insertMap.put("destinationTab",benchmarkWindConfig.get("destination_tab").toString()+remainderStr);
+            insertMap.put("json",windModelJson.toJSONString());
+            insertMap.put("value",windModelValue.toJSONString());
+            windModelMapper.insert(insertMap);
+        }
+    }
+}
diff --git a/screen-job/src/main/java/com/moral/api/task/WindModelTask.java b/screen-job/src/main/java/com/moral/api/task/WindModelTask.java
new file mode 100644
index 0000000..3be4c83
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/task/WindModelTask.java
@@ -0,0 +1,40 @@
+package com.moral.api.task;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.moral.api.entity.*;
+import com.moral.api.service.*;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @program: screen
+ * @description: ������������������������������
+ * @author: lizijie
+ * @create: 2021-10-12 08:53
+ **/
+@Component
+public class WindModelTask {
+
+    @Autowired
+    private WindModelService windModelService;
+
+    @XxlJob("windModelInsert")
+    public ReturnT windModelInsert(){
+        try {
+            windModelService.windFieldStatistics();
+        } catch (Exception e) {
+            XxlJobHelper.log(e.getMessage());
+            return new ReturnT(ReturnT.FAIL_CODE, e.getMessage());
+        }
+        return ReturnT.SUCCESS;
+    }
+}
diff --git a/screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml b/screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml
new file mode 100644
index 0000000..5016bd5
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml
@@ -0,0 +1,19 @@
+<?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.moral.api.mapper.BenchmarkWindConfigMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.BenchmarkWindConfig">
+                    <id column="id" property="id" />
+                    <result column="name" property="name" />
+                    <result column="benchmark" property="benchmark" />
+                    <result column="preservation" property="preservation" />
+                    <result column="destination_tab" property="destinationTab" />
+                    <result column="organization_id" property="organizationId" />
+                    <result column="region_code" property="regionCode" />
+                    <result column="create_time" property="createTime" />
+                    <result column="update_time" property="updateTime" />
+                    <result column="is_delete" property="isDelete" />
+        </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/WindModelConfigMapper.xml b/screen-job/src/main/resources/mapper/WindModelConfigMapper.xml
new file mode 100644
index 0000000..196403b
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/WindModelConfigMapper.xml
@@ -0,0 +1,12 @@
+<?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.moral.api.mapper.WindModelConfigMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.WindModelConfig">
+                    <id column="id" property="id" />
+                    <result column="organization_id" property="organizationId" />
+                    <result column="is_delete" property="isDelete" />
+        </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/WindModelMapper.xml b/screen-job/src/main/resources/mapper/WindModelMapper.xml
new file mode 100644
index 0000000..51bec5d
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/WindModelMapper.xml
@@ -0,0 +1,17 @@
+<?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.moral.api.mapper.WindModelMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.WindModel">
+                    <id column="id" property="id" />
+                    <result column="json" property="json" />
+                    <result column="value" property="value" />
+        </resultMap>
+
+    <insert id="insert" parameterType="java.util.Map">
+        insert into wind_model_${destinationTab}(json,value)
+        values (#{json},#{value})
+    </insert>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0