wangweiyu 4 rokov pred
rodič
commit
46bb3242c0

+ 5 - 3
pom.xml

@@ -21,7 +21,6 @@
             <version>1.21</version>
         </dependency>
 
-
         <dependency>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
@@ -58,7 +57,6 @@
             <version>3.15</version>
         </dependency>
 
-
         <!-- 注册中心 -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
@@ -148,7 +146,11 @@
             <artifactId>apm-toolkit-logback-1.x</artifactId>
             <version>8.5.0</version>
         </dependency>
-
+        <!-- mongodb -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 131 - 0
src/main/java/com/aoyang/tms/controller/TruckMongoInfoController.java

@@ -0,0 +1,131 @@
+package com.aoyang.tms.controller;
+
+
+import com.alibaba.fastjson.JSON;
+import com.aoyang.common.param.PageParam;
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.controller.param.LocationQueryParam;
+import com.aoyang.tms.controller.param.Truck;
+import com.aoyang.tms.controller.vo.LocationVO;
+import com.aoyang.tms.entity.TruckSimCard;
+import com.aoyang.tms.feign.result.TmsMongoDoc;
+import com.aoyang.tms.service.TruckSimCardService;
+import com.aoyang.tms.service.WorkSpotService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>
+    * 卡车位置信息获取 控制器
+    * </p>
+ *
+ * @author guoyong
+ * @since 2022-04-21
+ */
+@RestController
+@Slf4j
+@Api(value = "卡车位置信息获取接口")
+@RequestMapping("/tms/location")
+public class TruckMongoInfoController {
+
+    @Resource
+    private MongoTemplate mongoTemplate;
+
+    @Resource
+    private WorkSpotService workSpotService;
+
+    @Resource
+    private TruckSimCardService truckSimCardService;
+
+    @ApiOperation(value = "获取卡车位置信息",notes="根据车牌号获取卡车位置信息")
+    @PostMapping("/get_truck")
+    public Result<LocationVO> getCurrentTruck(@RequestBody LocationQueryParam param) {
+        log.info("根据车牌号获取卡车位置信息,调用/tms/location/get_truck param:{} ", JSON.toJSONString(param));
+        if (param == null || (StringUtils.isBlank(param.getCarNumber()) && param.getTruckId() == null)) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        QueryWrapper<TruckSimCard> queryWrapper = new QueryWrapper<>();
+        if (param.getTruckId() != null) {
+            queryWrapper.eq("truck_id", param.getTruckId());
+        }
+        if (StringUtils.isNotBlank(param.getCarNumber())) {
+            queryWrapper.eq("car_number", param.getCarNumber());
+        }
+        TruckSimCard truckSimCard = truckSimCardService.getOne(queryWrapper);
+        if (truckSimCard == null) {
+            return new Result<>(ErrCodeEnum.INVALID_TRUCK.getCode(), "卡车无simcard信息");
+        }
+        Query query = new Query(Criteria.where("clientId").is(truckSimCard.getClientId()));
+        query.with(new Sort(Sort.Direction.DESC, "createTime"));
+        TmsMongoDoc tmsMongoDoc = mongoTemplate.findOne(query, TmsMongoDoc.class);
+        // TODO mongo上报数据转换
+        LocationVO location = new LocationVO();
+        // 经纬度
+        location.setLatitude(tmsMongoDoc.getLatitude()+"");
+        location.setLongitude(tmsMongoDoc.getLongitude()+"");
+        location.setCarNumber(truckSimCard.getCarNumber());
+        location.setTruckId(truckSimCard.getTruckId());
+        // 时间格式: YYMMDDHHMMSS
+        location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+        return new Result<>(location);
+    }
+
+    @ApiOperation(value = "获取卡车位置信息list",notes="根据车牌号获取卡车位置信息list")
+    @PostMapping("/get_truck_trip")
+    public Result<List<LocationVO>> getTruckTrip(@RequestBody LocationQueryParam param) {
+        log.info("根据车牌号获取卡车位置信息,调用/tms/location/get_truck param:{} ", JSON.toJSONString(param));
+        if (param == null || (StringUtils.isBlank(param.getCarNumber()) && param.getTruckId() == null)) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        QueryWrapper<TruckSimCard> queryWrapper = new QueryWrapper<>();
+        if (param.getTruckId() != null) {
+            queryWrapper.eq("truck_id", param.getTruckId());
+        }
+        if (StringUtils.isNotBlank(param.getCarNumber())) {
+            queryWrapper.eq("car_number", param.getCarNumber());
+        }
+        TruckSimCard truckSimCard = truckSimCardService.getOne(queryWrapper);
+        if (truckSimCard == null) {
+            return new Result<>(ErrCodeEnum.INVALID_TRUCK.getCode(), "卡车无simcard信息");
+        }
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getClientId());
+        criteria.andOperator(Criteria.where("dateTime").gt());
+        Query query = new Query(criteria);
+        query.with(new Sort(Sort.Direction.DESC, "createTime"));
+
+        List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);
+        List<LocationVO> result = new ArrayList<>();
+        for (TmsMongoDoc tmsMongoDoc : tmsMongoDocs) {
+            // TODO mongo上报数据转换
+            LocationVO location = new LocationVO();
+            location.setLatitude(tmsMongoDoc.getLatitude() + "");
+            location.setLongitude(tmsMongoDoc.getLongitude() + "");
+            location.setCarNumber(truckSimCard.getCarNumber());
+            location.setTruckId(truckSimCard.getTruckId());
+            // 时间格式: YYMMDDHHMMSS
+            location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+            result.add(location);
+        }
+        return new Result<>(result);
+    }
+}

