diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProDepartController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProDepartController.java index 0ab2665..25f3967 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProDepartController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProDepartController.java @@ -11,6 +11,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.List; @@ -106,6 +107,7 @@ public class TbProDepartController extends BaseController { * @return 删除是否成功 */ @DeleteMapping("/{id}") + public AjaxResult deleteById(@PathVariable("id") Long id) { return tbProDepartService.deleteById(id); } @@ -115,7 +117,8 @@ public class TbProDepartController extends BaseController { */ @ApiOperation("项目部管理导出") @PostMapping("/export") - public void export(HttpServletResponse response, TbProDepart tbProDepart) { + public void export(HttpServletResponse response, HttpServletRequest request,TbProDepart tbProDepart) { + String de= request.getParameter("departName"); List list = tbProDepartService.queryByPage(tbProDepart); ExcelUtil util = new ExcelUtil<>(TbProDepart.class); util.exportExcel(response, list, "项目部管理数据"); diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/config/SystemScheduleConfig.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/config/SystemScheduleConfig.java new file mode 100644 index 0000000..b93f0b2 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/config/SystemScheduleConfig.java @@ -0,0 +1,42 @@ +package com.bonus.data.config; + +import com.bonus.data.service.WatherWarnService; +import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +import javax.annotation.PostConstruct; + +/** + * 系统定时任务处理器 + * @author 黑子 + */ +@Slf4j +@EnableScheduling +@Configuration +public class SystemScheduleConfig { + + @Autowired + WatherWarnService service; + + /** + * 自动获取预警数据 + */ + @Scheduled(cron = "0 0/30 * * * ?") + @PostConstruct + private void updateWeather(){ + service.getCityWather(); + } + + + /** + * 自动更新边带状态 + */ + @Scheduled(cron = "0 0/10 * * * ?") + private void updateBdStatus(){ + service.updateBdStatus(); + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java index be34a18..bcf1775 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java @@ -14,4 +14,9 @@ public class DeviceVo { private String devName; private String devType; + + private String proName; + + private String proCode; + } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnVo.java new file mode 100644 index 0000000..16488cd --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnVo.java @@ -0,0 +1,36 @@ +package com.bonus.data.entity; + +import lombok.Data; + +/** + * 系统设备告警表 + * @author 黑子 + */ +@Data +public class WarnVo { + + private String id; + + private String warnTime; + + private String warnContent; + + private String warnType; + + private String devId; + + private String proId; + + private String proCode; + + private String remarks; + + public WarnVo(String warnTime, String warnContent, String warnType, String devId, String proCode, String remarks) { + this.warnTime = warnTime; + this.warnContent = warnContent; + this.warnType = warnType; + this.devId = devId; + this.proCode = proCode; + this.remarks = remarks; + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WatherVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WatherVo.java new file mode 100644 index 0000000..f920e0e --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WatherVo.java @@ -0,0 +1,39 @@ +package com.bonus.data.entity; + +import lombok.Data; + +/** + * 天气预警实体类 + * @author 黑子 + */ +@Data +public class WatherVo { + + private String city; + + private String createTime; + + + private String content; + + + private String type; + + + private String level; + + + private String province; + + private String day; + + public WatherVo(String city, String createTime, String content, String type, String level, String province, String day) { + this.city = city; + this.createTime = createTime; + this.content = content; + this.type = type; + this.level = level; + this.province = province; + this.day = day; + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java index b9c9202..87b639d 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java @@ -1,9 +1,6 @@ package com.bonus.data.mapper; -import com.bonus.data.entity.DevAttributeVo; -import com.bonus.data.entity.DevInfoVo; -import com.bonus.data.entity.DeviceVo; -import com.bonus.data.entity.WarnConfigVo; +import com.bonus.data.entity.*; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -97,4 +94,16 @@ public interface DataCenterMapper { * @return */ Integer getDevTypeId(DevInfoVo vo); + + /** + * 新增告警数据 + * @param vo + */ + void insertWarn(WarnVo vo); + + /** + * 更新边带状态 + * @param bdId + */ + void updateBdStatus(@Param("bdId") String bdId); } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/WatherMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/WatherMapper.java new file mode 100644 index 0000000..9694182 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/WatherMapper.java @@ -0,0 +1,30 @@ +package com.bonus.data.mapper; + +import com.bonus.data.entity.WatherVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * 天气接口处理 + * @author 黑子 + */ +@Repository +public interface WatherMapper { + + /** + * 删除当天数据 + * @param day + */ + void delWatherWrn(@Param("day") String day); + + /** + *更新数据 + * @param date + */ + void replaceWather(WatherVo date); + + /** + * 更新边带状态 + */ + void updateBdStatus(); +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java index 38dff87..103823c 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java @@ -2,6 +2,7 @@ package com.bonus.data.service; import com.alibaba.fastjson2.JSONObject; import com.alibaba.nacos.common.utils.UuidUtils; +import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.data.entity.*; @@ -43,6 +44,7 @@ public class DataCenterServiceImpl implements DataCenterService{ String bdId = mapper.getDevBdData(edgeId.toString()); if(StringUtils.isNotEmpty(bdId)){ if (StringUtils.isNotEmpty(list)) { + mapper.updateBdStatus(bdId); list.forEach(vo->{ vo.setBdId(bdId); vo.setRelType(vo.getDeviceType()); @@ -102,8 +104,9 @@ public class DataCenterServiceImpl implements DataCenterService{ if (StringUtils.isNotEmpty(list)) { list.forEach(vo->{ //先找到系统设备id - DeviceVo deviceVo=mapper.getDevInfoId( vo.getDeviceId(),bdId); + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json=""; try { json = objectMapper.writeValueAsString(vo); @@ -117,11 +120,11 @@ public class DataCenterServiceImpl implements DataCenterService{ attributeVos.clear(); DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"电池电量",vo.getCapacity(),"%","capacity","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo); - DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度X",vo.getAngleX(),"°","angle_x",isWarn(config,vo.getAngleX(),1),vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度X",vo.getAngleX(),"°","angle_x",isWarn(config,vo.getAngleX(),1,deviceVo,"角度X"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo2); - DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Y",vo.getAngleY(),"°","angle_y",isWarn(config,vo.getAngleY(),1),vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Y",vo.getAngleY(),"°","angle_y",isWarn(config,vo.getAngleY(),1,deviceVo,"角度Y"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo3); - DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Z",vo.getAngleZ(),"°","angle_z",isWarn(config,vo.getAngleZ(),1),vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Z",vo.getAngleZ(),"°","angle_z",isWarn(config,vo.getAngleZ(),1,deviceVo,"角度Z"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo4); //更新/新增设备检测信息及记录 insertOrAddDevAttribute(attributeVos); @@ -160,6 +163,7 @@ public class DataCenterServiceImpl implements DataCenterService{ for (CjDataVo vo : list) {//先找到系统设备id DeviceVo deviceVo = mapper.getDevInfoId(vo.getDeviceId(), bdId); if (ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())) { + mapper.updateBdStatus(bdId); String json = ""; try { json = objectMapper.writeValueAsString(vo); @@ -223,6 +227,7 @@ public class DataCenterServiceImpl implements DataCenterService{ //先找到系统设备id DeviceVo deviceVo = mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json; try { json = objectMapper.writeValueAsString(vo); @@ -231,12 +236,12 @@ public class DataCenterServiceImpl implements DataCenterService{ } String devId = deviceVo.getDevId(); log.info("设备注册系统id---->{}",devId); - WarnConfigVo config = mapper.getDevWarnConfig(devId); + // WarnConfigVo config = mapper.getDevWarnConfig(devId); String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); safetyHatVos.clear(); - DevAttributeVo devAttributeVo = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"经度",vo.getLon(),"%度","hat_lon","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"经度",vo.getLon(),"","hat_lon","0",vo.getDataTime(),mergerId); safetyHatVos.add(devAttributeVo); - DevAttributeVo devAttributeVo2 = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"纬度",vo.getLat(),"/度","hat_lat","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo2 = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"纬度",vo.getLat(),"","hat_lat","0",vo.getDataTime(),mergerId); safetyHatVos.add(devAttributeVo2); //更新/新增设备检测信息及记录 insertOrAddDevAttribute(safetyHatVos); @@ -262,7 +267,6 @@ public class DataCenterServiceImpl implements DataCenterService{ List list = jsonObject.getList("list",SwhjDataVo.class); ObjectMapper objectMapper=new ObjectMapper(); List attributeVos=new ArrayList<>(); - Object edgeId=jsonObject.get("edgeId"); String bdId; if(ObjectUtils.isNotEmpty(edgeId)){ @@ -276,6 +280,7 @@ public class DataCenterServiceImpl implements DataCenterService{ //先找到系统设备id DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json=""; try { json = objectMapper.writeValueAsString(vo); @@ -293,19 +298,19 @@ public class DataCenterServiceImpl implements DataCenterService{ attributeVos.add(devAttributeVo2); DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"5.0µm粒子数",vo.getGrain50(),"m³","grain_50","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo3); - DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm25",vo.getPm25(),"μg/m3","pm25","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm2.5",vo.getPm25(),"μg/m3","pm25",isWarn(config,vo.getPm25(),2,deviceVo,"pm2.5"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo4); - DevAttributeVo devAttributeVo5=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm10",vo.getPm10(),"μg/m3","pm10","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo5=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm10",vo.getPm10(),"μg/m3","pm10",isWarn(config,vo.getPm10(),3,deviceVo,"pm10"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo5); - DevAttributeVo devAttributeVo6=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"噪声",vo.getNoise(),"db","noise","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo6=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"噪声",vo.getNoise(),"db","noise",isWarn(config,vo.getNoise(),4,deviceVo,"噪声"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo6); DevAttributeVo devAttributeVo7=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"风向",vo.getWindDirection(),"","wind_direction","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo7); DevAttributeVo devAttributeVo8=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"风速",vo.getWindForce(),"m/s","wind_force","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo8); - DevAttributeVo devAttributeVo9=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"温度",vo.getAirTemperature(),"°C","air_Temperature","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo9=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"温度",vo.getAirTemperature(),"°C","air_Temperature",isWarn(config,vo.getAirTemperature(),5,deviceVo,"温度"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo9); - DevAttributeVo devAttributeVo10=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"湿度",vo.getHumidity(),"%rh","humidity","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo10=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"湿度",vo.getHumidity(),"%rh","humidity",isWarn(config,vo.getHumidity(),6,deviceVo,"湿度"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo10); DevAttributeVo devAttributeVo11=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"微正压",vo.getPositivePressure(),"Pa","positive_pressure","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo11); @@ -348,6 +353,7 @@ public class DataCenterServiceImpl implements DataCenterService{ //先找到系统设备id DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json=""; try { json = objectMapper.writeValueAsString(vo); @@ -359,13 +365,13 @@ public class DataCenterServiceImpl implements DataCenterService{ WarnConfigVo config=mapper.getDevWarnConfig(devId); String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); attributeVos.clear(); - DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"含氧量",vo.getOxygen(),"%VOL","oxygen","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"含氧量",vo.getOxygen(),"%VOL","oxygen",isWarn(config,vo.getOxygen(),7,deviceVo,"含氧量"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo); - DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"一氧化碳",vo.getCarbonMonoxide(),"ppm","carbon_monoxide","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"一氧化碳",vo.getCarbonMonoxide(),"ppm","carbon_monoxide",isWarn(config,vo.getCarbonMonoxide(),8,deviceVo,"一氧化碳"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo2); - DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"可燃气体",vo.getCombustible(),"%LEL","combustible","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"可燃气体",vo.getCombustible(),"%LEL","combustible",isWarn(config,vo.getCombustible(),9,deviceVo,"可燃气体"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo3); - DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"硫化氢",vo.getHydrothion(),"ppm","hydrothion","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"硫化氢",vo.getHydrothion(),"ppm","hydrothion",isWarn(config,vo.getHydrothion(),10,deviceVo,"硫化氢"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo4); //更新/新增设备检测信息及记录 insertOrAddDevAttribute(attributeVos); @@ -404,6 +410,7 @@ public class DataCenterServiceImpl implements DataCenterService{ //先找到系统设备id DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json=""; try { json = objectMapper.writeValueAsString(vo); @@ -417,7 +424,7 @@ public class DataCenterServiceImpl implements DataCenterService{ attributeVos.clear(); DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"电量",vo.getCapacity(),"%VOL","capacity","0",vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo); - DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"拉力",vo.getTractionData(),"/KN","traction_data","0",vo.getDataTime(),mergerId); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"拉力",vo.getTractionData(),"/KN","traction_data",isWarn(config,vo.getTractionData(),11,deviceVo,"拉力"),vo.getDataTime(),mergerId); attributeVos.add(devAttributeVo2); //更新/新增设备检测信息及记录 insertOrAddDevAttribute(attributeVos); @@ -455,6 +462,7 @@ public class DataCenterServiceImpl implements DataCenterService{ //先找到系统设备id DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); String json=""; try { json = objectMapper.writeValueAsString(vo); @@ -538,41 +546,129 @@ public class DataCenterServiceImpl implements DataCenterService{ * 判断是否告警 * @return */ - public String isWarn(WarnConfigVo config,String val,int type ){ + public String isWarn(WarnConfigVo config,String val,int type ,DeviceVo deviceVo,String warn){ try{ if(ObjectUtils.isNotEmpty(config) && type==1 && ObjectUtils.isNotEmpty(val)){ BigDecimal max=config.getConfigVal1Max(); BigDecimal min=config.getConfigVal1Min(); BigDecimal value=new BigDecimal(val); - if(max.compareTo(value)<0 || min.compareTo(value)>0 ){ + //设备告警 + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"倾角异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + } + if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"倾角异常",warn+"低于阈值",DateUtils.getTime()); return "1"; } }else if(ObjectUtils.isNotEmpty(config) && type==2 && ObjectUtils.isNotEmpty(val)){ - BigDecimal max=config.getConfigVal1Max(); - BigDecimal min=config.getConfigVal1Min(); + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); BigDecimal value=new BigDecimal(val); - if(max.compareTo(value)<0 || min.compareTo(value)>0 ){ + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM2.5异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM2.5异常",warn+"低于阈值",DateUtils.getTime()); return "1"; } }else if(ObjectUtils.isNotEmpty(config) && type==3 && ObjectUtils.isNotEmpty(val)){ - BigDecimal max=config.getConfigVal1Max(); - BigDecimal min=config.getConfigVal1Min(); + BigDecimal max=config.getConfigVal5Max(); + BigDecimal min=config.getConfigVal5Min(); BigDecimal value=new BigDecimal(val); - if(max.compareTo(value)<0 || min.compareTo(value)>0 ){ + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM10异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM10异常",warn+"低于阈值",DateUtils.getTime()); return "1"; } }else if(ObjectUtils.isNotEmpty(config) && type==4 && ObjectUtils.isNotEmpty(val)){ - BigDecimal max=config.getConfigVal1Max(); - BigDecimal min=config.getConfigVal1Min(); + BigDecimal max=config.getConfigVal3Max(); + BigDecimal min=config.getConfigVal3Min(); BigDecimal value=new BigDecimal(val); - if(max.compareTo(value)<0 || min.compareTo(value)>0 ){ + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"噪声异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"噪声异常",warn+"低于阈值",DateUtils.getTime()); return "1"; } }else if(ObjectUtils.isNotEmpty(config) && type==5 && ObjectUtils.isNotEmpty(val)){ BigDecimal max=config.getConfigVal1Max(); BigDecimal min=config.getConfigVal1Min(); BigDecimal value=new BigDecimal(val); - if(max.compareTo(value)<0 || min.compareTo(value)>0 ){ + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"温度异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"温度异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==6 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal2Max(); + BigDecimal min=config.getConfigVal2Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"湿度异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"湿度异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==7 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal1Max(); + BigDecimal min=config.getConfigVal1Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"含氧量异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"含氧量异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==8 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal2Max(); + BigDecimal min=config.getConfigVal2Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"一氧化碳异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"一氧化碳异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==9 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal3Max(); + BigDecimal min=config.getConfigVal3Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"可燃气体异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"可燃气体异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==10 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"硫化氢异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"硫化氢异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==11 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"拉力异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"拉力异常",warn+"低于阈值",DateUtils.getTime()); return "1"; } } @@ -583,4 +679,20 @@ public class DataCenterServiceImpl implements DataCenterService{ return "0"; } + /** + * 设备告警数据插入 + * @param devId + * @param + * @param warnType + * @param warnContent + * @param warnTime + */ + public void insertWarn(String devId,String proCode,String warnType,String warnContent,String warnTime){ + try{ + WarnVo vo=new WarnVo(warnTime,warnContent,warnType,devId,proCode,""); + mapper.insertWarn(vo); + }catch (Exception e){ + log.error(e.toString(),e); + } + } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/WatherWarnService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/WatherWarnService.java new file mode 100644 index 0000000..052e673 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/WatherWarnService.java @@ -0,0 +1,195 @@ +package com.bonus.data.service; + +import cn.hutool.core.date.DateTime; +import com.alibaba.fastjson2.JSON; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.data.entity.WatherVo; +import com.bonus.data.mapper.WatherMapper; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 天气预警抓取 + */ +@Service +public class WatherWarnService { + + private static final Logger log = LoggerFactory.getLogger(WatherWarnService.class); + /** + * 搜索城市 + */ + // static String CITY = "合肥市@阜阳市@安庆市@滁州市@六安市@宿州市@宣城市@芜湖市@池州市@淮南市@黄山市@蚌埠市@亳州市@淮北市@铜陵市@马鞍山市"; + + static String CITY =""; + /** + * 所有城市灾害预警列表 + */ + final static String ALL_CITY_URL = "http://product.weather.com.cn/alarm/grepalarm_cn.php"; + + /** + * 搜索城市灾害预警数据页面 + */ + final static String VALUE_URL = "http://product.weather.com.cn/alarm/webdata/"; + /** + * 时间戳 + */ + static long TIME_STAMP = System.currentTimeMillis(); + + @Autowired + private WatherMapper mapper; + + + + /** + * 数据信息接口 + * @param + */ + public void getCityWather(){ + try{ + String url = ALL_CITY_URL + "?_=" + TIME_STAMP; + String allWarningCity = getWarnCityList(url); + if (allWarningCity == null) { + return; + } + List> data = getCityLists(allWarningCity); + List citys=Arrays.asList(CITY.split("@")); + for (String city:citys) { + String realUrl = getSearchCityUrl(data,city); + if (realUrl == null || "".equals(realUrl)) { + mapper.delWatherWrn(DateUtils.getDate()); + } else { + String wholeUrl = VALUE_URL + realUrl + "?_=" + TIME_STAMP; + Map map = dealNewUrl(wholeUrl); + System.out.println("预警内容: "+map.get("ISSUECONTENT")+"类型:"+map.get("SIGNALTYPE")+"等级:"+map.get("SIGNALLEVEL")); + String time=map.get("ISSUETIME");//时间 + String content=map.get("ISSUECONTENT").split("(预警信息来源")[0]; + String type=map.get("SIGNALTYPE")+"预警"; + String level=map.get("SIGNALLEVEL"); + String prov=map.get("PROVINCE"); + WatherVo vo=new WatherVo(prov,time,content,type,level,prov,DateUtils.getDate()); + mapper.replaceWather(vo); + + } + } + }catch (Exception e){ + log.error(e.toString(),e); + } + } + + + /** + * 处理所有城市灾害列表页面 + * + * @param url + * @return + */ + public static String getWarnCityList(String url) { + String allWeatherInfo = null; + CloseableHttpClient client; + client = HttpClientBuilder.create().build(); + + HttpGet get = new HttpGet(url); + RequestConfig config = RequestConfig.custom() + .setConnectTimeout(10*1000) //连接超时时间 + .setConnectionRequestTimeout(6000) //从连接池中取的连接的最长时间 + .setSocketTimeout(2*60*1000) //数据传输的超时时间 + .build(); + get.setConfig(config); + HttpResponse response; + try { + response = client.execute(get); + if (response != null) { + HttpEntity entity = response.getEntity(); + allWeatherInfo = EntityUtils.toString(entity, "UTF-8"); + } else { + System.out.println("全国所有城市都没有预警或者中国预警网错误"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return allWeatherInfo; + } + + /** + * 获得城市列表 + * @param allWeatherInfo + * @return + */ + private static List> getCityLists(String allWeatherInfo) { + String[] split = allWeatherInfo.split("="); + String value = split[1]; + String substring = value.substring(0, value.length() - 1); + Map>> jsonMap = JSON.parseObject(substring, Map.class); + return jsonMap.get("data"); + } + + /** + * 得到搜索城市的url + * + * @param data + * @return + */ + public static String getSearchCityUrl(List> data, String city) { + String realUrl = ""; + List> sortedList = data.stream() + .filter(strings -> strings.get(0).contains(city)) + .sorted(Comparator.comparing(s -> s.get(0).length())) + .limit(1) + .collect(Collectors.toList()); + if (sortedList.isEmpty()) { + return realUrl; + } + realUrl = sortedList.get(0).get(1); + return realUrl; + } + + /** + * 访问城市url + * + * @param url + * @return + */ + public static Map dealNewUrl(String url) { + Map map=new HashMap<>(16); + CloseableHttpClient client; + client = HttpClients.createDefault(); + HttpGet get = new HttpGet(url); + HttpResponse response; + try { + response = client.execute(get); + HttpEntity entity = response.getEntity(); + if (entity != null) { + String string = EntityUtils.toString(entity, "UTF-8"); + // System.out.println("搜索城市数据: " + string); + String[] split = string.split("="); + String s = split[1]; + map = JSON.parseObject(s, Map.class); + } + } catch (IOException e) { + e.printStackTrace(); + } + return map; + } + + public void updateBdStatus() { + try{ + mapper.updateBdStatus(); + }catch (Exception e){ + log.error(e.toString()); + } + } +} diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/base/TbPeopleMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/base/TbPeopleMapper.xml index 4be1115..70fde6e 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/base/TbPeopleMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/base/TbPeopleMapper.xml @@ -142,14 +142,12 @@ device.dev_code as devCode, MAX(CASE WHEN tda.jc_name = '经度' THEN tda.jc_value END) AS lon, MAX(CASE WHEN tda.jc_name = '纬度' THEN tda.jc_value END) AS lat - FROM tb_people tp LEFT JOIN tb_team tt ON tt.id = tp.team_id AND tt.del_flag = 0 LEFT JOIN tb_project project ON project.id = tt.pro_id AND project.del_flag = 0 LEFT JOIN tb_device device ON tp.dev_id = device.id AND device.del_flag = 0 LEFT JOIN tb_dev_attribute tda ON tda.dev_id = tp.dev_id AND tda.del_flag = 0 - WHERE tp.del_flag = 0 AND project.id = #{proId} GROUP BY tp.id diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml index 971dee8..646fb32 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml @@ -36,6 +36,13 @@ dev_id,dev_data,sys_time )VALUES (#{devId},#{devJson},now()) + + INSERT INTO tb_warn( + warn_time,warn_content, + warn_type, dev_id, state, + pro_code, remarks + )values (#{warnTime},#{warnContent},#{warnType},#{devId},0,#{proId},#{remarks}) + update tb_device set @@ -53,6 +60,12 @@ jc_value=#{jcValue},jc_time=#{jcTime},is_warn=#{isWarn} where id=#{attributeId} + + + update tb_bd_device_record + set dev_status='1',status_time=now() + WHERE dev_code=#{bdId} + SELECT tddr.id, - tddr.dev_name AS devName, - tddr.create_time AS warnTime, - tddr.attribute_name AS warnType, - tddr.attribute_val AS warnValue, - tddr.dev_json AS warnContent, - tp.pro_name AS proName, - td.dev_code AS devCode + ANY_VALUE(tddr.dev_name) AS devName, + ANY_VALUE(tddr.create_time) AS warnTime, + ANY_VALUE(tddr.attribute_name) AS warnType, + ANY_VALUE(tddr.attribute_val) AS warnValue, + ANY_VALUE( tddr.dev_json) AS warnContent, + ANY_VALUE( tp.pro_name) AS proName, + ANY_VALUE( td.dev_code) AS devCode FROM tb_dev_data_record tddr LEFT JOIN tb_device td ON tddr.dev_id = td.id LEFT JOIN tb_bd_device_record tbdr ON td.dev_code = tbdr.dev_code