Browse Source

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

develop
wangsixiang 10 months ago
parent
commit
17ea7508d1
  1. 6
      zc-business/pom.xml
  2. 4
      zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java
  3. 113
      zc-business/src/main/java/com/zc/business/controller/DcHolidaysController.java
  4. 2
      zc-business/src/main/java/com/zc/business/controller/DcNoStakeWarningTableController.java
  5. 111
      zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarning.java
  6. 101
      zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarningDate.java
  7. 15
      zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java
  8. 112
      zc-business/src/main/java/com/zc/business/controller/FTPDeletion.java
  9. 153
      zc-business/src/main/java/com/zc/business/controller/VideoController.java
  10. 2
      zc-business/src/main/java/com/zc/business/domain/DcEvent.java
  11. 2
      zc-business/src/main/java/com/zc/business/domain/DcEventVehicleAccident.java
  12. 82
      zc-business/src/main/java/com/zc/business/domain/DcHolidays.java
  13. 4
      zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java
  14. 2
      zc-business/src/main/java/com/zc/business/enums/ValueConverter.java
  15. 81
      zc-business/src/main/java/com/zc/business/mapper/DcHolidaysMapper.java
  16. 4
      zc-business/src/main/java/com/zc/business/mapper/DcTollStationStatisticsDataMapper.java
  17. 81
      zc-business/src/main/java/com/zc/business/service/IDcHolidaysService.java
  18. 3
      zc-business/src/main/java/com/zc/business/service/IDcTollStationStatisticsDataService.java
  19. 2
      zc-business/src/main/java/com/zc/business/service/IDcTrafficStatisticsService.java
  20. 17
      zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java
  21. 123
      zc-business/src/main/java/com/zc/business/service/impl/DcHolidaysServiceImpl.java
  22. 8
      zc-business/src/main/java/com/zc/business/service/impl/DcTollStationStatisticsDataImpl.java
  23. 59
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java
  24. 1
      zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml
  25. 90
      zc-business/src/main/resources/mapper/business/DcHolidaysMapper.xml
  26. 33
      zc-business/src/main/resources/mapper/business/DcTollStationStatisticsDataMapper.xml
  27. 8
      zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml

6
zc-business/pom.xml

@ -21,6 +21,12 @@
<artifactId>org.eclipse.paho.client.mqttv3</artifactId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version> <version>1.2.2</version>
</dependency> </dependency>
<!-- FTTP-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.8.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
<artifactId>json</artifactId> <artifactId>json</artifactId>

4
zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java

@ -45,4 +45,8 @@ public class RedisKeyConstants
* 企业微信access_token * 企业微信access_token
*/ */
public static final String QYWX_ACCESS_TOKEN = "qywx:accessToken"; public static final String QYWX_ACCESS_TOKEN = "qywx:accessToken";
/**
* 交通流
*/
public static final String TRAFFIC_FLOW = "trafficFlow";
} }

113
zc-business/src/main/java/com/zc/business/controller/DcHolidaysController.java

@ -0,0 +1,113 @@
package com.zc.business.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.enums.BusinessType;
import com.zc.business.domain.DcHolidays;
import com.zc.business.service.IDcHolidaysService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 节假日 基础数据
Controller
*
* @author ruoyi
* @date 2024-06-18
*/
@RestController
@RequestMapping("/system/holidays")
public class DcHolidaysController extends BaseController
{
@Autowired
private IDcHolidaysService dcHolidaysService;
/**
* 查询节假日 基础数据
列表
*/
@PreAuthorize("@ss.hasPermi('system:holidays:list')")
@GetMapping("/list")
public TableDataInfo list(DcHolidays dcHolidays)
{
startPage();
List<DcHolidays> list = dcHolidaysService.selectDcHolidaysList(dcHolidays);
return getDataTable(list);
}
/**
* 导出节假日 基础数据
列表
*/
@PreAuthorize("@ss.hasPermi('system:holidays:export')")
@Log(title = "节假日 基础数据 ", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, DcHolidays dcHolidays)
{
List<DcHolidays> list = dcHolidaysService.selectDcHolidaysList(dcHolidays);
ExcelUtil<DcHolidays> util = new ExcelUtil<>(DcHolidays.class);
util.exportExcel(response, list, "节假日 基础数据数据");
}
/**
* 获取节假日 基础数据
详细信息
*/
@PreAuthorize("@ss.hasPermi('system:holidays:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(dcHolidaysService.selectDcHolidaysById(id));
}
/**
* 新增节假日 基础数据
*/
@PreAuthorize("@ss.hasPermi('system:holidays:add')")
@Log(title = "节假日 基础数据 ", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody DcHolidays dcHolidays)
{
return toAjax(dcHolidaysService.insertDcHolidays(dcHolidays));
}
/**
* 修改节假日 基础数据
*/
@PreAuthorize("@ss.hasPermi('system:holidays:edit')")
@Log(title = "节假日 基础数据 ", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody DcHolidays dcHolidays)
{
return toAjax(dcHolidaysService.updateDcHolidays(dcHolidays));
}
/**
* 删除节假日 基础数据
*/
@PreAuthorize("@ss.hasPermi('system:holidays:remove')")
@Log(title = "节假日 基础数据 ", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(dcHolidaysService.deleteDcHolidaysByIds(ids));
}
}

2
zc-business/src/main/java/com/zc/business/controller/DcNoStakeWarningTableController.java