+ 39 - 0
src/main/java/com/aoyang/tms/controller/param/LocationQueryParam.java

@@ -0,0 +1,39 @@
+package com.aoyang.tms.controller.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+    * mongo车辆位置信息查询param
+ * </p>
+ *
+ */
+@Data
+@ApiModel(value="LocationQueryParam对象", description="车辆位置信息查询")
+public class LocationQueryParam implements Serializable {
+
+    @ApiModelProperty(value = "卡车id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long truckId;
+
+    @ApiModelProperty(value = "车牌号")
+    private String carNumber;
+
+    @ApiModelProperty(value = "挂车车牌号")
+    private String trailerCarNumber;
+
+    @ApiModelProperty(value = "位置时间")
+    private String localDate;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+}

+ 46 - 0
src/main/java/com/aoyang/tms/controller/vo/LocationVO.java

@@ -0,0 +1,46 @@
+package com.aoyang.tms.controller.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+    * mongo车辆位置信息VO
+ * </p>
+ *
+ */
+@Data
+@ApiModel(value="LocationVO对象", description="车辆位置信息")
+public class LocationVO implements Serializable {
+
+    @ApiModelProperty(value = "卡车id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long truckId;
+
+    @ApiModelProperty(value = "车牌号")
+    private String carNumber;
+
+    @ApiModelProperty(value = "挂车车牌号")
+    private String trailerCarNumber;
+
+    @ApiModelProperty(value = "位置经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "位置纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "位置时间")
+    private String localTime;
+
+}

+ 41 - 0
src/main/java/com/aoyang/tms/feign/StrategyFeignClient.java

@@ -0,0 +1,41 @@
+package com.aoyang.tms.feign;
+
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.feign.result.SystemConfig;
+import com.aoyang.tms.feign.fallback.StrategyFeignClientFallback;
+import com.aoyang.tms.feign.result.Truck;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: strategy
+ * @Author: panenming
+ * @CreateDate: 2020/2/12 下午1:17
+ */
+@FeignClient(name = "strategy", fallbackFactory = StrategyFeignClientFallback.class)
+public interface StrategyFeignClient {
+
+    /**
+     * @Author guoyong
+     * @Description 根据name获取系统配置值
+     * @Date 2021/8/31
+     * @Param
+     * @return
+     **/
+    @PostMapping("/strategy/system_config/get_by_Name")
+    Result<SystemConfig> getSystemConfigByName(@RequestBody SystemConfig systemConfigParam);
+
+    /**
+     * 根据卡车id获取卡车信息
+     *
+     * @param truck
+     * @return
+     */
+
+    @PostMapping("/strategy/truck/find_truck")
+    Result<Truck> find(@RequestBody Truck truck);
+
+}

+ 43 - 0
src/main/java/com/aoyang/tms/feign/fallback/StrategyFeignClientFallback.java

@@ -0,0 +1,43 @@
+package com.aoyang.tms.feign.fallback;
+
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.feign.result.SystemConfig;
+import com.aoyang.tms.feign.StrategyFeignClient;
+import com.aoyang.tms.feign.result.Truck;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: strategy 请求回滚
+ * @Author: panenming
+ * @CreateDate: 2020/2/12 下午1:17
+ */
+@Component
+@Slf4j
+public class StrategyFeignClientFallback implements FallbackFactory<StrategyFeignClient> {
+
+    @Override
+    public StrategyFeignClient create(Throwable cause) {
+        String msg = cause == null ? "" : cause.getMessage();
+        if (StringUtils.isNotEmpty(msg)) {
+            log.error("StrategyFeignClient error : {}", msg);
+        }
+        return new StrategyFeignClient() {
+
+            @Override
+            public Result<SystemConfig> getSystemConfigByName(SystemConfig systemConfigParam) {
+                return new Result<>(4000, "fallBack", null);
+            }
+
+            @Override
+            public Result<Truck> find(Truck truck) {
+                return new Result<>(4000, "fallBack");
+            }
+
+        };
+    }
+}

+ 45 - 0
src/main/java/com/aoyang/tms/feign/result/SystemConfig.java

@@ -0,0 +1,45 @@
+package com.aoyang.tms.feign.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 系统配置实体类
+ * </p>
+ *
+ * @author guoyong
+ * @since 2021-08-23
+ */
+@Data
+public class SystemConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "值")
+    private String value;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "操作人")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long operator;
+
+    @ApiModelProperty(value = "操作人姓名")
+    private String operatorName;
+
+    @ApiModelProperty(value = "操作时间")
+    private LocalDateTime operateDate;
+
+}

