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>