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