+ 83 - 0
src/main/java/com/aoyang/tms/feign/result/TmsMongoDoc.java

@@ -0,0 +1,83 @@
+package com.aoyang.tms.feign.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+@Data
+@Document(collection = "tms_dev")
+public class TmsMongoDoc {
+
+    @Id
+    private String msgId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 终端注册
+     */
+    //@Field(length = 2, desc = "消息ID")
+    protected int messageId;
+    //@Field(length = 2, desc = "消息体属性")
+    protected int properties;
+    //@Field(length = 1, desc = "协议版本号", version = 1)
+    protected int protocolVersion;
+    //@Field(length = 6, charset = "BCD", desc = "终端手机号", version = {-1, 0})
+    //@Field(length = 10, charset = "BCD", desc = "终端手机号", version = 1)
+    protected String clientId;
+    //@Field(length = 2, desc = "流水号")
+    protected int serialNo;
+    //@Field(length = 2, desc = "消息包总数")
+    protected Integer packageTotal;
+    //@Field(length = 2, desc = "包序号")
+    protected Integer packageNo;
+    /** bcc校验 */
+    protected boolean verified = true;
+
+    /**
+     * T0200
+     */
+    //@Field(length = 2, desc = "省域ID")
+    private int provinceId;
+    //@Field(length = 2, desc = "市县域ID")
+    private int cityId;
+    //@Field(length = 5, desc = "制造商ID", version = {-1, 0})
+    //@Field(length = 11, desc = "制造商ID", version = 1)
+    private String makerId;
+    //@Field(length = 8, desc = "终端型号", version = -1)
+    //@Field(length = 20, desc = "终端型号", version = 0)
+    //@Field(length = 30, desc = "终端型号", version = 1)
+    private String deviceModel;
+    //@Field(length = 7, desc = "终端ID", version = {-1, 0})
+    //@Field(length = 30, desc = "终端ID", version = 1)
+    private String deviceId;
+    //@Field(length = 1, desc = "车牌颜色:0.未上车牌 1.蓝色 2.黄色 3.黑色 4.白色 9.其他")
+    private int plateColor;
+    //@Field(desc = "车辆标识") 车牌号
+    private String plateNo;
+
+    //@Field(length = 4, desc = "报警标志")
+    private int warnBit;
+    //@Field(length = 4, desc = "状态")
+    private int statusBit;
+    //@Field(length = 4, desc = "纬度")
+    private int latitude;
+    //@Field(length = 4, desc = "经度")
+    private int longitude;
+    //@Field(length = 2, desc = "高程(米)")
+    private int altitude;
+    //@Field(length = 2, desc = "速度(1/10公里每小时)")
+    private int speed;
+    //@Field(length = 2, desc = "方向")
+    private int direction;
+    //@Field(length = 6, charset = "BCD", desc = "时间(YYMMDDHHMMSS)")
+    private String dateTime;
+    //@Field(desc = "位置附加信息", converter = AttributeConverter.class, version = {-1, 0})
+    //@Field(desc = "位置附加信息(粤标)", converter = AttributeConverterYue.class, version = 1)
+    private Map<Integer, Object> attributes;
+}

+ 25 - 0
src/main/java/com/aoyang/tms/feign/result/Truck.java

@@ -0,0 +1,25 @@
+package com.aoyang.tms.feign.result;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @Description: java类作用描述
+ * @Author: panenming
+ * @CreateDate: 2020/2/13 下午4:58
+ */
+@Getter
+@Setter
+@ToString
+public class Truck {
+    private Long truckId;
+    private Integer tradeType;
+    private Long orgId;
+    private String truckName;
+    private String orgName;
+    private String carNumber;
+    private Integer status;
+    private Integer linked;
+    private Integer autoAccount;
+}

+ 8 - 1
src/main/profiles/dev/bootstrap.yml

@@ -35,4 +35,11 @@ spring:
     host: 172.31.58.45
     port: 5672
     username: admin
-    password: xqkj@ayzl
+    password: xqkj@ayzl
+  data:
+    mongodb:
+      host: 172.31.58.51
+      port: 27017
+      database: meter
+      username: meter
+      password: xqkj@ayzl

+ 8 - 1
src/main/profiles/prod/bootstrap.yml

@@ -35,4 +35,11 @@ spring:
     host: 172.31.58.56
     port: 5672
     username: admin
-    password: xqkj@ayzl
+    password: xqkj@ayzl
+  data:
+    mongodb:
+      host: 172.31.58.51
+      port: 27017
+      database: meter
+      username: meter
+      password: xqkj@ayzl

+ 8 - 1
src/main/profiles/test/bootstrap.yml

@@ -35,4 +35,11 @@ spring:
     host: 172.31.58.46
     port: 5672
     username: admin
-    password: xqkj@ayzl
+    password: xqkj@ayzl
+  data:
+    mongodb:
+      host: 172.31.58.51
+      port: 27017
+      database: meter
+      username: meter
+      password: xqkj@ayzl