@ -26,7 +26,7 @@ import java.util.List;
*/ */
@Api(tags = {"无桩号预警"}) @Api(tags = {"无桩号预警"})
@RestController @RestController
@RequestMapping("/business/DcNoStakeWarningTableServiceImpl") @RequestMapping("/business/dcNoStakeWarningTable")
public class DcNoStakeWarningTableController extends BaseController { public class DcNoStakeWarningTableController extends BaseController {
@Resource @Resource
private DcNoStakeWarningTableServiceImpl dcNoStakeWarningTableService; private DcNoStakeWarningTableServiceImpl dcNoStakeWarningTableService;

111
zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarning.java

@ -0,0 +1,111 @@
package com.zc.business.controller;
import com.google.gson.Gson;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.utils.uuid.UUID;
import com.zc.business.domain.DcHolidays;
import com.zc.business.domain.DcNoStakeWarningTable;
import com.zc.business.service.IDcGantryStatisticsDataService;
import com.zc.business.service.IDcHolidaysService;
import com.zc.business.service.impl.DcNoStakeWarningTableServiceImpl;
import com.zc.common.core.websocket.WebSocketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
*
*/
@Component
public class DcTrafficFlowWarning {
@Resource
private DcNoStakeWarningTableServiceImpl dcNoStakeWarningTableService;
@Autowired
private IDcHolidaysService dcHolidaysService;
@Autowired
private IDcGantryStatisticsDataService dcGantryStatisticsDataService;
//@Scheduled(cron = "0/10 * * * * ?")
//@Scheduled(cron = "0 0/5 * * * ?")
public void DcTrafficFlow() {
System.out.println("每隔10秒执行一次:" + new Date());
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前年份
int currentYear = currentDate.getYear();
DcHolidays dcHolidays = new DcHolidays();
dcHolidays.setDate(currentYear);
//查询当前年份假期
List<DcHolidays> dcHolidaysList = dcHolidaysService.selectDcHolidaysList(dcHolidays);
// 计算当前日期加上七天的日期
LocalDate dateAfterSevenDays = currentDate.plusDays(7);
// 格式化日期输出(可选)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = dateAfterSevenDays.format(formatter);
//String formattedDate ="2024-05-01";
for (DcHolidays holidays : dcHolidaysList) {
String vacation = holidays.getVacation();
String[] dates = vacation.split("\\|");
//判断当前日期+ 7天 与 日期 数据对比
if (formattedDate.equals(dates[0])) {
//当前假期名称
String name = holidays.getName();
dcHolidays.setDate(currentYear-1);
DcHolidays dcHolidaysLast = dcHolidaysService.selectDcHolidaysListNameByDate(currentYear-1,name);
String vacation1 = dcHolidaysLast.getVacation();
String[] date = vacation1.split("\\|");
Map<String, Map<String, List<Map<String,String>>>> mapListOne = new HashMap<>();
Map<String, List<Map<String,String>>> map = new HashMap<>();
Map<String, List<Map<String,String>>> map2 = new HashMap<>();
for (int i1 = 0; i1 < date.length; i1++) {
List<Map<String,String>> mapList = dcGantryStatisticsDataService.realTimeTrafficFlow( date[i1],"1","4");
List<Map<String,String>> mapList2 = dcGantryStatisticsDataService.realTimeTrafficFlow(date[i1],"3","4");
// 计算当前日期加上七天后的日期
LocalDate dateAfterSevenDay = currentDate.plusDays(7+i1);
DateTimeFormatter formattedDateLst = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formatted = dateAfterSevenDay.format(formattedDateLst);
map.put(formatted,mapList);
map2.put(formatted,mapList2);
}
mapListOne.put("1",map);
mapListOne.put("3",map2);
// 创建Gson对象
Gson gson = new Gson();
// 将Map转换为JSON字符串
String jsonString = gson.toJson(mapListOne);
DcNoStakeWarningTable dcNoStakeWarningTable = new DcNoStakeWarningTable();
dcNoStakeWarningTable.setWarningDescription(name +"交通流数据预警提醒");
dcNoStakeWarningTable.setWarningType("1");
dcNoStakeWarningTable.setOtherConfig(jsonString);
dcNoStakeWarningTable.setWarningTime(new Date());
dcNoStakeWarningTableService.addDcNoStakeWarningTable(dcNoStakeWarningTable);
Map<String,Object> contentMap = new HashMap<>();
contentMap.put("content",name +"交通流数据预警提醒");
contentMap.put("trafficFlowDataEarlyWarning",jsonString);
WebSocketService.broadcast("trafficFlowDataEarlyWarning", contentMap);
// 打印JSON字符串
System.out.println(jsonString.length());
}
}
}
}

101
zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarningDate.java

@ -0,0 +1,101 @@
package com.zc.business.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.system.service.ISysConfigService;
import com.zc.business.domain.DcHolidays;
import com.zc.business.service.IDcHolidaysService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDate;
import java.util.List;
/**
*
*/
@Component
public class DcTrafficFlowWarningDate {
@Autowired
private IDcHolidaysService dcHolidaysService;
@Autowired
private ISysConfigService configService;
//@Scheduled(cron = "0/10 * * * * ?")
public void yearPriorToAcquisition() {
try {
String apiKey= configService.selectConfigByKey("holidayKey");//密钥
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取前一年 年份
int currentYear = currentDate.getYear();
String urlString = "https://apis.tianapi.com/jiejiari/index?key=" + apiKey + "&date=" + currentYear + "&type=1";
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
if (connection.getResponseCode() != 200) {
throw new RuntimeException("HTTP错误码:" + connection.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
String output;
StringBuilder response = new StringBuilder();
while ((output = br.readLine()) != null) {
response.append(output);
}
connection.disconnect();
JSONObject jsonResponse = JSONObject.parseObject(response.toString());
// 检查响应状态是否成功
if (jsonResponse.getInteger("code") == 200) {
// 获取result对象
JSONObject resultObj = jsonResponse.getJSONObject("result");
// 获取节假日列表JSONArray
JSONArray listArray = resultObj.getJSONArray("list");
DcHolidays dcHolidays = new DcHolidays();
dcHolidays.setDate(currentYear);
List<DcHolidays> dcHolidays1 = dcHolidaysService.selectDcHolidaysList(dcHolidays);
if (dcHolidays1.size() <=0){
// 遍历节假日列表 添加数据
for (int i = 0; i < listArray.size(); i++) {
JSONObject holidayObj = listArray.getJSONObject(i);
String vacation = holidayObj.getString("vacation");
String name = holidayObj.getString("name");
dcHolidays.setName(name);
dcHolidays.setVacation(vacation);
// 年份
dcHolidays.setDate(currentYear);
int i1 = dcHolidaysService.insertDcHolidays(dcHolidays);
}
}else {
// 遍历节假日列表 修改数据
for (int i = 0; i < listArray.size(); i++) {
JSONObject holidayObj = listArray.getJSONObject(i);
String vacation = holidayObj.getString("vacation");
String name = holidayObj.getString("name");
DcHolidays dcHoliday = new DcHolidays();
dcHoliday.setName(name);
dcHoliday.setVacation(vacation);
// 年份
dcHoliday.setDate(currentYear);
dcHolidaysService.updateDcHoliday(dcHoliday);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

15
zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java

@ -131,7 +131,7 @@ public class DcTrafficStatisticsController extends BaseController {
* @param request 包含查询条件的请求对象用于筛选历史收费站统计数据 * @param request 包含查询条件的请求对象用于筛选历史收费站统计数据
* @return 返回一个AjaxResult对象其中包含了查询到的收费站统计数据列表 * @return 返回一个AjaxResult对象其中包含了查询到的收费站统计数据列表
*/ */
@ApiOperation("获取收费站统计数据") @ApiOperation("获取收费站统计数据")
@GetMapping("/history/toll-station") @GetMapping("/history/toll-station")
public AjaxResult historyTollStation(DcTollStationStatisticsData request){ public AjaxResult historyTollStation(DcTollStationStatisticsData request){
// 调用服务层方法,根据请求条件查询历史车收费站数据 // 调用服务层方法,根据请求条件查询历史车收费站数据
@ -400,14 +400,15 @@ public AjaxResult trafficFlowAtTollStationEntrance(String startDate, String endD
return AjaxResult.success(mapList); return AjaxResult.success(mapList);
} }
/** /**
* 全路段双向实时车流量 * 获取据库中 收费站统计数据
* @param startDate 时间 * @param startDate 时间
* @param direction 方向 * @param accessType 出入口 1入 2出
* @param periodType 方向
*/ */
@ApiOperation("集团双向实时车流量") @ApiOperation("获取据库中收费站数数据")
@GetMapping("/history/realTimeTrafficFlowHour2") @GetMapping("/history/TollBoothStatistics")
public AjaxResult realTimeTrafficFlowHour2(String startDate,Long direction) throws HttpException, IOException{ public AjaxResult TollBoothStatistics(String startDate,String accessType,String periodType) throws HttpException, IOException{
JSONArray mapList = dcTrafficStatisticsService.realTimeTrafficFlowHour2(startDate,direction); List<DcTollStationStatisticsData> mapList = dcTollStationStatisticsDataService.TollBoothStatistics(startDate,accessType,periodType);
// 将查询结果封装为成功响应并返回 // 将查询结果封装为成功响应并返回
return AjaxResult.success(mapList); return AjaxResult.success(mapList);
} }

112
zc-business/src/main/java/com/zc/business/controller/FTPDeletion.java

@ -0,0 +1,112 @@
package com.zc.business.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
/**
*
*/
@Component("FTPDeletion")
@Slf4j
public class FTPDeletion {
private static int retentionDays = 60; // 默认保存天数为60天
public void deleteEventFile() {
log.info("定时任务执行,当前保存天气设置天数:"+retentionDays+"当前时间:"+java.time.LocalTime.now());
new FTPDeletion().remoteFileDeletion();
}
//修改当前保存天数
public void deleteEventFile(int days) {
this.retentionDays = days;
}
//获取当前保存天数
public int getRetentionDays() {
return retentionDays;
}
// 递归方法来处理文件和目录的删除
private void deleteDirectoryRecursively(FTPClient ftpClient, String parentDirPath) throws IOException {
ftpClient.setControlEncoding("GBK");
FTPFile[] files = ftpClient.listFiles(parentDirPath);
//选择要保留的天数
Instant thirtyDaysAgo = Instant.now().minus(retentionDays, ChronoUnit.DAYS);
log.info("当前设置的文件保存天数为:"+FTPDeletion.retentionDays+"当前时间:"+java.time.LocalTime.now());
for (FTPFile file : files) {
String filePath = parentDirPath + "/" + file.getName();
if (file.isDirectory()) {
// 如果是目录,则递归调用
deleteDirectoryRecursively(ftpClient, filePath);
} else {
// 排除包含特定关键词的文件名
if (!file.getName().contains("事故")) {
// 删除30天前的文件
Instant lastModifiedTime = file.getTimestamp().toInstant();
if (lastModifiedTime.isBefore(thirtyDaysAgo)) {
boolean deleted = ftpClient.deleteFile(filePath);
if (deleted) {
log.info("已删除文件:"+filePath);
} else {
log.info("无法删除文件:"+filePath);
}
}
} else {
log.info("文件名包含关键词'事故',跳过删除: :"+file.getName());
}
}
}
// 检查并删除空目录(但不删除根目录)
if (!parentDirPath.equals("/")) {
FTPFile[] remainingFiles = ftpClient.listFiles(parentDirPath);
if (remainingFiles.length == 0) {
boolean removed = ftpClient.removeDirectory(parentDirPath);
if (removed) {
log.info("已删除目录:"+parentDirPath);
} else {
log.info("无法删除目录:"+parentDirPath);
}
}
}
}
public void remoteFileDeletion() {
String server = "192.168.3.1";
int port = 21;
String user = "1911390090@qq.com";
String password = "989878wxl";
try {
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("GBK");
ftpClient.connect(server, port);
ftpClient.login(user, password);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 指定远程根目录
String remoteDirPath = "/";
// 从根目录开始递归删除
deleteDirectoryRecursively(ftpClient, remoteDirPath);
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}

153
zc-business/src/main/java/com/zc/business/controller/VideoController.java

@ -166,9 +166,6 @@ public class VideoController extends BaseController {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo")); JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
JSONObject jsonResult = null;
// 1000 米 // 1000 米
String distance = "1000"; String distance = "1000";
@ -194,19 +191,7 @@ public class VideoController extends BaseController {
.data(requestParams) // 请求参数 .data(requestParams) // 请求参数
.get(); // 请求方法 .get(); // 请求方法
if (response.body() != null) { return getJsonResult(response,okHttp);
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
} }
@ -348,9 +333,6 @@ public class VideoController extends BaseController {
public JSONObject synchronizeCameraData() throws HttpException, IOException { public JSONObject synchronizeCameraData() throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo")); JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
JSONObject jsonResult = null;
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams(); RequestParams requestParams = new RequestParams();
@ -370,19 +352,7 @@ public class VideoController extends BaseController {
.data(requestParams) // 请求参数 .data(requestParams) // 请求参数
.get(); // 请求方法 .get(); // 请求方法
if (response.body() != null) { return getJsonResult(response,okHttp);
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
} }
@ -532,26 +502,61 @@ public class VideoController extends BaseController {
return jsonResult; return jsonResult;
} }
/** /**
* 云平台控制 * 新增预置位
*/ */
@ApiOperation("云平台控制") @ApiOperation("新增预置位")
@GetMapping(value = "/PTZControl") @GetMapping(value = "/addPreset")
public JSONObject PTZControl(@ApiParam(value = "相机id", name = "camId", required = true) String camId, public JSONObject addPreset(@ApiParam(value = "相机id", name = "camId", required = true) String camId,
@ApiParam(value = "指令类型", name = "cmdType", required = true) String cmdType, @ApiParam(value = "预置位名称", name = "presetName", required = true) String presetName) throws HttpException, IOException {
@ApiParam(value = "速度", name = "speed", required = true) String speed) throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo")); JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
OkHttp okHttp = new OkHttp();
JSONObject jsonResult = null; RequestParams requestParams = new RequestParams();
requestParams.put("camId", camId);
requestParams.put("presetName", presetName);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(cameraInfo.getString("URL") + "/preset/addPreset") // 请求地址
.data(requestParams) // 请求参数
.post(); // 请求方法
// 新增预置位
JSONObject addPresetResult = getJsonResult(response, okHttp);
if (addPresetResult.get("code").equals(200)) {
JSONObject data = JSON.parseObject(addPresetResult.get("data").toString());
return PTZControl(camId, "8", data.getString("presetId"));
}else {
JSONObject error = new JSONObject();
error.put("code",500);
error.put("msg","新增预置位失败");
return error;
}
}
/**
* 查询预置位列表
*/
@ApiOperation("查询预置位列表")
@GetMapping(value = "/presetList")
public JSONObject presetList(@ApiParam(value = "相机id", name = "camId", required = true) String camId) throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams(); RequestParams requestParams = new RequestParams();
requestParams.put("msgType", "3");
requestParams.put("camId", camId); requestParams.put("camId", camId);
requestParams.put("cmdType", cmdType);
requestParams.put("speed", speed);
Map<String, String> header = new HashMap<>(); Map<String, String> header = new HashMap<>();
@ -564,10 +569,17 @@ public class VideoController extends BaseController {
Response response // 请求响应 Response response // 请求响应
= okHttp = okHttp
.headers(header) .headers(header)
.url(cameraInfo.getString("URL") + "/videoInfo/api/PTZControl") // 请求地址 .url(cameraInfo.getString("URL") + "/preset/presetList") // 请求地址
.data(requestParams) // 请求参数 .data(requestParams) // 请求参数
.get(); // 请求方法 .get(); // 请求方法
return getJsonResult(response,okHttp);
}
/**
* 返回结果处理
*/
public JSONObject getJsonResult(Response response, OkHttp okHttp) throws HttpException, IOException {
JSONObject jsonResult = null;
if (response.body() != null) { if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string()); jsonResult = JSONObject.parseObject(response.body().string());
@ -579,11 +591,47 @@ public class VideoController extends BaseController {
} }
} }
} }
return jsonResult; return jsonResult;
} }
/**
* 云平台控制
*/
@ApiOperation("云平台控制")
@GetMapping(value = "/PTZControl")
public JSONObject PTZControl(@ApiParam(value = "相机id", name = "camId", required = true) String camId,
@ApiParam(value = "指令类型", name = "cmdType", required = true) String cmdType,
@ApiParam(value = "速度", name = "speed", required = true) String speed) throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("msgType", "3");
requestParams.put("camId", camId);
requestParams.put("cmdType", cmdType);
requestParams.put("speed", speed);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(cameraInfo.getString("URL") + "/videoInfo/api/PTZControl") // 请求地址
.data(requestParams) // 请求参数
.get(); // 请求方法
return getJsonResult(response,okHttp);
}
public void getToken() throws HttpException, IOException { public void getToken() throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo")); JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
@ -618,8 +666,6 @@ public class VideoController extends BaseController {
public JSONObject getCamByDept() throws HttpException, IOException { public JSONObject getCamByDept() throws HttpException, IOException {
JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo")); JSONObject cameraInfo = JSONObject.parseObject(configService.selectConfigByKey("dc.cameraInfo"));
JSONObject jsonResult = null;
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams(); RequestParams requestParams = new RequestParams();
@ -639,19 +685,8 @@ public class VideoController extends BaseController {
.url(cameraInfo.getString("URL") + "/system/camera/camList") // 请求地址 .url(cameraInfo.getString("URL") + "/system/camera/camList") // 请求地址
.data(requestParams) // 请求参数 .data(requestParams) // 请求参数
.get(); // 请求方法 .get(); // 请求方法
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) { return getJsonResult(response,okHttp);
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
} }
/** /**

2
zc-business/src/main/java/com/zc/business/domain/DcEvent.java

@ -138,7 +138,7 @@ public class DcEvent {
* 3-4 服务区封闭和限行 * 3-4 服务区封闭和限行
*/ */
@ApiModelProperty("事件子类 例:事件子类:* 1-1 追尾* 1-2 侧翻* 1-3 撞护栏* 1-4 自* 1-5 其他事故* 2-1 车辆故障") @ApiModelProperty("事件子类 例:事件子类:* 1-1 追尾* 1-2 侧翻* 1-3 撞护栏* 1-4 自* 1-5 其他事故* 2-1 车辆故障")
private String eventSubclass; private String eventSubclass;
/** /**

2
zc-business/src/main/java/com/zc/business/domain/DcEventVehicleAccident.java

@ -47,7 +47,7 @@ public class DcEventVehicleAccident extends BaseEntity
/** 压车(公里) */ /** 压车(公里) */
@ApiModelProperty("压车(公里)") @ApiModelProperty("压车(公里)")
private Long trafficJam; private Float trafficJam;
/** 天气情况 /** 天气情况
1- 1-

82
zc-business/src/main/java/com/zc/business/domain/DcHolidays.java

@ -0,0 +1,82 @@
package com.zc.business.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 节假日 基础数据
对象 dc_holidays
*
* @author ruoyi
* @date 2024-06-18
*/
public class DcHolidays extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 节假日名称 */
@Excel(name = "节假日名称")
private String name;
/** 节假日假期 */
@Excel(name = "节假日假期 ")
private String vacation;
/** 日期 年份 */
@Excel(name = "日期 年份")
private Integer date;
/** $column.columnComment */
private Long id;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setVacation(String vacation)
{
this.vacation = vacation;
}
public String getVacation()
{
return vacation;
}
public void setDate(Integer date)
{
this.date = date;
}
public Integer getDate()
{
return date;
}
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("name", getName())
.append("vacation", getVacation())
.append("date", getDate())
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("id", getId())
.toString();
}
}

4
zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java

@ -8,7 +8,7 @@ public enum EventSubclassEnum {
REAR_END_COLLISION("1-1", "追尾","前方*发生追尾 注意避让"), REAR_END_COLLISION("1-1", "追尾","前方*发生追尾 注意避让"),
ROLLOVER("1-2", "侧翻","前方*发生侧翻 注意避让"), ROLLOVER("1-2", "侧翻","前方*发生侧翻 注意避让"),
COLLISION_WITH_GUARDRAIL("1-3", "撞护栏","前方*车撞击护栏注意避让"), COLLISION_WITH_GUARDRAIL("1-3", "撞护栏","前方*车撞击护栏注意避让"),
NATURAL("1-4", "自然","前方*发生自然现象请注意"), NATURAL("1-4", "自燃","前方*发生自燃现象请注意"),
OTHER_ACCIDENTS("1-5", "其他事故","前方*发生事故谨慎驾驶"), OTHER_ACCIDENTS("1-5", "其他事故","前方*发生事故谨慎驾驶"),
VEHICLE_MALFUNCTION("2-1", "车辆故障","前方*发生故障注意避让"), VEHICLE_MALFUNCTION("2-1", "车辆故障","前方*发生故障注意避让"),
THE_MAIN_LINE_IS_CLOSED_AND_RESTRICTED("3-1", "主线封闭和限行","前方*主线封闭和限行"), THE_MAIN_LINE_IS_CLOSED_AND_RESTRICTED("3-1", "主线封闭和限行","前方*主线封闭和限行"),
@ -35,7 +35,7 @@ public enum EventSubclassEnum {
OTHER_ABNORMALITIES_IN_THE_SERVICE_AREA("8-3", "服务区其他异常","前方*服务区设备停用"), OTHER_ABNORMALITIES_IN_THE_SERVICE_AREA("8-3", "服务区其他异常","前方*服务区设备停用"),
RAIN("10-1", "雨","雨天请谨慎驾驶"), RAIN("10-1", "雨","雨天请谨慎驾驶"),
SNOW("10-2", "雪","雪天路滑请谨慎驾驶"), SNOW("10-2", "雪","雪天路滑请谨慎驾驶"),
HEAVY_FOG("10-3", "雾","大雾天气请谨慎驾驶"), HEAVY_FOG("10-3", "雾","大雾天气请谨慎驾驶"),
GALE("10-4", "大风","大风天气请谨慎驾驶"), GALE("10-4", "大风","大风天气请谨慎驾驶"),
LOW_TEMPERATURE_COLD_WAVE("10-5", "低温寒潮","低温寒潮天气请谨慎驾驶"), LOW_TEMPERATURE_COLD_WAVE("10-5", "低温寒潮","低温寒潮天气请谨慎驾驶"),
SNOW_ON_ROAD_SURFACE("10-6", "路面积雪","路面积雪请谨慎驾驶"), SNOW_ON_ROAD_SURFACE("10-6", "路面积雪","路面积雪请谨慎驾驶"),

2
zc-business/src/main/java/com/zc/business/enums/ValueConverter.java

@ -126,7 +126,7 @@ public class ValueConverter {
eventSubclassName.put("1-1","追尾"); eventSubclassName.put("1-1","追尾");
eventSubclassName.put("1-2","侧翻"); eventSubclassName.put("1-2","侧翻");
eventSubclassName.put("1-3","撞护栏"); eventSubclassName.put("1-3","撞护栏");
eventSubclassName.put("1-4","自"); eventSubclassName.put("1-4","自");
eventSubclassName.put("1-5","其他事故"); eventSubclassName.put("1-5","其他事故");
eventSubclassName.put("2-1","车辆故障"); eventSubclassName.put("2-1","车辆故障");
eventSubclassName.put("3-1","主线封闭和限行"); eventSubclassName.put("3-1","主线封闭和限行");

81
zc-business/src/main/java/com/zc/business/mapper/DcHolidaysMapper.java

@ -0,0 +1,81 @@
package com.zc.business.mapper;
import com.zc.business.domain.DcHolidays;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 节假日 基础数据
Mapper接口
*
* @author ruoyi
* @date 2024-06-18
*/
public interface DcHolidaysMapper
{
/**
* 查询节假日 基础数据
*
* @param id 节假日 基础数据
主键
* @return 节假日 基础数据
*/
public DcHolidays selectDcHolidaysById(Long id);
/**
* 查询节假日 基础数据
列表
*
* @param dcHolidays 节假日 基础数据
* @return 节假日 基础数据
集合
*/
List<DcHolidays> selectDcHolidaysList(DcHolidays dcHolidays);
/**
* 新增节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
int insertDcHolidays(DcHolidays dcHolidays);
/**
* 修改节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
int updateDcHolidays(DcHolidays dcHolidays);
/**
* 删除节假日 基础数据
*
* @param id 节假日 基础数据
主键
* @return 结果
*/
int deleteDcHolidaysById(Long id);
/**
* 批量删除节假日 基础数据
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
int deleteDcHolidaysByIds(Long[] ids);
int updateDcHoliday(DcHolidays dcHolidays);
DcHolidays selectDcHolidaysListNameByDate(@Param("date") int date, @Param("name") String name);
}

4
zc-business/src/main/java/com/zc/business/mapper/DcTollStationStatisticsDataMapper.java

@ -3,8 +3,10 @@ package com.zc.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zc.business.domain.DcTollStationStatisticsData; import com.zc.business.domain.DcTollStationStatisticsData;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 这是一个接口的注释用于描述收费站数据统计的Mapper * 这是一个接口的注释用于描述收费站数据统计的Mapper
@ -29,5 +31,7 @@ public interface DcTollStationStatisticsDataMapper extends BaseMapper<DcTollStat
* @return 返回最大的统计日期 * @return 返回最大的统计日期
*/ */
Date getMaxStatisticalDate(); Date getMaxStatisticalDate();
List<DcTollStationStatisticsData> TollBoothStatistics(@Param("startDate") String startDate, @Param("accessType") String accessType, @Param("periodType") String periodType);
} }

81
zc-business/src/main/java/com/zc/business/service/IDcHolidaysService.java

@ -0,0 +1,81 @@
package com.zc.business.service;
import com.zc.business.domain.DcHolidays;
import java.util.List;
/**
* 节假日 基础数据
Service接口
*
* @author ruoyi
* @date 2024-06-18
*/
public interface IDcHolidaysService
{
/**
* 查询节假日 基础数据
*
* @param id 节假日 基础数据
主键
* @return 节假日 基础数据
*/
public DcHolidays selectDcHolidaysById(Long id);
/**
* 查询节假日 基础数据
列表
*
* @param dcHolidays 节假日 基础数据
* @return 节假日 基础数据
集合
*/
List<DcHolidays> selectDcHolidaysList(DcHolidays dcHolidays);
/**
* 新增节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
int insertDcHolidays(DcHolidays dcHolidays);
/**
* 修改节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
int updateDcHolidays(DcHolidays dcHolidays);
/**
* 批量删除节假日 基础数据
*
* @param ids 需要删除的节假日 基础数据
主键集合
* @return 结果
*/
int deleteDcHolidaysByIds(Long[] ids);
/**
* 删除节假日 基础数据
信息
*
* @param id 节假日 基础数据
主键
* @return 结果
*/
int deleteDcHolidaysById(Long id);
int updateDcHoliday(DcHolidays dcHolidays);
DcHolidays selectDcHolidaysListNameByDate(int date, String name);
}

3
zc-business/src/main/java/com/zc/business/service/IDcTollStationStatisticsDataService.java

@ -1,5 +1,6 @@
package com.zc.business.service; package com.zc.business.service;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.zc.business.domain.DcTollStationStatisticsData; import com.zc.business.domain.DcTollStationStatisticsData;
@ -37,4 +38,6 @@ public interface IDcTollStationStatisticsDataService extends IService<DcTollStat
* 累计车流量 * 累计车流量
*/ */
List<DcTollStationStatisticsData> accumulatedFlow(DcTollStationStatisticsData request); List<DcTollStationStatisticsData> accumulatedFlow(DcTollStationStatisticsData request);
List<DcTollStationStatisticsData> TollBoothStatistics(String startDate, String accessType, String periodType);
} }

2
zc-business/src/main/java/com/zc/business/service/IDcTrafficStatisticsService.java

@ -53,6 +53,6 @@ public interface IDcTrafficStatisticsService {
List<Map<String, Object>> realTimeTrafficFlowHour(String startDate,Long direction) throws HttpException, IOException; List<Map<String, Object>> realTimeTrafficFlowHour(String startDate,Long direction) throws HttpException, IOException;
JSONArray realTimeTrafficFlowHour2(String startDate,Long direction) throws HttpException, IOException; // JSONArray realTimeTrafficFlowHour2(String startDate,Long direction) throws HttpException, IOException;
} }

17
zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java

@ -216,9 +216,9 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
int i7 = dcEventMapper.insertDcEvent(dcEvent); int i7 = dcEventMapper.insertDcEvent(dcEvent);
if (i7 > 0 && eventType != 3) { /* if (i7 > 0 && eventType != 3) {
extracted(dcEvent);//事件推送到 首页 extracted(dcEvent);//事件推送到 首页
} }*/
if (i7 > 0) { if (i7 > 0) {
//if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == null){//非 事件处置 和收费站等多条数据添加 //if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == null){//非 事件处置 和收费站等多条数据添加
@ -235,6 +235,9 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
int i1 = dcEventAccidentMapper.insertDcEventAccident(dcEvent.getDcEventAccident()); int i1 = dcEventAccidentMapper.insertDcEventAccident(dcEvent.getDcEventAccident());
if (dcEvent.getEventState() == 1) { if (dcEvent.getEventState() == 1) {
updateDcEventState(uuid,1);//直接确认 updateDcEventState(uuid,1);//直接确认
}else {
extracted(dcEvent);//事件推送到 首页
} }
} }
break; break;
@ -245,6 +248,8 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
int i5 = dcEventVehicleAccidentMapper.insertDcEventVehicleAccident(dcEvent.getDcEventVehicleAccident()); int i5 = dcEventVehicleAccidentMapper.insertDcEventVehicleAccident(dcEvent.getDcEventVehicleAccident());
if (dcEvent.getEventState() ==1) { if (dcEvent.getEventState() ==1) {
updateDcEventState(uuid,1);//直接确认 updateDcEventState(uuid,1);//直接确认
}else {
extracted(dcEvent);//事件推送到 首页
} }
} }
break; break;
@ -318,7 +323,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
//首页事件 交通管制事件 添加 状态默认为 1 处置中 //首页事件 交通管制事件 添加 状态默认为 1 处置中
updateDcEventState(dcEvent.getId(), 1); updateDcEventState(dcEvent.getId(), 1);
} else { } else {
extracted(dcEvent);//事件推送到 首页 // extracted(dcEvent);//事件推送到 首页
dcEvent.getDcEventTrafficControl().setId(uuid); dcEvent.getDcEventTrafficControl().setId(uuid);
dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id
@ -394,7 +399,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
//交通管制 //交通管制
if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) { if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) {
String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]); String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]);
dcEvent.setStakeMark(extracted(facilityId)); // dcEvent.setStakeMark(extracted(facilityId));
} }
dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间 dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间
dcEventMapper.insertDcEvent(dcEvent); dcEventMapper.insertDcEvent(dcEvent);
@ -447,12 +452,12 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
//交通管制 //交通管制
if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) { if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) {
String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]); String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]);
dcEvent.setStakeMark(extracted(facilityId)); // dcEvent.setStakeMark(extracted(facilityId));
} }
dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间 dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间
dcEventMapper.insertDcEvent(dcEvent); dcEventMapper.insertDcEvent(dcEvent);
extracted(dcEvent); // extracted(dcEvent);
int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());
updateDcEventState(map.get("facilityId" + i),1);//直接确认 updateDcEventState(map.get("facilityId" + i),1);//直接确认

