buzhanyi před 2 roky
rodič
revize
7629e205b5

+ 44 - 0
business-service/src/main/java/com/ozs/entity/vo/BaseVehicleTerminalDto.java

@@ -0,0 +1,44 @@
+package com.ozs.entity.vo;
+
+import com.ozs.common.annotation.Excel;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 车载终端和日志信息表
+ */
+@Data
+public class BaseVehicleTerminalDto extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    /**
+     * 终端编码
+     */
+    private String terminalCode;
+
+
+    /**
+     * 行别
+     */
+    private String lineDir;
+
+    /**
+     * 车辆行驶位置
+     */
+    private Integer travelMile;
+
+    /**
+     * 线路名称
+     */
+    private String railwayName;
+
+    /**
+     * 线路编码(四位数字)
+     */
+    private String railwayCode;
+}

+ 10 - 1
business-service/src/main/java/com/ozs/mapper/BaseDeviceDynamicManagementMapper.java

@@ -3,7 +3,9 @@ package com.ozs.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ozs.entity.BaseDeviceDynamicManagement;
 import com.ozs.entity.vo.BaseCameraManagementDto;
+import com.ozs.entity.vo.BaseVehicleTerminalDto;
 import com.ozs.entity.vo.CameraTreeVo;
+import com.ozs.entity.vo.VehicleTreeVo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -18,6 +20,13 @@ import java.util.List;
  */
 @Mapper
 public interface BaseDeviceDynamicManagementMapper extends BaseMapper<BaseDeviceDynamicManagement> {
-
+    /**
+     * 查相机关联数据
+     */
     List<BaseCameraManagementDto> list(CameraTreeVo cameraTreeVo);
+
+    /**
+     * 查相机关联数据
+     */
+    List<BaseVehicleTerminalDto> vehicleTreelist(VehicleTreeVo vehicleTreeVo);
 }

+ 10 - 2
business-service/src/main/java/com/ozs/service/BaseDeviceDynamicManagementService.java

@@ -3,17 +3,25 @@ package com.ozs.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.entity.BaseDeviceDynamicManagement;
 import com.ozs.entity.CameraTree;
+import com.ozs.entity.VehicleTree;
 import com.ozs.entity.vo.CameraTreeVo;
+import com.ozs.entity.vo.VehicleTreeVo;
 
 /**
- * <p>
  * 设备动态管理表 服务类
- * </p>
  *
  * @author ozs
  * @since 2023-02-22
  */
 public interface BaseDeviceDynamicManagementService extends IService<BaseDeviceDynamicManagement> {
 
+    /**
+     * 编织相机树
+     */
     CameraTree cameraTree(CameraTreeVo cameraTreeVo);
+
+    /**
+     * 编织机车树
+     */
+    VehicleTree vehicleTree(VehicleTreeVo vehicleTreeVo);
 }

+ 81 - 0
business-service/src/main/java/com/ozs/service/impl/BaseDeviceDynamicManagementServiceImpl.java

@@ -1,12 +1,18 @@
 package com.ozs.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ozs.common.utils.AppendUtils;
 import com.ozs.entity.BaseDeviceDynamicManagement;
+import com.ozs.entity.BaseRailwayManagement;
 import com.ozs.entity.CameraTree;
+import com.ozs.entity.VehicleTree;
 import com.ozs.entity.vo.BaseCameraManagementDto;
+import com.ozs.entity.vo.BaseVehicleTerminalDto;
 import com.ozs.entity.vo.CameraTreeVo;
+import com.ozs.entity.vo.VehicleTreeVo;
 import com.ozs.mapper.BaseDeviceDynamicManagementMapper;
+import com.ozs.mapper.BaseRailwayManagementMapper;
 import com.ozs.service.BaseDeviceDynamicManagementService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,6 +36,8 @@ import java.util.stream.Collectors;
 public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDeviceDynamicManagementMapper, BaseDeviceDynamicManagement> implements BaseDeviceDynamicManagementService {
     @Autowired
     BaseDeviceDynamicManagementMapper baseDeviceDynamicManagementMapper;
+    @Autowired
+    BaseRailwayManagementMapper railwayManagementMapper;
 
     @Override
     public CameraTree cameraTree(CameraTreeVo cameraTreeVo) {
@@ -98,4 +106,77 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi
 
         return cameraTree;
     }
+
+    @Override
+    public VehicleTree vehicleTree(VehicleTreeVo vehicleTreeVo) {
+        // 线路
+        LambdaQueryWrapper<BaseRailwayManagement> rp = new LambdaQueryWrapper();
+        List<BaseRailwayManagement> railwayList = railwayManagementMapper.selectList(rp);
+        //1 父
+        VehicleTree vehicleTree = VehicleTree.builder()
+                .name("机车树")
+                .code("0")
+                .flay(false)
+                .children(new ArrayList<>())
+                .build();
+
+        Map<String, VehicleTree> map = new HashMap<>();
+        List<BaseVehicleTerminalDto> list = baseDeviceDynamicManagementMapper.vehicleTreelist(vehicleTreeVo);
+        if (list.size() > 0) {
+            for (BaseVehicleTerminalDto o : list) {
+
+                VehicleTree build = VehicleTree.builder()
+                        .code(o.getRailwayCode())
+                        .flay(true)
+                        .children(new ArrayList<>())
+                        .build();
+                for (BaseRailwayManagement railway : railwayList) {
+                    if (railway.getRailwayCode().equals(build.getCode())) {
+                        build.setName(railway.getRailwayName());
+                        break;
+                    }
+                }
+                if (!vehicleTree.getChildren().stream()
+                        .map(VehicleTree::getCode)
+                        .collect(Collectors.toList())
+                        .contains(build.getCode())) {
+                    vehicleTree.getChildren().add(build);
+                    map.put(o.getRailwayCode(), build);
+                }
+                // 里程
+                String mils = AppendUtils.stringAppend(o.getTravelMile());
+                VehicleTree build1 = VehicleTree.builder()
+                        .code(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"))
+                        .name(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"))
+                        .flay(true)
+                        .mileage(o.getTravelMile())
+                        .children(new ArrayList<>())
+                        .build();
+
+
+                if (!ObjectUtils.isEmpty(map.get(o.getRailwayCode()))) {
+                    VehicleTree vehicleTree1 = map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"));
+                    if (ObjectUtils.isEmpty(vehicleTree1)) {
+                        map.put(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"), build1);
+                        map.get(o.getRailwayCode()).getChildren().add(build1);
+                    }
+                }
+
+                // 摄像头
+                VehicleTree build2 = VehicleTree.builder()
+                        .code(o.getTerminalCode())
+                        .name(o.getTerminalCode())
+                        .flay(true)
+                        .children(new ArrayList<>())
+                        .build();
+
+
+                if (!ObjectUtils.isEmpty(map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")))) {
+                    map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")).getChildren().add(build2);
+                }
+            }
+        }
+
+        return vehicleTree;
+    }
 }

+ 39 - 9
business-service/src/main/resources/mapper/BaseDeviceDynamicManagementMapper.xml

@@ -4,15 +4,15 @@
 
     <select id="list" resultType="com.ozs.entity.vo.BaseCameraManagementDto" parameterType="com.ozs.entity.vo.CameraTreeVo">
 		SELECT
-			l.railway_code AS railwayCode, 
-			l.railway_name AS railwayName, 
-			a.camera_code AS cameraCode, 
-			a.line_dir AS lineDir, 
-			a.install_mile AS installMile, 
-			a.id AS id
+		l.railway_code AS railwayCode,
+		l.railway_name AS railwayName,
+		a.camera_code AS cameraCode,
+		a.line_dir AS lineDir,
+		a.install_mile AS installMile,
+		a.id AS id
 		FROM
-		    base_camera_management AS a inner join
-		    base_railway_management AS l  on  a.railway_code=l.railway_code
+		base_camera_management AS a inner join
+		base_railway_management AS l on a.railway_code=l.railway_code
 		<where>
 			<if test="railwayCode != null and railwayCode !=''">
 				concat(l.railway_name,a.camera_code)
@@ -42,5 +42,35 @@
 				</trim>
 			</if>
 		</where>
-    </select>
+	</select>
+
+	<select id="vehicleTreelist" resultType="com.ozs.entity.vo.BaseVehicleTerminalDto"
+			parameterType="com.ozs.entity.vo.VehicleTreeVo">
+		SELECT
+		a.id AS id,
+		l.railway_code AS railwayCode,
+		a.terminal_code AS terminalCode,
+		l.line_dir AS lineDir,
+		l.travel_mile AS travelMile,
+		l.current_time
+		FROM
+		base_vehicle_terminal AS a ,
+		(
+		select vp.*
+		from vehicle_position vp
+		where not exists (
+		select 1
+		from vehicle_position df
+		where df.current_time IS NOT NULL and df.vehicle_code = vp.vehicle_code
+		and df.current_time > vp.current_time )
+		GROUP BY vp.vehicle_code ) AS l
+		WHERE a.terminal_code=l.terminal_code
+		ORDER BY l.current_time DESC
+		<where>
+			<if test="railwayCode != null and railwayCode !=''">
+				concat(l.railway_code,a.terminal_code)
+				like concat("%",#{railwayCode},"%")
+			</if>
+		</where>
+	</select>
 </mapper>

+ 80 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseVehicleController.java

@@ -5,23 +5,34 @@ import com.ozs.common.annotation.Log;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.ChineseToPingyin;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.entity.BaseTerminal;
 import com.ozs.entity.BaseVehicle;
+import com.ozs.entity.CameraTree;
+import com.ozs.entity.VehiclePosition;
+import com.ozs.entity.VehicleTree;
 import com.ozs.entity.vo.BaseVehicleTerminalVo;
 import com.ozs.entity.vo.BaseVehicleVo;
+import com.ozs.entity.vo.VehicleTreeVo;
+import com.ozs.service.BaseDeviceDynamicManagementService;
 import com.ozs.service.BaseVehicleService;
+import com.ozs.service.VehiclePositionService;
+import com.ozs.system.service.DataScoreUtil;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 
@@ -40,6 +51,12 @@ public class BaseVehicleController extends BaseController {
 
     @Autowired
     private BaseVehicleService baseVehicleService;
+    @Resource
+    BaseDeviceDynamicManagementService baseDeviceDynamicManagementService;
+    @Autowired
+    private VehiclePositionService vehiclePositionService;
+    @Autowired
+    private DataScoreUtil dataScoreUtil;
 
     public static void main(String[] args) {
         System.out.println(new Date().getTime());
@@ -230,5 +247,68 @@ public class BaseVehicleController extends BaseController {
             log.error("下载文件失败", e);
         }
     }
+
+    /**
+     * 首页--机车树结构
+     * 机车行驶日志中有线路编码
+     * 根据机车在行驶日志中记录的最后时间
+     * <p>
+     * 获取机车列表和线路编码,组成树结构
+     */
+    @ApiOperation("视频服务树形结构")
+    @PostMapping("/vehicleTree")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult vehicleTree(@RequestBody VehicleTreeVo vehicleTreeVo) {
+
+        vehicleTreeVo = (VehicleTreeVo) dataScoreUtil.setDataScore(getUserId(), vehicleTreeVo);
+        int count = 0;
+        if (!ObjectUtils.isEmpty(vehicleTreeVo.getMils())) {
+            vehicleTreeVo.setMils(vehicleTreeVo.getMils() * 1000);
+        }
+        VehicleTree vehicleTree = baseDeviceDynamicManagementService.vehicleTree(vehicleTreeVo);
+        List<VehicleTree> children = vehicleTree.getChildren();
+        children.sort(new Comparator<VehicleTree>() {
+            @Override
+            public int compare(VehicleTree o1, VehicleTree o2) {
+                String name1 = ChineseToPingyin.convertHanziToPinyin(o1.getName());
+                String substring1 = name1.substring(0, 1);
+                String name2 = ChineseToPingyin.convertHanziToPinyin(o2.getName());
+                String substring2 = name2.substring(0, 1);
+                return substring1.compareTo(substring2);
+            }
+        });
+
+
+        for (VehicleTree child : children) {
+            List<VehicleTree> children1 = child.getChildren();
+            children1.sort(new Comparator<VehicleTree>() {
+                @Override
+                public int compare(VehicleTree o1, VehicleTree o2) {
+                    int i = o1.getMileage() - o2.getMileage();
+                    if (i == 0) {
+                        String[] split = o1.getName().split("-");
+                        return "上行".equals(split[1]) ? -1 : 1;
+                    } else {
+                        return i;
+                    }
+                }
+            });
+            for (VehicleTree tree : children1) {
+                List<VehicleTree> children2 = tree.getChildren();
+                if (children2.size() < 2) {
+                    String code = children2.get(0).getCode();
+                    tree.setCode(code);
+                    children2.remove(0);
+                } else {
+                    for (VehicleTree vehicleTree1 : children2) {
+                        count = count + 1;
+                        vehicleTree1.setName("相机" + count);
+                    }
+                    count = 0;
+                }
+            }
+        }
+        return success(vehicleTree);
+    }
 }