lau572
4 weeks ago
6 changed files with 916 additions and 0 deletions
@ -0,0 +1,263 @@ |
|||
package com.zc.business.controller; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
import javax.annotation.Resource; |
|||
import javax.servlet.ServletOutputStream; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import com.alibaba.fastjson.JSON; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.zc.business.domain.DcDevice; |
|||
import com.zc.business.enums.UniversalEnum; |
|||
import com.zc.common.core.httpclient.exception.HttpException; |
|||
import io.swagger.v3.oas.annotations.Parameter; |
|||
import org.apache.poi.ss.usermodel.*; |
|||
import org.apache.poi.ss.util.CellRangeAddress; |
|||
import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.security.access.prepost.PreAuthorize; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.StringUtils; |
|||
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.enums.BusinessType; |
|||
import com.zc.business.domain.DcTrafficSurveyData; |
|||
import com.zc.business.service.IDcTrafficSurveyDataService; |
|||
import com.ruoyi.common.utils.poi.ExcelUtil; |
|||
import com.ruoyi.common.core.page.TableDataInfo; |
|||
|
|||
/** |
|||
* 一类交调数据Controller |
|||
* |
|||
* @author liuwenge |
|||
* @date 2024-10-29 |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("/trafficSurveyData/dcTrafficSurveyData") |
|||
public class DcTrafficSurveyDataController extends BaseController |
|||
{ |
|||
@Autowired |
|||
private IDcTrafficSurveyDataService dcTrafficSurveyDataService; |
|||
|
|||
@Resource |
|||
private DcDeviceController dcDeviceController; |
|||
|
|||
@Scheduled(cron = "0 5 * * * ?") |
|||
public void syncTrafficSectionData() throws HttpException, IOException { |
|||
|
|||
HashMap<String, Object> props = new HashMap<>(); |
|||
// 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内
|
|||
props.put("terms[0].column", "timestamp$BTW"); |
|||
ArrayList<String> dateList = new ArrayList<>(); |
|||
// 添加当前前一小时的开始和结束时间到列表,用于设定时间范围
|
|||
Date now = new Date(); |
|||
// 计算上一个小时的时间
|
|||
Date lastHourStart = DateUtil.beginOfHour(DateUtil.offsetHour(now, -1)); |
|||
Date lastHourEnd = DateUtil.endOfHour(DateUtil.offsetHour(now, -1)); |
|||
// 将上一个小时的开始和结束时间添加到列表
|
|||
dateList.add(DateUtil.format(lastHourStart, "yyyy-MM-dd HH:mm:ss")); |
|||
dateList.add(DateUtil.format(lastHourEnd, "yyyy-MM-dd HH:mm:ss")); |
|||
// 将日期列表以逗号分隔并设置为查询条件的值
|
|||
props.put("terms[0].value", String.join(UniversalEnum.COMMA.getValue(), dateList)); |
|||
props.put("paging", false); |
|||
props.put("sorts[0].order", "asc"); |
|||
props.put("sorts[0].name", "timestamp"); |
|||
|
|||
|
|||
List<DcDevice> deviceList = dcTrafficSurveyDataService.selectDeviceList(); |
|||
String propertyId = "01"; //功能码
|
|||
|
|||
List<DcTrafficSurveyData> batchData = new ArrayList<>(); |
|||
for (DcDevice dcDevice : deviceList) { |
|||
|
|||
Object data = JSON.parseObject(dcDeviceController.queryDeviceProperties(dcDevice.getIotDeviceId(), propertyId, props).get("data").toString()).get("data"); |
|||
JSONArray dataArray = JSON.parseArray(data.toString()); |
|||
|
|||
Integer hezeTotal = 0; |
|||
Integer jinanTotal = 0; |
|||
for (Object o : dataArray) { |
|||
JSONObject jsonObject = JSON.parseObject(o.toString()); |
|||
JSONObject formatValue = JSON.parseObject(jsonObject.get("formatValue").toString()); |
|||
hezeTotal += Integer.parseInt(formatValue.get("1").toString()); |
|||
jinanTotal += Integer.parseInt(formatValue.get("3").toString()); |
|||
} |
|||
|
|||
//菏泽方向数据
|
|||
DcTrafficSurveyData hezeData = new DcTrafficSurveyData(); |
|||
hezeData.setIotDeviceId(dcDevice.getIotDeviceId()); |
|||
hezeData.setStakeMark(dcDevice.getStakeMark()); |
|||
hezeData.setDirection("1"); |
|||
hezeData.setTimestamp(lastHourStart); |
|||
hezeData.setTrafficVolume(Long.valueOf(hezeTotal)); |
|||
batchData.add(hezeData); |
|||
//济南方向数据
|
|||
DcTrafficSurveyData jinanData = new DcTrafficSurveyData(); |
|||
jinanData.setIotDeviceId(dcDevice.getIotDeviceId()); |
|||
jinanData.setStakeMark(dcDevice.getStakeMark()); |
|||
jinanData.setDirection("3"); |
|||
jinanData.setTimestamp(lastHourStart); |
|||
jinanData.setTrafficVolume(Long.valueOf(jinanTotal)); |
|||
batchData.add(jinanData); |
|||
|
|||
} |
|||
|
|||
dcTrafficSurveyDataService.batchInsert(batchData); |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 查询一类交调数据列表 |
|||
*/ |
|||
@GetMapping("/list") |
|||
public AjaxResult list(DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
return dcTrafficSurveyDataService.selectDcTrafficSurveyDataList(dcTrafficSurveyData); |
|||
} |
|||
|
|||
/** |
|||
* 导出一类交调数据列表 |
|||
*/ |
|||
@Log(title = "一类交调数据", businessType = BusinessType.EXPORT) |
|||
@PostMapping("/export") |
|||
public void export(HttpServletResponse response, DcTrafficSurveyData dcTrafficSurveyData) throws IOException { |
|||
AjaxResult ajaxResult = dcTrafficSurveyDataService.selectDcTrafficSurveyDataList(dcTrafficSurveyData); |
|||
if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { |
|||
Map<String,Object> data = (Map<String, Object>) ajaxResult.get("data"); |
|||
List<Map<String,String>> columnList = (List<Map<String,String>>) data.get("columnList"); |
|||
List<Map<String,Object>> rowList = (List<Map<String,Object>>) data.get("rowList"); |
|||
|
|||
XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作簿
|
|||
Sheet sheet = workbook.createSheet("一类交调站"); // 创建工作表
|
|||
|
|||
// 创建数据行样式
|
|||
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); |
|||
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()); |
|||
Cell cell = row.createCell(UniversalEnum.ZERO.getNumber()); |
|||
cell.setCellValue("设备名称"); |
|||
cell.setCellStyle(headerStyle); |
|||
cell = row.createCell(UniversalEnum.ONE.getNumber()); |
|||
cell.setCellValue("方向"); |
|||
cell.setCellStyle(headerStyle); |
|||
int i; |
|||
for (i = 0; i < columnList.size(); i++) { |
|||
cell = row.createCell(i + 2); |
|||
cell.setCellValue(columnList.get(i).get("label").toString()); |
|||
cell.setCellStyle(headerStyle);; |
|||
} |
|||
cell = row.createCell(i + 2); |
|||
cell.setCellValue("合计"); |
|||
cell.setCellStyle(headerStyle); |
|||
|
|||
|
|||
for (int j = 0; j < rowList.size(); j++) { |
|||
Row subHeaderRow = sheet.createRow(j+1); |
|||
cell = subHeaderRow.createCell(UniversalEnum.ZERO.getNumber()); |
|||
cell.setCellValue("一类交调站"+rowList.get(j).get("stakeMark").toString()); |
|||
cell.setCellStyle(dataStyle); |
|||
cell = subHeaderRow.createCell(UniversalEnum.ONE.getNumber()); |
|||
cell.setCellValue(rowList.get(j).get("direction").toString().equals("1") ? "济南方向" : "菏泽方向"); |
|||
cell.setCellStyle(dataStyle); |
|||
int k = 0; |
|||
for (k = 0; k < columnList.size(); k++) { |
|||
cell = subHeaderRow.createCell(k + 2); |
|||
cell.setCellValue(rowList.get(j).get(columnList.get(k).get("key")).toString()); |
|||
cell.setCellStyle(dataStyle);; |
|||
} |
|||
cell = subHeaderRow.createCell(k+2); |
|||
cell.setCellValue(rowList.get(j).get("total").toString()); |
|||
cell.setCellStyle(dataStyle); |
|||
} |
|||
|
|||
|
|||
// 写入文件
|
|||
try (ServletOutputStream outputStream = response.getOutputStream()){ |
|||
workbook.write(outputStream); |
|||
} finally { |
|||
workbook.close(); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 获取一类交调数据详细信息 |
|||
*/ |
|||
@GetMapping(value = "/{id}") |
|||
public AjaxResult getInfo(@PathVariable("id") Long id) |
|||
{ |
|||
return AjaxResult.success(dcTrafficSurveyDataService.selectDcTrafficSurveyDataById(id)); |
|||
} |
|||
|
|||
/** |
|||
* 新增一类交调数据 |
|||
*/ |
|||
@Log(title = "一类交调数据", businessType = BusinessType.INSERT) |
|||
@PostMapping |
|||
public AjaxResult add(@RequestBody DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
return toAjax(dcTrafficSurveyDataService.insertDcTrafficSurveyData(dcTrafficSurveyData)); |
|||
} |
|||
|
|||
/** |
|||
* 修改一类交调数据 |
|||
*/ |
|||
@Log(title = "一类交调数据", businessType = BusinessType.UPDATE) |
|||
@PutMapping |
|||
public AjaxResult edit(@RequestBody DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
return toAjax(dcTrafficSurveyDataService.updateDcTrafficSurveyData(dcTrafficSurveyData)); |
|||
} |
|||
|
|||
/** |
|||
* 删除一类交调数据 |
|||
*/ |
|||
@Log(title = "一类交调数据", businessType = BusinessType.DELETE) |
|||
@DeleteMapping("/{ids}") |
|||
public AjaxResult remove(@PathVariable Long[] ids) |
|||
{ |
|||
return toAjax(dcTrafficSurveyDataService.deleteDcTrafficSurveyDataByIds(ids)); |
|||
} |
|||
} |
@ -0,0 +1,130 @@ |
|||
package com.zc.business.domain; |
|||
|
|||
import java.util.Date; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
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_traffic_survey_data |
|||
* |
|||
* @author liuwenge |
|||
* @date 2024-10-29 |
|||
*/ |
|||
public class DcTrafficSurveyData extends BaseEntity |
|||
{ |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** $column.columnComment */ |
|||
private Long id; |
|||
|
|||
/** 物联设备主键 */ |
|||
@Excel(name = "物联设备主键") |
|||
private String iotDeviceId; |
|||
|
|||
/** 所在桩号 */ |
|||
@Excel(name = "所在桩号") |
|||
private String stakeMark; |
|||
|
|||
/** 方向1-上行,2-中,3-下行 */ |
|||
@Excel(name = "方向1-上行,2-中,3-下行") |
|||
private String direction; |
|||
|
|||
/** 采集时间 */ |
|||
@JsonFormat(pattern = "yyyy-MM-dd") |
|||
@Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd") |
|||
private Date timestamp; |
|||
|
|||
/** 车流量 */ |
|||
@Excel(name = "车流量") |
|||
private Long trafficVolume; |
|||
|
|||
private String type; |
|||
|
|||
private String times; |
|||
|
|||
public void setId(Long id) |
|||
{ |
|||
this.id = id; |
|||
} |
|||
|
|||
public Long getId() |
|||
{ |
|||
return id; |
|||
} |
|||
public void setIotDeviceId(String iotDeviceId) |
|||
{ |
|||
this.iotDeviceId = iotDeviceId; |
|||
} |
|||
|
|||
public String getIotDeviceId() |
|||
{ |
|||
return iotDeviceId; |
|||
} |
|||
public void setStakeMark(String stakeMark) |
|||
{ |
|||
this.stakeMark = stakeMark; |
|||
} |
|||
|
|||
public String getStakeMark() |
|||
{ |
|||
return stakeMark; |
|||
} |
|||
public void setDirection(String direction) |
|||
{ |
|||
this.direction = direction; |
|||
} |
|||
|
|||
public String getDirection() |
|||
{ |
|||
return direction; |
|||
} |
|||
public void setTimestamp(Date timestamp) |
|||
{ |
|||
this.timestamp = timestamp; |
|||
} |
|||
|
|||
public Date getTimestamp() |
|||
{ |
|||
return timestamp; |
|||
} |
|||
public void setTrafficVolume(Long trafficVolume) |
|||
{ |
|||
this.trafficVolume = trafficVolume; |
|||
} |
|||
|
|||
public Long getTrafficVolume() |
|||
{ |
|||
return trafficVolume; |
|||
} |
|||
|
|||
public String getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(String type) { |
|||
this.type = type; |
|||
} |
|||
|
|||
public String getTimes() { |
|||
return times; |
|||
} |
|||
|
|||
public void setTimes(String times) { |
|||
this.times = times; |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
|||
.append("id", getId()) |
|||
.append("iotDeviceId", getIotDeviceId()) |
|||
.append("stakeMark", getStakeMark()) |
|||
.append("direction", getDirection()) |
|||
.append("timestamp", getTimestamp()) |
|||
.append("trafficVolume", getTrafficVolume()) |
|||
.toString(); |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
package com.zc.business.mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
import com.zc.business.domain.DcDevice; |
|||
import com.zc.business.domain.DcTrafficSurveyData; |
|||
|
|||
/** |
|||
* 一类交调数据Mapper接口 |
|||
* |
|||
* @author liuwenge |
|||
* @date 2024-10-29 |
|||
*/ |
|||
public interface DcTrafficSurveyDataMapper |
|||
{ |
|||
/** |
|||
* 查询一类交调数据 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 一类交调数据 |
|||
*/ |
|||
public DcTrafficSurveyData selectDcTrafficSurveyDataById(Long id); |
|||
|
|||
/** |
|||
* 查询一类交调数据列表 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 一类交调数据集合 |
|||
*/ |
|||
List<DcTrafficSurveyData> selectDcTrafficSurveyDataList(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
List<DcTrafficSurveyData> selectDay(DcTrafficSurveyData dcTrafficSurveyData); |
|||
List<DcTrafficSurveyData> selectMonth(DcTrafficSurveyData dcTrafficSurveyData); |
|||
List<DcTrafficSurveyData> selectYear(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 新增一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
int insertDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 修改一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
int updateDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 删除一类交调数据 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 结果 |
|||
*/ |
|||
int deleteDcTrafficSurveyDataById(Long id); |
|||
|
|||
/** |
|||
* 批量删除一类交调数据 |
|||
* |
|||
* @param ids 需要删除的数据主键集合 |
|||
* @return 结果 |
|||
*/ |
|||
int deleteDcTrafficSurveyDataByIds(Long[] ids); |
|||
|
|||
List<DcDevice> selectDeviceList(); |
|||
|
|||
int batchInsert(List<DcTrafficSurveyData> batchData); |
|||
} |
@ -0,0 +1,80 @@ |
|||
package com.zc.business.service; |
|||
|
|||
import java.util.List; |
|||
|
|||
import com.ruoyi.common.core.domain.AjaxResult; |
|||
import com.zc.business.domain.DcDevice; |
|||
import com.zc.business.domain.DcTrafficSurveyData; |
|||
|
|||
/** |
|||
* 一类交调数据Service接口 |
|||
* |
|||
* @author liuwenge |
|||
* @date 2024-10-29 |
|||
*/ |
|||
public interface IDcTrafficSurveyDataService |
|||
{ |
|||
/** |
|||
* 查询一类交调数据 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 一类交调数据 |
|||
*/ |
|||
public DcTrafficSurveyData selectDcTrafficSurveyDataById(Long id); |
|||
|
|||
/** |
|||
* 查询一类交调数据列表 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 一类交调数据集合 |
|||
*/ |
|||
AjaxResult selectDcTrafficSurveyDataList(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 新增一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
int insertDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 修改一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
int updateDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData); |
|||
|
|||
/** |
|||
* 批量删除一类交调数据 |
|||
* |
|||
* @param ids 需要删除的一类交调数据主键集合 |
|||
* @return 结果 |
|||
*/ |
|||
int deleteDcTrafficSurveyDataByIds(Long[] ids); |
|||
|
|||
/** |
|||
* 删除一类交调数据信息 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 结果 |
|||
*/ |
|||
int deleteDcTrafficSurveyDataById(Long id); |
|||
|
|||
/** |
|||
* 查询所有交调设备 |
|||
* |
|||
* @param |
|||
* @return 结果 |
|||
*/ |
|||
List<DcDevice> selectDeviceList(); |
|||
|
|||
/** |
|||
* 批量插入 |
|||
* |
|||
* @param batchData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
int batchInsert(List<DcTrafficSurveyData> batchData); |
|||
} |
@ -0,0 +1,248 @@ |
|||
package com.zc.business.service.impl; |
|||
|
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
|
|||
import com.ruoyi.common.core.domain.AjaxResult; |
|||
import com.zc.business.domain.DcDevice; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
import com.zc.business.mapper.DcTrafficSurveyDataMapper; |
|||
import com.zc.business.domain.DcTrafficSurveyData; |
|||
import com.zc.business.service.IDcTrafficSurveyDataService; |
|||
|
|||
/** |
|||
* 一类交调数据Service业务层处理 |
|||
* |
|||
* @author liuwenge |
|||
* @date 2024-10-29 |
|||
*/ |
|||
@Service |
|||
public class DcTrafficSurveyDataServiceImpl implements IDcTrafficSurveyDataService |
|||
{ |
|||
@Autowired |
|||
private DcTrafficSurveyDataMapper dcTrafficSurveyDataMapper; |
|||
|
|||
/** |
|||
* 查询一类交调数据 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 一类交调数据 |
|||
*/ |
|||
@Override |
|||
public DcTrafficSurveyData selectDcTrafficSurveyDataById(Long id) |
|||
{ |
|||
return dcTrafficSurveyDataMapper.selectDcTrafficSurveyDataById(id); |
|||
} |
|||
|
|||
/** |
|||
* 查询一类交调数据列表 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 一类交调数据 |
|||
*/ |
|||
@Override |
|||
public AjaxResult selectDcTrafficSurveyDataList(DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
List<Map<String,Object>> rowList = new ArrayList<>(); |
|||
List<Map<String,String>> columnList = getColumnList(dcTrafficSurveyData); |
|||
List<DcTrafficSurveyData> dataList = new ArrayList<>(); |
|||
if (dcTrafficSurveyData.getType().equals("day")){ |
|||
dataList = dcTrafficSurveyDataMapper.selectDay(dcTrafficSurveyData); |
|||
} else if (dcTrafficSurveyData.getType().equals("month")){ |
|||
dataList = dcTrafficSurveyDataMapper.selectMonth(dcTrafficSurveyData); |
|||
} else if (dcTrafficSurveyData.getType().equals("year")){ |
|||
dataList = dcTrafficSurveyDataMapper.selectYear(dcTrafficSurveyData); |
|||
} |
|||
Map<String,Map<String, Map<String, List<DcTrafficSurveyData>>>> groupedData = dataList.stream() |
|||
.collect(Collectors.groupingBy( |
|||
DcTrafficSurveyData::getIotDeviceId, // 第一级分组:按设备Id
|
|||
Collectors.groupingBy(DcTrafficSurveyData::getDirection, // 第二级分组:按方向
|
|||
Collectors.groupingBy(DcTrafficSurveyData::getTimes) // 第三级分组:按时间
|
|||
))); |
|||
List<DcDevice> deviceList = dcTrafficSurveyDataMapper.selectDeviceList(); |
|||
|
|||
Map<String,Object> row = new HashMap<>(); |
|||
for (DcDevice dcDevice : deviceList) { |
|||
if (groupedData.containsKey(dcDevice.getIotDeviceId())){ |
|||
|
|||
Map<String,Map<String, List<DcTrafficSurveyData>>> directionData = groupedData.get(dcDevice.getIotDeviceId()); |
|||
//单个设备济南方向数据
|
|||
row = new HashMap<>(); |
|||
row.put("stakeMark",dcDevice.getStakeMark()); |
|||
row.put("direction","1"); |
|||
|
|||
if (directionData.containsKey("1")){ |
|||
Integer total = 0; |
|||
//单个设备济南方向分时数据
|
|||
Map<String,List<DcTrafficSurveyData>> directionList = directionData.get("1"); |
|||
for (Map<String, String> columnMap : columnList) { |
|||
if (directionList.containsKey(columnMap.get("key"))){ |
|||
List<DcTrafficSurveyData> timeList = directionList.get(columnMap.get("key")); |
|||
row.put(columnMap.get("key"),timeList.get(0).getTrafficVolume()); |
|||
total += timeList.get(0).getTrafficVolume().intValue(); |
|||
} else { |
|||
row.put(columnMap.get("key"),0); |
|||
} |
|||
} |
|||
row.put("total",total); |
|||
} else { |
|||
for (Map<String, String> columnMap : columnList) { |
|||
row.put(columnMap.get("key"),0); |
|||
row.put("total",0); |
|||
} |
|||
} |
|||
rowList.add(row); |
|||
|
|||
//单个设备菏泽方向数据
|
|||
row = new HashMap<>(); |
|||
row.put("stakeMark",dcDevice.getStakeMark()); |
|||
row.put("direction","3"); |
|||
if (directionData.containsKey("3")){ |
|||
Integer total = 0; |
|||
//单个设备菏泽方向分时数据
|
|||
Map<String,List<DcTrafficSurveyData>> directionList = directionData.get("3"); |
|||
for (Map<String, String> columnMap : columnList) { |
|||
if (directionList.containsKey(columnMap.get("key"))){ |
|||
List<DcTrafficSurveyData> timeList = directionList.get(columnMap.get("key")); |
|||
row.put(columnMap.get("key"),timeList.get(0).getTrafficVolume()); |
|||
total += timeList.get(0).getTrafficVolume().intValue(); |
|||
} else { |
|||
row.put(columnMap.get("key"),0); |
|||
} |
|||
} |
|||
row.put("total",total); |
|||
} else { |
|||
for (Map<String, String> columnMap : columnList) { |
|||
row.put(columnMap.get("key"),0); |
|||
row.put("total",0); |
|||
} |
|||
} |
|||
rowList.add(row); |
|||
} else { |
|||
row = new HashMap<>(); |
|||
row.put("stakeMark",dcDevice.getStakeMark()); |
|||
row.put("direction","1"); |
|||
for (Map<String, String> columnMap : columnList) { |
|||
row.put(columnMap.get("key"),0); |
|||
} |
|||
row.put("total",0); |
|||
rowList.add(row); |
|||
|
|||
row= new HashMap<>(); |
|||
row.put("stakeMark",dcDevice.getStakeMark()); |
|||
row.put("direction","3"); |
|||
for (Map<String, String> columnMap : columnList) { |
|||
row.put(columnMap.get("key"),0); |
|||
} |
|||
row.put("total",0); |
|||
rowList.add(row); |
|||
} |
|||
} |
|||
Map<String,Object> result = new HashMap<>(); |
|||
result.put("rowList",rowList); |
|||
result.put("columnList",columnList); |
|||
return AjaxResult.success(result); |
|||
|
|||
} |
|||
|
|||
public List<Map<String,String>> getColumnList(DcTrafficSurveyData dcTrafficSurveyData){ |
|||
List<Map<String,String>> columnList = new ArrayList<>(); |
|||
Map<String,String> column; |
|||
if (dcTrafficSurveyData.getType().equals("day")){ |
|||
for (int i = 0; i < 24; i++) { |
|||
column = new HashMap<>(); |
|||
column.put("label",i+"点"); |
|||
column.put("key",String.valueOf(i)); |
|||
columnList.add(column); |
|||
} |
|||
} else if (dcTrafficSurveyData.getType().equals("month")){ |
|||
Calendar calendar = Calendar.getInstance(); |
|||
calendar.setTime(dcTrafficSurveyData.getTimestamp()); |
|||
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); // 获取这个月的最大天数
|
|||
for (int i = 1; i <= maxDay; i++) { |
|||
column = new HashMap<>(); |
|||
column.put("label",i+"日"); |
|||
column.put("key",String.valueOf(i)); |
|||
columnList.add(column); |
|||
} |
|||
} else if (dcTrafficSurveyData.getType().equals("year")){ |
|||
for (int i = 1; i <= 12; i++) { |
|||
column = new HashMap<>(); |
|||
column.put("label",i+"月"); |
|||
column.put("key",String.valueOf(i)); |
|||
columnList.add(column); |
|||
} |
|||
} |
|||
return columnList; |
|||
} |
|||
/** |
|||
* 新增一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public int insertDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
return dcTrafficSurveyDataMapper.insertDcTrafficSurveyData(dcTrafficSurveyData); |
|||
} |
|||
|
|||
/** |
|||
* 修改一类交调数据 |
|||
* |
|||
* @param dcTrafficSurveyData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public int updateDcTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData) |
|||
{ |
|||
return dcTrafficSurveyDataMapper.updateDcTrafficSurveyData(dcTrafficSurveyData); |
|||
} |
|||
|
|||
/** |
|||
* 批量删除一类交调数据 |
|||
* |
|||
* @param ids 需要删除的一类交调数据主键 |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public int deleteDcTrafficSurveyDataByIds(Long[] ids) |
|||
{ |
|||
return dcTrafficSurveyDataMapper.deleteDcTrafficSurveyDataByIds(ids); |
|||
} |
|||
|
|||
/** |
|||
* 删除一类交调数据信息 |
|||
* |
|||
* @param id 一类交调数据主键 |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public int deleteDcTrafficSurveyDataById(Long id) |
|||
{ |
|||
return dcTrafficSurveyDataMapper.deleteDcTrafficSurveyDataById(id); |
|||
} |
|||
|
|||
/** |
|||
* 查询所有交调设备 |
|||
* |
|||
* @param |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public List<DcDevice> selectDeviceList(){ |
|||
return dcTrafficSurveyDataMapper.selectDeviceList(); |
|||
} |
|||
|
|||
/** |
|||
* 批量插入 |
|||
* |
|||
* @param batchData 一类交调数据 |
|||
* @return 结果 |
|||
*/ |
|||
@Override |
|||
public int batchInsert(List<DcTrafficSurveyData> batchData){ |
|||
return dcTrafficSurveyDataMapper.batchInsert(batchData); |
|||
} |
|||
} |
@ -0,0 +1,124 @@ |
|||
<?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.DcTrafficSurveyDataMapper"> |
|||
|
|||
<resultMap type="DcTrafficSurveyData" id="DcTrafficSurveyDataResult"> |
|||
<result property="id" column="id" /> |
|||
<result property="iotDeviceId" column="iot_device_id" /> |
|||
<result property="stakeMark" column="stake_mark" /> |
|||
<result property="direction" column="direction" /> |
|||
<result property="timestamp" column="timestamp" /> |
|||
<result property="trafficVolume" column="traffic_volume" /> |
|||
</resultMap> |
|||
|
|||
<sql id="selectDcTrafficSurveyDataVo"> |
|||
select id, iot_device_id, stake_mark, direction, timestamp, traffic_volume from dc_traffic_survey_data |
|||
</sql> |
|||
|
|||
<select id="selectDcTrafficSurveyDataList" parameterType="DcTrafficSurveyData" resultMap="DcTrafficSurveyDataResult"> |
|||
<include refid="selectDcTrafficSurveyDataVo"/> |
|||
<where> |
|||
<if test="iotDeviceId != null and iotDeviceId != ''"> and iot_device_id = #{iotDeviceId}</if> |
|||
<if test="stakeMark != null and stakeMark != ''"> and stake_mark = #{stakeMark}</if> |
|||
<if test="direction != null and direction != ''"> and direction = #{direction}</if> |
|||
<if test="trafficVolume != null "> and traffic_volume = #{trafficVolume}</if> |
|||
<if test="type != null and type == 'year'.toString"> |
|||
and DATE_FORMAT(timestamp,'%Y') = DATE_FORMAT(#{thisTime},'%Y') |
|||
</if> |
|||
<if test="type != null and type == 'month'.toString"> |
|||
and DATE_FORMAT(timestamp,'%Y-%m') = DATE_FORMAT(#{thisTime},'%Y-%m') |
|||
</if> |
|||
<if test="type != null and type == 'year'.toString"> |
|||
and DATE_FORMAT(timestamp,'%Y-%m-%d') = DATE_FORMAT(#{thisTime},'%Y-%m-%d') |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
<select id="selectDcTrafficSurveyDataById" parameterType="Long" resultMap="DcTrafficSurveyDataResult"> |
|||
<include refid="selectDcTrafficSurveyDataVo"/> |
|||
where id = #{id} |
|||
</select> |
|||
<select id="selectDeviceList" resultType="com.zc.business.domain.DcDevice"> |
|||
SELECT * FROM `dc_device` where device_type = '11' and iot_device_id is not null |
|||
</select> |
|||
<select id="selectDay" resultType="com.zc.business.domain.DcTrafficSurveyData"> |
|||
SELECT iot_device_id,stake_mark,direction,HOUR(`timestamp`) times,SUM(traffic_volume) trafficVolume |
|||
FROM `dc_traffic_survey_data` |
|||
where DATE_FORMAT(`timestamp`,'%Y-%m-%d') = DATE_FORMAT(#{timestamp},'%Y-%m-%d') |
|||
GROUP BY iot_device_id,direction,times |
|||
</select> |
|||
<select id="selectMonth" resultType="com.zc.business.domain.DcTrafficSurveyData"> |
|||
SELECT iot_device_id,stake_mark,direction,DAY(`timestamp`) times,SUM(traffic_volume) trafficVolume |
|||
FROM `dc_traffic_survey_data` |
|||
where DATE_FORMAT(`timestamp`,'%Y-%m') = DATE_FORMAT(#{timestamp},'%Y-%m') |
|||
GROUP BY iot_device_id,direction,times |
|||
</select> |
|||
<select id="selectYear" resultType="com.zc.business.domain.DcTrafficSurveyData"> |
|||
SELECT iot_device_id,stake_mark,direction,MONTH(`timestamp`) times,SUM(traffic_volume) trafficVolume |
|||
FROM `dc_traffic_survey_data` |
|||
where DATE_FORMAT(`timestamp`,'%Y') = DATE_FORMAT(#{timestamp},'%Y') |
|||
GROUP BY iot_device_id,direction,times |
|||
</select> |
|||
|
|||
<insert id="insertDcTrafficSurveyData" parameterType="DcTrafficSurveyData" useGeneratedKeys="true" keyProperty="id"> |
|||
insert into dc_traffic_survey_data |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
<if test="iotDeviceId != null">iot_device_id,</if> |
|||
<if test="stakeMark != null and stakeMark != ''">stake_mark,</if> |
|||
<if test="direction != null">direction,</if> |
|||
<if test="timestamp != null">timestamp,</if> |
|||
<if test="trafficVolume != null">traffic_volume,</if> |
|||
</trim> |
|||
<trim prefix="values (" suffix=")" suffixOverrides=","> |
|||
<if test="iotDeviceId != null">#{iotDeviceId},</if> |
|||
<if test="stakeMark != null and stakeMark != ''">#{stakeMark},</if> |
|||
<if test="direction != null">#{direction},</if> |
|||
<if test="timestamp != null">#{timestamp},</if> |
|||
<if test="trafficVolume != null">#{trafficVolume},</if> |
|||
</trim> |
|||
</insert> |
|||
<insert id="batchInsert"> |
|||
<foreach collection="list" item="dcTrafficSurveyData" index="index" separator=";"> |
|||
insert into dc_traffic_survey_data |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
<if test="dcTrafficSurveyData.iotDeviceId != null">iot_device_id,</if> |
|||
<if test="dcTrafficSurveyData.stakeMark != null">stake_mark,</if> |
|||
<if test="dcTrafficSurveyData.direction != null">direction,</if> |
|||
<if test="dcTrafficSurveyData.timestamp != null">timestamp,</if> |
|||
<if test="dcTrafficSurveyData.trafficVolume != null">traffic_volume,</if> |
|||
</trim> |
|||
<trim prefix="values (" suffix=")" suffixOverrides=","> |
|||
<if test="dcTrafficSurveyData.iotDeviceId != null">#{dcTrafficSurveyData.iotDeviceId},</if> |
|||
<if test="dcTrafficSurveyData.stakeMark != null">#{dcTrafficSurveyData.stakeMark},</if> |
|||
<if test="dcTrafficSurveyData.direction != null">#{dcTrafficSurveyData.direction},</if> |
|||
<if test="dcTrafficSurveyData.timestamp != null">#{dcTrafficSurveyData.timestamp},</if> |
|||
<if test="dcTrafficSurveyData.trafficVolume != null">#{dcTrafficSurveyData.trafficVolume},</if> |
|||
</trim> |
|||
</foreach> |
|||
</insert> |
|||
|
|||
<update id="updateDcTrafficSurveyData" parameterType="DcTrafficSurveyData"> |
|||
update dc_traffic_survey_data |
|||
<trim prefix="SET" suffixOverrides=","> |
|||
<if test="iotDeviceId != null">iot_device_id = #{iotDeviceId},</if> |
|||
<if test="stakeMark != null and stakeMark != ''">stake_mark = #{stakeMark},</if> |
|||
<if test="direction != null">direction = #{direction},</if> |
|||
<if test="timestamp != null">timestamp = #{timestamp},</if> |
|||
<if test="trafficVolume != null">traffic_volume = #{trafficVolume},</if> |
|||
</trim> |
|||
where id = #{id} |
|||
</update> |
|||
|
|||
<delete id="deleteDcTrafficSurveyDataById" parameterType="Long"> |
|||
delete from dc_traffic_survey_data where id = #{id} |
|||
</delete> |
|||
|
|||
<delete id="deleteDcTrafficSurveyDataByIds" parameterType="String"> |
|||
delete from dc_traffic_survey_data where id in |
|||
<foreach item="id" collection="array" open="(" separator="," close=")"> |
|||
#{id} |
|||
</foreach> |
|||
</delete> |
|||
</mapper> |
Loading…
Reference in new issue