Commit d2925aa3 authored by duanruiming's avatar duanruiming

[add] 设备厂商统计信息

parent 8640543d
......@@ -3,7 +3,6 @@ package net.wanji.web.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.dto.SignalOperationModeDTO;
import net.wanji.web.entity.TDeviceStatusLog;
import net.wanji.web.po.AreaTreePO;
import net.wanji.web.service.SituationDetectionService;
......@@ -14,9 +13,7 @@ import org.springframework.web.bind.annotation.*;
import javax.ws.rs.core.MediaType;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
......@@ -206,7 +203,27 @@ public class SituationDetectionController extends BaseController {
@ApiOperation(value = "路口列表-手动控制", notes = "路口列表-手动控制")
@GetMapping("/listSignalControlInfos")
public JsonViewObject listSignalControlInfos(Integer operationMode) {
List<SignalOperationModeDTO> result = situationDetectionService.listSignalControlList(operationMode);
List<SignalOperationModeVO> result = situationDetectionService.listSignalControlList(operationMode);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(result);
}
@ApiOperation(value = "设备厂商", notes = "设备厂商")
@GetMapping("/signalManufacturerInfoCount")
public JsonViewObject signalManufacturerInfoCount() throws Exception {
// List<SignalManufacturerCountInfoVO> result = situationDetectionService.signalManufacturerInfoCount();
// todo 测试数据
List<SignalManufacturerCountInfoVO> result = new ArrayList<>();
List<String> strings = Arrays.asList("大华", "东土", "海信", "海康");
for (int i = 0; i < 4; i++) {
SignalManufacturerCountInfoVO signalManufacturerCountInfoVO = new SignalManufacturerCountInfoVO();
signalManufacturerCountInfoVO.setName(strings.get(i));
Random random = new Random();
signalManufacturerCountInfoVO.setOnlineCount(random.nextInt(50));
signalManufacturerCountInfoVO.setOfflineCount(random.nextInt(10));
signalManufacturerCountInfoVO.setFaultCount(random.nextInt(5));
result.add(signalManufacturerCountInfoVO);
}
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(result);
}
......
package net.wanji.web.mapper;
import net.wanji.web.entity.TDeviceStatusInfo;
import net.wanji.web.po.AllDeviceStatusPO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
......@@ -13,4 +15,5 @@ import java.util.List;
@Repository
public interface AllDeviceStatusMapper {
List<AllDeviceStatusPO> selectAllDeviceStatus(String adCode);
List<TDeviceStatusInfo> selectByEntity(@Param("entity") TDeviceStatusInfo entity);
}
package net.wanji.web.service;
import net.wanji.web.dto.SignalOperationModeDTO;
import net.wanji.web.vo.situationDetection.SignalOperationModeVO;
import net.wanji.web.entity.TBaseCrossInfo;
import net.wanji.web.entity.TDeviceStatusLog;
import net.wanji.web.po.AreaTreePO;
......@@ -46,5 +46,7 @@ public interface SituationDetectionService {
DeviceFaultCountVO countSignalFaultInfos();
List<SignalOperationModeDTO> listSignalControlList(Integer operationMode);
List<SignalOperationModeVO> listSignalControlList(Integer operationMode);
List<SignalManufacturerCountInfoVO> signalManufacturerInfoCount() throws Exception;
}
......@@ -4,12 +4,18 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.feign.pojo.vo.CrossInfoOutVo;
import net.wanji.feign.pojo.vo.CrossInfoVO;
import net.wanji.feign.pojo.vo.ManufacturerInfoOutVO;
import net.wanji.feign.pojo.vo.ManufacturerVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.common.enums.*;
import net.wanji.web.common.util.CrossUtil;
import net.wanji.web.common.util.StringUtils;
import net.wanji.web.dto.SignalOperationModeDTO;
import net.wanji.web.entity.*;
import net.wanji.web.mapper.*;
import net.wanji.web.po.*;
......@@ -49,6 +55,7 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
private final TBaseCrossInfoService tBaseCrossInfoService;
private final TBaseAreaCrossMapper tBaseAreaCrossMapper;
private final TDeviceStatusLogMapper tDeviceStatusLogMapper;
private final UtcFeignClients utcFeignClients;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
......@@ -486,8 +493,8 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
}
@Override
public List<SignalOperationModeDTO> listSignalControlList(Integer operationMode) {
List<SignalOperationModeDTO> signalOperationModeDTOS = new ArrayList<>();
public List<SignalOperationModeVO> listSignalControlList(Integer operationMode) {
List<SignalOperationModeVO> signalOperationModeVOS = new ArrayList<>();
List<TCrossControlHist> tCrossControlHists = controlHistMapper.selectRecentList();
LambdaQueryWrapper<TBaseCrossInfo> queryWrapper = new LambdaQueryWrapper<>();
List<TBaseCrossInfo> tBaseCrossInfos = tBaseCrossInfoMapper.selectList(queryWrapper);
......@@ -495,36 +502,119 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
if (Objects.nonNull(operationMode)) {
if (operationMode == 1) { //中心优化
List<TCrossControlHist> centerOptList = tCrossControlHists.stream().filter(tCrossControlHist -> tCrossControlHist.getType() == 5).collect(Collectors.toList());
BeanListUtils.populateList(centerOptList, signalOperationModeDTOS, SignalOperationModeDTO.class);
BeanListUtils.populateList(centerOptList, signalOperationModeVOS, SignalOperationModeVO.class);
}
if (operationMode == 2) { // 手动控制
List<TCrossControlHist> manualControlList = tCrossControlHists.stream().filter(item -> item.getType() < 5 && item.getType() > 1).collect(Collectors.toList());
BeanListUtils.populateList(manualControlList, signalOperationModeDTOS, SignalOperationModeDTO.class);
BeanListUtils.populateList(manualControlList, signalOperationModeVOS, SignalOperationModeVO.class);
}
if (operationMode == 3) { // 边缘优化
List<TCrossControlHist> edgeOptList = tCrossControlHists.stream().filter(tCrossControlHist -> tCrossControlHist.getType() == 6).collect(Collectors.toList());
BeanListUtils.populateList(edgeOptList, signalOperationModeDTOS, SignalOperationModeDTO.class);
BeanListUtils.populateList(edgeOptList, signalOperationModeVOS, SignalOperationModeVO.class);
}
if (operationMode == 4) { // 特勤控制
List<TCrossControlHist> specialServiceList = tCrossControlHists.stream().filter(tCrossControlHist -> tCrossControlHist.getType() == 7).collect(Collectors.toList());
BeanListUtils.populateList(specialServiceList, signalOperationModeDTOS, SignalOperationModeDTO.class);
BeanListUtils.populateList(specialServiceList, signalOperationModeVOS, SignalOperationModeVO.class);
}
} else {
BeanListUtils.populateList(tCrossControlHists, signalOperationModeDTOS, SignalOperationModeDTO.class);
BeanListUtils.populateList(tCrossControlHists, signalOperationModeVOS, SignalOperationModeVO.class);
}
for (SignalOperationModeDTO signalOperationModeDTO : signalOperationModeDTOS) {
for (SignalOperationModeVO signalOperationModeVO : signalOperationModeVOS) {
for (TBaseCrossInfo tBaseCrossInfo : tBaseCrossInfos) {
if (StringUtils.equals(signalOperationModeDTO.getCrossId(), tBaseCrossInfo.getId())) {
signalOperationModeDTO.setCrossName(tBaseCrossInfo.getName());
signalOperationModeDTO.setOperationTime(signalOperationModeDTO.getStartTime().toString().substring(11, 19));
if (StringUtils.equals(signalOperationModeVO.getCrossId(), tBaseCrossInfo.getId())) {
signalOperationModeVO.setCrossName(tBaseCrossInfo.getName());
signalOperationModeVO.setOperationTime(signalOperationModeVO.getStartTime().toString().substring(11, 19));
}
}
}
}
return signalOperationModeDTOS;
return signalOperationModeVOS;
}
@Override
public List<SignalManufacturerCountInfoVO> signalManufacturerInfoCount() throws Exception {
List<SignalManufacturerCountInfoVO> resultList = new ArrayList<>();
List<ManufacturerInfoOutVO> manufacturerInfoOutVOList = getManufacturerInfoOutVOList();
List<CrossInfoOutVo> crossInfoOutVoList = getCrossInfoOutVoList();
// key:crossId value:nickName
Map<String, List<String>> nickNameCrossIdMap = getCrossIdNickNameMap(manufacturerInfoOutVOList, crossInfoOutVoList);
List<TDeviceStatusInfo> tDeviceStatusInfos = allDeviceStatusMapper.selectByEntity(new TDeviceStatusInfo());
SignalManufacturerCountInfoVO signalManufacturerCountInfoVO = new SignalManufacturerCountInfoVO();
for (Map.Entry<String, List<String>> entry : nickNameCrossIdMap.entrySet()) {
String nickName = entry.getKey();
List<String> value = entry.getValue();
int onlineCount = 0;
int offlineCount = 0;
int faultCount = 0;
for (TDeviceStatusInfo tDeviceStatusInfo : tDeviceStatusInfos) {
String crossId = tDeviceStatusInfo.getCode();
int status = tDeviceStatusInfo.getStatus();
if (value.contains(crossId)) {
if (status == 0) {
offlineCount++;
}
if (status == 1) {
offlineCount++;
}
if (status == 2) {
faultCount++;
}
}
}
signalManufacturerCountInfoVO.setOnlineCount(onlineCount);
signalManufacturerCountInfoVO.setOfflineCount(offlineCount);
signalManufacturerCountInfoVO.setFaultCount(faultCount);
signalManufacturerCountInfoVO.setName(nickName);
resultList.add(signalManufacturerCountInfoVO);
}
return resultList;
}
private Map<String, List<String>> getCrossIdNickNameMap(List<ManufacturerInfoOutVO> manufacturerInfoOutVOList, List<CrossInfoOutVo> crossInfoOutVoList) {
Map<String, List<String>> crossIdNickNameMap = new HashMap<>();
for (ManufacturerInfoOutVO manufacturerInfoOutVO : manufacturerInfoOutVOList) {
String nickName = manufacturerInfoOutVO.getNickName();
Integer id = manufacturerInfoOutVO.getId();
String crossId = null;
List<String> crossIdList = new ArrayList<>();
for (CrossInfoOutVo crossInfoOutVo : crossInfoOutVoList) {
crossId = crossInfoOutVo.getId();
Integer manufacturerId = crossInfoOutVo.getManufacturerId();
if (Objects.equals(id, manufacturerId)) {
crossIdList.add(crossId);
}
}
crossIdNickNameMap.put(nickName, crossIdList);
}
return crossIdNickNameMap;
}
private List<CrossInfoOutVo> getCrossInfoOutVoList() throws Exception {
CrossInfoVO crossInfoVO = new CrossInfoVO();
JsonViewObject jsonViewObject = utcFeignClients.listCrossInfo(crossInfoVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
throw new Exception("远程调用UTC服务路口信息失败!");
}
PageInfo<CrossInfoOutVo> content = (PageInfo<CrossInfoOutVo>) jsonViewObject.getContent();
List<CrossInfoOutVo> list = content.getList();
return list;
}
private List<ManufacturerInfoOutVO> getManufacturerInfoOutVOList() throws Exception {
ManufacturerVO manufacturerVO = new ManufacturerVO();
JsonViewObject jsonViewObject = utcFeignClients.listManufacturerInfo(manufacturerVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
throw new Exception("远程调用UTC服务信号机厂商信息失败!");
}
PageInfo<ManufacturerInfoOutVO> content = (PageInfo<ManufacturerInfoOutVO>) jsonViewObject.getContent();
List<ManufacturerInfoOutVO> list = content.getList();
return list;
}
}
......
package net.wanji.web.vo.situationDetection;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/02/07 15:55
*/
@Data
@ApiModel(value = "信号机厂商统计")
public class SignalManufacturerCountInfoVO {
@ApiModelProperty( value = "厂商名称")
private String name;
@ApiModelProperty(value = "在线数量")
private int onlineCount;
@ApiModelProperty(value = "离线数量")
private int offlineCount;
@ApiModelProperty(value = "故障数量")
private int faultCount;
}
package net.wanji.web.dto;
package net.wanji.web.vo.situationDetection;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -12,7 +12,7 @@ import java.util.Date;
*/
@Data
@ApiModel(value = "信号机运行模式返回实体")
public class SignalOperationModeDTO {
public class SignalOperationModeVO {
@ApiModelProperty(value = "路口编号",notes = "")
private String crossId;
@ApiModelProperty(value = "路口名称",notes = "")
......
......@@ -16,4 +16,22 @@
order by type
</select>
<resultMap type="net.wanji.web.po.AllDeviceStatusPO" id="TDeviceStatusInfoMap">
<result property="id" column="id"/>
<result property="code" column="code"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="faultType" column="fault_type"/>
<result property="gmtCreate" column="gmt_create"/>
</resultMap>
<select id="selectByEntity" parameterType="net.wanji.web.entity.TDeviceStatusInfo" resultMap="TDeviceStatusInfoMap">
select id, code, name, type, fault_type, gmt_create from where t_device_status
<where>
<if test="code != null and code != ''">
code = #{code}
</if>
</where>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment