diff --git a/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java index 71ea7e2a..ff54d824 100644 --- a/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java +++ b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java @@ -53,4 +53,9 @@ public class RedisKeyConstants * 设备在线监测 * */ public static final String DEVICE_ONLINE = "deviceOnline"; + + /** + * 高速云导入事件列表 + */ + public static final String SDHS_EVENT = "sdhsEvent"; } diff --git a/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java b/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java new file mode 100644 index 00000000..ebd5cc4c --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java @@ -0,0 +1,35 @@ +package com.zc.business.controller; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.zc.business.service.IDcSdhsEventService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +/** + * @Description 高速云事件分析Controller + * + * @author liuwenge + * @date 2024/08/15 16:38 + */ +@Api(tags = "高速云事件分析") +@RestController +@RequestMapping("/business/sdhsEvent") +public class DcSdhsEventController { + + + @Autowired + private IDcSdhsEventService dcSdhsEventService; + + @ApiOperation("导入数据") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception + { + return dcSdhsEventService.importData(file); + } + +} diff --git a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java index 8d45cdd3..c34c031e 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java @@ -105,12 +105,14 @@ public class DcDevice { @ApiModelProperty("子类型") @Excel(name = "子类型", readConverterExp = "1-1=高清网络枪型固定摄像机,1-2=高清网络球形摄像机,1-3=桥下高清网络球形摄像机,1-4=360°全景摄像机,1-5=180°全景摄像机,2-1=门架式可变信息标志,2-2=站前可变信息标志,2-3=雨棚可变信息标志,2-4=站前悬臂式可变信息标") private String childType; - @TableField(exist = false) + @ApiModelProperty("经度") + @Excel(name = "经度") private String longitude; + @ApiModelProperty("维度") + @Excel(name = "维度") + private String latitude; @TableField(exist = false) private String sumAll; - @TableField(exist = false) - private String latitude; //设备厂商 @TableField(exist = false) private String manufacturer; diff --git a/zc-business/src/main/java/com/zc/business/domain/DcSdhsEvent.java b/zc-business/src/main/java/com/zc/business/domain/DcSdhsEvent.java new file mode 100644 index 00000000..1ea35a4c --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/domain/DcSdhsEvent.java @@ -0,0 +1,232 @@ +package com.zc.business.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 预警信息对象 dc_warning + * + * @author ruoyi + * @date 2024-01-13 + */ +public class DcSdhsEvent extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 预警编号 */ + private Integer id; + + /** 所属路线 */ + @Excel(name = "所属路线") + private String road; + + /** 机构 */ + @Excel(name = "机构") + private String dept; + + /** 事件类型 */ + @Excel(name = "事件类型") + private String eventType; + + /** 开始时间 */ + @Excel(name = "开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** 结束时间 */ + @Excel(name = "结束时间", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** 状态 */ + @Excel(name = "状态") + private String status; + + /** 事件来源 */ + @Excel(name = "事件来源") + private String source; + + /** 标题 */ + @Excel(name = "标题") + private String title; + + /** 详细类型 */ + @Excel(name = "详细类型") + private String eventSubclass; + + /** 车辆类型 */ + @Excel(name = "车辆类型") + private String carType; + + /** 车辆数量 */ + @Excel(name = "车数量") + private String carNum; + + /** 是否多车事故 */ + private String multiVehicle; + + /** 方向 */ + @Excel(name = "方向") + private String direction; + + /** 桩号 */ + @Excel(name = "桩号") + private String stakeMark; + + /** 天气 */ + @Excel(name = "天气") + private String weather; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRoad() { + return road; + } + + public void setRoad(String road) { + this.road = road; + } + + public String getDept() { + return dept; + } + + public void setDept(String dept) { + this.dept = dept; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getEventSubclass() { + return eventSubclass; + } + + public void setEventSubclass(String eventSubclass) { + this.eventSubclass = eventSubclass; + } + + public String getCarType() { + return carType; + } + + public void setCarType(String carType) { + this.carType = carType; + } + + public String getCarNum() { + return carNum; + } + + public void setCarNum(String carNum) { + this.carNum = carNum; + } + + public String getMultiVehicle() { + return multiVehicle; + } + + public void setMultiVehicle(String multiVehicle) { + this.multiVehicle = multiVehicle; + } + + public String getDirection() { + return direction; + } + + public void setDirection(String direction) { + this.direction = direction; + } + + public String getStakeMark() { + return stakeMark; + } + + public void setStakeMark(String stakeMark) { + this.stakeMark = stakeMark; + } + + public String getWeather() { + return weather; + } + + public void setWeather(String weather) { + this.weather = weather; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("road", road) + .append("dept", dept) + .append("eventType", eventType) + .append("startTime", startTime) + .append("endTime", endTime) + .append("status", status) + .append("source", source) + .append("title", title) + .append("eventSubclass", eventSubclass) + .append("carType", carType) + .append("carNum", carNum) + .append("multiVehicle", multiVehicle) + .append("direction", direction) + .append("stakeMark", stakeMark) + .append("weather", weather) + .toString(); + } +} diff --git a/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java b/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java new file mode 100644 index 00000000..1dcfa5aa --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java @@ -0,0 +1,16 @@ +package com.zc.business.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import org.springframework.web.multipart.MultipartFile; + +/** + * 高速云事件分析Service接口 + * + * @author ruoyi + * @date 2024-08-15 + */ +public interface IDcSdhsEventService +{ + AjaxResult importData(MultipartFile file) throws Exception; + +} diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java new file mode 100644 index 00000000..a9630d10 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java @@ -0,0 +1,102 @@ +package com.zc.business.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.zc.business.constant.RedisKeyConstants; +import com.zc.business.domain.DcSdhsEvent; +import com.zc.business.service.IDcSdhsEventService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 高速云事件分析Service业务层处理 + * + * @author ruoyi + * @date 2024-08-15 + */ +@Service +public class DcSdhsEventServiceImpl implements IDcSdhsEventService { + + @Autowired + private RedisCache redisCache; + + + @Override + public AjaxResult importData(MultipartFile file) throws IOException { + List eventList = new ArrayList<>(); + try { + ExcelUtil util = new ExcelUtil(DcSdhsEvent.class); + eventList = util.importExcel(file.getInputStream()); + } catch (Exception e){ + e.printStackTrace(); + return AjaxResult.error("导入失败,请检查数据是否有误"); + } + + redisCache.deleteObject(RedisKeyConstants.SDHS_EVENT); + if (eventList != null && eventList.size() > 0){ + int id = 1; + for (DcSdhsEvent dcSdhsEvent : eventList) { + + //插入id备用 + dcSdhsEvent.setId(id); + + //是否多车事故 + String carNum = dcSdhsEvent.getCarNum(); + if (StringUtils.isNotEmpty(carNum)){ + List numbers = extractNumbers(carNum); + Integer carNumbers = 0; + for (Integer number : numbers) { + carNumbers += number; + } + + if (carNumbers > 0){ + dcSdhsEvent.setMultiVehicle("是"); + } else { + dcSdhsEvent.setMultiVehicle("否"); + } + } else { + dcSdhsEvent.setMultiVehicle("否"); + } + + id++; + } + + } + + //不入数据库, 放入缓存 + redisCache.setCacheList(RedisKeyConstants.SDHS_EVENT,eventList); + + return AjaxResult.success("导入成功"); + } + + /** + * @Description 提取文字中的数字 + * + * @author liuwenge + * @date 2024/8/15 17:05 + * @param input + * @return java.util.List + */ + private static List extractNumbers(String input) { + List numbers = new ArrayList<>(); + Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字 + Matcher matcher = pattern.matcher(input); + + while (matcher.find()) { + numbers.add(Integer.parseInt(matcher.group())); // 将匹配到的数字字符串转换为整数并添加到列表中 + } + + + return numbers; + } +} diff --git a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml index 722e32ac..1e703994 100644 --- a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml @@ -76,9 +76,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select t1.id, t1.iot_device_id, t1.group_id, t1.product_id, t1.stake_mark, t1.direction, t1.device_name, t1.device_code, t1.device_type, t1.installation_Date,t1.production_date,t1.durable_years,t1.installation_site,t1.use_state,t1.device_state,t1.other_config,t1.remark, t1.create_time,t1.update_time,t1.facilities_type,t1.device_ip,t1.stake_mark_range,t1.network_segment,t1.device_img,t1.child_type, - t1.facilities_type,t2.longitude,t2.latitude,t3.manufacturer + t1.facilities_type,t1.longitude,t1.latitude,t3.manufacturer from dc_device t1 - left join dc_stake_mark t2 on t1.stake_mark = t2.stake_mark and t1.direction = t2.direction left join dc_product t3 on t3.id = t1.product_id and t1.id = #{id}