From 5586964c3e63f95c9e460a6a3d85d7dca408e096 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Mon, 18 Oct 2021 14:35:39 +0800 Subject: [PATCH] Merge branch 'dev' of http://blit.7drlb.com:8888/r/moral into dev --- screen-job/src/main/java/com/moral/api/mapper/InformationMapper.java | 16 + screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java | 12 screen-job/src/main/java/com/moral/api/service/DeviceService.java | 11 screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java | 11 screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java | 29 + screen-job/src/main/java/com/moral/api/service/CityWeatherService.java | 9 screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java | 5 screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java | 2 screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 10 screen-job/src/main/java/com/moral/api/entity/Information.java | 69 ++++ screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java | 47 +++ screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java | 28 + screen-job/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java | 34 ++ screen-job/src/main/java/com/moral/api/task/InformationTask.java | 269 +++++++++++++++++ screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java | 21 + screen-job/src/main/java/com/moral/api/service/InformationService.java | 27 + screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java | 12 screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java | 2 screen-job/src/main/resources/mapper/InformationMapper.xml | 17 + screen-job/src/main/resources/mapper/OrganizationMapper.xml | 29 + screen-job/src/main/java/com/moral/api/entity/Organization.java | 134 ++++++++ screen-job/src/main/java/com/moral/api/service/impl/InformationServiceImpl.java | 31 ++ screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 39 ++ screen-job/src/main/java/com/moral/api/service/OrganizationService.java | 18 + screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java | 16 + 25 files changed, 895 insertions(+), 3 deletions(-) diff --git a/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java b/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java index 3468cf7..253480b 100644 --- a/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java +++ b/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java @@ -1,11 +1,20 @@ package com.moral.api.config.mybatis; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler; +import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.HashMap; + @Configuration public class MybatisPlusConfig { + + public static ThreadLocal<String> tableName = new ThreadLocal<>(); /** * ������������ @@ -16,5 +25,24 @@ return page; } + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + + //������������ + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + + // ������������SQL��������� + DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(); + HashMap<String, TableNameHandler> map = new HashMap<>(); + map.put("history_hourly", (sql, tableName) -> tableName+this.tableName.get()); + map.put("history_five_minutely", (sql, tableName) -> tableName+this.tableName.get()); + + dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); + interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor); + + return interceptor; + } + } diff --git a/screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java b/screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java index ed6284b..897a3a9 100644 --- a/screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java +++ b/screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java @@ -1,6 +1,7 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; @@ -87,6 +88,7 @@ /** * ������ */ + @TableField(value = "`desc`") private String desc; diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java b/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java new file mode 100644 index 0000000..1e36dba --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java @@ -0,0 +1,47 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ClassName HistoryHourly + * @Description TODO + * @Author ��������� + * @Date 2021/9/14 8:53 + * @Version TODO + **/ +@Data +public class HistoryHourly extends Model<HistoryHourly> { + + private static final long serialVersionUID = 1L; + + /** + * ������mac + */ + private String mac; + + /** + * ������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + /* + * ��������� + * */ + private Integer version; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/Information.java b/screen-job/src/main/java/com/moral/api/entity/Information.java new file mode 100644 index 0000000..5909991 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/Information.java @@ -0,0 +1,69 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.time.LocalDateTime; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author moral + * @since 2021-10-11 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class Information extends Model<Information> { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Integer id; + + /** + * ������id + */ + private Integer organizationId; + + /** + * ������ + */ + private String info; + + /** + * ������������ + */ + private String type; + + /** + * ���������������1������������0��������� + */ + private String isRead; + + /** + * ������������ + */ + private LocalDateTime createTime; + + /** + * ������������ + */ + private LocalDateTime updateTime; + + /** + * ���������������1������������0������������ + */ + private String isDelete; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/Organization.java b/screen-job/src/main/java/com/moral/api/entity/Organization.java new file mode 100644 index 0000000..1415096 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/Organization.java @@ -0,0 +1,134 @@ +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 java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-10-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class Organization extends Model<Organization> { + + private static final long serialVersionUID = 1L; + + /** + * ������ + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ���Id + */ + private Integer parentId; + + /** + * admin������Id + */ + private Integer adminUserId; + + /** + * ������������ + */ + private String name; + + /** + * ������������ + */ + private Integer provinceCode; + + /** + * ������������ + */ + private String provinceName; + + /** + * ������������ + */ + private Integer cityCode; + + /** + * ������������ + */ + private String cityName; + + /** + * ��������� + */ + private Integer areaCode; + + /** + * ��������� + */ + private String areaName; + + /** + * ��������������������� + */ + private Integer locationLevelCode; + + /** + * ������������������������ + */ + private String locationLevelName; + + /** + * ������ + */ + private String address; + + /** + * ��������� + */ + private String phone; + + /** + * ������ + */ + private String email; + + /** + * ��������� + */ + private String wechat; + + /** + * ������������ + */ + private Date createTime; + + /** + * ������������ + */ + private Date updateTime; + + /** + * ������������ + */ + private Date expireTime; + + /** + * ������������ + */ + private String isDelete; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java index f30a75d..fafa3e9 100644 --- a/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java @@ -1,5 +1,8 @@ package com.moral.api.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.moral.api.entity.HistoryHourly; + import java.util.List; import java.util.Map; @@ -11,7 +14,7 @@ * @author moral * @since 2021-06-28 */ -public interface HistoryHourlyMapper { +public interface HistoryHourlyMapper extends BaseMapper<HistoryHourly> { void createTable(String timeUnits); diff --git a/screen-job/src/main/java/com/moral/api/mapper/InformationMapper.java b/screen-job/src/main/java/com/moral/api/mapper/InformationMapper.java new file mode 100644 index 0000000..b73a394 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/InformationMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.Information; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper ������ + * </p> + * + * @author moral + * @since 2021-10-11 + */ +public interface InformationMapper extends BaseMapper<Information> { + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java b/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java new file mode 100644 index 0000000..f4c72f2 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.Organization; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-10-12 + */ +public interface OrganizationMapper extends BaseMapper<Organization> { + +} diff --git a/screen-job/src/main/java/com/moral/api/service/CityWeatherService.java b/screen-job/src/main/java/com/moral/api/service/CityWeatherService.java index 46c98e8..bc57b3e 100644 --- a/screen-job/src/main/java/com/moral/api/service/CityWeatherService.java +++ b/screen-job/src/main/java/com/moral/api/service/CityWeatherService.java @@ -15,5 +15,14 @@ //������������������������insert void insertCityWeather(); + + /** + *@Description: ������city_code���time������������ + *@Param: [cityCode, time] + *@return: com.moral.api.entity.CityWeather + *@Author: lizijie + *@Date: 2021/10/14 16:52 + **/ + CityWeather getDataByCityCodeAndTime(String cityCode,String time); } diff --git a/screen-job/src/main/java/com/moral/api/service/DeviceService.java b/screen-job/src/main/java/com/moral/api/service/DeviceService.java index 90c881b..7e15c10 100644 --- a/screen-job/src/main/java/com/moral/api/service/DeviceService.java +++ b/screen-job/src/main/java/com/moral/api/service/DeviceService.java @@ -3,6 +3,8 @@ import com.moral.api.entity.Device; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * <p> * ��������� ��������� @@ -19,4 +21,13 @@ //������������������ void updateDeviceState(Device device); + /** + *@Description: ������������id������������ + *@Param: [orgId] + *@return: java.util.List<com.moral.api.entity.Device> + *@Author: lizijie + *@Date: 2021/10/14 9:54 + **/ + List<Device> getDateByOrgId(int orgId); + } diff --git a/screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java b/screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java index 5d650b4..a7410df 100644 --- a/screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java +++ b/screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java @@ -3,6 +3,8 @@ import com.moral.api.entity.GovMonitorPoint; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * <p> * ��������� @@ -13,4 +15,13 @@ */ public interface GovMonitorPointService extends IService<GovMonitorPoint> { + /** + *@Description: ������������������������������������������ + *@Param: [code] + *@return: java.util.List<com.moral.api.entity.GovMonitorPoint> + *@Author: lizijie + *@Date: 2021/10/12 14:42 + **/ + List<GovMonitorPoint> getGovMonitorPointByRegionCode(int code); + } diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java b/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java index 0e1868d..65b242f 100644 --- a/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java +++ b/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java @@ -8,4 +8,6 @@ //aqi������������������������ void insertHistoryAqi(); + HistoryAqi getHistoryApiByTimeAndGuid(String guid,String time); + } diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java index 2485f04..79b3b37 100644 --- a/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java +++ b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java @@ -1,5 +1,8 @@ package com.moral.api.service; +import com.moral.api.entity.HistoryHourly; + +import java.util.Date; import java.util.List; import java.util.Map; @@ -22,4 +25,13 @@ //��������������������������� List<Map<String, Object>> selectDailyData(Map<String, Object> params); + /** + * @Description: ������mac������������������������ + * @Param: [mac, startDate, endDate] + * @return: java.util.List<com.moral.api.entity.HistoryHourly> + * @Author: ��������� + * @Date: 2021/9/28 + */ + List<HistoryHourly> getValueByMacAndTime(String mac, Date startDate, Date endDate); + } diff --git a/screen-job/src/main/java/com/moral/api/service/InformationService.java b/screen-job/src/main/java/com/moral/api/service/InformationService.java new file mode 100644 index 0000000..1806887 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/InformationService.java @@ -0,0 +1,27 @@ +package com.moral.api.service; + +import com.moral.api.entity.Information; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.transaction.annotation.Transactional; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-10-11 + */ +public interface InformationService extends IService<Information> { + + /** + *@Description: ������������������ + *@Param: [information] + *@return: void + *@Author: lizijie + *@Date: 2021/10/15 8:45 + **/ + @Transactional + void insert(Information information); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/OrganizationService.java b/screen-job/src/main/java/com/moral/api/service/OrganizationService.java new file mode 100644 index 0000000..e92210b --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/OrganizationService.java @@ -0,0 +1,18 @@ +package com.moral.api.service; + +import com.moral.api.entity.Organization; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-10-12 + */ +public interface OrganizationService extends IService<Organization> { + + Organization getOrganizationById(int id); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java index 2343cb5..a89dba2 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java @@ -64,4 +64,16 @@ cityWeatherMapper.insert(cityWeather); } } + + @Override + public CityWeather getDataByCityCodeAndTime(String cityCode, String time) { + QueryWrapper wrapper_cityWeather = new QueryWrapper(); + wrapper_cityWeather.eq("city_code",cityCode); + wrapper_cityWeather.eq("time",time); + CityWeather cityWeather = new CityWeather(); + if (cityWeatherMapper.selectCount(wrapper_cityWeather)==1){ + cityWeather = cityWeatherMapper.selectOne(wrapper_cityWeather); + } + return cityWeather; + } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 704348c..b9366a4 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -65,4 +66,13 @@ updateWrapper.eq("id", device.getId()).set("state", device.getState()); deviceMapper.update(null, updateWrapper); } + + @Override + public List<Device> getDateByOrgId(int orgId) { + QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); + wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgId); + List<Device> devices = new ArrayList<>(); + devices = deviceMapper.selectList(wrapper_device); + return devices; + } } \ No newline at end of file diff --git a/screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java index 80333d0..3ac798f 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java @@ -1,10 +1,17 @@ package com.moral.api.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.GovMonitorPoint; import com.moral.api.mapper.GovMonitorPointMapper; import com.moral.api.service.GovMonitorPointService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import com.moral.util.RegionCodeUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; /** * <p> @@ -17,4 +24,26 @@ @Service public class GovMonitorPointServiceImpl extends ServiceImpl<GovMonitorPointMapper, GovMonitorPoint> implements GovMonitorPointService { + @Autowired(required = false) + private GovMonitorPointMapper govMonitorPointMapper; + + @Override + public List<GovMonitorPoint> getGovMonitorPointByRegionCode(int code) { + String regionName = RegionCodeUtils.regionCodeConvertToName(code); + QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); + wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE); + switch (regionName){ + case "province_code":wrapper_govMonitorPoint.eq("province_code",code); + break; + case "city_code":wrapper_govMonitorPoint.eq("city_code",code); + break; + case "area_code":wrapper_govMonitorPoint.eq("area_code",code); + break; + default: + break; + } + List<GovMonitorPoint> govMonitorPoints = new ArrayList<>(); + govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint); + return govMonitorPoints; + } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java index 7f337ff..5f96938 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java @@ -25,6 +25,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -66,21 +67,26 @@ queryWrapper.select("guid").eq("is_delete", Constants.NOT_DELETE); //������������������������������������������ List<GovMonitorPoint> govMonitorPoints = govMonitorPointService.list(queryWrapper); + Date time = DateUtils.dataToTimeStampTime(new Date(), DateUtils.yyyy_MM_dd_HH_EN); + String timeStr = DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); for (GovMonitorPoint govMonitorPoint : govMonitorPoints) { String guid = govMonitorPoint.getGuid(); ResponseEntity<String> response; try { //������������������������������ - response = restTemplate.exchange("http://chinair.market.alicloudapi.com/api/v1/air_all/station_realtime?guid={1}", HttpMethod.GET, requestEntity, String.class, guid); + response = restTemplate.exchange("http://chinair.market.alicloudapi.com/api/v1/air_all/station_realtime?guid={1}&pubtime={2}", HttpMethod.GET, requestEntity, String.class, guid, timeStr); } catch (Exception e) { continue; } String body = response.getBody(); Map<String, Object> data = JSONObject.parseObject(body, Map.class); Map<String, Object> map = (Map<String, Object>) data.get("data"); + if (ObjectUtils.isEmpty(map)) { + continue; + } HistoryAqi historyAqi = new HistoryAqi(); historyAqi.setGuid(guid); - historyAqi.setTime(DateUtils.getDate(map.get("pubtime").toString(), DateUtils.yyyy_MM_dd_HH_mm_ss_EN)); + historyAqi.setTime(time); //��������������� historyAqi.setValue(JSONObject.toJSONString(map)); historyAqiMapper.insert(historyAqi); @@ -120,4 +126,15 @@ redisTemplate.opsForHash().put(RedisConstants.AQI_DATA, guid, value); } } + + @Override + public HistoryAqi getHistoryApiByTimeAndGuid(String guid, String time) { + QueryWrapper<HistoryAqi> wrapper_historyAqi = new QueryWrapper<>(); + wrapper_historyAqi.eq("guid",guid).eq("time",time); + HistoryAqi historyAqi = new HistoryAqi(); + if (historyAqiMapper.selectCount(wrapper_historyAqi)==1){ + historyAqi = historyAqiMapper.selectOne(wrapper_historyAqi); + } + return historyAqi; + } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java index caa9bb8..7fe292a 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java @@ -2,6 +2,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.config.mybatis.MybatisPlusConfig; +import com.moral.api.entity.HistoryHourly; import com.moral.api.entity.Sensor; import com.moral.api.mapper.HistoryHourlyMapper; import com.moral.api.mapper.HistoryMinutelyMapper; @@ -9,9 +11,11 @@ import com.moral.api.service.SensorService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; +import com.moral.constant.SeparateTableType; import com.moral.util.AmendUtils; import com.moral.util.DateUtils; +import com.moral.util.MybatisPLUSUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -223,4 +227,39 @@ public List<Map<String, Object>> selectDailyData(Map<String, Object> params) { return historyHourlyMapper.selectDailyData(params); } + + /** + * @Description: ���������������������������mac��������� + * @Param: [mac, startDate, endDate] + * @return: java.util.List<com.moral.api.entity.HistoryHourly> + * @Author: ��������� + * @Date: 2021/9/23 + */ + @Override + public List<HistoryHourly> getValueByMacAndTime(String mac, Date startDate, Date endDate){ + QueryWrapper<HistoryHourly> wrapper = new QueryWrapper<>(); + wrapper.eq("mac",mac); + wrapper.between("time",startDate,endDate); + List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(startDate, endDate, SeparateTableType.MONTH); + List<HistoryHourly> datas = multiTableQuery(wrapper, tableNames); + return datas; + } + + /** + * @Description: ������������������������������������������������wrapper��������������� + * @Param: [wrapper, tableNames] + * @return: java.util.List<com.moral.api.entity.HistoryHourly> + * @Author: ��������� + * @Date: 2021/9/23 + */ + private List<HistoryHourly> multiTableQuery(QueryWrapper<HistoryHourly> wrapper,List<String> tableNames){ + List<HistoryHourly> result = new ArrayList<>(); + for (String tableName : tableNames) { + MybatisPlusConfig.tableName.set(tableName); + List<HistoryHourly> datas = historyHourlyMapper.selectList(wrapper); + result.addAll(datas); + } + MybatisPlusConfig.tableName.remove(); + return result; + } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/InformationServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/InformationServiceImpl.java new file mode 100644 index 0000000..61fd35a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/InformationServiceImpl.java @@ -0,0 +1,31 @@ +package com.moral.api.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.entity.Information; +import com.moral.api.mapper.InformationMapper; +import com.moral.api.service.InformationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * <p> + * ��������������� + * </p> + * + * @author moral + * @since 2021-10-11 + */ +@Service +public class InformationServiceImpl extends ServiceImpl<InformationMapper, Information> implements InformationService { + + @Autowired(required = false) + private InformationMapper informationMapper; + + @Override + @Transactional + public void insert(Information information) { + informationMapper.insert(information); + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java new file mode 100644 index 0000000..c4ffa83 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java @@ -0,0 +1,34 @@ +package com.moral.api.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.entity.Organization; +import com.moral.api.mapper.OrganizationMapper; +import com.moral.api.service.OrganizationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * <p> + * ��������� ��������������� + * </p> + * + * @author moral + * @since 2021-10-12 + */ +@Service +public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Organization> implements OrganizationService { + + @Autowired(required = false) + private OrganizationMapper organizationMapper; + + @Override + public Organization getOrganizationById(int id) { + QueryWrapper<Organization> wrapper_organization = new QueryWrapper<>(); + wrapper_organization.eq("is_delete",Constants.NOT_DELETE); + wrapper_organization.eq("id",id); + Organization organization = organizationMapper.selectOne(wrapper_organization); + return organization; + } +} diff --git a/screen-job/src/main/java/com/moral/api/task/InformationTask.java b/screen-job/src/main/java/com/moral/api/task/InformationTask.java new file mode 100644 index 0000000..d4d931a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/task/InformationTask.java @@ -0,0 +1,269 @@ +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 InformationTask { + + @Autowired + private OrganizationService organizationService; + + @Autowired + private GovMonitorPointService govMonitorPointService; + + @Autowired + private HistoryAqiService historyAqiService; + + @Autowired + private DeviceService deviceService; + + @Autowired + private HistoryHourlyService historyHourlyService; + + @Autowired + private CityWeatherService cityWeatherService; + + @Autowired + private InformationService informationService; + + @XxlJob("informationInsert") + public ReturnT informationInsert(){ + String params = XxlJobHelper.getJobParam(); + Map organizationIdMap = JSON.parseObject(params); + List<Integer> orgIdList = (List<Integer>) organizationIdMap.get("orgId"); + Calendar nowCalendar = Calendar.getInstance(); + Calendar beforeCalendar = Calendar.getInstance(); + /* HOUR_OF_DAY ������������������������ */ + nowCalendar.set(Calendar.HOUR_OF_DAY, nowCalendar.get(Calendar.HOUR_OF_DAY) - 1); + beforeCalendar.set(Calendar.HOUR_OF_DAY, beforeCalendar.get(Calendar.HOUR_OF_DAY) - 2); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH"); + String nowTime = df.format(nowCalendar.getTime())+":00:00"; + String beforeTime = df.format(beforeCalendar.getTime())+":00:00"; + String realTime = df.format(new Date())+":00:00"; + for (Integer orgId:orgIdList) { + if (!ObjectUtils.isEmpty(organizationService.getOrganizationById(orgId))){ + Organization organization = organizationService.getOrganizationById(orgId); + Integer locationLevelCode = organization.getLocationLevelCode(); + List<GovMonitorPoint> govMonitorPoints = govMonitorPointService.getGovMonitorPointByRegionCode(locationLevelCode); + Double PM2_5AvgBefore = null; + Double PM10AvgBefore = null; + Double O3AvgBefore = null; + Double PM2_5AvgNow = null; + Double PM10AvgNow = null; + Double O3AvgNow = null; + Double AQIAvgNow = null; + Double TVOCAvgNow = null; + Double TVOCAvgBefore = null; + if (govMonitorPoints.size()>0){ + List<Double> PM2_5ListBefore = new ArrayList<>(); + List<Double> PM10ListBefore = new ArrayList<>(); + List<Double> O3ListBefore = new ArrayList<>(); + List<Double> PM2_5ListNow = new ArrayList<>(); + List<Double> PM10ListNow = new ArrayList<>(); + List<Double> O3ListNow = new ArrayList<>(); + List<Double> AQIListNow = new ArrayList<>(); + for (GovMonitorPoint govMonitorPoint:govMonitorPoints) { + String guid = govMonitorPoint.getGuid(); + HistoryAqi beforeHistoryAqi = new HistoryAqi(); + beforeHistoryAqi = historyAqiService.getHistoryApiByTimeAndGuid(guid,beforeTime); + if (!ObjectUtils.isEmpty(beforeHistoryAqi)){ + String value = beforeHistoryAqi.getValue(); + if (!ObjectUtils.isEmpty(value)){ + JSONObject jsonObject = new JSONObject(); + jsonObject = JSONObject.parseObject(value); + if (!ObjectUtils.isEmpty(jsonObject.get("pm2_5"))){ + PM2_5ListBefore.add(Double.parseDouble(jsonObject.get("pm2_5").toString())); + } + if (!ObjectUtils.isEmpty(jsonObject.get("pm10"))){ + PM10ListBefore.add(Double.parseDouble(jsonObject.get("pm10").toString())); + } + if (!ObjectUtils.isEmpty(jsonObject.get("o3"))){ + O3ListBefore.add(Double.parseDouble(jsonObject.get("o3").toString())); + } + } + } + HistoryAqi nowHistoryAqi = new HistoryAqi(); + nowHistoryAqi = historyAqiService.getHistoryApiByTimeAndGuid(guid,nowTime); + if (!ObjectUtils.isEmpty(nowHistoryAqi)){ + String value = nowHistoryAqi.getValue(); + if (!ObjectUtils.isEmpty(value)){ + JSONObject jsonObject = JSONObject.parseObject(value); + if (!ObjectUtils.isEmpty(jsonObject.get("pm2_5"))){ + PM2_5ListNow.add(Double.parseDouble(jsonObject.get("pm2_5").toString())); + } + if (!ObjectUtils.isEmpty(jsonObject.get("pm10"))){ + PM10ListNow.add(Double.parseDouble(jsonObject.get("pm10").toString())); + } + if (!ObjectUtils.isEmpty(jsonObject.get("o3"))){ + O3ListNow.add(Double.parseDouble(jsonObject.get("o3").toString())); + } + if (!ObjectUtils.isEmpty(jsonObject.get("aqi"))){ + AQIListNow.add(Double.parseDouble(jsonObject.get("aqi").toString())); + } + } + } + } + if (PM2_5ListBefore.size()>0){ + PM2_5AvgBefore = (double)Math.round(PM2_5ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (PM10ListBefore.size()>0){ + PM10AvgBefore = (double)Math.round(PM10ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (O3ListBefore.size()>0){ + O3AvgBefore = (double)Math.round(O3ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (PM2_5ListNow.size()>0){ + PM2_5AvgNow = (double)Math.round(PM2_5ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (PM10ListNow.size()>0){ + PM10AvgNow = (double)Math.round(PM10ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (O3ListNow.size()>0){ + O3AvgNow = (double)Math.round(O3ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (AQIListNow.size()>0){ + AQIAvgNow = (double)Math.round(AQIListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + List<Device> devices = new ArrayList<>(); + devices = deviceService.getDateByOrgId(orgId); + List<Double> TVOCListNow = new ArrayList<>(); + List<Double> TVOCListBefore = new ArrayList<>(); + SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + for (Device device:devices) { + String mac = device.getMac(); + List<HistoryHourly> historyHourliesNow = new ArrayList<>(); + historyHourliesNow = historyHourlyService.getValueByMacAndTime(mac, df1.parse(nowTime), df1.parse(df.format(nowCalendar.getTime()) + ":00:01")); + if (!ObjectUtils.isEmpty(historyHourliesNow) && historyHourliesNow.size()>0){ + String value = historyHourliesNow.get(0).getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + TVOCListNow.add(Double.parseDouble(jsonObject.get("a99054").toString())); + } + List<HistoryHourly> historyHourliesBefore = new ArrayList<>(); + historyHourliesBefore = historyHourlyService.getValueByMacAndTime("p5dnd7a0392252", df1.parse(beforeTime), df1.parse(df.format(beforeCalendar.getTime()) + ":00:01")); + if (!ObjectUtils.isEmpty(historyHourliesBefore) && historyHourliesBefore.size()>0){ + String value = historyHourliesBefore.get(0).getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + TVOCListBefore.add(Double.parseDouble(jsonObject.get("a99054").toString())); + } + } + }catch (ParseException e){ + e.printStackTrace(); + } + if (TVOCListNow.size()>0){ + TVOCAvgNow = (double)Math.round(TVOCListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (TVOCListBefore.size()>0){ + TVOCAvgBefore = (double)Math.round(TVOCListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + } + String temp = ""; + String humidity = ""; + String windDir = ""; + String windScale = ""; + CityWeather cityWeather = new CityWeather(); + cityWeather = cityWeatherService.getDataByCityCodeAndTime(locationLevelCode.toString(),nowTime); + if (!ObjectUtils.isEmpty(cityWeather)){ + String value = cityWeather.getValue(); + if (!ObjectUtils.isEmpty(value)){ + JSONObject jsonObject = JSONObject.parseObject(value); + if (!ObjectUtils.isEmpty(jsonObject.get("temp"))){ + temp = jsonObject.getString("temp"); + } + if (!ObjectUtils.isEmpty(jsonObject.get("humidity"))){ + humidity = jsonObject.getString("humidity"); + } + if (!ObjectUtils.isEmpty(jsonObject.get("windDir"))){ + windDir = jsonObject.getString("windDir"); + } + if (!ObjectUtils.isEmpty(jsonObject.get("windScale "))){ + windScale = jsonObject.getString("windScale"); + } + } + } + Information information = new Information(); + JSONObject jsonObject = new JSONObject(); + String realHour = realTime.substring(11,13); + String nowHour = nowTime.substring(11,13); + String beforeHour = beforeTime.substring(11,13); + String title = "���"+realHour+"������������������"; + String airInfo = nowHour+"������"; + String AQILevel = ""; + if (!ObjectUtils.isEmpty(AQIAvgNow)){ + airInfo = airInfo + "������AQI���"+AQIAvgNow+"������������"; + if (AQIAvgNow<50 || AQIAvgNow==50){ + AQILevel = "���"; + }else if (AQIAvgNow<100 || AQIAvgNow==100){ + AQILevel = "������"; + }else if (AQIAvgNow<200 || AQIAvgNow==200){ + AQILevel = "������������"; + }else if (AQIAvgNow<300 || AQIAvgNow==300){ + AQILevel = "������������"; + }else{ + AQILevel = "������������"; + } + }else { + airInfo = airInfo + "������AQI���"+"������������"; + } + airInfo = airInfo+AQILevel+"���"; + String PM10Info = ""; + PM10Info = PM10Info+"PM10���"+PM10AvgNow+"������/������������"; + if (!ObjectUtils.isEmpty(PM10AvgBefore) && !ObjectUtils.isEmpty(PM10AvgNow)){ + String upOrDown = (PM10AvgBefore<PM10AvgNow)?"������":"������"; + PM10Info = PM10Info + upOrDown+Math.abs(PM10AvgNow-PM10AvgBefore)+"���"; + } + String PM2_5Info = ""; + PM2_5Info = PM2_5Info+"PM10���"+PM2_5AvgNow+"������/������������"; + if (!ObjectUtils.isEmpty(PM2_5AvgBefore) && !ObjectUtils.isEmpty(PM2_5AvgNow)){ + String upOrDown = (PM2_5AvgBefore<PM2_5AvgNow)?"������":"������"; + PM2_5Info = PM2_5Info + upOrDown+Math.abs(PM2_5AvgNow-PM2_5AvgBefore)+"���"; + } + String O3Info = ""; + O3Info = O3Info+"O3���"+O3AvgNow+"������/������������"; + if (!ObjectUtils.isEmpty(O3AvgBefore) && !ObjectUtils.isEmpty(O3AvgNow)){ + String upOrDown = (O3AvgBefore<PM10AvgNow)?"������":"������"; + O3Info = O3Info + upOrDown+Math.abs(O3AvgNow-O3AvgBefore)+"���"; + } + String TVOCInfo = ""; + TVOCInfo = TVOCInfo+"TVOC���������"+TVOCAvgNow+"������/������������"; + String cityWeatherInfo = ""; + cityWeatherInfo = cityWeatherInfo + "���������������������������"+temp+"������������"+humidity+"%,"+windDir+windScale+"������"; + airInfo = airInfo+"���"+beforeHour+"���������"+PM10Info+PM2_5Info+O3Info+TVOCInfo; + airInfo = airInfo.replace("null",""); + cityWeatherInfo = cityWeatherInfo.replace("null",""); + List info = new ArrayList(); + info.add(airInfo); + info.add(cityWeatherInfo); + String author = "���������������������������"; + jsonObject.put("title",title); + jsonObject.put("info",info); + jsonObject.put("author",author); + + information.setInfo(jsonObject.toString()); + information.setOrganizationId(orgId); + information.setType("0"); + informationService.insert(information); + } + } + return ReturnT.SUCCESS; + } +} diff --git a/screen-job/src/main/resources/mapper/InformationMapper.xml b/screen-job/src/main/resources/mapper/InformationMapper.xml new file mode 100644 index 0000000..6c19e80 --- /dev/null +++ b/screen-job/src/main/resources/mapper/InformationMapper.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.InformationMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.Information"> + <id column="id" property="id" /> + <result column="organization_id" property="organizationId" /> + <result column="info" property="info" /> + <result column="type" property="type" /> + <result column="is_read" property="isRead" /> + <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/OrganizationMapper.xml b/screen-job/src/main/resources/mapper/OrganizationMapper.xml new file mode 100644 index 0000000..7dca616 --- /dev/null +++ b/screen-job/src/main/resources/mapper/OrganizationMapper.xml @@ -0,0 +1,29 @@ +<?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.OrganizationMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.Organization"> + <id column="id" property="id" /> + <result column="parent_id" property="parentId" /> + <result column="admin_user_id" property="adminUserId" /> + <result column="name" property="name" /> + <result column="province_code" property="provinceCode" /> + <result column="province_name" property="provinceName" /> + <result column="city_code" property="cityCode" /> + <result column="city_name" property="cityName" /> + <result column="area_code" property="areaCode" /> + <result column="area_name" property="areaName" /> + <result column="location_level_code" property="locationLevelCode" /> + <result column="location_level_name" property="locationLevelName" /> + <result column="address" property="address" /> + <result column="phone" property="phone" /> + <result column="email" property="email" /> + <result column="wechat" property="wechat" /> + <result column="create_time" property="createTime" /> + <result column="update_time" property="updateTime" /> + <result column="expire_time" property="expireTime" /> + <result column="is_delete" property="isDelete" /> + </resultMap> + +</mapper> \ No newline at end of file -- Gitblit v1.8.0