lizijie
2022-08-18 29f4a8b88752ecbfa85125cd10644c5537a17892
风场模型统计相关代码
16 files added
497 ■■■■■ changed files
screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java 82 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/entity/WindModel.java 37 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java 37 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java 20 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/WindModelService.java 20 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java 109 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/task/WindModelTask.java 40 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml 19 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/mapper/WindModelConfigMapper.xml 12 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/mapper/WindModelMapper.xml 17 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/entity/BenchmarkWindConfig.java
New file
@@ -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;
    }
}
screen-job/src/main/java/com/moral/api/entity/WindModel.java
New file
@@ -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;
    }
}
screen-job/src/main/java/com/moral/api/entity/WindModelConfig.java
New file
@@ -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;
    }
}
screen-job/src/main/java/com/moral/api/mapper/BenchmarkWindConfigMapper.java
New file
@@ -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> {
}
screen-job/src/main/java/com/moral/api/mapper/WindModelConfigMapper.java
New file
@@ -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> {
}
screen-job/src/main/java/com/moral/api/mapper/WindModelMapper.java
New file
@@ -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);
}
screen-job/src/main/java/com/moral/api/service/BenchmarkWindConfigService.java
New file
@@ -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> {
}
screen-job/src/main/java/com/moral/api/service/WindModelConfigService.java
New file
@@ -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> {
}
screen-job/src/main/java/com/moral/api/service/WindModelService.java
New file
@@ -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();
}
screen-job/src/main/java/com/moral/api/service/impl/BenchmarkWindConfigServiceImpl.java
New file
@@ -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 {
}
screen-job/src/main/java/com/moral/api/service/impl/WindModelConfigServiceImpl.java
New file
@@ -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 {
}
screen-job/src/main/java/com/moral/api/service/impl/WindModelServiceImpl.java
New file
@@ -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);
        }
    }
}
screen-job/src/main/java/com/moral/api/task/WindModelTask.java
New file
@@ -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;
    }
}
screen-job/src/main/resources/mapper/BenchmarkWindConfigMapper.xml
New file
@@ -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>
screen-job/src/main/resources/mapper/WindModelConfigMapper.xml
New file
@@ -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>
screen-job/src/main/resources/mapper/WindModelMapper.xml
New file
@@ -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>