123
zc-business/src/main/java/com/zc/business/service/impl/DcHolidaysServiceImpl.java

@ -0,0 +1,123 @@
package com.zc.business.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.zc.business.domain.DcHolidays;
import com.zc.business.mapper.DcHolidaysMapper;
import com.zc.business.service.IDcHolidaysService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 节假日 基础数据
Service业务层处理
*
* @author ruoyi
* @date 2024-06-18
*/
@Service
public class DcHolidaysServiceImpl implements IDcHolidaysService
{
@Autowired
private DcHolidaysMapper dcHolidaysMapper;
/**
* 查询节假日 基础数据
*
* @param id 节假日 基础数据
主键
* @return 节假日 基础数据
*/
@Override
public DcHolidays selectDcHolidaysById(Long id)
{
return dcHolidaysMapper.selectDcHolidaysById(id);
}
/**
* 查询节假日 基础数据
列表
*
* @param dcHolidays 节假日 基础数据
* @return 节假日 基础数据
*/
@Override
public List<DcHolidays> selectDcHolidaysList(DcHolidays dcHolidays)
{
return dcHolidaysMapper.selectDcHolidaysList(dcHolidays);
}
/**
* 新增节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
@Override
public int insertDcHolidays(DcHolidays dcHolidays)
{
dcHolidays.setCreateTime(DateUtils.getNowDate());
return dcHolidaysMapper.insertDcHolidays(dcHolidays);
}
/**
* 修改节假日 基础数据
*
* @param dcHolidays 节假日 基础数据
* @return 结果
*/
@Override
public int updateDcHolidays(DcHolidays dcHolidays)
{
dcHolidays.setUpdateTime(DateUtils.getNowDate());
return dcHolidaysMapper.updateDcHolidays(dcHolidays);
}
/**
* 批量删除节假日 基础数据
*
* @param ids 需要删除的节假日 基础数据
主键
* @return 结果
*/
@Override
public int deleteDcHolidaysByIds(Long[] ids)
{
return dcHolidaysMapper.deleteDcHolidaysByIds(ids);
}
/**
* 删除节假日 基础数据
信息
*
* @param id 节假日 基础数据
主键
* @return 结果
*/
@Override
public int deleteDcHolidaysById(Long id)
{
return dcHolidaysMapper.deleteDcHolidaysById(id);
}
@Override
public int updateDcHoliday(DcHolidays dcHolidays) {
dcHolidays.setUpdateTime(DateUtils.getNowDate());
return dcHolidaysMapper.updateDcHoliday(dcHolidays);
}
@Override
public DcHolidays selectDcHolidaysListNameByDate(int date, String name) {
return dcHolidaysMapper.selectDcHolidaysListNameByDate(date,name);
}
}

