Browse Source

Merge remote-tracking branch 'origin/develop' into develop

develop
wangsixiang 5 months ago
parent
commit
1ae100f8d5
  1. 201
      ruoyi-ui/src/views/monitor/Interface/index.vue
  2. 25
      zc-business/src/main/java/com/zc/business/controller/DcOperLogController.java
  3. 297
      zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java
  4. 6
      zc-business/src/main/java/com/zc/business/controller/StatusController.java
  5. 20
      zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java
  6. 37
      zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java
  7. 74
      zc-business/src/main/java/com/zc/business/domain/export/SelectTollStationAnalysis.java
  8. 31
      zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java
  9. 16
      zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java
  10. 2
      zc-business/src/main/java/com/zc/business/service/impl/DcOperLogServiceImpl.java
  11. 272
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java
  12. 199
      zc-business/src/main/java/com/zc/business/service/impl/ExcelExportService.java
  13. 96
      zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java

201
ruoyi-ui/src/views/monitor/Interface/index.vue

@ -0,0 +1,201 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="接口名称" prop="interfaceName">
<el-input
v-model="queryParams.interfaceName"
placeholder="请输入任务名称"
clearable
/>
</el-form-item>
<el-form-item label="接口所属" prop="interfaceOwnership">
<el-select v-model="queryParams.interfaceOwnership" placeholder="请选择接口所属" clearable>
<el-option
v-for="dict in dict.type.interface_ownership"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="操作状态" prop="operationStatus">
<el-select v-model="queryParams.operationStatus" placeholder="请选择操作状态" clearable>
<el-option
v-for="dict in dict.type.operation_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="时间范围" prop="dateTime">
<el-date-picker
v-model="queryParams.dateTime"
type="datetimerange"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="-"
@change="handleProcessingTime "
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
</el-form-item>
</el-form>
<el-table :data="interfaceData">
<el-table-column label="接口名称" align="center" prop="interfaceName"/>
<el-table-column label="接口所属" align="center" prop="interfaceOwnership">
<template slot-scope="scope">
<dict-tag :options="dict.type.interface_ownership" :value="scope.row.interfaceOwnership"/>
</template>
</el-table-column>
<el-table-column label="操作人" align="center" prop="operatorName"/>
<el-table-column label="操作状态" align="center" prop="operationStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.operation_status" :value="scope.row.operationStatus"/>
</template>
</el-table-column>
<el-table-column label="操作时间" align="center" prop="operationTime"/>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
type="text"
@click="handleDetails(scope.row)">详情
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog
title="结果详细"
:visible.sync="openView"
width="700px"
style="margin-top: 30px;margin-bottom: 30px;height: 750px"
append-to-body
@close="handleClose">
<el-input
type="textarea"
readonly
autosize
v-model="interfaceResult">
</el-input>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import request from "@/utils/request";
export default {
components: {},
name: "Interface",
dicts: ['operation_status', 'interface_ownership'],
data() {
return {
//
loading: true,
//
total: 0,
//
title: "",
//
open: false,
//
openView: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
interfaceOwnership: undefined,
interfaceName: undefined,
operationStatus: undefined,
dateTime: undefined,
startTime: undefined,
endTime: undefined
},
interfaceData: [],
interfaceResult: undefined,
//
form: {},
};
},
created() {
this.getList();
},
methods: {
/** 查询外部接口监测列表 */
getList() {
request({
url: `/externalInterface/list`,
method: "get",
params: this.queryParams,
}).then((result) => {
this.total = result.total
this.interfaceData = result.rows
})
},
/** 搜索 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList()
},
/** 重置 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 详情按钮 */
handleDetails(row) {
this.openView = true
try {
// JSON
this.interfaceResult = JSON.stringify(JSON.parse(row.operationResult), null, 2)
} catch (error) {
//
this.interfaceResult = row.operationResult
}
},
/** 详情弹窗关闭 */
handleClose() {
this.openView = false
this.interfaceResult = undefined
},
/** 处理时间选择器组件 */
handleProcessingTime() {
if (this.queryParams.dateTime.length > 0) {
this.queryParams.startTime = this.queryParams.dateTime[0]
this.queryParams.endTime = this.queryParams.dateTime[1]
}
},
/** 导出按钮操作 */
handleExport() {
this.download('/externalInterface/export', {
...this.queryParams
}, '外部接口监测.xlsx')
}
}
};
</script>

25
zc-business/src/main/java/com/zc/business/controller/DcOperLogController.java