8
zc-business/src/main/java/com/zc/business/service/impl/DcTollStationStatisticsDataImpl.java

@ -53,6 +53,8 @@ public class DcTollStationStatisticsDataImpl extends ServiceImpl<DcTollStationSt
@Resource @Resource
private ThreadPoolTaskExecutor threadPoolTaskExecutor; private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Resource
private DcTollStationStatisticsDataMapper dcTollStationStatisticsDataMapper;
/** /**
* 初始化方法用于在对象创建后恢复各种周期的交通收费站站点缓存 * 初始化方法用于在对象创建后恢复各种周期的交通收费站站点缓存
@ -231,6 +233,11 @@ public class DcTollStationStatisticsDataImpl extends ServiceImpl<DcTollStationSt
} }
@Override
public List<DcTollStationStatisticsData> TollBoothStatistics(String startDate, String accessType, String periodType) {
return dcTollStationStatisticsDataMapper.TollBoothStatistics(startDate,accessType,periodType);
}
/** /**
* 恢复日缓存数据的方法获取当月收费站站点入口和出口数据 * 恢复日缓存数据的方法获取当月收费站站点入口和出口数据
* 该方法首先会获取当前月份的收费站站点入口和出口数据 * 该方法首先会获取当前月份的收费站站点入口和出口数据
@ -294,4 +301,5 @@ public class DcTollStationStatisticsDataImpl extends ServiceImpl<DcTollStationSt
} }
} }

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

@ -1,19 +1,21 @@
package com.zc.business.service.impl; package com.zc.business.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zc.business.domain.*; import com.ruoyi.common.core.redis.RedisCache;
import com.zc.business.enums.ChannelCongestionLevelEnum; import com.ruoyi.common.utils.spring.SpringUtils;
import com.zc.business.constant.RedisKeyConstants;
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.StakeMarkRange;
import com.zc.business.enums.TrafficCompositionRateEnum;
import com.zc.business.service.IDcFacilityService; import com.zc.business.service.IDcFacilityService;
import com.zc.business.service.IDcRoadSectionService; import com.zc.business.service.IDcRoadSectionService;
import com.zc.business.service.IDcTrafficStatisticsService; import com.zc.business.service.IDcTrafficStatisticsService;
import com.zc.business.statistics.cache.metrics.DailyGantryMetricsStatisticsCache;
import com.zc.business.utils.StakeMarkUtils; import com.zc.business.utils.StakeMarkUtils;
import com.zc.common.core.httpclient.OkHttp; import com.zc.common.core.httpclient.OkHttp;
import com.zc.common.core.httpclient.exception.HttpException; import com.zc.common.core.httpclient.exception.HttpException;
@ -24,7 +26,6 @@ import okhttp3.Response;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@ -32,6 +33,7 @@ import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -42,7 +44,6 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
protected final Logger logger = LoggerFactory.getLogger(this.getClass()); protected final Logger logger = LoggerFactory.getLogger(this.getClass());
// 智慧高速平台token // 智慧高速平台token
private JSONObject token = null;
private final String sysid = "sdgs_it_hs_jihe"; private final String sysid = "sdgs_it_hs_jihe";
private final String baseUrl = "http://10.166.139.16:8080"; private final String baseUrl = "http://10.166.139.16:8080";
@ -50,6 +51,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
@Resource @Resource
private IDcFacilityService facilityService; private IDcFacilityService facilityService;
@Resource @Resource
private IDcRoadSectionService roadSectionService; private IDcRoadSectionService roadSectionService;
@ -70,7 +72,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
* 2. 使用POST方法向指定URL发送请求以获取新的访问令牌 * 2. 使用POST方法向指定URL发送请求以获取新的访问令牌
* 3. 在请求成功时解析响应体中的令牌信息并更新本地存储的令牌 * 3. 在请求成功时解析响应体中的令牌信息并更新本地存储的令牌
*/ */
@Scheduled(cron = "0 0 */5 * * ?") //@Scheduled(cron = "0 0 */5 * * ?")
public void refreshAccessToken() { public void refreshAccessToken() {
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
try { try {
@ -79,7 +81,8 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
.post(new Callback() { .post(new Callback() {
// 请求失败时的回调处理,此处未实现具体逻辑 // 请求失败时的回调处理,此处未实现具体逻辑
@Override @Override
public void onFailure(Call call, IOException e) {} public void onFailure(Call call, IOException e) {
}
// 请求成功时的回调处理 // 请求成功时的回调处理
@Override @Override
@ -87,7 +90,11 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
try { try {
// 判断响应体是否非空,非空则解析令牌信息 // 判断响应体是否非空,非空则解析令牌信息
if (response.body() != null) { if (response.body() != null) {
token = JSON.parseObject(response.body().string());
RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
JSONObject token = JSON.parseObject(response.body().string());
redisCache.setCacheObject(RedisKeyConstants.TRAFFIC_FLOW, token.getString("token_type") + " " + token.getString("access_token"), token.getInteger("expires_in"), TimeUnit.SECONDS);
} }
} catch (IOException e) { } catch (IOException e) {
// 解析异常转为运行时异常抛出 // 解析异常转为运行时异常抛出
@ -111,14 +118,19 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
* *
* @return 如果存在有效的token则返回构建的访问令牌字符串包括token类型和访问令牌如果不存在有效的token则返回null * @return 如果存在有效的token则返回构建的访问令牌字符串包括token类型和访问令牌如果不存在有效的token则返回null
*/ */
public String getAccessToken() { public String getAccessToken() {
RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
String token = redisCache.getCacheObject(RedisKeyConstants.TRAFFIC_FLOW);
// 检查token是否存在 // 检查token是否存在
if (token != null) { if (token == null) {
// 组合并返回token类型和访问令牌 // 组合并返回token类型和访问令牌
return token.getString("token_type") + " " + token.getString("access_token"); refreshAccessToken();
token = redisCache.getCacheObject(RedisKeyConstants.TRAFFIC_FLOW);
} }
// 如果token不存在,返回null // 如果token不存在,返回null
return null; return token;
} }
/** /**
@ -267,13 +279,13 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
* *
* @return List<DcRoadSectionCongestion> 当前路段拥堵情况列表 * @return List<DcRoadSectionCongestion> 当前路段拥堵情况列表
* @throws HttpException 抛出HttpException异常当HTTP请求发生错误时 * @throws HttpException 抛出HttpException异常当HTTP请求发生错误时
* @throws IOException 抛出IOException异常当发生输入/输出错误时 * @throws IOException 抛出IOException异常当发生输入/输出错误时
*/ */
@Override @Override
public List<DcRoadSectionCongestion> currentSectionCongested() throws HttpException, IOException { public List<DcRoadSectionCongestion> currentSectionCongested() throws HttpException, IOException {
// 调用方法获取当前拥堵事件信息 // 调用方法获取当前拥堵事件信息
JSONArray currentEventCongested = currentEventCongested(); JSONArray currentEventCongested = currentEventCongested();
// 如果没有拥堵事件,则直接返回空列表 // 如果没有拥堵事件,则直接返回空列表
if (currentEventCongested == null || currentEventCongested.isEmpty()) { if (currentEventCongested == null || currentEventCongested.isEmpty()) {
@ -297,7 +309,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
dcRoadSectionCongestion.setDownCongestionSections(new ArrayList<>()); dcRoadSectionCongestion.setDownCongestionSections(new ArrayList<>());
// 遍历当前拥堵事件,计算每个路段的拥堵情况 // 遍历当前拥堵事件,计算每个路段的拥堵情况
for (Object object :currentEventCongested) { for (Object object : currentEventCongested) {
if (object instanceof JSONObject) { if (object instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) object; JSONObject jsonObject = (JSONObject) object;
calculateSectionCongestion(jsonObject, dcRoadSectionCongestion); calculateSectionCongestion(jsonObject, dcRoadSectionCongestion);
@ -315,10 +327,10 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
/** /**
* 根据给定的JSON对象计算路段的拥堵情况 * 根据给定的JSON对象计算路段的拥堵情况
* *
* @param jsonObject 包含拥堵信息的JSON对象包括拥堵开始桩号结束桩号和拥堵距离 * @param jsonObject 包含拥堵信息的JSON对象包括拥堵开始桩号结束桩号和拥堵距离
* @param dcRoadSectionCongestion 包含路段基本信息和拥堵情况的对象需要根据计算结果更新拥堵信息 * @param dcRoadSectionCongestion 包含路段基本信息和拥堵情况的对象需要根据计算结果更新拥堵信息
*/ */
private void calculateSectionCongestion(JSONObject jsonObject, DcRoadSectionCongestion dcRoadSectionCongestion){ private void calculateSectionCongestion(JSONObject jsonObject, DcRoadSectionCongestion dcRoadSectionCongestion) {
// 根据方向,计算对应方向的路段拥堵情况 // 根据方向,计算对应方向的路段拥堵情况
String dirCode = jsonObject.getString("dir_code"); String dirCode = jsonObject.getString("dir_code");
@ -408,7 +420,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
// 路段包含结束拥堵桩号不包含开始拥堵桩号 // 路段包含结束拥堵桩号不包含开始拥堵桩号
if (endPileNo >= startStakeMark && endPileNo <= endStakeMark && startPileNo <= startStakeMark) { if (endPileNo >= startStakeMark && endPileNo <= endStakeMark && startPileNo <= startStakeMark) {
congestionSection.setCongestionStartStakeMark(startStakeMark); congestionSection.setCongestionStartStakeMark(startStakeMark);
congestionSection.setCongestionEndStakeMark((int)endPileNo); congestionSection.setCongestionEndStakeMark((int) endPileNo);
congestionSection.setCongestionDistance((endStakeMark - startStakeMark)); congestionSection.setCongestionDistance((endStakeMark - startStakeMark));
congestionSections.add(congestionSection); congestionSections.add(congestionSection);
@ -510,7 +522,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
* 获取门架指标数据 * 获取门架指标数据
* *
* @param startTime 开始时间 * @param startTime 开始时间
* @param endTime 结束时间 * @param endTime 结束时间
*/ */
@Override @Override
public JSONArray gantryMetrics(String startTime, String endTime) throws HttpException, IOException { public JSONArray gantryMetrics(String startTime, String endTime) throws HttpException, IOException {
@ -607,6 +619,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
requestParams.put("parameters", parameters.toJSONString()); requestParams.put("parameters", parameters.toJSONString());
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put("Authorization", getAccessToken()); headers.put("Authorization", getAccessToken());
Response response // 请求响应 Response response // 请求响应
@ -692,7 +705,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
} }
@Override @Override
public List<Map<String, Object>> realTimeTrafficFlowHour(String startDate,Long direction) throws HttpException, IOException { public List<Map<String, Object>> realTimeTrafficFlowHour(String startDate, Long direction) throws HttpException, IOException {
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams(); RequestParams requestParams = new RequestParams();
@ -719,6 +732,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
.post(); // 请求方法 .post(); // 请求方法
ResponseBody body = response.body(); ResponseBody body = response.body();
if (body != null) { if (body != null) {
JSONArray jsonArray = JSON.parseArray(body.string()); JSONArray jsonArray = JSON.parseArray(body.string());
// 获取当前时间 // 获取当前时间
LocalTime now = LocalTime.now(); LocalTime now = LocalTime.now();
@ -792,6 +806,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
return "N/A"; return "N/A";
} }
} }
public static String getDescriptionByIdentification(int identification) { public static String getDescriptionByIdentification(int identification) {
for (StakeMarkRange range : StakeMarkRange.values()) { for (StakeMarkRange range : StakeMarkRange.values()) {
if (range.getIdentification() == identification) { if (range.getIdentification() == identification) {
@ -800,6 +815,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
} }
return ""; return "";
} }
/*
public JSONArray realTimeTrafficFlowHour2(String startDate,Long direction) throws HttpException, IOException { public JSONArray realTimeTrafficFlowHour2(String startDate,Long direction) throws HttpException, IOException {
OkHttp okHttp = new OkHttp(); OkHttp okHttp = new OkHttp();
@ -864,5 +880,6 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
return null; return null;
} }
*/
} }

1
zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml

@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dc_event_traffic_control.limited_type as limited_type, dc_event_traffic_control.limited_type as limited_type,
dc_event_traffic_control.vehicle_type as vehicle_type, dc_event_traffic_control.vehicle_type as vehicle_type,
dc_event_traffic_control.measure as measure, dc_event_traffic_control.measure as measure,
dc_event_traffic_control.cause_type as cause_type,
dc_facility.other_config as other_config, dc_facility.other_config as other_config,
dc_facility.remark as remark, dc_facility.remark as remark,
dc_facility.stake_mark as stake_mark, dc_facility.stake_mark as stake_mark,

90
zc-business/src/main/resources/mapper/business/DcHolidaysMapper.xml

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zc.business.mapper.DcHolidaysMapper">
<resultMap type="com.zc.business.domain.DcHolidays" id="DcHolidaysResult">
<result property="name" column="name" />
<result property="vacation" column="vacation" />
<result property="date" column="date" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="id" column="id" />
</resultMap>
<sql id="selectDcHolidaysVo">
select name, vacation, date, create_time, update_time, id from dc_holidays
</sql>
<select id="selectDcHolidaysList" parameterType="DcHolidays" resultMap="DcHolidaysResult">
<include refid="selectDcHolidaysVo"/>
<where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="vacation != null and vacation != ''"> and vacation = #{vacation}</if>
<if test="date != null "> and date = #{date}</if>
</where>
</select>
<select id="selectDcHolidaysById" parameterType="Long" resultMap="DcHolidaysResult">
<include refid="selectDcHolidaysVo"/>
where id = #{id}
</select>
<select id="selectDcHolidaysListNameByDate" resultMap="DcHolidaysResult">
<include refid="selectDcHolidaysVo"/>
where date= #{date} and name =#{name}
</select>
<insert id="insertDcHolidays" parameterType="DcHolidays" useGeneratedKeys="true" keyProperty="id">
insert into dc_holidays
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">name,</if>
<if test="vacation != null">vacation,</if>
<if test="date != null">date,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
<if test="vacation != null">#{vacation},</if>
<if test="date != null">#{date},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateDcHolidays" parameterType="DcHolidays">
update dc_holidays
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">name = #{name},</if>
<if test="vacation != null">vacation = #{vacation},</if>
<if test="date != null">date = #{date},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<update id="updateDcHoliday" parameterType="DcHolidays">
update dc_holidays
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">name = #{name},</if>
<if test="vacation != null">vacation = #{vacation},</if>
<if test="date != null">date = #{date},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where name = #{name} and date =#{date}
</update>
<delete id="deleteDcHolidaysById" parameterType="Long">
delete from dc_holidays where id = #{id}
</delete>
<delete id="deleteDcHolidaysByIds" parameterType="String">
delete from dc_holidays where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

33
zc-business/src/main/resources/mapper/business/DcTollStationStatisticsDataMapper.xml

@ -3,7 +3,15 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zc.business.mapper.DcTollStationStatisticsDataMapper"> <mapper namespace="com.zc.business.mapper.DcTollStationStatisticsDataMapper">
<resultMap type="map" id="countMap">
<result property="id" column="id"/>
<result property="facilityName" column="facility_name"/>
<result property="toll_station_code" column="toll_station_code"/>
<result property="traffic_volume" column="traffic_volume"/>
<result property="period_type" column="period_type"/>
<result property="access_type" column="access_type"/>
<result property="statisticalDate" column="statisticalDate"/>
</resultMap>
<!-- 插入或更新交通路段数据 --> <!-- 插入或更新交通路段数据 -->
<insert id="insertOrUpdate" parameterType="com.zc.business.domain.DcTollStationStatisticsData"> <insert id="insertOrUpdate" parameterType="com.zc.business.domain.DcTollStationStatisticsData">
INSERT INTO INSERT INTO
@ -91,4 +99,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dc_toll_station_statistics_data dc_toll_station_statistics_data
</select> </select>
<select id="TollBoothStatistics" resultMap="countMap" resultType="map" >
SELECT
fa.facility_name,
fa.stake_mark,
dt.id,
dt.access_type,
dt.period_type,
dt.traffic_volume,
dt.toll_station_code,
dt.statistical_date
FROM
dc_facility AS fa
LEFT JOIN
dc_toll_station_statistics_data AS dt
ON
fa.facility_code = dt.toll_station_code
AND DATE(dt.statistical_date) = DATE(#{startDate})
AND dt.period_type = #{periodType}
AND dt.access_type = #{accessType}
WHERE fa.facility_type = 1
</select>
</mapper> </mapper>

8
zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml

@ -257,14 +257,13 @@
<select id="selectTollStationAnalysisByFacility" resultType="java.util.Map"> <select id="selectTollStationAnalysisByFacility" resultType="java.util.Map">
SELECT t1.id,t1.facility_name facilityName,IFNULL(t2.facilityClose,0) facilityClose, SELECT t1.id,t1.facility_name facilityName,IFNULL(t2.facilityClose,0) facilityClose,
IFNULL(t2.facilityInterval,0) facilityInterval,IFNULL(t2.facilityRestriction,0) facilityRestriction IFNULL(t2.facilityRestriction,0) facilityRestriction
from dc_facility t1 from dc_facility t1
LEFT JOIN LEFT JOIN
(select (select
t2.facility_id facilityId,t3.facility_name facilityName,classify, t2.facility_id facilityId,t3.facility_name facilityName,classify,
SUM(case when t2.classify = '6' then 1 else 0 end) facilityClose, SUM(case when t2.control_type = '1' then 1 else 0 end) facilityClose,
SUM(case when t2.classify = '7' then 1 else 0 end) facilityRestriction, SUM(case when t2.control_type = '2' then 1 else 0 end) facilityRestriction
SUM(case when t2.classify = '9' then 1 else 0 end) facilityInterval
from dc_event t1 from dc_event t1
LEFT JOIN dc_event_traffic_control t2 on t1.id = t2.id LEFT JOIN dc_event_traffic_control t2 on t1.id = t2.id
LEFT JOIN dc_facility t3 on t3.id = t2.facility_id LEFT JOIN dc_facility t3 on t3.id = t2.facility_id
@ -272,7 +271,6 @@
t1.event_type = '3' and t1.event_subclass = '3-2' and t1.event_state != '0' t1.event_type = '3' and t1.event_subclass = '3-2' and t1.event_state != '0'
and date_format(t1.start_time,'%Y-%m-%d %H:%i:%s') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%s') and date_format(t1.start_time,'%Y-%m-%d %H:%i:%s') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%s')
and (date_format(t1.end_time,'%Y-%m-%d %H:%i:%s') > date_format(#{startTime},'%Y-%m-%d %H:%i:%s') or ISNULL(t1.end_time)) and (date_format(t1.end_time,'%Y-%m-%d %H:%i:%s') > date_format(#{startTime},'%Y-%m-%d %H:%i:%s') or ISNULL(t1.end_time))
and t2.classify in ('6','7','9')
GROUP BY t2.facility_id) t2 on t1.id = t2.facilityId GROUP BY t2.facility_id) t2 on t1.id = t2.facilityId
<where> <where>
t1.facility_type = '1' t1.facility_type = '1'

Loading…
Cancel
Save