@ -5,6 +5,7 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.PageUtils;
import com.zc.business.domain.DcOperLog;
import com.zc.business.service.IDcOperLogService;
import io.swagger.annotations.Api;
@ -41,39 +42,39 @@ public class DcOperLogController extends BaseController {
}
/**
* 分页查询列表
* 分页查询调用功能记录列表
*
* @param dcOperLog 请求参数
* @return 分页查询结果
*/
@ApiOperation("分页查询列表")
// @PreAuthorize("@ss.hasPermi('iot:facility:list')")
// @PreAuthorize("@ss.hasPermi('iot:facility:list')")
@GetMapping("list")
public TableDataInfo listFacility( DcOperLog dcOperLog,@RequestParam(value = "endTime", required = false)Date endTime,@RequestParam(value = "startTime", required = false)Date startTime) {
return getDataTable(dcOperLogService.pageDcOperLog(dcOperLog,endTime,startTime));
public TableDataInfo listFacility(DcOperLog dcOperLog, @RequestParam(value = "endTime", required = false) Date endTime, @RequestParam(value = "startTime", required = false) Date startTime) {
return getDataTable(dcOperLogService.pageDcOperLog(dcOperLog, endTime, startTime));
}
/**
* 无分页查询路网设施列表
* 无分页查询调用功能记录列表
*
* @param dcOperLog 请求参数
* @return 查询结果
*/
@ApiOperation("无分页查询列表")
// @PreAuthorize("@ss.hasPermi('iot:facility:query')")
// @PreAuthorize("@ss.hasPermi('iot:facility:query')")
@GetMapping("query")
public AjaxResult queryFacility( DcOperLog dcOperLog, @RequestParam(value = "endTime", required = false) Date endTime, @RequestParam(value = "startTime", required = false)Date startTime) {
return AjaxResult.success(dcOperLogService.listDcOperLog(dcOperLog,endTime,startTime));
public AjaxResult queryFacility(DcOperLog dcOperLog, @RequestParam(value = "endTime", required = false) Date endTime, @RequestParam(value = "startTime", required = false) Date startTime) {
return AjaxResult.success(dcOperLogService.listDcOperLog(dcOperLog, endTime, startTime));
}
/**
* 根据id查询路网设施信息
* 根据id查询调用功能记录信息
*
* @param id id
* @return 查询结果
*/
@ApiOperation("根据id查询信息")
// @PreAuthorize("@ss.hasPermi('iot:facility:query')")
// @PreAuthorize("@ss.hasPermi('iot:facility:query')")
@GetMapping("{id}")
public AjaxResult getFacility(@PathVariable String id) {
return AjaxResult.success(dcOperLogService.getById(id));
@ -101,7 +102,7 @@ public class DcOperLogController extends BaseController {
* @return 修改操作结果
*/
@ApiOperation("修改")
// @PreAuthorize("@ss.hasPermi('iot:facility:edit')")
// @PreAuthorize("@ss.hasPermi('iot:facility:edit')")
@Log(title = "修改", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult editFacility(@Valid @RequestBody DcOperLog dcOperLog) {
@ -115,7 +116,7 @@ public class DcOperLogController extends BaseController {
* @return 删除操作结果
*/
@ApiOperation("删除")
// @PreAuthorize("@ss.hasPermi('iot:facility:remove')")
// @PreAuthorize("@ss.hasPermi('iot:facility:remove')")
@Log(title = "删除", businessType = BusinessType.DELETE)
@DeleteMapping("{ids}")
public AjaxResult removeFacility(@PathVariable List<String> ids) {

297
zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java

@ -6,14 +6,20 @@ import com.zc.business.domain.DcEventListQuery;
import com.zc.business.domain.export.*;
import com.zc.business.enums.UniversalEnum;
import com.zc.business.service.IDcTrafficIncidentsService;
import com.zc.common.core.httpclient.exception.HttpException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -255,6 +261,297 @@ public class DcTrafficIncidentsController {
return trafficIncidentsService.selectTollStationAnalysis(searchType,facilityIdList,controlType,startTime,endTime);
}
@ApiOperation(value="导出收费站统计分析table",tags = {"ECharts导出"})
@GetMapping("/exportSelectTollStationAnalysis")
public void exportSelectTollStationAnalysis(HttpServletResponse response,
@ApiParam(value="查询条件(1:站点,2:原因)", name="searchType", required=true) @RequestParam ("searchType") String searchType,
@ApiParam(value="站点id", name="facilityId", required=false) @RequestParam (name="facilityId",required = false) String[] facilityIdList,
@ApiParam(value="类型(1:封闭,2:限行)", name="controlType", required=false) @RequestParam (name="controlType",required = false) String controlType,
@ApiParam(value="开始时间", name="startTime", required=true) @RequestParam ("startTime") String startTime,
@ApiParam(value="结束时间", name="endTime", required=true) @RequestParam ("endTime") String endTime) throws IOException, HttpException {
AjaxResult ajaxResult = trafficIncidentsService.selectTollStationAnalysis(searchType,facilityIdList,controlType,startTime,endTime);
if ("1".equals(searchType)){
List<SelectTollStationAnalysis> list = new ArrayList<>();
if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) {
List<Map<String,Object>> data = (List<Map<String,Object>>) ajaxResult.get("data");
Integer closeTotal = 0;
Integer restrictionTotal = 0;
Integer total = 0;
for (Map<String, Object> datum : data) {
SelectTollStationAnalysis selectTollStationAnalysis = new SelectTollStationAnalysis();
Integer facilityClose = Integer.parseInt(datum.get("facilityClose").toString());
Integer facilityRestriction = Integer.parseInt(datum.get("facilityRestriction").toString());
Integer sum = facilityClose + facilityRestriction;
selectTollStationAnalysis.setFacilityName(datum.get("facilityName").toString());
selectTollStationAnalysis.setFacilityClose(facilityClose.toString());
selectTollStationAnalysis.setFacilityRestriction(facilityRestriction.toString());
selectTollStationAnalysis.setSum(sum.toString());
list.add(selectTollStationAnalysis);
closeTotal += facilityClose;
restrictionTotal += facilityRestriction;
total += sum;
}
SelectTollStationAnalysis selectTollStationAnalysis = new SelectTollStationAnalysis();
selectTollStationAnalysis.setFacilityName("合计");
selectTollStationAnalysis.setFacilityClose(closeTotal.toString());
selectTollStationAnalysis.setFacilityRestriction(restrictionTotal.toString());
selectTollStationAnalysis.setSum(total.toString());
list.add(selectTollStationAnalysis);
}
ExcelUtil<SelectTollStationAnalysis> util = new ExcelUtil<>(SelectTollStationAnalysis.class);
util.exportExcel(response, list, "收费站统计分析列表");
} else {
XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作簿
Sheet sheet = workbook.createSheet(UniversalEnum.THE_WHOLE_SECTION_TWO_WAY_REAL_TIME_TRAFFIC_FLOW.getValue()); // 创建工作表
// 创建数据行样式
CellStyle dataStyle = workbook.createCellStyle();
dataStyle.setAlignment(HorizontalAlignment.CENTER);
dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);
dataStyle.setBorderRight(BorderStyle.THIN);
dataStyle.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
dataStyle.setBorderLeft(BorderStyle.THIN);
dataStyle.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
dataStyle.setBorderTop(BorderStyle.THIN);
dataStyle.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
dataStyle.setBorderBottom(BorderStyle.THIN);
dataStyle.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
Font dataFont = workbook.createFont();
dataFont.setFontName(UniversalEnum.ARIAL.getValue());
dataFont.setFontHeightInPoints((short) UniversalEnum.TEN.getNumber());
dataStyle.setFont(dataFont);
// 创建表头样式
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.cloneStyleFrom(dataStyle);
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerStyle.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
headerStyle.setBorderRight(BorderStyle.THIN);
headerStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setTopBorderColor(IndexedColors.WHITE.getIndex());
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBottomBorderColor(IndexedColors.WHITE.getIndex());
Font headerFont = workbook.createFont();
headerFont.setFontName(UniversalEnum.ARIAL.getValue());
headerFont.setFontHeightInPoints((short) UniversalEnum.TEN.getNumber());
headerFont.setBold(true);
headerFont.setColor(IndexedColors.WHITE.getIndex());
headerStyle.setFont(headerFont);
// 添加第一层级表头
Row row = sheet.createRow(UniversalEnum.ZERO.getNumber());
String[] row1 = new String[]{};
if ("2".equals(controlType)){
row1 = new String[]{"限行原因","","限行站次","","","","","限行时长","","","",""};
} else {
row1 = new String[]{"封闭原因","","封闭站次","","","","","封闭时长","","","",""};
}
for (int i = 0; i < row1.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(row1[i]);
cell.setCellStyle(headerStyle);
}
// 添加第二层级表头(与第一层级对齐)
String[] row2 = new String[]{"","","目标时段","","去年同期时段","","同比(%)","目标时段","","去年同期时段","","同比(%)"};
Row subHeaderRow1 = sheet.createRow(UniversalEnum.ONE.getNumber());
for (int i = 0; i < row2.length; i++) {
Cell cell = subHeaderRow1.createCell(i);
cell.setCellValue(row2[i]);
cell.setCellStyle(headerStyle);
}
// 添加第三层级表头
String[] row3 = new String[]{"","","站次","占比(%)","站次","占比(%)","","站次","占比(%)","站次","占比(%)",""};
Row subHeaderRow2 = sheet.createRow(UniversalEnum.TWO.getNumber());
for (int i = 0; i < row3.length; i++) {
Cell cell = subHeaderRow2.createCell(i);
cell.setCellValue(row3[i]);
cell.setCellStyle(headerStyle);
}
//合并表头单元格,参数依次为起始行,结束行,起始列,结束列 (从0开始)
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.TWO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.TWO.getNumber(), UniversalEnum.SIX.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.SEVEN.getNumber(), UniversalEnum.ELEVEN.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.TWO.getNumber(), UniversalEnum.THREE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.FOUR.getNumber(), UniversalEnum.FIVE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.TWO.getNumber(), UniversalEnum.SIX.getNumber(), UniversalEnum.SIX.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.SEVEN.getNumber(), UniversalEnum.EIGHT.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.NINE.getNumber(), UniversalEnum.TEN.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ONE.getNumber(), UniversalEnum.TWO.getNumber(), UniversalEnum.ELEVEN.getNumber(), UniversalEnum.ELEVEN.getNumber()));
if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) {
List<Map<String, Object>> data = (List<Map<String, Object>>) ajaxResult.get("data");
//行号
int rowIndex = 3;
//先塞入恶劣天气类型数据
for (int i = 2; i < 9; i++) {
Map<String, Object> map = data.get(i);
Row subHeaderRow = sheet.createRow(rowIndex);
Cell cell = subHeaderRow.createCell(UniversalEnum.ZERO.getNumber());
cell.setCellValue(map.get("controlCauseName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ONE.getNumber());
cell.setCellValue(map.get("causeTypeName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TWO.getNumber());
cell.setCellValue(map.get("num").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.THREE.getNumber());
cell.setCellValue(map.get("numRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FOUR.getNumber());
cell.setCellValue(map.get("lastYearNum").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FIVE.getNumber());
cell.setCellValue(map.get("lastYearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SIX.getNumber());
cell.setCellValue(map.get("yearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SEVEN.getNumber());
cell.setCellValue(map.get("minuteTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.EIGHT.getNumber());
cell.setCellValue(map.get("timeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.NINE.getNumber());
cell.setCellValue(map.get("lastYearTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TEN.getNumber());
cell.setCellValue(map.get("lastYearTimeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ELEVEN.getNumber());
cell.setCellValue(map.get("yearTimeRatio").toString());
cell.setCellStyle(dataStyle);
rowIndex++;
}
//再塞入车流量大、交通事故
for (int i = 0; i < 2; i++) {
Map<String, Object> map = data.get(i);
Row subHeaderRow = sheet.createRow(rowIndex);
Cell cell = subHeaderRow.createCell(UniversalEnum.ZERO.getNumber());
cell.setCellValue(map.get("controlCauseName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ONE.getNumber());
cell.setCellValue(map.get("causeTypeName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TWO.getNumber());
cell.setCellValue(map.get("num").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.THREE.getNumber());
cell.setCellValue(map.get("numRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FOUR.getNumber());
cell.setCellValue(map.get("lastYearNum").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FIVE.getNumber());
cell.setCellValue(map.get("lastYearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SIX.getNumber());
cell.setCellValue(map.get("yearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SEVEN.getNumber());
cell.setCellValue(map.get("minuteTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.EIGHT.getNumber());
cell.setCellValue(map.get("timeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.NINE.getNumber());
cell.setCellValue(map.get("lastYearTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TEN.getNumber());
cell.setCellValue(map.get("lastYearTimeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ELEVEN.getNumber());
cell.setCellValue(map.get("yearTimeRatio").toString());
cell.setCellStyle(dataStyle);
rowIndex++;
}
//最后塞入施工、警备任务、其他
for (int i = 9; i < 12; i++) {
Map<String, Object> map = data.get(i);
Row subHeaderRow = sheet.createRow(rowIndex);
Cell cell = subHeaderRow.createCell(UniversalEnum.ZERO.getNumber());
cell.setCellValue(map.get("controlCauseName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ONE.getNumber());
cell.setCellValue(map.get("causeTypeName").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TWO.getNumber());
cell.setCellValue(map.get("num").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.THREE.getNumber());
cell.setCellValue(map.get("numRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FOUR.getNumber());
cell.setCellValue(map.get("lastYearNum").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.FIVE.getNumber());
cell.setCellValue(map.get("lastYearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SIX.getNumber());
cell.setCellValue(map.get("yearNumRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.SEVEN.getNumber());
cell.setCellValue(map.get("minuteTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.EIGHT.getNumber());
cell.setCellValue(map.get("timeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.NINE.getNumber());
cell.setCellValue(map.get("lastYearTime").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.TEN.getNumber());
cell.setCellValue(map.get("lastYearTimeRatio").toString());
cell.setCellStyle(dataStyle);
cell = subHeaderRow.createCell(UniversalEnum.ELEVEN.getNumber());
cell.setCellValue(map.get("yearTimeRatio").toString());
cell.setCellStyle(dataStyle);
rowIndex++;
}
//合并数据单元格,参数依次为起始行,结束行,起始列,结束列 (从0开始)
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.THREE.getNumber(), UniversalEnum.NINE.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.TEN.getNumber(), UniversalEnum.TEN.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ELEVEN.getNumber(), UniversalEnum.ELEVEN.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.TWELVE.getNumber(), UniversalEnum.TWELVE.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.THIRTEEN.getNumber(), UniversalEnum.THIRTEEN.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.FOURTEEN.getNumber(), UniversalEnum.FOURTEEN.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber()));
}
response.setContentType(UniversalEnum.DERIVE_THE_TWO_WAY_REAL_TIME_TRAFFIC_FLOW_OF_THE_WHOLE_SECTION.getValue());
response.setCharacterEncoding(UniversalEnum.LOWERCASE_UTF_8.getValue());
String fileName = "收费站统计分析列表.xlsx";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 写入文件
try (ServletOutputStream outputStream = response.getOutputStream()){
workbook.write(outputStream);
} finally {
workbook.close();
}
}
}
/**
* @Description 路网管控-事件管控分析-收费站统计分析echarts(当月)
*

6
zc-business/src/main/java/com/zc/business/controller/StatusController.java

@ -267,6 +267,8 @@ public class StatusController extends BaseController {
itemTypeMap.put(UniversalEnum.ELEVEN.getValue(), UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWELVE.getValue(), UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.THIRTEEN.getValue(), UniversalEnum.SMART_DEVICE_BOX.getValue());
itemTypeMap.put(UniversalEnum.FIFTEEN.getValue(), UniversalEnum.SOLAR_PANEL.getValue());
itemTypeMap.put(UniversalEnum.SIXTEEN.getValue(), UniversalEnum.REMOTE_COMPUTER.getValue());
LocalDateTime todayStart = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
LocalDateTime currentTime = LocalDateTime.now();
Status status = new Status();
@ -394,7 +396,9 @@ public class StatusController extends BaseController {
UniversalEnum.LASER_FATIGUE_AWAKENING.getValue(),
UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue(),
UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue(),
UniversalEnum.SMART_DEVICE_BOX.getValue()
UniversalEnum.SMART_DEVICE_BOX.getValue(),
UniversalEnum.SOLAR_PANEL.getValue(),
UniversalEnum.REMOTE_COMPUTER.getValue()
};
orderRule= Arrays.toString(rules).replace(UniversalEnum.LEFT_CENTER_BRACKET.getValue(),UniversalEnum.EMPTY_STRING.getValue()).replace(UniversalEnum.CLOSE_CENTER_BRACKET.getValue(),UniversalEnum.EMPTY_STRING.getValue()).replace(UniversalEnum.BLANK_SPACE.getValue(),UniversalEnum.EMPTY_STRING.getValue());
ruleMap.put("rule",orderRule);

20
zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java

@ -238,9 +238,6 @@ public class WeatherForecastController extends BaseController {
parameter.put("stakeNum", numStake);
JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather"));
try {
OkHttp okHttp = new OkHttp();
@ -249,8 +246,8 @@ public class WeatherForecastController extends BaseController {
Response response // 请求响应
= okHttp
.headers(new HashMap<>())
.url(weather.getString("get_weather_info")) // 请求地址
//.url("http://10.166.133.9:38999/api/weather_service/get_weather_info") // 请求地址
.url(UniversalEnum.CURRENT_WEATHER_AND_FORECAST_INFORMATION.getValue()) // 请求地址
//.url("http://10.166.133.9:38999/api/weather_service/get_weather_info_jh") // 请求地址
.data(requestParams)
.post(); // 请求方法
@ -403,11 +400,11 @@ public class WeatherForecastController extends BaseController {
jsonArray.add(i,jsonObject);
};
if (jsonArray.size() != UniversalEnum.ZERO.getNumber()) {
redisCache.deleteObject("currentWeatherAndForecastInformation" + numStake);
redisCache.setCacheObject("currentWeatherAndForecastInformation" + numStake, jsonArray);
redisCache.deleteObject(UniversalEnum.CURRENT_WEATHER_AND_FORECAST_INFORMATION_SINGLE_WORD.getValue() + numStake);
redisCache.setCacheObject(UniversalEnum.CURRENT_WEATHER_AND_FORECAST_INFORMATION_SINGLE_WORD.getValue() + numStake, jsonArray);
return AjaxResult.success(jsonArray);
} else {
JSONArray cacheObject = redisCache.getCacheObject("currentWeatherAndForecastInformation" + numStake);
JSONArray cacheObject = redisCache.getCacheObject(UniversalEnum.CURRENT_WEATHER_AND_FORECAST_INFORMATION_SINGLE_WORD.getValue() + numStake);
return AjaxResult.success(cacheObject);
}
} else {
@ -448,9 +445,6 @@ public class WeatherForecastController extends BaseController {
@PostMapping(value = "/currentWeatherWarningInformationQuery")
public AjaxResult currentWeatherWarningInformationQuery(@RequestBody HashMap<String, Object> parameter) {
JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather"));
try {
OkHttp okHttp = new OkHttp();
@ -459,8 +453,8 @@ public class WeatherForecastController extends BaseController {
Response response // 请求响应
= okHttp
.headers(new HashMap<>())
.url(weather.getString("get_earlyworning_info")) // 请求地址
//.url("http://10.166.133.9:38999/api/weather_service/get_earlyworning_info") // 请求地址
.url(UniversalEnum.CURRENT_WEATHER_WARNING_INFORMATION_QUERY.getValue()) // 请求地址
//.url("http://10.166.133.9:38999/api/weather_service/get_earlyworning_info_jh") // 请求地址
.data(requestParams)
.post(); // 请求方法

37
zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java

@ -1,5 +1,8 @@
package com.zc.business.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@ -29,18 +32,48 @@ public class ExternalInterfaceMonitoring {
@ApiModelProperty("接口所属")
private Integer interfaceOwnership;
@Excel(name = "接口所属名称")
@TableField(exist = false)
@ApiModelProperty("接口所属名称")
private String interfaceOwnershipName;
@Excel(name = "接口名称")
@ApiModelProperty("接口名称")
private String interfaceName;
@Excel(name = "操作人")
@ApiModelProperty("操作人")
private String operatorName;
@Excel(name = "操作状态")
@TableField(exist = false)
@ApiModelProperty("操作状态名称")
private String operationStatusName;
@ApiModelProperty("操作状态")
private Integer operationStatus;
@Excel(name = "操作时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@ApiModelProperty("操作时间")
private Date operationTime;
@Excel(name = "操作结果")
@ApiModelProperty("操作结果")
private String operationResult;
@ApiModelProperty("操作时间")
private Date operationTime;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(exist = false)
@ApiModelProperty("开始时间")
private Date startTime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(exist = false)
@ApiModelProperty("结束时间")
private Date endTime;
}

74
zc-business/src/main/java/com/zc/business/domain/export/SelectTollStationAnalysis.java

@ -0,0 +1,74 @@
package com.zc.business.domain.export;
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;
/**
* 导出收费站统计分析table对象
*
* @author ruoyi
* @date 2024-01-13
*/
public class SelectTollStationAnalysis extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 收费站名称 */
@Excel(name = "收费站名称")
private String facilityName;
/** 封闭 */
@Excel(name = "封闭")
private String facilityClose;
/** 限行 */
@Excel(name = "限行")
private String facilityRestriction;
/** 合计 */
@Excel(name = "合计")
private String sum;
public String getFacilityName() {
return facilityName;
}
public void setFacilityName(String facilityName) {
this.facilityName = facilityName;
}
public String getFacilityClose() {
return facilityClose;
}
public void setFacilityClose(String facilityClose) {
this.facilityClose = facilityClose;
}
public String getFacilityRestriction() {
return facilityRestriction;
}
public void setFacilityRestriction(String facilityRestriction) {
this.facilityRestriction = facilityRestriction;
}
public String getSum() {
return sum;
}
public void setSum(String sum) {
this.sum = sum;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("facilityName", facilityName)
.append("facilityClose", facilityClose)
.append("facilityRestriction", facilityRestriction)
.append("sum", sum)
.toString();
}
}

31
zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java

@ -1,7 +1,7 @@
package com.zc.business.enums;
/**
* 情报板车道图标枚举
* 枚举
*
* @author
*/
@ -338,10 +338,16 @@ public enum UniversalEnum {
ROAD_SECTION_NAME(0, "路段名称"),
// 菏泽方向
DIRECTION_OF_HEZE(0, "菏泽方向"),
DIRECTION_OF_HEZE(1, "菏泽方向"),
// 双向
BIDIRECTIONAL(2, "双向"),
// 济南方向
DIRECTION_OF_JINAN(0, "济南方向"),
DIRECTION_OF_JINAN(3, "济南方向"),
// 未知方向
UNKNOWN_DIRECTION(4, "未知方向"),
// 上行
Up(0, "上行"),
@ -409,6 +415,12 @@ public enum UniversalEnum {
//智能设备箱
SMART_DEVICE_BOX(0, "智能设备箱"),
//太阳能板
SOLAR_PANEL(0, "太阳能板"),
//远端机
REMOTE_COMPUTER(0, "远端机"),
//设备名称
DEVICE_NAME(0, "设备名称"),
@ -1729,8 +1741,8 @@ public enum UniversalEnum {
// 设置预置位 :9021/preset/addPreset
SET_PRESET_BIT(0, ":9021/preset/addPreset"),
// currentWeatherAndForecastInformation
CURRENT_WEATHER_AND_FORECAST_INFORMATION(0, "currentWeatherAndForecastInformation"),
// 当前气象及预报信息查询 currentWeatherAndForecastInformation
CURRENT_WEATHER_AND_FORECAST_INFORMATION_SINGLE_WORD(0, "currentWeatherAndForecastInformation"),
// /preset/addPreset
NEW_PRESET_BIT(0, "/preset/addPreset"),
@ -1747,6 +1759,12 @@ public enum UniversalEnum {
// application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
DERIVE_THE_TWO_WAY_REAL_TIME_TRAFFIC_FLOW_OF_THE_WHOLE_SECTION(0, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
// 当前气象预警信息查询 http://10.166.133.9:38999/api/weather_service/get_earlyworning_info_jh
CURRENT_WEATHER_WARNING_INFORMATION_QUERY(0, "http://10.166.133.9:38999/api/weather_service/get_earlyworning_info_jh"),
// 当前气象及预报信息查询 http://10.166.133.9:38999/api/weather_service/get_weather_info_jh
CURRENT_WEATHER_AND_FORECAST_INFORMATION(0, "http://10.166.133.9:38999/api/weather_service/get_weather_info_jh"),
// dc_device_type
DC_DEVICE_TYPE(0, "dc_device_type"),
@ -2139,6 +2157,9 @@ public enum UniversalEnum {
// 右小括号
CLOSING_PARENTHESIS(0, ")"),
// 杠杠左中括号
BARRE_LEFT_CENTER_BRACKET(0, "\\["),
// 左中括号
LEFT_CENTER_BRACKET(0, "["),

16
zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java

@ -611,16 +611,14 @@ public class DeviceMessageHandler {
String content = direction + stakeMark + precipitationType;
Map<String, Object> contentMap = new HashMap<>();
contentMap.put("content", content);
contentMap.put("event", meteorologicalDetectorData);
WebSocketService.broadcast(WebSocketEvent.WARNING, contentMap);
JSONObject object = new JSONObject();
object.put("meteorologicalDetectorData", meteorologicalDetectorData);
String string = object.toString();
DcWarning dcWarning = new DcWarning();
dcWarning.setWarningState(UniversalEnum.ONE.getNumber());
dcWarning.setRemark(content);
dcWarning.setRemark(new Date()+" "+content);
dcWarning.setWarningTime(new Date());
dcWarning.setWarningType(UniversalEnum.EIGHT_ONE.getNumber());
dcWarning.setWarningSubclass(UniversalEnum.EIGHT_ONE.getValue());
@ -635,6 +633,10 @@ public class DeviceMessageHandler {
if (direction.equals(UniversalEnum.DIRECTION_OF_JINAN.getValue())) {
dcWarning.setDirection(UniversalEnum.THREE.getValue());
}
contentMap.put("content", content);
contentMap.put("event", dcWarning);
WebSocketService.broadcast(WebSocketEvent.WARNING, contentMap);
dcWarningService.insertDcWarning(dcWarning);
@ -663,7 +665,7 @@ public class DeviceMessageHandler {
String string = object.toString();
DcWarning dcWarning = new DcWarning();
dcWarning.setWarningState(UniversalEnum.ONE.getNumber());
dcWarning.setRemark(content);
dcWarning.setRemark(new Date()+" "+content);
dcWarning.setWarningTime(new Date());
dcWarning.setWarningType(UniversalEnum.EIGHT_FOUR.getNumber());
dcWarning.setWarningSubclass(UniversalEnum.EIGHT_FOUR.getValue());
@ -677,7 +679,11 @@ public class DeviceMessageHandler {
if (direction.equals(UniversalEnum.DIRECTION_OF_JINAN.getValue())) {
dcWarning.setDirection(UniversalEnum.THREE.getValue());
}
dcWarningService.insertDcWarning(dcWarning);
contentMap.put("content", content);
contentMap.put("event", dcWarning);
WebSocketService.broadcast(WebSocketEvent.WARNING, contentMap);
//待确认数量
dcEventService.getCountNum();

2
zc-business/src/main/java/com/zc/business/service/impl/DcOperLogServiceImpl.java

@ -68,7 +68,7 @@ public class DcOperLogServiceImpl extends ServiceImpl<DcOperLogMapper, DcOperLog
.findFirst()
.map(DeviceTypeEnum::getInfo)
.orElse(UniversalEnum.OTHER.getValue());
map.put("typeName",typeName);
map.put("typeName", typeName);
});
return list;
}

272
zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java

@ -5,17 +5,16 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.sun.xml.bind.v2.TODO;
import com.zc.business.constant.RedisKeyConstants;
import com.zc.business.domain.*;
import com.zc.business.domain.DcCongestionSection;
import com.zc.business.domain.DcFacility;
import com.zc.business.domain.DcRoadSection;
import com.zc.business.domain.DcRoadSectionCongestion;
import com.zc.business.enums.StakeMarkRange;
import com.zc.business.enums.UniversalEnum;
import com.zc.business.service.IDcFacilityService;
import com.zc.business.service.IDcRoadConditionInformationService;
import com.zc.business.service.IDcRoadSectionService;
import com.zc.business.service.IDcTrafficStatisticsService;
import com.zc.business.utils.StakeMarkUtils;
@ -28,7 +27,6 @@ import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@ -119,7 +117,6 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
}
*/
public static CompletableFuture<String> refreshAccessToken() {
CompletableFuture<String> future = new CompletableFuture<>();
OkHttp okHttp = new OkHttp();
@ -208,7 +205,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
} else {
return new JSONArray();
}
}
return new JSONArray();
@ -241,7 +243,10 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
JSONArray jsonArray = null;
if (body != null) {
jsonArray = JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
jsonArray = JSON.parseArray(jsonString);
}
}
Map<String, Integer> map = new HashMap<>();
@ -318,7 +323,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
} else {
return new JSONArray();
}
}
return new JSONArray();
}
@ -563,7 +573,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
} else {
return new JSONArray();
}
}
return new JSONArray();
@ -604,7 +619,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
} else {
return new JSONArray();
}
}
return new JSONArray();
@ -642,7 +662,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
}else {
return new JSONArray();
}
}
return new JSONArray();
@ -682,37 +707,37 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
JSONArray jsonArray = JSON.parseArray(body.string());
Map<String, Integer> sumByName = new LinkedHashMap<>();
Integer totalFlow1=0;
List<Map<String, String>> list = new ArrayList();
for (Object item : jsonArray) { // 这里做了微调,直接遍历jsonArray的Object
JSONObject jsonObject = (JSONObject) item;
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
JSONArray jsonArray = JSON.parseArray(jsonString);
Map<String, Integer> sumByName = new LinkedHashMap<>();
List<Map<String, String>> list = new ArrayList();
for (Object item : jsonArray) { // 这里做了微调,直接遍历jsonArray的Object
JSONObject jsonObject = (JSONObject) item;
totalFlow1=totalFlow1+ jsonObject.getInteger("total_flow");
// 获取当前时间
LocalTime now = LocalTime.now();
// 获取当前小时数(24小时制)
int currentHour = now.getHour();
if (jsonObject.getInteger("data_hour") == currentHour) {
String name = jsonObject.getString("ts_name"); // 更安全的取值方式
int totalFlow = jsonObject.getInteger("total_flow"); // 专门针对Integer类型
// 获取当前时间
LocalTime now = LocalTime.now();
// 获取当前小时数(24小时制)
int currentHour = now.getHour();
if (jsonObject.getInteger("data_hour") == currentHour) {
String name = jsonObject.getString("ts_name"); // 更安全的取值方式
int totalFlow = jsonObject.getInteger("total_flow"); // 专门针对Integer类型
sumByName.put(name, totalFlow);
sumByName.put(name, totalFlow);
}
}
// 正确创建新的映射对象并添加到list中
for (Map.Entry<String, Integer> entry : sumByName.entrySet()) {
Map<String, String> singleResult = new LinkedHashMap<>(); // 每次循环都创建一个新的映射
singleResult.put("name", entry.getKey());
singleResult.put("value", entry.getValue().toString());
list.add(singleResult);
}
return list;
}
System.out.println("总数===:"+totalFlow1);
// 正确创建新的映射对象并添加到list中
for (Map.Entry<String, Integer> entry : sumByName.entrySet()) {
Map<String, String> singleResult = new LinkedHashMap<>(); // 每次循环都创建一个新的映射
singleResult.put("name", entry.getKey());
singleResult.put("value", entry.getValue().toString());
list.add(singleResult);
}
return list;
}
return new ArrayList();
}
@ -746,7 +771,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
return JSON.parseArray(body.string());
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
}else {
return new JSONArray();
}
}
return new JSONArray();
@ -866,8 +896,15 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
.data(requestParams) // 请求参数
.post(); // 请求方法
ResponseBody body = response.body();
JSONArray jsonArray = JSON.parseArray(body.string());
return jsonArray;
if (body != null) {
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
return JSON.parseArray(jsonString);
}else {
return new JSONArray();
}
}
return new JSONArray();
}
//格式化桩号
@ -933,8 +970,9 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
JSONArray jsonArray = JSON.parseArray(body.string());
System.out.println(jsonArray);
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
JSONArray jsonArray = JSON.parseArray(jsonString);
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
if (jsonObject.getString("gantry_id").equals(nearestFacility.getFacilityCode())) {
@ -946,7 +984,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
mapList.add(map);
}
}
}
// 输出结果
return mapList;
@ -982,100 +1020,110 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
ResponseBody body = response.body();
if (body != null) {
JSONArray jsonArray = JSON.parseArray(body.string());
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
Integer asOneRoad = jsonObject.getInteger("as_one_road");
if (jsonObject.getDouble("end_pile_no")!=null){
double endPileNo = jsonObject.getDouble("end_pile_no");
String endMark = formatNumber(endPileNo);
jsonObject.put("endMark", endMark);//结束桩号
}
double startPileNo = jsonObject.getDouble("start_pile_no");
String stakeMark = formatNumber(startPileNo);
jsonObject.put("stakeMark", stakeMark);//
//as_one_road
//是否为同一条路,1-是,0-否
if (asOneRoad == UniversalEnum.ZERO.getNumber()) {
String string = jsonObject.getString("list_link_info");
JSONArray jsonlist = JSON.parseArray(string);
JSONObject o = (JSONObject) jsonlist.get(UniversalEnum.ZERO.getNumber());
String string1 = o.getString("firstPoint");
String string2 = o.getString("lastPoint");
String lngLats = o.getString("lngLats");
String[] lngLatsString = lngLats.split(";");
double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double s3 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s4 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double distanceM = calculateDistance(s2, s, s4, s3);
// System.out.printf("最大距离为: %.2f 米%n", distanceM);
jsonObject.put("max_jam_dist", distanceM);//最大拥堵距离
double endMake = startPileNo +Double.parseDouble(String.format("%.3f", distanceM));
String endmark = formatNumber(endMake);
jsonObject.put("endMark", endmark);//结束桩号
String[] split = string1.split(",");
double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]);
double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]);
String[] split2 = string2.split(",");
double lastLon = Double.parseDouble(split2[UniversalEnum.ZERO.getNumber()]);
double lastLat = Double.parseDouble(split2[UniversalEnum.ONE.getNumber()]);
//double firstLat = 35.38524527319016;
// double firstLon = 118.39808642864227;
//double lastLat = 35.386351346969604;
// double lastLon = 118.4038907289505;
double distanceKm = calculateDistance(firstLat, firstLon, lastLat, lastLon);
double distanceMeters = distanceKm * UniversalEnum.THOUSAND.getNumber(); // 将距离转换为米
//System.out.printf("两点之间的距离为: %.2f 米%n", distanceMeters);
jsonObject.put("jam_dist", distanceMeters);//当前拥堵距离
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
JSONArray jsonArray = JSON.parseArray(jsonString);
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
Integer asOneRoad = jsonObject.getInteger("as_one_road");
if (jsonObject.getDouble("end_pile_no") != null) {
double endPileNo = jsonObject.getDouble("end_pile_no");
String endMark = formatNumber(endPileNo);
jsonObject.put("endMark", endMark);//结束桩号
}
double startPileNo = jsonObject.getDouble("start_pile_no");
String stakeMark = formatNumber(startPileNo);
jsonObject.put("stakeMark", stakeMark);//
//as_one_road
//是否为同一条路,1-是,0-否
if (asOneRoad == UniversalEnum.ZERO.getNumber()) {
String string = jsonObject.getString("list_link_info");
JSONArray jsonlist = JSON.parseArray(string);
JSONObject o = (JSONObject) jsonlist.get(UniversalEnum.ZERO.getNumber());
String string1 = o.getString("firstPoint");
String string2 = o.getString("lastPoint");
String lngLats = o.getString("lngLats");
String[] lngLatsString = lngLats.split(";");
double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double s3 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s4 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double distanceM = calculateDistance(s2, s, s4, s3);
// System.out.printf("最大距离为: %.2f 米%n", distanceM);
jsonObject.put("max_jam_dist", distanceM);//最大拥堵距离
double endMake = startPileNo + Double.parseDouble(String.format("%.3f", distanceM));
String endmark = formatNumber(endMake);
jsonObject.put("endMark", endmark);//结束桩号
String[] split = string1.split(",");
double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]);
double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]);
String[] split2 = string2.split(",");
double lastLon = Double.parseDouble(split2[UniversalEnum.ZERO.getNumber()]);
double lastLat = Double.parseDouble(split2[UniversalEnum.ONE.getNumber()]);
//double firstLat = 35.38524527319016;
// double firstLon = 118.39808642864227;
//double lastLat = 35.386351346969604;
// double lastLon = 118.4038907289505;
double distanceKm = calculateDistance(firstLat, firstLon, lastLat, lastLon);
double distanceMeters = distanceKm * UniversalEnum.THOUSAND.getNumber(); // 将距离转换为米
//System.out.printf("两点之间的距离为: %.2f 米%n", distanceMeters);
jsonObject.put("jam_dist", distanceMeters);//当前拥堵距离
}
}
}
return jsonArray;
return jsonArray;
}
}
return new JSONArray();
}
/**
* 各收费站日累计车流辆
*
* @return
*/
@Override
public int trafficFlowAtToll()throws HttpException, IOException {
public int trafficFlowAtToll() throws HttpException, IOException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue());
LocalDate currentDate = LocalDate.now();
String startDate = currentDate.format(formatter);
Response response = getResponseTrafficFlowAtToll(startDate,UniversalEnum.ONE.getValue());
Response responseTwo = getResponseTrafficFlowAtToll(startDate,UniversalEnum.TWO.getValue());
Response response = getResponseTrafficFlowAtToll(startDate, UniversalEnum.ONE.getValue());
Response responseTwo = getResponseTrafficFlowAtToll(startDate, UniversalEnum.TWO.getValue());
ResponseBody body = response.body();
ResponseBody bodyTwo = responseTwo.body();
Integer totalFlow1=UniversalEnum.ZERO.getNumber();
Integer totalFlow2=UniversalEnum.ZERO.getNumber();
Integer totalFlow1 = UniversalEnum.ZERO.getNumber();
Integer totalFlow2 = UniversalEnum.ZERO.getNumber();
if (body != null) {
JSONArray jsonArray = JSON.parseArray(body.string());
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
totalFlow1=totalFlow1+ jsonObject.getInteger("total_flow");
String jsonString = body.string();
if (JSON.isValidArray(jsonString)) {
JSONArray jsonArray = JSON.parseArray(jsonString);
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
totalFlow1 = totalFlow1 + jsonObject.getInteger("total_flow");
}
}
}
if (bodyTwo != null) {
JSONArray jsonArray = JSON.parseArray(bodyTwo.string());
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
totalFlow2=totalFlow2+ jsonObject.getInteger("total_flow");
String jsonString = bodyTwo.string();
if (JSON.isValidArray(jsonString)) {
JSONArray jsonArray = JSON.parseArray(jsonString);
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
totalFlow2 = totalFlow2 + jsonObject.getInteger("total_flow");
}
}
}
return totalFlow1+totalFlow2;
return totalFlow1 + totalFlow2;
}
private Response getResponseTrafficFlowAtToll(String startDate,String stationType) throws HttpException, IOException {
private Response getResponseTrafficFlowAtToll(String startDate, String stationType) throws HttpException, IOException {
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();

199
zc-business/src/main/java/com/zc/business/service/impl/ExcelExportService.java

@ -17,7 +17,7 @@ import java.util.stream.Collectors;
@Service
public class ExcelExportService {
public void exportDataToExcel(Map<Integer, List<Status>> ipMap, Map<String, List<Status> >categoryMap, String filePath) {
public void exportDataToExcel(Map<Integer, List<Status>> ipMap, Map<String, List<Status>> categoryMap, String filePath) {
Workbook workbook = new XSSFWorkbook();
Map<Integer, List<Status>> map = new TreeMap<>(ipMap);
Sheet sheet = workbook.createSheet(UniversalEnum.DEVICE_FAILURE_RATE_TIME_SHARING_STATISTICS_PAGE.getValue());
@ -37,41 +37,50 @@ public class ExcelExportService {
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.FOUR.getNumber(), UniversalEnum.FOUR.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.FIVE.getNumber(), UniversalEnum.FIVE.getNumber()));
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.SIX.getNumber(), UniversalEnum.SIX.getNumber()));
int i=UniversalEnum.ZERO.getNumber();
boolean flag = true;
Row row1= sheet.createRow(UniversalEnum.ONE.getNumber());
int i = UniversalEnum.ZERO.getNumber();
boolean flag = true;
Row row1 = sheet.createRow(UniversalEnum.ONE.getNumber());
for (Map.Entry<Integer, List<Status>> entry : map.entrySet()) {
row0.createCell(UniversalEnum.TWO.getNumber()*i+UniversalEnum.SEVEN.getNumber()).setCellValue(entry.getKey()+UniversalEnum.HOUR.getValue());
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.TWO.getNumber()*i+UniversalEnum.SEVEN.getNumber(), UniversalEnum.TWO.getNumber()*i+UniversalEnum.EIGHT.getNumber()));
row1.createCell(UniversalEnum.TWO.getNumber()*i+UniversalEnum.SEVEN.getNumber()).setCellValue(UniversalEnum.ONLINE_RATE.getValue());
row1.createCell(UniversalEnum.TWO.getNumber()*i+UniversalEnum.EIGHT.getNumber()).setCellValue(UniversalEnum.PACKET_LOSS_RATE.getValue());
row0.createCell(UniversalEnum.TWO.getNumber() * i + UniversalEnum.SEVEN.getNumber()).setCellValue(entry.getKey() + UniversalEnum.HOUR.getValue());
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.TWO.getNumber() * i + UniversalEnum.SEVEN.getNumber(), UniversalEnum.TWO.getNumber() * i + UniversalEnum.EIGHT.getNumber()));
row1.createCell(UniversalEnum.TWO.getNumber() * i + UniversalEnum.SEVEN.getNumber()).setCellValue(UniversalEnum.ONLINE_RATE.getValue());
row1.createCell(UniversalEnum.TWO.getNumber() * i + UniversalEnum.EIGHT.getNumber()).setCellValue(UniversalEnum.PACKET_LOSS_RATE.getValue());
rowNum = UniversalEnum.TWO.getNumber();
List<Status> groupItems = entry.getValue();
for (Status ignored : groupItems) {
int a=rowNum++;
Row row = sheet.getRow(a); // 获取指定索引的行
if (row == null) { // 如果行不存在,则创建新行
row = sheet.createRow(a);
}
if(flag) {
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getDeviceName());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getDeviceIp());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getDeviceNo());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getDirection());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getProduction());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getModel());
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getContent());
List<Status> groupItems = entry.getValue();
for (Status ignored : groupItems) {
int a = rowNum++;
Row row = sheet.getRow(a); // 获取指定索引的行
if (row == null) { // 如果行不存在,则创建新行
row = sheet.createRow(a);
}
if (flag) {
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(ignored.getDeviceName());
row.createCell(UniversalEnum.ONE.getNumber()).setCellValue(ignored.getDeviceIp());
row.createCell(UniversalEnum.TWO.getNumber()).setCellValue(ignored.getDeviceNo());
Integer direction = Integer.parseInt(ignored.getDirection() != null ? ignored.getDirection() : UniversalEnum.FOUR.getValue());
String directionDescription = UniversalEnum.UNKNOWN_DIRECTION.getValue();
if (Objects.equals(direction, UniversalEnum.DIRECTION_OF_HEZE.getNumber())) {
directionDescription = UniversalEnum.DIRECTION_OF_HEZE.getValue();
} else if (Objects.equals(direction, UniversalEnum.BIDIRECTIONAL.getNumber())) {
directionDescription = UniversalEnum.BIDIRECTIONAL.getValue();
} else if (Objects.equals(direction, UniversalEnum.DIRECTION_OF_JINAN.getNumber())) {
directionDescription = UniversalEnum.DIRECTION_OF_JINAN.getValue();
}
row.createCell(UniversalEnum.TWO.getNumber()*i+UniversalEnum.SEVEN.getNumber()).setCellValue(ignored.getSuccessRate());
row.createCell(UniversalEnum.TWO.getNumber()*i+UniversalEnum.EIGHT.getNumber()).setCellValue(ignored.getLostRate());
row.createCell(UniversalEnum.THREE.getNumber()).setCellValue(directionDescription);
row.createCell(UniversalEnum.FOUR.getNumber()).setCellValue(ignored.getProduction());
row.createCell(UniversalEnum.FIVE.getNumber()).setCellValue(ignored.getModel());
row.createCell(UniversalEnum.SIX.getNumber()).setCellValue(ignored.getContent());
}
row.createCell(UniversalEnum.TWO.getNumber() * i + UniversalEnum.SEVEN.getNumber()).setCellValue(ignored.getSuccessRate());
row.createCell(UniversalEnum.TWO.getNumber() * i + UniversalEnum.EIGHT.getNumber()).setCellValue(ignored.getLostRate());
}
i++;
flag = false;
//flag = false;
}
Sheet sheets = workbook.createSheet(UniversalEnum.DEVICE_FAILURE_RATE_SUMMARY_PAGE.getValue());
createSheet(sheets,categoryMap);
createSheet(sheets, categoryMap);
Sheet sheet1 = workbook.createSheet(UniversalEnum.EQUIPMENT_FAILURE_RATE_TIME_SHARING_SUMMARY_PAGE.getValue());
createSheet1(sheet1,ipMap);
createSheet1(sheet1, ipMap);
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
} catch (IOException e) {
@ -80,15 +89,16 @@ public class ExcelExportService {
System.out.println("excel写入成功!!!!!!");
}
public void createSheet1(Sheet sheet,Map<Integer, List<Status>> ipMap){
public void createSheet1(Sheet sheet, Map<Integer, List<Status>> ipMap) {
Map<Integer, List<Status>> map = new TreeMap<>(ipMap);
int rowNum = UniversalEnum.ZERO.getNumber();
Row row0 = sheet.createRow(rowNum);
row0.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(UniversalEnum.EQUIPMENT_CLASSIFICATION.getValue());
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber()));
int i=UniversalEnum.ZERO.getNumber();
boolean flag = true;
Row row1= sheet.createRow(UniversalEnum.ONE.getNumber());
int i = UniversalEnum.ZERO.getNumber();
boolean flag = true;
Row row1 = sheet.createRow(UniversalEnum.ONE.getNumber());
for (Map.Entry<Integer, List<Status>> entry : map.entrySet()) {
row0.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.ONE.getNumber()).setCellValue(entry.getKey() + UniversalEnum.HOUR.getNumber());
sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.THREE.getNumber() * i + UniversalEnum.ONE.getNumber(), UniversalEnum.THREE.getNumber() * i + UniversalEnum.THREE.getNumber()));
@ -102,46 +112,49 @@ public class ExcelExportService {
List<Status> groupItems = entrys.getValue();
long b = groupItems.stream().filter(iteam -> Objects.equals(iteam.getDeviceStatus(), UniversalEnum.ONE.getValue())).count();
// for (Status ignored : groupItems) {
int a = rowNum++;
Row row = sheet.getRow(a); // 获取指定索引的行
if (row == null) { // 如果行不存在,则创建新行
row = sheet.createRow(a);
}
HashMap<String, String> itemTypeMap = new HashMap<>();
itemTypeMap.put(UniversalEnum.ONE_ONE.getValue(), UniversalEnum.HD_NETWORK_GUN_TYPE_FIXED_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_TWO.getValue(), UniversalEnum.HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_THREE.getValue(), UniversalEnum.UNDER_THE_BRIDGE_HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FOUR.getValue(), UniversalEnum.THREE_HUNDRED_SIXTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FIVE.getValue(), UniversalEnum.ONE_HUNDRED_EIGHTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.TWO_ONE.getValue(), UniversalEnum.GANTRY_TYPE_VARIABLE_MESSAGE_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_THREE.getValue(), UniversalEnum.AWNING_VARIABLE_INFORMATION_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_FOUR.getValue(), UniversalEnum.CANTILEVER_VARIABLE_INFORMATION_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.THREE.getValue(), UniversalEnum.METEOROLOGICAL_DETECTOR.getValue());
itemTypeMap.put(UniversalEnum.FIVE.getValue(), UniversalEnum.SECTION_VOICE_BROADCAST_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SIX.getValue(), UniversalEnum.GUARDRAIL_COLLISION_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SEVEN.getValue(), UniversalEnum.MILLIMETER_WAVE_RADAR.getValue());
itemTypeMap.put(UniversalEnum.EIGHT.getValue(), UniversalEnum.CONFLUENCE_AREA_EARLY_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.TEN.getValue(), UniversalEnum.LASER_FATIGUE_AWAKENING.getValue());
itemTypeMap.put(UniversalEnum.ELEVEN.getValue(), UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWELVE.getValue(), UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.THIRTEEN.getValue(), UniversalEnum.SMART_DEVICE_BOX.getValue());
String type = groupItems.get(UniversalEnum.ZERO.getNumber()).getType();
String description = itemTypeMap.get(type);
if (flag) {
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(description);
}
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.ONE.getNumber()).setCellValue(groupItems.size());
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.TWO.getNumber()).setCellValue(b);
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.THREE.getNumber()).setCellValue(String.format("%.2f%%", (double) b / groupItems.size() * UniversalEnum.ONE_HUNDRED.getNumber()));
int a = rowNum++;
Row row = sheet.getRow(a); // 获取指定索引的行
if (row == null) { // 如果行不存在,则创建新行
row = sheet.createRow(a);
}
i++;
flag = false;
// }
HashMap<String, String> itemTypeMap = new HashMap<>();
itemTypeMap.put(UniversalEnum.ONE_ONE.getValue(), UniversalEnum.HD_NETWORK_GUN_TYPE_FIXED_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_TWO.getValue(), UniversalEnum.HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_THREE.getValue(), UniversalEnum.UNDER_THE_BRIDGE_HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FOUR.getValue(), UniversalEnum.THREE_HUNDRED_SIXTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FIVE.getValue(), UniversalEnum.ONE_HUNDRED_EIGHTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.TWO_ONE.getValue(), UniversalEnum.GANTRY_TYPE_VARIABLE_MESSAGE_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_TWO.getValue(), UniversalEnum.VARIABLE_MESSAGE_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWO_THREE.getValue(), UniversalEnum.AWNING_VARIABLE_INFORMATION_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_FOUR.getValue(), UniversalEnum.CANTILEVER_VARIABLE_INFORMATION_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.THREE.getValue(), UniversalEnum.METEOROLOGICAL_DETECTOR.getValue());
itemTypeMap.put(UniversalEnum.FIVE.getValue(), UniversalEnum.SECTION_VOICE_BROADCAST_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SIX.getValue(), UniversalEnum.GUARDRAIL_COLLISION_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SEVEN.getValue(), UniversalEnum.MILLIMETER_WAVE_RADAR.getValue());
itemTypeMap.put(UniversalEnum.EIGHT.getValue(), UniversalEnum.CONFLUENCE_AREA_EARLY_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.TEN.getValue(), UniversalEnum.LASER_FATIGUE_AWAKENING.getValue());
itemTypeMap.put(UniversalEnum.ELEVEN.getValue(), UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWELVE.getValue(), UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.THIRTEEN.getValue(), UniversalEnum.SMART_DEVICE_BOX.getValue());
itemTypeMap.put(UniversalEnum.FIFTEEN.getValue(), UniversalEnum.SOLAR_PANEL.getValue());
itemTypeMap.put(UniversalEnum.SIXTEEN.getValue(), UniversalEnum.REMOTE_COMPUTER.getValue());
String type = groupItems.get(UniversalEnum.ZERO.getNumber()).getType();
String description = itemTypeMap.get(type);
if (flag) {
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(description);
}
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.ONE.getNumber()).setCellValue(groupItems.size());
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.TWO.getNumber()).setCellValue(b);
row.createCell(UniversalEnum.THREE.getNumber() * i + UniversalEnum.THREE.getNumber()).setCellValue(String.format("%.2f%%", (double) b / groupItems.size() * UniversalEnum.ONE_HUNDRED.getNumber()));
}
i++;
flag = false;
// }
}
}
public void createSheet(Sheet sheet,Map<String, List<Status> >categoryMap){
public void createSheet(Sheet sheet, Map<String, List<Status>> categoryMap) {
int rowNum = UniversalEnum.ZERO.getNumber();
Row row = sheet.createRow(rowNum);
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(UniversalEnum.EQUIPMENT_CLASSIFICATION.getValue());
@ -151,40 +164,40 @@ public class ExcelExportService {
rowNum = UniversalEnum.ONE.getNumber();
for (Map.Entry<String, List<Status>> entry : categoryMap.entrySet()) {
List<Status> groupItems = entry.getValue();
long a=groupItems.stream().filter(iteam-> Objects.equals(iteam.getDeviceStatus(), UniversalEnum.ONE.getValue())).count();
row = sheet.createRow(rowNum++);
long a = groupItems.stream().filter(iteam -> Objects.equals(iteam.getDeviceStatus(), UniversalEnum.ONE.getValue())).count();
row = sheet.createRow(rowNum++);
HashMap<String, String> itemTypeMap = new HashMap<>();
itemTypeMap.put(UniversalEnum.ONE.getValue(), UniversalEnum.HD_NETWORK_GUN_TYPE_FIXED_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.TWO.getValue(), UniversalEnum.HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.THREE.getValue(), UniversalEnum.UNDER_THE_BRIDGE_HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.FOUR.getValue(), UniversalEnum.THREE_HUNDRED_SIXTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.FIVE.getValue(), UniversalEnum.ONE_HUNDRED_EIGHTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.SIX.getValue(), UniversalEnum.GANTRY_TYPE_VARIABLE_MESSAGE_SIGN.getValue());
itemTypeMap.put(UniversalEnum.SEVEN.getValue(), UniversalEnum.AWNING_VARIABLE_INFORMATION_SIGN.getValue());
itemTypeMap.put(UniversalEnum.EIGHT.getValue(), UniversalEnum.CANTILEVER_VARIABLE_INFORMATION_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.NINE.getValue(), UniversalEnum.METEOROLOGICAL_DETECTOR.getValue());
itemTypeMap.put(UniversalEnum.TEN.getValue(), UniversalEnum.SECTION_VOICE_BROADCAST_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.ELEVEN.getValue(), UniversalEnum.GUARDRAIL_COLLISION_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.TWELVE.getValue(), UniversalEnum.MILLIMETER_WAVE_RADAR.getValue());
itemTypeMap.put(UniversalEnum.THIRTEEN.getValue(), UniversalEnum.CONFLUENCE_AREA_EARLY_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.FOURTEEN.getValue(), UniversalEnum.LASER_FATIGUE_AWAKENING.getValue());
itemTypeMap.put(UniversalEnum.FIFTEEN.getValue(), UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue());
itemTypeMap.put(UniversalEnum.SIXTEEN.getValue(), UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SEVENTEEN.getValue(), UniversalEnum.SMART_DEVICE_BOX.getValue());
itemTypeMap.put(UniversalEnum.ONE_ONE.getValue(), UniversalEnum.HD_NETWORK_GUN_TYPE_FIXED_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_TWO.getValue(), UniversalEnum.HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_THREE.getValue(), UniversalEnum.UNDER_THE_BRIDGE_HD_NETWORK_SPHERICAL_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FOUR.getValue(), UniversalEnum.THREE_HUNDRED_SIXTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.ONE_FIVE.getValue(), UniversalEnum.ONE_HUNDRED_EIGHTY_PANORAMIC_CAMERA.getValue());
itemTypeMap.put(UniversalEnum.TWO_ONE.getValue(), UniversalEnum.GANTRY_TYPE_VARIABLE_MESSAGE_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_TWO.getValue(), UniversalEnum.VARIABLE_MESSAGE_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWO_THREE.getValue(), UniversalEnum.AWNING_VARIABLE_INFORMATION_SIGN.getValue());
itemTypeMap.put(UniversalEnum.TWO_FOUR.getValue(), UniversalEnum.CANTILEVER_VARIABLE_INFORMATION_SIGN_IN_FRONT_OF_STATION.getValue());
itemTypeMap.put(UniversalEnum.THREE.getValue(), UniversalEnum.METEOROLOGICAL_DETECTOR.getValue());
itemTypeMap.put(UniversalEnum.FIVE.getValue(), UniversalEnum.SECTION_VOICE_BROADCAST_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SIX.getValue(), UniversalEnum.GUARDRAIL_COLLISION_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.SEVEN.getValue(), UniversalEnum.MILLIMETER_WAVE_RADAR.getValue());
itemTypeMap.put(UniversalEnum.EIGHT.getValue(), UniversalEnum.CONFLUENCE_AREA_EARLY_WARNING_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.TEN.getValue(), UniversalEnum.LASER_FATIGUE_AWAKENING.getValue());
itemTypeMap.put(UniversalEnum.ELEVEN.getValue(), UniversalEnum.CLASS_I_TRAFFIC_SURVEY_STATION.getValue());
itemTypeMap.put(UniversalEnum.TWELVE.getValue(), UniversalEnum.INTELLIGENT_DRIVING_GUIDANCE_SYSTEM.getValue());
itemTypeMap.put(UniversalEnum.THIRTEEN.getValue(), UniversalEnum.SMART_DEVICE_BOX.getValue());
itemTypeMap.put(UniversalEnum.FIFTEEN.getValue(), UniversalEnum.SOLAR_PANEL.getValue());
itemTypeMap.put(UniversalEnum.SIXTEEN.getValue(), UniversalEnum.REMOTE_COMPUTER.getValue());
String type = groupItems.get(UniversalEnum.ZERO.getNumber()).getType();
String description = itemTypeMap.get(type);
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(description);
row.createCell(UniversalEnum.ONE.getNumber()).setCellValue(groupItems.size());
row.createCell(UniversalEnum.TWO.getNumber()).setCellValue(a);
row.createCell(UniversalEnum.THREE.getNumber()).setCellValue(String.format("%.2f%%", (double) a / groupItems.size() * UniversalEnum.ONE_HUNDRED.getNumber()));
row.createCell(UniversalEnum.ZERO.getNumber()).setCellValue(description);
row.createCell(UniversalEnum.ONE.getNumber()).setCellValue(groupItems.size());
row.createCell(UniversalEnum.TWO.getNumber()).setCellValue(a);
row.createCell(UniversalEnum.THREE.getNumber()).setCellValue(String.format("%.2f%%", (double) a / groupItems.size() * UniversalEnum.ONE_HUNDRED.getNumber()));
}
}
}

96
zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java

@ -7,10 +7,14 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.zc.business.controller.DcNmcController;
@ -26,14 +30,19 @@ import com.zc.common.core.httpclient.request.RequestParams;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import okhttp3.*;
import org.apache.poi.ss.SpreadsheetVersion;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
@ -71,9 +80,32 @@ public class ExternalInterfaceMonitoringTask extends BaseController {
*/
@ApiOperation("外部接口监控信息列表")
@GetMapping("/list")
public TableDataInfo list(ExternalInterfaceMonitoring externalInterfaceMonitoring)
{
public TableDataInfo list(ExternalInterfaceMonitoring externalInterfaceMonitoring) {
startPage();
List<ExternalInterfaceMonitoring> list = selectExternal(externalInterfaceMonitoring);
return getDataTable(list);
}
/**
* 外部接口监测数据导出
*/
@PostMapping("/export")
public void export(HttpServletResponse response, ExternalInterfaceMonitoring externalInterfaceMonitoring) throws UnsupportedEncodingException {
List<ExternalInterfaceMonitoring> list = selectExternal(externalInterfaceMonitoring);
list.forEach(external -> {
external.setOperationStatusName(external.getOperationStatus().equals(UniversalEnum.ONE.getNumber()) ? "成功" : "失败");
external.setInterfaceOwnershipName(Arrays.stream(InterfaceOwnershipEnum.values())
.filter(interfaceOwnershipEnum -> interfaceOwnershipEnum.getCode().equals(external.getInterfaceOwnership()))
.findFirst()
.map(InterfaceOwnershipEnum::getOwnershipName)
.orElse(UniversalEnum.OTHER.getValue()));
});
ExcelUtil<ExternalInterfaceMonitoring> util = new ExcelUtil<>(ExternalInterfaceMonitoring.class);
resetCellMaxTextLength();
util.exportExcel(response, list, "外部接口监测数据");
}
public List<ExternalInterfaceMonitoring> selectExternal(ExternalInterfaceMonitoring externalInterfaceMonitoring) {
LambdaQueryWrapper<ExternalInterfaceMonitoring> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (externalInterfaceMonitoring.getInterfaceOwnership() != null) {
lambdaQueryWrapper.eq(ExternalInterfaceMonitoring::getInterfaceOwnership, externalInterfaceMonitoring.getInterfaceOwnership());
@ -84,9 +116,15 @@ public class ExternalInterfaceMonitoringTask extends BaseController {
if (externalInterfaceMonitoring.getInterfaceName() != null) {
lambdaQueryWrapper.like(ExternalInterfaceMonitoring::getInterfaceName, externalInterfaceMonitoring.getInterfaceName());
}
if (externalInterfaceMonitoring.getStartTime() != null && externalInterfaceMonitoring.getEndTime() != null) {
lambdaQueryWrapper.between(
ExternalInterfaceMonitoring::getOperationTime,
externalInterfaceMonitoring.getStartTime(),
externalInterfaceMonitoring.getEndTime()
);
}
lambdaQueryWrapper.orderByDesc(ExternalInterfaceMonitoring::getOperationTime);
List<ExternalInterfaceMonitoring> list = externalInterfaceMonitoringMapper.selectList(lambdaQueryWrapper);
return getDataTable(list);
return externalInterfaceMonitoringMapper.selectList(lambdaQueryWrapper);
}
@Scheduled(cron = "0 0/15 * * * ?")
@ -578,10 +616,10 @@ public class ExternalInterfaceMonitoringTask extends BaseController {
externalInterfaceMonitoring.setOperationResult(response.toString());
}
}catch (Exception e) {
} catch (Exception e) {
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber());
externalInterfaceMonitoring.setOperationResult(e.toString());
}finally {
} finally {
externalInterfaceMonitoring.setId(IdUtils.fastSimpleUUID());
externalInterfaceMonitoring.setOperatorName("系统");
externalInterfaceMonitoring.setOperationTime(new Date());
@ -594,15 +632,30 @@ public class ExternalInterfaceMonitoringTask extends BaseController {
* 交通流结果处理
*/
public void trafficFlowResultProcessing(ExternalInterfaceMonitoring externalInterfaceMonitoring, Response response) throws Exception {
ResponseBody body = response.body();
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber());
if (response.code() == UniversalEnum.TWO_HUNDRED.getNumber()) {
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ONE.getNumber());
} else {
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber());
}
if (body != null) {
JSONObject jsonResult = JSONObject.parseObject(body.string());
if (jsonResult.containsKey("code") && jsonResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) {
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ONE.getNumber());
String bodyString = body.string();
JsonObject jsonResult = null;
// 使用JsonElement解析数据
JsonElement jsonElement = JsonParser.parseString(bodyString);
// 检查数据类型并相应处理
if (jsonElement.isJsonObject()) {
// 如果是对象,进行对象处理
jsonResult = jsonElement.getAsJsonObject();
if (!jsonResult.get("code").toString().equals(UniversalEnum.TWO_HUNDRED.getValue())) {
externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber());
}
}
externalInterfaceMonitoring.setOperationResult(body.string());
externalInterfaceMonitoring.setOperationResult(bodyString);
} else {
externalInterfaceMonitoring.setOperationResult(response.toString());
}
@ -825,4 +878,25 @@ public class ExternalInterfaceMonitoringTask extends BaseController {
voiceBroadcastingToken = JSONObject.parseObject(response.body().string()).getString("accessToken");
}
}
/**
* 利用反射修改单元格最大长度
*/
public static void resetCellMaxTextLength() {
SpreadsheetVersion excel2007 = SpreadsheetVersion.EXCEL2007;
if (Integer.MAX_VALUE != excel2007.getMaxTextLength()) {
Field field;
try {
// SpreadsheetVersion.EXCEL2007的_maxTextLength变量
field = excel2007.getClass().getDeclaredField("_maxTextLength");
// 关闭反射机制的安全检查,可以提高性能
field.setAccessible(true);
// 重新设置这个变量属性值
field.set(excel2007, Integer.MAX_VALUE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

Loading…
Cancel
Save