Ver código fonte

Merge branch 'dev' of https://git.steerinfo.com/DAL-DAZHOU1/DAL-TMS-TRUCK-API into dev

zx 3 anos atrás
pai
commit
0a59048ee4
48 arquivos alterados com 2724 adições e 181 exclusões
  1. 23 0
      pom.xml
  2. 35 0
      src/main/java/com/steerinfo/dil/config/AsyncConfiguration.java
  3. 46 0
      src/main/java/com/steerinfo/dil/config/RedisConfiguration.java
  4. 45 0
      src/main/java/com/steerinfo/dil/controller/TestController.java
  5. 11 1
      src/main/java/com/steerinfo/dil/controller/TmstruckEnfactoryResultController.java
  6. 9 2
      src/main/java/com/steerinfo/dil/controller/TmstruckLeaveFactoryResultController.java
  7. 39 22
      src/main/java/com/steerinfo/dil/controller/TmstruckLoadResultController.java
  8. 5 1
      src/main/java/com/steerinfo/dil/mapper/TmstruckEnfactoryResultMapper.java
  9. 2 0
      src/main/java/com/steerinfo/dil/mapper/TmstruckLeaveFactoryResultMapper.java
  10. 5 3
      src/main/java/com/steerinfo/dil/mapper/TmstruckLoadResultMapper.java
  11. 4 1
      src/main/java/com/steerinfo/dil/mapper/TmstruckWeightResultMapper.java
  12. 5 0
      src/main/java/com/steerinfo/dil/mapper/UtilsMapper.java
  13. 2 1
      src/main/java/com/steerinfo/dil/service/ITmstruckEnfactoryResultService.java
  14. 2 0
      src/main/java/com/steerinfo/dil/service/ITmstruckLeaveFactoryResultService.java
  15. 3 0
      src/main/java/com/steerinfo/dil/service/ITmstruckLoadResultService.java
  16. 9 0
      src/main/java/com/steerinfo/dil/service/IUtilsService.java
  17. 10 0
      src/main/java/com/steerinfo/dil/service/impl/TmstruckEnfactoryResultServiceImpl.java
  18. 5 2
      src/main/java/com/steerinfo/dil/service/impl/TmstruckLeaveFactoryResultServiceImpl.java
  19. 89 29
      src/main/java/com/steerinfo/dil/service/impl/TmstruckLoadResultServiceImpl.java
  20. 19 5
      src/main/java/com/steerinfo/dil/service/impl/TmstruckWeightResultServiceImpl.java
  21. 21 0
      src/main/java/com/steerinfo/dil/service/impl/UtilsServiceImpl.java
  22. 56 0
      src/main/java/com/steerinfo/route/config/KeyExpiredListener.java
  23. 63 0
      src/main/java/com/steerinfo/route/controller/ZhongJiaoXingLuContoller.java
  24. 14 0
      src/main/java/com/steerinfo/route/service/RouteService.java
  25. 286 0
      src/main/java/com/steerinfo/route/service/impl/RouteServiceImpl.java
  26. 268 0
      src/main/java/com/steerinfo/route/threeRequest/ZhongJiaoXingLu.java
  27. 220 0
      src/main/java/com/steerinfo/route/util/DataConversionTool.java
  28. 136 0
      src/main/java/com/steerinfo/route/util/HTTPRequestUtils.java
  29. 157 0
      src/main/java/com/steerinfo/route/util/LngLonUtil.java
  30. 153 0
      src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/Result.java
  31. 70 0
      src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/RunRoute.java
  32. 30 0
      src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/ViewVisualization.java
  33. 40 0
      src/main/java/com/steerinfo/route/vo/Map/Point.java
  34. 26 0
      src/main/java/com/steerinfo/route/vo/Map/RouteVo.java
  35. 112 0
      src/main/java/com/steerinfo/route/vo/Map/StartAndEndRoute.java
  36. 18 0
      src/main/java/com/steerinfo/route/vo/ResultWarn.java
  37. 22 0
      src/main/java/com/steerinfo/route/vo/resultJson/Ad_info.java
  38. 54 0
      src/main/java/com/steerinfo/route/vo/resultJson/Address_components.java
  39. 32 0
      src/main/java/com/steerinfo/route/vo/resultJson/Location.java
  40. 80 0
      src/main/java/com/steerinfo/route/vo/resultJson/Result.java
  41. 38 0
      src/main/java/com/steerinfo/route/vo/resultJson/SearchPoint.java
  42. 10 0
      src/main/resources/application-dev.yml
  43. 34 3
      src/main/resources/bootstrap.yml
  44. 130 55
      src/main/resources/com/steerinfo/dil/mapper/TmstruckEnfactoryResultMapper.xml
  45. 221 17
      src/main/resources/com/steerinfo/dil/mapper/TmstruckLeaveFactoryResultMapper.xml
  46. 42 38
      src/main/resources/com/steerinfo/dil/mapper/TmstruckLoadResultMapper.xml
  47. 9 1
      src/main/resources/com/steerinfo/dil/mapper/TmstruckWeightResultMapper.xml
  48. 14 0
      src/main/resources/com/steerinfo/dil/mapper/UtilsMapper.xml

+ 23 - 0
pom.xml

@@ -48,6 +48,29 @@
     </distributionManagement>
 
     <dependencies>
+        <!--minio-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+            <version>8.2.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.squareup.okhttp3</groupId>
+                    <artifactId>okhttp</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--Redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!--中交新路的包这个问杨-->
+        <dependency>
+            <groupId>com.ZhongJiaoXingLu</groupId>
+            <artifactId>openapi-sdk</artifactId>
+            <version>6.0</version>
+        </dependency>
         <!--websocket-->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 35 - 0
src/main/java/com/steerinfo/dil/config/AsyncConfiguration.java

@@ -0,0 +1,35 @@
+package com.steerinfo.dil.config;
+
+import io.swagger.annotations.Api;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@Api("多线程配置")
+public class AsyncConfiguration {
+    @Bean("doSomethingExecutor")
+    public Executor doSomeThingExecutor(){
+        ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
+        //创建时候线程数量
+        executor.setCorePoolSize(10);
+        //最大时候的线程数量
+        executor.setMaxPoolSize(20);
+        //缓冲队列:用来缓冲执行任务的队列
+        executor.setQueueCapacity(500);
+        //允许线程空闲时间
+        executor.setKeepAliveSeconds(60);
+        //线程池前缀
+        executor.setThreadNamePrefix("do-something-");
+        //缓冲队列满了之后的拒绝策略
+        // 缓冲队列满了之后的拒绝策略:由调用线程处理(一般是主线程)
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
+        executor.initialize();
+        return executor;
+    }
+}

+ 46 - 0
src/main/java/com/steerinfo/dil/config/RedisConfiguration.java

@@ -0,0 +1,46 @@
+package com.steerinfo.dil.config;
+
+
+import com.steerinfo.route.config.KeyExpiredListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * @program: SpringCloud * @description: redis配置类 * @author: zhang yi * @create: 2020-03-24 14:17
+ */
+@Configuration
+public class RedisConfiguration {
+    @Autowired
+    private RedisConnectionFactory redisConnectionFactory;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Bean
+    public RedisTemplate<String, Object> stringSerializerRedisTemplate() {
+        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
+        redisTemplate.setKeySerializer(stringSerializer);
+        redisTemplate.setValueSerializer(stringSerializer);
+        redisTemplate.setHashKeySerializer(stringSerializer);
+        redisTemplate.setHashValueSerializer(stringSerializer);
+        return redisTemplate;
+    }
+
+    @Bean
+    public RedisMessageListenerContainer redisMessageListenerContainer() {
+        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
+        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
+        return redisMessageListenerContainer;
+    }
+
+    @Bean
+    public KeyExpiredListener keyExpiredListener() {
+        return new KeyExpiredListener(this.redisMessageListenerContainer());
+    }
+}

+ 45 - 0
src/main/java/com/steerinfo/dil/controller/TestController.java

@@ -0,0 +1,45 @@
+package com.steerinfo.dil.controller;
+
+import com.steerinfo.dil.service.ITmstruckLeaveFactoryResultService;
+import com.steerinfo.dil.util.BaseRESTfulController;
+import com.steerinfo.route.service.impl.RouteServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+public class TestController extends BaseRESTfulController {
+
+    @Autowired
+    private RouteServiceImpl routeService;
+    @Autowired
+    private ITmstruckLeaveFactoryResultService tmstruckLeaveFactoryResultService;
+    @PostMapping("/savePath")
+    public String savePath() throws Exception {
+
+        Map<String, Object> parem=tmstruckLeaveFactoryResultService.getTruckFactoryResult("WYSDD2021091000000002");
+        parem.put("turnOf","0");
+        //运输订单号:orderNumber、车牌号:capacityNumber、出厂时间:resultOutGateTime、预警开关:turnOf、发货地址:shipperName、收货地址:receiveAddress
+        //初始化请求参数
+//        HashMap<String,Object> mapValue=new HashMap<>();
+//        mapValue.put("orderNumber","WYSDD2021091000000001");
+//        mapValue.put("capacityNumber","豫SB6238");
+//        mapValue.put("resultOutGateTime","2021-11-17 14:20:19");
+//        mapValue.put("turnOf","0");
+//        mapValue.put("shipperName","四川达州钢铁集团有限");
+//        mapValue.put("receiveAddress","长沙市");
+        return routeService.saveRoute(parem).toString();
+    }
+    @PostMapping("/fullPath")
+    public Object fullPath(String orderNumber) throws Exception {
+        //运输订单号:orderNumber、车牌号:capacityNumber、出厂时间:resultOutGateTime、预警开关:turnOf、发货地址:shipperName、收货地址:receiveAddress
+        //初始化请求参数
+        HashMap<String,Object> mapValue=new HashMap<>();
+        mapValue.put("orderNumber",orderNumber);
+        return routeService.fullPathVisualization(mapValue);
+    }
+}

+ 11 - 1
src/main/java/com/steerinfo/dil/controller/TmstruckEnfactoryResultController.java

@@ -46,7 +46,7 @@ public class TmstruckEnfactoryResultController extends BaseRESTfulController {
     @ApiOperation(value="查询所有的进厂实绩")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "mapValue", value = "表头和参数", required = false, dataType = "map"),
-            @ApiImplicitParam(name = "apiId(99)", value = "动态表头", required = false, dataType = "Integer"),
+            @ApiImplicitParam(name = "apiId(210)", value = "动态表头", required = false, dataType = "Integer"),
             @ApiImplicitParam(name = "pageNum", value = "页码", required = false, dataType = "Integer"),
             @ApiImplicitParam(name = "pageSize", value = "页", required = false, dataType = "Integer"),
             @ApiImplicitParam(name = "status", value = "状态码", required = false, dataType = "Integer"),
@@ -126,4 +126,14 @@ public class TmstruckEnfactoryResultController extends BaseRESTfulController {
         return success(i);
     }
 
+    @ApiOperation(value="通过运输订单id查询物资信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderId", value = "运输订单id", required = false, dataType = "Integer"),
+    })
+    @GetMapping("/getMaterial")
+    public RESTfulResult getMaterial(Integer orderId){
+        List<Map<String, Object>> material = tmstruckEnfactoryResultService.getMaterial(orderId);
+        return success(material);
+    }
+
 }

+ 9 - 2
src/main/java/com/steerinfo/dil/controller/TmstruckLeaveFactoryResultController.java

@@ -8,6 +8,7 @@ import com.steerinfo.dil.util.ColumnDataUtil;
 import com.steerinfo.dil.util.PageListAdd;
 import com.steerinfo.framework.controller.RESTfulResult;
 import com.steerinfo.framework.service.pagehelper.PageHelper;
+import com.steerinfo.route.service.impl.RouteServiceImpl;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -40,7 +41,8 @@ public class TmstruckLeaveFactoryResultController extends BaseRESTfulController
 
     @Autowired
     ITmstruckLeaveFactoryResultService tmstruckLeaveFactoryResultService;
-
+    @Autowired
+    private RouteServiceImpl routeService;
     @Autowired
     ESFeign esFeign;
 
@@ -111,15 +113,20 @@ public class TmstruckLeaveFactoryResultController extends BaseRESTfulController
             @ApiImplicitParam(name = "orderNumber", value = "", required = false, dataType = "String"),
     })
     @PostMapping("/addLeaveFactoryResult")
-    public RESTfulResult addLeaveFactoryResult(@RequestBody(required=false) Map<String,Object> mapValue){
+    public RESTfulResult addLeaveFactoryResult(@RequestBody(required=false) Map<String,Object> mapValue) throws Exception {
         String nu=mapValue.get("orderNumber").toString();
         //执行查询语句找出运输类型进行判断,是否为出厂 4 已完成计皮
         Integer i = tmstruckLeaveFactoryResultService.selectTransportRoute(nu);
+       //中交新路接口
+        Map<String, Object> parem=tmstruckLeaveFactoryResultService.getTruckFactoryResult("WYSDD2021091000000002");
+        parem.put("turnOf","0");
+        routeService.saveRoute(parem);
 //        if (i == 4) {
             int leaveFactory=tmstruckLeaveFactoryResultService.leaveFactoryByPDA(mapValue);
             return  success(leaveFactory);
 //        }else
 //            return  failed();
+
     }
 
 }

+ 39 - 22
src/main/java/com/steerinfo/dil/controller/TmstruckLoadResultController.java

@@ -3,10 +3,11 @@ package com.steerinfo.dil.controller;
 import com.steerinfo.dil.feign.ESFeign;
 import com.steerinfo.dil.model.TmstruckLoadResult;
 import com.steerinfo.dil.service.ITmstruckLoadResultService;
+import com.steerinfo.dil.util.BaseRESTfulController;
 import com.steerinfo.dil.util.ColumnDataUtil;
 import com.steerinfo.dil.util.DataChange;
 import com.steerinfo.dil.util.PageListAdd;
-import com.steerinfo.framework.controller.BaseRESTfulController;
+
 import com.steerinfo.framework.controller.RESTfulResult;
 import com.steerinfo.framework.service.pagehelper.PageHelper;
 import io.swagger.annotations.ApiImplicitParam;
@@ -45,6 +46,16 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
     @Autowired
     ColumnDataUtil columnDataUtil;
 
+    @ApiOperation(value="生成装车实绩 :远程调用专用")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "resultId", value = "装车作业实绩ID", required = false, dataType = "Integer"),
+    })
+    @PostMapping("/addLoadResult")
+    public RESTfulResult addLoadResult(@RequestBody(required=false) Map<String,Object> map){
+        int i = tmstruckLoadResultService.addLoadResult(map);
+        return success(i);
+    }
+
     @ApiOperation(value="查询所有装车实绩")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "mapValue", value = "表头和参数", required = false, dataType = "map"),
@@ -75,6 +86,9 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
         if(mapValue.size() == 2){
             //将查询结果存入索引中
             allLoadResult = tmstruckLoadResultService.getAllLoadResult(mapValue);
+            if("5678".contains(orderType.toString())) {
+                DataChange.changeDateToDayDate(allLoadResult, "resultLoadStartTime");
+            }
             Map<String, Object> map = new HashMap<>();
             //添加索引
             map.put("index","get_truck_load_list");
@@ -91,7 +105,9 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
         PageHelper.startPage(pageNum,pageSize);
         //分页数据
         List<Map<String, Object>> loadResult = tmstruckLoadResultService.getAllLoadResult(mapValue);
-        DataChange.changeDateToDayDate(loadResult, "resultLoadStartTime");
+        if("5678".contains(orderType.toString())) {
+            DataChange.changeDateToDayDate(loadResult, "resultLoadStartTime");
+        }
         PageListAdd pageList = columnDataUtil.tableColumnData(apiId, allLoadResult,loadResult);
         return success(pageList);
     }
@@ -106,6 +122,27 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
         return success(i);
     }
 
+    @ApiOperation(value="销售新增钢材装车实绩 ")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "map", value = "", required = false, dataType = "Map"),
+    })
+    @PostMapping("/addSaleLoadResult")
+    public RESTfulResult addSaleLoadResult(@RequestBody(required=false) Map<String, Object> map){
+        int i = tmstruckLoadResultService.addXSLoadResult(map);
+        return success(i);
+    }
+
+    @ApiOperation(value="销售新增钢渣、水渣、危化品装车实绩 ")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "map", value = "", required = false, dataType = "Map"),
+    })
+    @PostMapping("/addSale2LoadResult")
+    public RESTfulResult addSale2LoadResult(@RequestBody(required=false) Map<String, Object> map){
+        int i = tmstruckLoadResultService.addXS2LoadResult(map);
+        return success(i);
+    }
+
+
     @ApiOperation(value="修改汽车装车实绩")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "tmstruckLoadResult", value = "装车作业实绩对象", required = false, dataType = "TmstruckLoadResult"),
@@ -143,16 +180,6 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
         return success(i);
     }
 
-    @ApiOperation(value="生成装车实绩 :远程调用专用")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "resultId", value = "装车作业实绩ID", required = false, dataType = "Integer"),
-    })
-    @PostMapping("/addLoadResult")
-    public RESTfulResult addLoadResult(@RequestBody(required=false) Map<String,Object> map){
-        int i = tmstruckLoadResultService.addLoadResult(map);
-        return success(i);
-    }
-
     @ApiOperation(value="修改n个装车点 ")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "resultId", value = "装车作业实绩ID", required = false, dataType = "Integer"),
@@ -204,16 +231,6 @@ public class TmstruckLoadResultController extends BaseRESTfulController {
         return success(pageList);
     }
 
-
-    @ApiOperation(value="销售新增装车实绩 ")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "map", value = "", required = false, dataType = "Map"),
-    })
-    @PostMapping("addSaleLoadResult")
-    public RESTfulResult addSaleLoadResult(@RequestBody(required=false) Map<String, Object> map){
-        int i = tmstruckLoadResultService.addXSLoadResult(map);
-        return success(i);
-    }
     //内转物流新增装车实绩
     @ApiOperation(value="内转物流新增装车实绩 ")
     @ApiImplicitParams({

+ 5 - 1
src/main/java/com/steerinfo/dil/mapper/TmstruckEnfactoryResultMapper.java

@@ -25,7 +25,7 @@ public interface TmstruckEnfactoryResultMapper extends IBaseMapper<TmstruckEnfac
     BigDecimal selectMaxId();
 
     //通过车牌号和 运输订单 查询 与运输订单关联的实绩总表ID
-    Integer selectOrderIdByCpAndOn(Map<String, Object> map);
+    Integer selectTotalResultIdByCpAndOn(Map<String, Object> map);
 
     //通过门岗名称查询门岗Id
     Integer selectGatepostIdByGatepostName(String gatepostName);
@@ -36,4 +36,8 @@ public interface TmstruckEnfactoryResultMapper extends IBaseMapper<TmstruckEnfac
     //查找排队序号
     Integer selectNodeNumber(String orderNumber);
 
+    //通过运输订单id查询物资信息
+    List<Map<String,Object>> getMaterial(Integer orderId);
+
+
 }

+ 2 - 0
src/main/java/com/steerinfo/dil/mapper/TmstruckLeaveFactoryResultMapper.java

@@ -35,4 +35,6 @@ public interface TmstruckLeaveFactoryResultMapper extends IBaseMapper<TmstruckLe
 
     //销售物流查询所有的出厂实绩
     List<Map<String,Object>> selectAllLeaveFacatoryForSale(Map<String,Object> map);
+
+    Map<String, Object> getTruckFactoryResult(String nu);
 }

+ 5 - 3
src/main/java/com/steerinfo/dil/mapper/TmstruckLoadResultMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -41,7 +42,7 @@ public interface TmstruckLoadResultMapper extends IBaseMapper<TmstruckLoadResult
     List<Integer>  selectResultIdByOrderNumber(String orderNumber);
 
     //根据实绩id查找扫描时间
-    Map selectLoadTimeByResultId(Integer resultId);
+    Date selectLoadTimeByResultId(BigDecimal resultId);
 
     //根据实绩id查找扫描时间
     Integer selecLoadIdByresultId(Integer resultId);
@@ -51,6 +52,7 @@ public interface TmstruckLoadResultMapper extends IBaseMapper<TmstruckLoadResult
 
     //根据运输订单号查找物资id
     List<Map<String,Object>> selectMaterialIdByOrderNumber(Map<String, Object> map);
+
     //内转物流汽车装货展示
     List<Map<String,Object>> selectLoadResultForConverted(Map<String,Object> map);
 
@@ -79,8 +81,8 @@ public interface TmstruckLoadResultMapper extends IBaseMapper<TmstruckLoadResult
     Integer getLoadResultIdByMIdAndTotalId(@Param("resultTotalId") Integer resultTotalId, @Param("materialId") Integer materialId);
 
     //通过物资ID和运输订单号 查找最先扫描Id
-    Integer getMinScanIdByOrderNum(Map<String, Object> map);
+    Map<String, Object> getMinScanIdByOrderNum(Map<String, Object> map);
 
     //通过物资唯一编码 查找物资ID
-    BigDecimal getMaterialIdByMaterialCode(String materialCode);
+    BigDecimal getMaterialIdByMaterialCode(String materialOnlyCode);
 }

+ 4 - 1
src/main/java/com/steerinfo/dil/mapper/TmstruckWeightResultMapper.java

@@ -17,8 +17,11 @@ public interface TmstruckWeightResultMapper extends IBaseMapper<TmstruckWeightRe
     @Select("select seq_tmstruck_weight_result.nextval from dual")
     BigDecimal selectMaxId();
 
+    //通过物资名称和规格型号查询物资Id
+    Integer getMaterialIdByMaterialNameAndSpe(Map<String, Object> map);
+
     //通过订单号查询计重实绩数据
-    Map<String, Object> selectTotalIdByOrderNo(String orderNumber);
+    Map<String, Object> selectTotalIdByOrderNo(Map<String, Object> map);
 
     //通过汽车衡编号查询汽车衡ID
     Integer selectTruckCalculateId(String truckCalculateNumber);

+ 5 - 0
src/main/java/com/steerinfo/dil/mapper/UtilsMapper.java

@@ -31,4 +31,9 @@ public interface UtilsMapper {
     //通过运力ID 或车牌号 修改运力状态
     int updateCapacityByCarIdOrNum(Map<String, Object> map);
 
+    //通过仓库名称查询仓库Id
+    Integer queryWarehouseIdByName(String warehouseName);
+
+    //通过月台名称查找月台Id platformName
+    Integer queryPlatformIdByName(String platformName);
 }

+ 2 - 1
src/main/java/com/steerinfo/dil/service/ITmstruckEnfactoryResultService.java

@@ -22,7 +22,8 @@ import java.util.Map;
 public interface ITmstruckEnfactoryResultService{
     //通过订单类型获取进厂实绩
     List<Map<String, Object>> getAllEnFactoryResult(Map<String, Object> map);
-
+    //通过运输订单id查询物资信息
+    List<Map<String, Object>> getMaterial(Integer orderId);
     //新增进厂作业
     int addEnFactoryResult(Map<String, Object> map);
 

+ 2 - 0
src/main/java/com/steerinfo/dil/service/ITmstruckLeaveFactoryResultService.java

@@ -33,4 +33,6 @@ public interface ITmstruckLeaveFactoryResultService {
 
     //新增进厂实绩 派单时新增
     int addLeaveFactory(Map<String,Object> mapValue);
+
+    Map<String, Object> getTruckFactoryResult(String nu);
 }

+ 3 - 0
src/main/java/com/steerinfo/dil/service/ITmstruckLoadResultService.java

@@ -32,6 +32,9 @@ public interface ITmstruckLoadResultService{
     //修改销售装车实绩  (如果是多种物资【多拼】,通过物资Id和运输订单号来确定唯一的装车实绩进行修改)
     int addXSLoadResult(Map<String, Object> map);
 
+    //修改销售钢渣、水渣、危化品装车实绩
+    int addXS2LoadResult(Map<String, Object> map);
+
     //修改装车作业
     int updateLoadResult(TmstruckLoadResult tmstruckLoadResult);
 

+ 9 - 0
src/main/java/com/steerinfo/dil/service/IUtilsService.java

@@ -21,4 +21,13 @@ public interface IUtilsService {
 
     //修改运输订单状态
     int updateOrderStatus(Map<String, Object> map, Integer status);
+
+    //通过仓库名称查询仓库Id
+    Integer queryWarehouseIdByName(String warehouseName);
+
+    //用于更新路段顺序号
+    int updateOrderLineSequence(Map<String, Object> map, Integer lineSequence);
+
+    //通过月台名称查找月台Id platformName
+    Integer queryPlatformIdByName(String platformName);
 }

+ 10 - 0
src/main/java/com/steerinfo/dil/service/impl/TmstruckEnfactoryResultServiceImpl.java

@@ -115,6 +115,15 @@ public class TmstruckEnfactoryResultServiceImpl implements ITmstruckEnfactoryRes
         return null;
     }
 
+    /**
+     * 通过运输订单id查询物资信息
+     * @param orderId
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> getMaterial(Integer orderId) {
+        return tmstruckEnfactoryResultMapper.getMaterial(orderId);
+    }
 
 
     /**
@@ -236,4 +245,5 @@ public class TmstruckEnfactoryResultServiceImpl implements ITmstruckEnfactoryRes
         tmstruckEnfactoryResult.setInsertUsername("admin");
         return tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(tmstruckEnfactoryResult);
     }
+
 }

+ 5 - 2
src/main/java/com/steerinfo/dil/service/impl/TmstruckLeaveFactoryResultServiceImpl.java

@@ -79,6 +79,10 @@ public class TmstruckLeaveFactoryResultServiceImpl implements ITmstruckLeaveFact
         return tmstruckLeaveFactoryResultMapper.insertSelective(tmstruckLeaveFactoryResult);
     }
 
+    @Override
+    public Map<String, Object> getTruckFactoryResult(String nu) {
+        return tmstruckLeaveFactoryResultMapper.getTruckFactoryResult(nu);
+    }
 
 
     /**
@@ -93,8 +97,7 @@ public class TmstruckLeaveFactoryResultServiceImpl implements ITmstruckLeaveFact
         Integer orderType = (Integer) map.get("orderTypee");
         switch (orderType){
             case 1:
-
-                break;
+                return tmstruckLeaveFactoryResultMapper.selectAllLeaveFacatoryForSale(map);
             case 2:
 
                 break;

+ 89 - 29
src/main/java/com/steerinfo/dil/service/impl/TmstruckLoadResultServiceImpl.java

@@ -64,7 +64,7 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
             case 3:
             case 4:
                 map.put("status", 0);
-                return tmstruckLoadResultMapper.getXSLoadResult(map);
+                return tmstruckLoadResultMapper.getXSLoadResult(map); //apiId = 221
             case 5:
                 break;
             case 6:
@@ -72,7 +72,7 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
             case 7:
                 break;
             case 8:
-                return tmstruckLoadResultMapper.getCGJKLoadResult(map);
+                return tmstruckLoadResultMapper.getCGJKLoadResult(map); // apiId = 91
             case 9:
 
                 break;
@@ -93,8 +93,7 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
     @Transactional
     public int addCGLoadResult(Map<String,Object> map){
         //通过运输订单号 或 运单Id 查询实绩总表ID  此方法在 进厂作业mapper中
-        Integer totalId = tmstruckEnfactoryResultMapper.selectOrderIdByCpAndOn(map);
-        // 新增装车实绩
+        Integer totalId = tmstruckEnfactoryResultMapper.selectTotalResultIdByCpAndOn(map);
         TmstruckLoadResult tmstruckLoadResult = new TmstruckLoadResult();
         //添加主键Id
         tmstruckLoadResult.setResultId(tmstruckLoadResultMapper.selectMaxId());
@@ -149,46 +148,107 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
     }
 
     /**
-     * 修改销售装车实绩  (如果是多种物资【多拼】,通过物资Id和运输订单号来确定唯一的装车实绩进行修改)
-     * @param map 物资唯一编码  运输订单号
+     * 修改销售钢材装车实绩  (如果是多种物资【多拼】,通过物资Id和运输订单号来确定唯一的装车实绩进行修改)
+     *  materialOnlyCode 物资唯一编码  orderNumber 运输订单号 resultMeasuredTonnage 物资件数
+     *  insertUpdateRemark 备注  platformName 月台名称
+     * @param map
      * @return
      */
     public int addXSLoadResult(Map<String, Object> map){
         //通过物资唯一编码查找物资Id
-        BigDecimal materialId = tmstruckLoadResultMapper.getMaterialIdByMaterialCode((String) map.get("materialCode"));
+        BigDecimal materialId = tmstruckLoadResultMapper.getMaterialIdByMaterialCode((String) map.get("materialOnlyCode"));
         //通过运输订单号查找总实绩ID
-        Integer resultTotalId = tmstruckEnfactoryResultMapper.selectOrderIdByCpAndOn(map);
-        //通过总实绩ID与物资ID查找装车实绩主键ID
+        Integer resultTotalId = tmstruckEnfactoryResultMapper.selectTotalResultIdByCpAndOn(map);
+        //通过总实绩ID与物资ID查找 装车实绩主键ID
         Integer resultId = tmstruckLoadResultMapper.getLoadResultIdByMIdAndTotalId(resultTotalId, materialId.intValue());
         TmstruckLoadResult tmstruckLoadResult = new TmstruckLoadResult();
         tmstruckLoadResult.setStatus(new BigDecimal(0)); // 添加状态0:正常
-        //添加主键
+        //编辑装车实绩主键ID对应的各个字段
         tmstruckLoadResult.setResultId(new BigDecimal(resultId));
-        //新增计量吨位 装车所装的重量
+        // 新增计量吨位 装车所装的重量
         tmstruckLoadResult.setResultMeasuredTonnage(DataChange.dataToBigDecimal(map.get("resultMeasuredTonnage")));
-        //获取扫描实绩最小Id  添加扫描开始时间
-        Integer scanId = tmstruckLoadResultMapper.getMinScanIdByOrderNum(map);
-        Map timeMap = tmstruckLoadResultMapper.selectLoadTimeByResultId(scanId);
-        Date resultLoadStartTime = (Date) timeMap.get("loadTime");
+        // 获取扫描实绩最小Id  添加扫描开始时间
+        map.put("materialId", materialId);
+        Map<String, Object> scanMap = tmstruckLoadResultMapper.getMinScanIdByOrderNum(map);
+        Date resultLoadStartTime = tmstruckLoadResultMapper.selectLoadTimeByResultId(DataChange.dataToBigDecimal(scanMap.get("resultId")));
         tmstruckLoadResult.setResultLoadStartTime(resultLoadStartTime);
-        //添加扫描结束时间
+        // 添加装卸工Id
+        tmstruckLoadResult.setLoaderId(DataChange.dataToBigDecimal(scanMap.get("loadId")));
+        // 添加扫描结束时间 以调用当前接口时间为结束时间
         Date resultLoadEndTime = new Date();
         tmstruckLoadResult.setResultLoadEndTime(resultLoadEndTime);
-        //添加装车实绩时长  ----  计算装车时长
+        // 添加装车实绩时长  ----  计算装车时长
         long time = (resultLoadEndTime.getTime() - resultLoadStartTime.getTime()) / 60000; // 分钟
         tmstruckLoadResult.setResultLoadDuration(new BigDecimal(time));
-        //添加装卸工Id
-        tmstruckLoadResult.setLoaderId(new BigDecimal(1));
-        //添加备注
+        //添加装车标准时长
+        setLoadStandardTimeId((String)map.get("orderNumber"), tmstruckLoadResult);
+        Object platformName = map.get("platformName");
+        if(platformName != null){  // 如果月台不为空则更新月台
+            Integer platformId = utilsService.queryPlatformIdByName((String) platformName);
+            tmstruckLoadResult.setLoadingId(new BigDecimal(platformId));
+        }
+        // 添加备注
         tmstruckLoadResult.setInsertUpdateRemark((String) map.get("insertUpdateRemark"));
-        //新增出库实绩
-//        wmsFeign.insertOutBoundResult(map);
-        return tmstruckLoadResultMapper.insertSelective(tmstruckLoadResult);
+        return tmstruckLoadResultMapper.updateByPrimaryKeySelective(tmstruckLoadResult);
+    }
+
+    /**
+     * 修改销售钢渣、水渣、危化品装车实绩
+     * loadStartTime 装车开始时间   resultMeasuredTonnage 计量吨位
+     * warehouseName  仓库名称      orderNumber 运输订单号   insertUpdateRemark 备注
+     * @param map
+     * @return
+     */
+    public int addXS2LoadResult(Map<String, Object> map){
+        //通过运输订单号 查询 总实绩ID
+        Integer resultTotalId = tmstruckEnfactoryResultMapper.selectTotalResultIdByCpAndOn(map);
+        //查询装车实绩ID
+        Integer resultId = tmstruckLoadResultMapper.getLoadResultIdByMIdAndTotalId(resultTotalId, null);
+        TmstruckLoadResult tmstruckLoadResult = new TmstruckLoadResult();
+        tmstruckLoadResult.setResultId(new BigDecimal(resultId));
+        tmstruckLoadResult.setStatus(new BigDecimal(0));
+        //添加装车开始时间
+        Date loadStartTime = new Date((long) map.get("loadStartTime"));
+        tmstruckLoadResult.setResultLoadStartTime(loadStartTime);
+        //添加装车结束时间(当前时间)
+        Date loadEndTime = new Date();
+        tmstruckLoadResult.setResultLoadEndTime(loadEndTime);
+        //计算装车时长 取分钟
+        long differentTime = (loadEndTime.getTime() - loadStartTime.getTime() / 60000);
+        tmstruckLoadResult.setResultLoadDuration(new BigDecimal(differentTime));
+        //添加计量吨位
+        tmstruckLoadResult.setResultMeasuredTonnage(DataChange.dataToBigDecimal(map.get("resultMeasuredTonnage")));
+        //添加装车标准时长
+        setLoadStandardTimeId((String)map.get("orderNumber"), tmstruckLoadResult);
+        // 更新装车名称
+        Object warehouseName = map.get("warehouseName");
+        if(warehouseName != null){
+            Integer warehouseId = utilsService.queryWarehouseIdByName((String) warehouseName);
+            tmstruckLoadResult.setLoadingId(new BigDecimal(warehouseId));
+        }
+        tmstruckLoadResult.setInsertUpdateRemark((String) map.get("insertUpdateRemark"));
+        return tmstruckLoadResultMapper.updateByPrimaryKeySelective(tmstruckLoadResult);
+    }
+
+    /**
+     * 添加装车标准时长ID
+     * @param orderNumber
+     * @param tmstruckLoadResult
+     */
+    public void setLoadStandardTimeId(String orderNumber, TmstruckLoadResult tmstruckLoadResult){
+        //添加标准时长ID 通过运输订单号查找运输订单类型
+        Integer orderType = tmstruckLoadResultMapper.selectOrderTypeByOrderNumber(orderNumber);
+        if(orderType == 1){
+            tmstruckLoadResult.setLoadStandardTimeId(new BigDecimal(1));
+        }else if(orderType == 2){
+            tmstruckLoadResult.setLoadStandardTimeId(new BigDecimal(2));
+        }else if(orderType == 3){
+            tmstruckLoadResult.setLoadStandardTimeId(new BigDecimal(3));
+        }
     }
 
     /**
      * 修改装车作业
-     *
      * @param tmstruckLoadResult
      * @return
      */
@@ -252,7 +312,9 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
         return tmstruckLoadResultMapper.selectLoadResultForSale(map);
     }
 
-    //内转物流,新增装车实绩
+    /**
+     * 内转物流,新增装车实绩
+     */
     @Override
     public int addLoadResultForconverted(Map<String, Object> map) {
         TmstruckLoadResult tmstruckLoadResult = new TmstruckLoadResult();
@@ -391,12 +453,10 @@ public class TmstruckLoadResultServiceImpl implements ITmstruckLoadResultService
                 Integer maxResultId = (Integer) Collections.max(list);
                 Integer minResultId = (Integer) Collections.min(list);
                 //根据最大id查找扫描时间
-                Map map1 = tmstruckLoadResultMapper.selectLoadTimeByResultId(minResultId);
-                Date startdate = (Date) map1.get("loadTime");
+                Date startdate = tmstruckLoadResultMapper.selectLoadTimeByResultId(new BigDecimal(minResultId));
                 Integer loaderId = tmstruckLoadResultMapper.selecLoadIdByresultId(minResultId);
                 //根据最小id查找扫描时间
-                Map map2 = tmstruckLoadResultMapper.selectLoadTimeByResultId(maxResultId);
-                Date endDate = (Date) map2.get("loadTime");
+                Date endDate =  tmstruckLoadResultMapper.selectLoadTimeByResultId(new BigDecimal(maxResultId));
                 tmstruckLoadResult.setResultLoadStartTime(startdate);
                 tmstruckLoadResult.setResultLoadEndTime(endDate);
                 //开始时间

+ 19 - 5
src/main/java/com/steerinfo/dil/service/impl/TmstruckWeightResultServiceImpl.java

@@ -159,8 +159,11 @@ public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultSer
     @Transactional
     public int addJiMaoResult(Map<String, Object> map) {
         TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
-        //通过传来的运输订单号查询计重实绩
-        map.putAll(tmstruckWeightResultMapper.selectTotalIdByOrderNo((String) map.get("orderNumber")));
+        //通过物资名称和物资规格查询物资Id
+        int materialId = tmstruckWeightResultMapper.getMaterialIdByMaterialNameAndSpe(map);
+        map.put("materialId", materialId);
+        //通过传来的运输订单号与物资ID查询计重实绩
+        map.putAll(tmstruckWeightResultMapper.selectTotalIdByOrderNo(map));
         BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
         tmstruckWeightResult.setWeightTaskResultId(weightTaskResultId);
         //添加毛重
@@ -187,7 +190,7 @@ public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultSer
                 String resultNetWeight = df.format(netWeight);
                 tmstruckWeightResult.setResultNetWeight(new BigDecimal(resultNetWeight));
                 addUpdateRegularField(tmstruckWeightResult); //插入第二次计重时间
-                lineSequence = 5; //设置路段顺序号为5:出厂
+//                lineSequence = 5; //设置路段顺序号为5:出厂
                 break;
             case 2:
                 break;
@@ -217,6 +220,14 @@ public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultSer
         return i +i2;
     }
 
+    /**
+     * 通过物资名称和规格型号查询物资Id
+     * 物资名称:materialName   规格型号:materialSpecification
+     * @return
+     */
+    public int queryMaterialIdByMNameAndCode(Map<String, Object> map){
+        return tmstruckWeightResultMapper.getMaterialIdByMaterialNameAndSpe(map);
+    }
 
 
     /**
@@ -233,8 +244,11 @@ public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultSer
     @Transactional
     public int addJiPiResult(Map<String, Object> map) {
         TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
-        //通过传来的运输订单号查询计重实绩
-        map.putAll(tmstruckWeightResultMapper.selectTotalIdByOrderNo((String) map.get("orderNumber")));
+        //通过物资名称和物资规格查询物资Id
+        int materialId = tmstruckWeightResultMapper.getMaterialIdByMaterialNameAndSpe(map);
+        map.put("materialId", materialId);
+        //通过传来的运输订单号与物资ID查询计重实绩
+        map.putAll(tmstruckWeightResultMapper.selectTotalIdByOrderNo(map));
         BigDecimal resultId = (BigDecimal) map.get("weightTaskResultId");
         tmstruckWeightResult.setWeightTaskResultId(resultId);
         //添加皮重

+ 21 - 0
src/main/java/com/steerinfo/dil/service/impl/UtilsServiceImpl.java

@@ -60,6 +60,16 @@ public class UtilsServiceImpl implements IUtilsService {
         return utilsMapper.updateOrderStatusByOrderIdOrNum(map);
     }
 
+    /**
+     * 通过仓库名称查询仓库Id
+     * @param warehouseName
+     * @return
+     */
+    @Override
+    public Integer queryWarehouseIdByName(String warehouseName) {
+        return utilsMapper.queryWarehouseIdByName(warehouseName);
+    }
+
     /**
      * 用于更新路段顺序号
      * @param map  orderId 运输订单号
@@ -70,4 +80,15 @@ public class UtilsServiceImpl implements IUtilsService {
         return utilsMapper.updateLineSeqByOrderIdOrNum(map);
     }
 
+    /**
+     * 通过月台名称查询月台Id
+     * @param platformName
+     * @return
+     */
+    @Override
+    public Integer queryPlatformIdByName(String platformName) {
+        return utilsMapper.queryPlatformIdByName(platformName);
+    }
+
+
 }

+ 56 - 0
src/main/java/com/steerinfo/route/config/KeyExpiredListener.java

@@ -0,0 +1,56 @@
+package com.steerinfo.route.config;
+
+import com.alibaba.fastjson.JSON;
+import com.steerinfo.route.threeRequest.ZhongJiaoXingLu;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.connection.Message;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.concurrent.TimeUnit;
+
+@Api("redis过期的监听")
+public class KeyExpiredListener extends KeyExpirationEventMessageListener
+{
+    @Value("${redis.prefix.order}")
+    private String prefixOrder;
+    @Value("${redis.prefix.line}")
+    private String prefixLine;
+    @Value("${redis.prefix.suffix}")
+    private String suffix;
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private ZhongJiaoXingLu zhongJiaoXingLu;
+    public KeyExpiredListener(RedisMessageListenerContainer listenerContainer)
+    {
+        super(listenerContainer);
+    }
+    @Override
+    public void onMessage(Message message, byte[] pattern)
+    {
+        //当订单快超过三天,这边就要对路径进行保存了
+        if (message.toString().startsWith(prefixOrder)){
+            String redisJson = (String) redisTemplate.opsForValue().get(message.toString()+suffix);
+            redisTemplate.delete(message.toString()+suffix);
+            HashMap mapValue = JSON.parseObject(redisJson, HashMap.class);
+            String json = zhongJiaoXingLu.visualRoute(mapValue);
+            //设置60天后过期
+            Calendar calendar= Calendar.getInstance();
+            long agoTime= calendar.getTime().getTime();
+            calendar.add(Calendar.MONTH,2);
+            long lateTime= calendar.getTime().getTime();
+            long saveTime=(lateTime-agoTime)/1000;
+            String orderId=message.toString().replace(prefixOrder+":","");
+            if (json!=null){
+                redisTemplate.opsForValue().set(prefixLine+":"+orderId, json, saveTime, TimeUnit.SECONDS);
+            }
+
+        }
+    }
+}

+ 63 - 0
src/main/java/com/steerinfo/route/controller/ZhongJiaoXingLuContoller.java

@@ -0,0 +1,63 @@
+package com.steerinfo.route.controller;
+
+//import com.steerinfo.route.feign.TMSFeign;
+import com.steerinfo.route.threeRequest.ZhongJiaoXingLu;
+import com.steerinfo.route.util.DataConversionTool;
+import com.steerinfo.route.vo.ResultWarn;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("apis")
+public class ZhongJiaoXingLuContoller {
+
+//    偏离预警回调示例:https://xxxx.xxxx.xxx/apis/abnormalLineWarn
+//    停车预警回调示例:https:// xxxx.xxxx.xxx/apis/parkWarn
+//    离线预警回调示例:https:// xxxx.xxxx.xxx/apis/offLineWarn
+    @Autowired
+    private ZhongJiaoXingLu zhongJiaoXingLu;
+
+    //TMSFeign tmsFeign;
+   // @PostMapping("/recordInfo")
+//    public String startTransit(String data) throws Exception {
+//
+//        HashMap<String,Object> mapValue= (HashMap<String, Object>) JSON.parse(data);
+//        //System.out.println(mapValue);
+//        omsFeign.addOmstruckOrder(mapValue);
+//        return "success";
+//    }
+    @PostMapping("/abnormalLineWarn")
+    public String abnormalLineWarn(@RequestParam(value = "data") String data) throws Exception {
+        System.out.println("abnormalLineWarn");
+        ResultWarn resultWarn= (ResultWarn) DataConversionTool.jsonToBean(data, ResultWarn.class);
+        Map<String, Object> map=  DataConversionTool.objectToMap(resultWarn);
+        //tmsFeign.addTransportationAlarm(map);
+        System.out.println("success");
+        return "success";
+    }
+    @PostMapping("/parkWarn")
+    public String parkWarn(@RequestParam(value = "data") String data) throws Exception {
+        System.out.println("parkWarn");
+        ResultWarn resultWarn= (ResultWarn) DataConversionTool.jsonToBean(data, ResultWarn.class);
+        Map<String, Object> map=  DataConversionTool.objectToMap(resultWarn);
+       // tmsFeign.addTransportationAlarm(map);
+        System.out.println("success");
+        return "success";
+    }
+    @PostMapping("/offLineWarn")
+    public String offLineWarn(@RequestParam(value = "data") String data) throws Exception {
+        System.out.println("offLineWarn");
+        ResultWarn resultWarn= (ResultWarn) DataConversionTool.jsonToBean(data, ResultWarn.class);
+        Map<String, Object> map=  DataConversionTool.objectToMap(resultWarn);
+        //tmsFeign.addTransportationAlarm(map);
+        System.out.println("success");
+        return "success";
+    }
+
+
+}

+ 14 - 0
src/main/java/com/steerinfo/route/service/RouteService.java

@@ -0,0 +1,14 @@
+package com.steerinfo.route.service;
+
+import com.steerinfo.route.vo.Map.RouteVo;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+public interface RouteService {
+    CompletableFuture<String> saveRoute(Map mapValue) throws Exception;
+
+    CompletableFuture<RouteVo> fullPathVisualization(HashMap mapValue) throws Exception;
+
+}

+ 286 - 0
src/main/java/com/steerinfo/route/service/impl/RouteServiceImpl.java

@@ -0,0 +1,286 @@
+package com.steerinfo.route.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import com.steerinfo.framework.controller.RESTfulResult;
+import com.steerinfo.route.service.RouteService;
+import com.steerinfo.route.threeRequest.ZhongJiaoXingLu;
+import com.steerinfo.route.util.DataConversionTool;
+import com.steerinfo.route.util.HTTPRequestUtils;
+import com.steerinfo.route.util.LngLonUtil;
+import com.steerinfo.route.vo.FullPathVisualizationTo.ViewVisualization;
+import com.steerinfo.route.vo.Map.Point;
+import com.steerinfo.route.vo.Map.RouteVo;
+import com.steerinfo.route.vo.Map.StartAndEndRoute;
+import com.steerinfo.route.vo.resultJson.SearchPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+@Service(value = "xmsService")
+public class RouteServiceImpl implements RouteService {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private ZhongJiaoXingLu zhongJiaoXingLu;
+    @Value("${str.tengxun.key}")
+    private String key;
+    @Value("${redis.prefix.order}")
+    private String prefixOrder;
+    @Value("${redis.prefix.line}")
+    private String prefixLine;
+    @Value("${redis.prefix.suffix}")
+    private String suffix;
+
+    /**
+     * 必须参数 运输订单号:orderNumber、车牌号:capacityNumber、出厂时间:resultOutGateTime、预警开关:turnOf、发货地址:shipperName、收货地址:receiveAddress
+     * @param mapValue
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public CompletableFuture<String> saveRoute(Map mapValue) throws Exception {
+
+            //获得起点的经纬度和code
+           SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+           Date gateTime = dateFormat.parse(mapValue.get("resultOutGateTime").toString());
+           String searchPointJson = HTTPRequestUtils.sendGet("https://apis.map.qq.com/ws/geocoder/v1/", "address="+ URLEncoder.encode(mapValue.get("shipperName").toString()==null?"四川省达州钢铁集团有限责任公司":mapValue.get("shipperName").toString(),"utf-8")+"&key="+key);
+           SearchPoint searchPoint= (SearchPoint) DataConversionTool.jsonToBean(searchPointJson, SearchPoint.class);
+
+           //创建收货地址    addressProvince 省份、addressDistrict 市区、addressTown 县镇 、addressDeliveryAddress 收货地址、 addressLongitude 收货地址经度、addressLatitude 收货地址纬度
+           String searchPointJson2 = HTTPRequestUtils.sendGet("https://apis.map.qq.com/ws/geocoder/v1/", "address="+ URLEncoder.encode(mapValue.get("receiveAddress").toString()==null?"长沙市":mapValue.get("receiveAddress").toString(),"utf-8")+"&key="+key);
+           SearchPoint searchPoint2= (SearchPoint) DataConversionTool.jsonToBean(searchPointJson2, SearchPoint.class);
+
+           //入网验证
+           String netValidationResult = zhongJiaoXingLu.netValidation(mapValue.get("capacityNumber").toString());
+           Map netValidationMap = (Map) JSONObject.parse(netValidationResult);
+           if (Integer.parseInt(netValidationMap.get("status").toString())==1001&&netValidationMap.get("result").toString().equals("yes")){
+
+               //运单生成之后保存
+               HashMap<String, String> redisMap=new HashMap<>();
+               redisMap.put("startLonlat", searchPoint.getResult().getLocation().getLng().toString().substring(0,9)+","+searchPoint.getResult().getLocation().getLat().toString().substring(0,8));
+               redisMap.put("endLonlat", searchPoint2.getResult().getLocation().getLng().toString().substring(0,9)+","+searchPoint2.getResult().getLocation().getLat().toString().substring(0,8));
+               redisMap.put("vclN", mapValue.get("capacityNumber").toString());
+               redisMap.put("vco","2");
+               SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
+               String qryBtm=mapValue.get("resultOutGateTime").toString();
+
+               //获得两天、23小时、45分钟之后的时间
+               Date parse = simpleDateFormat.parse(qryBtm);
+               //时间添加
+               Calendar calendar = Calendar.getInstance();
+               calendar.setTime(parse);
+               calendar.add(Calendar.DAY_OF_MONTH, 2);
+               calendar.add(Calendar.HOUR_OF_DAY, 23);
+               calendar.add(Calendar.SECOND, 45);
+               //计算时间差
+               long agetime = parse.getTime();
+               long lateTime = calendar.getTimeInMillis();
+               //两天、23小时、45分钟之后的时间差毫秒
+               long reductionTime1=lateTime-agetime;
+               long currentTime = new Date().getTime();
+               //减去已经过的时间(毫秒)
+               long reductionTime2=currentTime-agetime;
+
+               //redis 存储的时间(秒)
+               long saveTime=(reductionTime1-reductionTime2)/1000;
+               redisMap.put("qryBtm", simpleDateFormat.format(simpleDateFormat.parse(qryBtm)));
+               String qryEtm= simpleDateFormat.format(calendar.getTime());
+               redisMap.put("qryEtm",qryEtm );
+               String orderUrl=prefixOrder+":"+mapValue.get("orderNumber").toString();
+               String redisJson= JSON.toJSONString(redisMap);
+               //保存请求中交的参数
+               redisTemplate.opsForValue().set(orderUrl, redisJson, saveTime, TimeUnit.SECONDS);
+               redisTemplate.opsForValue().set(orderUrl+suffix, redisJson);
+               //预警开关判断0开启1关闭
+               if(mapValue.get("turnOf").toString().equals("0")){
+
+                   redisMap.put("startCode",searchPoint.getResult().getAd_info().getAdcode());
+                   redisMap.put("destCode",searchPoint2.getResult().getAd_info().getAdcode());
+                   redisMap.put("qryBtm",parse.toString());
+                   redisMap.put("qryEtm",calendar.getTime().toString());
+                   String subAbnormalLineWarnV2Json = zhongJiaoXingLu.subAbnormalLineWarnV2(redisMap);
+
+                   JSONObject jsonObject = JSONObject.parseObject(subAbnormalLineWarnV2Json);
+
+
+                   if (jsonObject!=null&&jsonObject.get("status").toString().equals(1001+"")) {
+                       HashMap<String, Object> tripMap = new HashMap();
+                       tripMap.put("orderNumber", mapValue.get("orderNumber").toString());
+                       tripMap.put("rid", jsonObject.get("result").toString());
+                       //omsFeign.insertOrderTripId(tripMap);
+                   }
+           }
+           return  CompletableFuture.completedFuture("successful");
+       }
+        return CompletableFuture.completedFuture("fail");
+    }
+
+    /**
+     * 必须参数 orderNumber 运输订单号
+     * 获得运输全路径
+     * @param mapValue
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public CompletableFuture<RouteVo> fullPathVisualization(HashMap mapValue) throws Exception {
+
+        //获得saveRoute()保存在redis请求中交的查询
+        String redisJson = (String) redisTemplate.opsForValue().get(prefixOrder + ":" + mapValue.get("orderNumber"));
+
+        HashMap routeMap = JSON.parseObject(redisJson, HashMap.class);
+        String json="";
+        //判断请求参数是否为空
+        if (routeMap!=null)
+        {
+            //获得路径
+            json =zhongJiaoXingLu.visualRoute(routeMap);
+        //可能中交请求参数已经过期、已经成了路线、可以直接获取路径
+        }else{
+
+            json  = (String) redisTemplate.opsForValue().get(prefixLine + ":" + mapValue.get("orderNumber"));
+            //当redis获取不到参数的备选方案从数据库获取
+            if (json==null){
+                HashMap<String, Object> hashMap=new HashMap();
+                hashMap.put("orderNumber",mapValue.get("orderNumber"));
+                //从数据库获取参数
+                RESTfulResult startAndEndCapacityNumber =null; //tmsFeign.getStartAndEndCapacityNumber(hashMap);
+                HashMap<String, Object> resultMap= (HashMap<String, Object>) startAndEndCapacityNumber.getData();
+                //入网验证
+                String netValidationResult = zhongJiaoXingLu.netValidation(resultMap.get("capacityNumber").toString());
+                Map netValidationMap = (Map) JSONObject.parse(netValidationResult);
+                if (Integer.parseInt(netValidationMap.get("status").toString())==1001&&netValidationMap.get("result").toString().equals("yes")){
+                    String searchPointJson = HTTPRequestUtils.sendGet("https://apis.map.qq.com/ws/geocoder/v1/", "address="+ URLEncoder.encode(resultMap.get("shipperName").toString(),"utf-8")+"&key="+key);
+                    SearchPoint searchPoint= (SearchPoint) DataConversionTool.jsonToBean(searchPointJson, SearchPoint.class);
+                    String searchPointJson2 = HTTPRequestUtils.sendGet("https://apis.map.qq.com/ws/geocoder/v1/", "address="+ URLEncoder.encode(resultMap.get("addressDeliveryAddress").toString(),"utf-8")+"&key="+key);
+                    SearchPoint searchPoint2= (SearchPoint) DataConversionTool.jsonToBean(searchPointJson2, SearchPoint.class);
+                    //运单生成之后保存
+                    HashMap<String, String> redisMap=new HashMap<>();
+                    redisMap.put("startLonlat", searchPoint.getResult().getLocation().getLng().toString().substring(0,9)+","+searchPoint.getResult().getLocation().getLat().toString().substring(0,8));
+                    redisMap.put("endLonlat", searchPoint2.getResult().getLocation().getLng().toString().substring(0,9)+","+searchPoint2.getResult().getLocation().getLat().toString().substring(0,8));
+                    redisMap.put("vclN", resultMap.get("capacityNumber").toString());
+                    redisMap.put("vco","2");
+                    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
+                    String qryBtm=resultMap.get("resultOutGateTime").toString();
+
+                    //获得两天、23小时、45分钟之后的时间
+                    Date parse = simpleDateFormat.parse(qryBtm);
+                    //时间添加
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(parse);
+                    calendar.add(Calendar.DAY_OF_MONTH, 2);
+                    calendar.add(Calendar.HOUR_OF_DAY, 23);
+                    calendar.add(Calendar.SECOND, 45);
+                    //计算时间差
+                    long agetime = parse.getTime();
+                    long lateTime = calendar.getTimeInMillis();
+                    //两天、23小时、45分钟之后的时间差毫秒
+                    long reductionTime1=lateTime-agetime;
+                    long currentTime = new Date().getTime();
+                    //减去已经过的时间(毫秒)
+                    long reductionTime2=currentTime-agetime;
+
+                    //redis 存储的时间(秒)
+                    long saveTime=(reductionTime1-reductionTime2)/1000;
+                    redisMap.put("qryBtm", simpleDateFormat.format(simpleDateFormat.parse(qryBtm)));
+                    String qryEtm= simpleDateFormat.format(calendar.getTime());
+                    redisMap.put("qryEtm",qryEtm );
+                    if (saveTime>1800){
+                        String orderUrl=prefixOrder+":"+mapValue.get("orderNumber").toString();
+
+                        String redisStr= JSON.toJSONString(redisMap);
+                        redisTemplate.opsForValue().set(orderUrl, redisStr, saveTime, TimeUnit.SECONDS);
+
+                    }else {
+
+                        //设置60天后过期
+                        Calendar calendar2= Calendar.getInstance();
+                        long agoTime= calendar2.getTime().getTime();
+                        calendar2.add(Calendar.MONTH,2);
+                        long late= calendar2.getTime().getTime();
+                        long save=(lateTime-agoTime)/1000;
+
+                        json = zhongJiaoXingLu.visualRoute(redisMap);
+                        redisTemplate.opsForValue().set(prefixLine+":"+mapValue.get("orderNumber").toString(), json, save, TimeUnit.SECONDS);
+                    }
+
+                }
+            }
+        }
+        //获得路线之后封装成路线对象
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        if (json!=null&&jsonObject.get("status").toString().equals(1001+"")){
+            //初始开始链路和结束线路、开始点、结束点、当前点的集合
+            List<StartAndEndRoute> startAndEndRouteList=new ArrayList<>();
+            //一条路线,开始链路和结束线路、开始点、结束点、当前点
+            StartAndEndRoute startAndEndRoute=new StartAndEndRoute();
+
+            ViewVisualization to= (ViewVisualization) DataConversionTool.jsonToBean(json,ViewVisualization.class);
+            //初始化vo对象
+            RouteVo vo=new RouteVo();
+            //当前所在的点
+            if ((!StringUtils.isEmpty(to.getResult().getLat()))&& (!StringUtils.isEmpty(to.getResult().getLon()))){
+                double[] centerpoint = LngLonUtil.gps84_To_Gcj02((Double.valueOf(to.getResult().getLat()) / 600000), (Double.valueOf(to.getResult().getLon()) / 600000));
+                //当前所在的点
+                Point currentPoint=new Point();
+                currentPoint.setLat(centerpoint[0]+"");
+                currentPoint.setLon(centerpoint[1]+"");
+                startAndEndRoute.setCurrentPoint(currentPoint);
+            }
+            //当前所在地名称
+            startAndEndRoute.setCurrentPointName(to.getResult().getAdr());
+            //初始已行驶轨迹集合
+            if (to.getResult().getRunRoute()!=null){
+                List<Point> routes = to.getResult().getRunRoute().stream().map(item->{
+                    Point er=new Point();
+                    double[] points = LngLonUtil.gps84_To_Gcj02((Double.valueOf(item.getLat()) / 600000), (Double.valueOf(item.getLon()) / 600000));
+                    er.setLat(points[0]+"");
+                    er.setLon(points[1]+"");
+                    return  er;
+                }).collect(Collectors.toList());
+                //初始化起始点,已经经过路段的第一个点
+                startAndEndRoute.setStartPoint(routes.get(0));
+                //已经完成路线点集合
+                startAndEndRoute.setRunRoute(routes);
+            }
+            //预估轨迹
+            if (to.getResult().getEstimateRoute()!=null){
+                List<Point> estimateRoute= to.getResult().getEstimateRoute().stream().map(item->{
+                    Point er=new Point();
+                    double[] points = LngLonUtil.gps84_To_Gcj02((Double.valueOf(item.getLat()) / 600000), (Double.valueOf(item.getLon()) / 600000));
+                    er.setLat(points[0]+"");
+                    er.setLon(points[1]+"");
+                    return  er;
+                }).collect(Collectors.toList());
+                //结束点
+                startAndEndRoute.setEndPoint(estimateRoute.get(estimateRoute.size()-1));
+                //预估轨迹赋值
+                startAndEndRoute.setEstimateRoute(estimateRoute);
+            }
+            //当前所行驶历程数
+            String mil=to.getResult().getRunDistance()+"km";
+            startAndEndRoute.setMiled(mil);
+            startAndEndRouteList.add(startAndEndRoute);
+            vo.setStartAndEndRoutes(startAndEndRouteList);
+            //
+            //设置返回值对象
+            return CompletableFuture.completedFuture(vo) ;
+        }else {
+            return  CompletableFuture.completedFuture(new RouteVo());
+        }
+
+    }
+
+}

+ 268 - 0
src/main/java/com/steerinfo/route/threeRequest/ZhongJiaoXingLu.java

@@ -0,0 +1,268 @@
+package com.steerinfo.route.threeRequest;
+
+import com.alibaba.fastjson.JSONObject;
+import com.openapi.sdk.service.DataExchangeService;
+import com.steerinfo.route.util.DataConversionTool;
+import com.steerinfo.route.util.LngLonUtil;
+import com.steerinfo.route.vo.FullPathVisualizationTo.ViewVisualization;
+import com.steerinfo.route.vo.Map.Point;
+import com.steerinfo.route.vo.Map.RouteVo;
+import com.steerinfo.route.vo.Map.StartAndEndRoute;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+@Component
+public class ZhongJiaoXingLu {
+
+
+    @Value("${str.ZhongJiaoXingLu.parkMins}")
+    private String parkMins;
+    @Value("${str.ZhongJiaoXingLu.abnMins}")
+    private String abnMins;
+    @Value("${str.ZhongJiaoXingLu.outMins}")
+    private String outMins;
+    @Value("${str.ZhongJiaoXingLu.type}")
+    private String type;
+    private String token="238684c3-1817-4e5e-8695-a8c85f8fd231";
+    @Value("${str.ZhongJiaoXingLu.cid}")
+    private String cid;
+    @Value("${str.ZhongJiaoXingLu.srt}")
+    private String srt;
+    @Value("${str.ZhongJiaoXingLu.user}")
+    private String user;
+    @Value("${str.ZhongJiaoXingLu.pwd}")
+    private String pwd;
+    //"238684c3-1817-4e5e-8695-a8c85f8fd231"
+    //"2667ca1f-e003-4822-b4c1-f25561c27f31"
+    //"3dbdc182-b235-4c33-be30-88c0fe8999c5"
+    public String visualRoute(HashMap routeMap) {
+        try {
+            //登陆之后返回的token:d21661ca-e0fe-4934-866a-7d78a0756bd4
+            Map<String, String> map = new HashMap<String, String>(3);
+            map.put("token", token);
+            map.put("cid", cid);
+            map.put("srt", srt);
+            map.put("startLonlat", routeMap.get("startLonlat").toString());
+            map.put("endLonlat", routeMap.get("endLonlat").toString());
+            map.put("vclN", routeMap.get("vclN").toString());
+            map.put("vco",routeMap.get("vco").toString());
+            map.put("qryBtm", routeMap.get("qryBtm").toString());
+            map.put("qryEtm", routeMap.get("qryEtm").toString());
+            map.put("timeNearby", "30");
+            String url = "https://openapi.sinoiov.cn/save/apis/visualRoute";
+            DataExchangeService des = new DataExchangeService(5000, 8000);
+
+            // 通过 https 方式调用,此方法内部会使用私钥生成签名参数 sign,私钥不会发送
+            String res = des.postHttps(url, map);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            if (jsonObject.get("status").toString().equals(1016+"")){
+                login();
+                return visualRoute( routeMap);
+            }
+            return res;
+        } catch (Exception e) {
+            System.out.println("e:" + e.getMessage());
+        }
+        return null;
+    }
+    //String startLonlat,String endLonlat,String vclN,String vco,String qryBtm,String qryEtm
+    public String subAbnormalLineWarnV2(HashMap routeMap ) {
+        try {
+            //登陆之后返回的token:d21661ca-e0fe-4934-866a-7d78a0756bd4
+            Map<String, String> map = new HashMap<String, String>(3);
+            map.put("token", token);
+            map.put("cid", cid);
+            map.put("srt", srt);
+            map.put("vclN", routeMap.get("vclN").toString());
+            map.put("vco","2");
+            map.put("startCode", routeMap.get("startCode").toString());
+            map.put("destCode", routeMap.get("destCode").toString());
+            map.put("startCoor", routeMap.get("startLonlat").toString());
+            map.put("destCoor", routeMap.get("endLonlat").toString());
+            //把字符串转换成CST日期类型
+            map.put("stime", cstToGMT(routeMap.get("qryBtm").toString()).toString());
+            map.put("etime", cstToGMT(routeMap.get("qryEtm").toString()).toString());
+            map.put("parkMins", parkMins);
+            map.put("outMins", outMins);
+            map.put("abnMins", abnMins);
+            map.put("type", type);
+            String url = "https://openapi.sinoiov.cn/save/apis/subAbnormalLineWarnV2";
+            DataExchangeService des = new DataExchangeService(5000, 8000);
+
+            // 通过 https 方式调用,此方法内部会使用私钥生成签名参数 sign,私钥不会发送
+            System.out.println("map");
+            System.out.println(map);
+            String res = des.postHttps(url, map);
+            System.out.println("res");
+            System.out.println(res);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            if (jsonObject.get("status").toString().equals(1016+"")){
+                login();
+                return subAbnormalLineWarnV2(routeMap);
+            }
+
+            return res;
+        } catch (Exception e) {
+            System.out.println("e:" + e.getMessage());
+        }
+        return null;
+    }
+
+    public String cstToGMT(String data) throws InterruptedException, ParseException {
+
+        SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
+        SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
+        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 设置时区为GMT  +8为北京时间东八区
+        String str = String.valueOf(sdf1.parse(data).getTime()-60000);
+        return str;
+    }
+    public String netValidation(String vclN) {
+        try {
+            //登陆之后返回的token:d21661ca-e0fe-4934-866a-7d78a0756bd4
+            Map<String, String> map = new HashMap<String, String>(4);
+            map.put("token", token);
+            map.put("cid", cid);
+            map.put("srt", srt);
+            map.put("vclN", vclN);
+            String url = "https://openapi.sinoiov.cn/save/apis/checkTruckExist";
+            DataExchangeService des = new DataExchangeService(5000, 8000);
+
+            // 通过 https 方式调用,此方法内部会使用私钥生成签名参数 sign,私钥不会发送
+            String res = des.postHttps(url, map);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            if (jsonObject.get("status").toString().equals(1016+"")){
+                login();
+                return netValidation(vclN);
+            }
+            return res;
+        } catch (Exception e) {
+            System.out.println("e:" + e.getMessage());
+        }
+        return null;
+    }
+    public  void login() {
+        try {
+            Map<String, String> map = new HashMap<String, String>(4);
+            map.put("user", user);
+            map.put("pwd", pwd);
+            map.put("cid", cid);
+            map.put("srt", srt);
+            String url = "https://openapi.sinoiov.cn/save/apis/login/";
+            DataExchangeService des = new DataExchangeService(5000, 8000);
+            // 通过 https 方式调用,此方法内部会使用私钥生成签名参数 sign,私钥不会发送
+            String res = des.postHttps(url, map);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            this.token=jsonObject.get("result").toString();
+            //System.out.println("返回:"+ res);
+        } catch (Exception e) {
+            System.out.println("e:" + e.getMessage());
+        }
+    }
+    public CompletableFuture<RouteVo> fullPathVisualization(String json) throws Exception {
+        //初始开始链路和结束线路、开始点、结束点、当前点的集合
+        List<StartAndEndRoute> startAndEndRouteList=new ArrayList<>();
+        //一条路线,开始链路和结束线路、开始点、结束点、当前点
+        StartAndEndRoute startAndEndRoute=new StartAndEndRoute();
+        // String startLonlat,String endLonlat,String vclN,String vco,String qryBtm,String qryEtm
+//        map.put("vclN", "陕YH0009");
+//        map.put("vco","2");
+//        map.put("qryBtm", "2021-10-06 22:10:10");
+//        map.put("qryEtm", "2021-10-07 22:10:10");
+        //String json =ZhongJiaoXingLu.visualRoute("","","陕YH0009","2","2021-10-06 22:10:10","2021-10-07 22:10:10");
+        ViewVisualization to= (ViewVisualization) DataConversionTool.jsonToBean(json,ViewVisualization.class);
+        //初始化vo对象
+        RouteVo vo=new RouteVo();
+        //当前所在的点
+        if ((!StringUtils.isEmpty(to.getResult().getLat()))&& (!StringUtils.isEmpty(to.getResult().getLon()))){
+            double[] centerpoint = LngLonUtil.gps84_To_Gcj02((Double.valueOf(to.getResult().getLat()) / 600000), (Double.valueOf(to.getResult().getLon()) / 600000));
+            //当前所在的点
+            Point currentPoint=new Point();
+            currentPoint.setLat(centerpoint[0]+"");
+            currentPoint.setLon(centerpoint[1]+"");
+            startAndEndRoute.setCurrentPoint(currentPoint);
+        }
+        //当前所在地名称
+        startAndEndRoute.setCurrentPointName(to.getResult().getAdr());
+        //初始已行驶轨迹集合
+        if (to.getResult().getRunRoute()!=null){
+            List<Point> routes = to.getResult().getRunRoute().stream().map(item->{
+                Point er=new Point();
+                double[] points = LngLonUtil.gps84_To_Gcj02((Double.valueOf(item.getLat()) / 600000), (Double.valueOf(item.getLon()) / 600000));
+                er.setLat(points[0]+"");
+                er.setLon(points[1]+"");
+                return  er;
+            }).collect(Collectors.toList());
+            //初始化起始点,已经经过路段的第一个点
+            startAndEndRoute.setStartPoint(routes.get(0));
+            //已经完成路线点集合
+            startAndEndRoute.setRunRoute(routes);
+        }
+        //预估轨迹
+        if (to.getResult().getEstimateRoute()!=null){
+            List<Point> estimateRoute= to.getResult().getEstimateRoute().stream().map(item->{
+                Point er=new Point();
+                double[] points = LngLonUtil.gps84_To_Gcj02((Double.valueOf(item.getLat()) / 600000), (Double.valueOf(item.getLon()) / 600000));
+                er.setLat(points[0]+"");
+                er.setLon(points[1]+"");
+                return  er;
+            }).collect(Collectors.toList());
+            //结束点
+            startAndEndRoute.setEndPoint(estimateRoute.get(estimateRoute.size()-1));
+            //预估轨迹赋值
+            startAndEndRoute.setEstimateRoute(estimateRoute);
+        }
+        //当前所行驶历程数
+        String mil=to.getResult().getRunRoute().get(to.getResult().getRunRoute().size()-1).getMil();
+        startAndEndRoute.setMiled(mil);
+        startAndEndRouteList.add(startAndEndRoute);
+        vo.setStartAndEndRoutes(startAndEndRouteList);
+        //
+        //设置返回值对象
+        return CompletableFuture.completedFuture(vo) ;
+    }
+
+
+
+
+
+    public String getCid() {
+        return cid;
+    }
+
+    public  void setCid(String cid) {
+        this.cid = cid;
+    }
+
+    public String getSrt() {
+        return srt;
+    }
+
+    public  void setSrt(String srt) {
+        this.srt = srt;
+    }
+
+    public String getUser() {
+        return user;
+    }
+
+    public  void setUser(String user) {
+        this.user = user;
+    }
+
+    public String getPwd() {
+        return pwd;
+    }
+
+    public  void setPwd(String pwd) {
+        this.pwd = pwd;
+    }
+
+
+}

+ 220 - 0
src/main/java/com/steerinfo/route/util/DataConversionTool.java

@@ -0,0 +1,220 @@
+package com.steerinfo.route.util;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+//@Auther Tiroble
+//@meil 2439003195@qq.com
+public class DataConversionTool {
+
+
+    /**
+     *
+     * @param json
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    public static Object jsonToBean(Object json, Object type) throws Exception {
+        try{
+            JSONObject jsonObject=null;
+            //首先需要判断是否是json字符串如果是解析为jsonObject如果是JsonObject就直接赋值给jsonObject
+            if (json instanceof String){
+                //将json转为JSONOject
+                jsonObject= JSONObject.parseObject(json.toString());
+            }else {
+                jsonObject= (JSONObject) json;
+            }
+            //获得Class对象
+            //Class clazz=type.getClass().getDeclaringClass();
+            Class clazz= (Class) type;
+            //通过空参构造器创建实例
+            Constructor constructor = clazz.getDeclaredConstructor();
+            constructor.setAccessible(true);
+            Object classObject =  constructor.newInstance();
+            //获得对象的所有属性名
+            Field[] fields = clazz.getDeclaredFields();
+            //遍历属性集合
+            for (int i=0;i<fields.length;i++){
+                Field field=fields[i];
+                //开启权限
+                field.setAccessible(true);
+                //判断是否保护属性值
+                if(jsonObject.containsKey(field.getName())){
+                    Object objectValue =jsonObject.get(field.getName());
+                    //判断jsonObject的item是否是String或者Integer,是简单类型直接赋值
+                    if ((objectValue instanceof Long)||(objectValue instanceof String)||(objectValue instanceof Integer)||(objectValue instanceof Boolean)||(objectValue instanceof BigDecimal)){
+                        //进行数据判断
+                        if (field.getType()== BigDecimal.class){
+                            field.set(classObject,new BigDecimal(objectValue.toString()));
+                        } else if (field.getType()== Short.class){
+                            field.set(classObject, Short.parseShort(objectValue.toString()));
+                        }else if (field.getType()== Date.class){
+                            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                            Date time = formatter.parse(objectValue.toString());
+                            field.set(classObject,time);
+                        }
+                        else {
+                            field.set(classObject,objectValue);
+                        }
+                    }
+                    //集合类型类型
+                    else if(objectValue instanceof JSONArray){
+                        Iterator<Object> iterator = ((JSONArray) objectValue).iterator();
+                        //这里使用的是arryList接收
+                        List list=new ArrayList<>();
+                        // 如果是List类型,得到其Generic的类型
+                        Type genericType = field.getGenericType();
+                        //如果是空的
+                        if(genericType == null) {
+                            genericType= Object.class;
+                        }
+                        // 如果是泛型参数的类型
+                        else if(genericType instanceof ParameterizedType){
+                            ParameterizedType pt = (ParameterizedType) genericType;
+                            //得到泛型里的class类型对象
+                            Class<?> genericClazz = (Class<?>)pt.getActualTypeArguments()[0];
+                            genericType=genericClazz;
+                        }
+                        while (iterator.hasNext()){
+                            Object nextObject = iterator.next();
+                            Object fieldValue =  jsonToBean(nextObject, genericType);
+                            list.add(fieldValue);
+                        }
+                        field.set(classObject,list);
+                    }
+                    //如果不是再判断是否是JSONOArray,复杂数据类型
+                    else{
+                        //如果是JSONObject需要判断是否是引用类型,如果是引用类型就还需要将值转为对应类型
+                        Object fieldValue =  jsonToBean(objectValue, field.getType());
+                        field.set(classObject,fieldValue);
+                    }
+
+                }
+
+
+            }
+
+            return classObject;
+        }catch (Exception ex){
+            throw ex;
+        }
+    }
+
+    /**
+     * 将Object对象里面的属性和值转化成Map对象
+     *
+     * @param obj
+     * @return
+     * @throws IllegalAccessException
+     */
+    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
+        Map<String, Object> map = new HashMap<String, Object>();
+        Class<?> clazz = obj.getClass();
+        for (Field field : clazz.getDeclaredFields()) {
+            field.setAccessible(true);
+            String fieldName = field.getName();
+            Object value = field.get(obj);
+            map.put(fieldName, value);
+        }
+        return map;
+    }
+    /**
+     *
+     * @param map
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    public static Object mapToBean(Map map, Object type) throws Exception {
+
+        try{
+            //获得Class对象
+            //Class clazz=type.getClass().getDeclaringClass();
+            Class clazz= (Class) type;
+            //通过空参构造器创建实例
+            Constructor constructor = clazz.getDeclaredConstructor();
+            constructor.setAccessible(true);
+            Object classObject =  constructor.newInstance();
+            //获得对象的所有属性名
+            Field[] fields = clazz.getDeclaredFields();
+            //遍历属性集合
+            for (int i=0;i<fields.length;i++){
+                Field field=fields[i];
+                //开启权限
+                field.setAccessible(true);
+                //判断是否保护属性值
+                if(map.containsKey(field.getName())){
+                    Object objectValue =map.get(field.getName());
+                    //判断jsonObject的item是否是String或者Integer,是简单类型直接赋值
+                    if ((objectValue instanceof String)||(objectValue instanceof Integer)||(objectValue instanceof Boolean)){
+                        //进行数据判断
+                        if (field.getType()== BigDecimal.class){
+                            field.set(classObject,new BigDecimal(objectValue.toString()));
+                        } else if (field.getType()== Short.class){
+                            if(objectValue.toString()=="0.00"){
+                                field.set(classObject,0);
+                            }
+                            field.set(classObject, Short.parseShort(objectValue.toString()));
+                        }else if (field.getType()== Date.class){
+                            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                            Date time = formatter.parse(objectValue.toString());
+                            field.set(classObject,time);
+                        }
+                        else {
+                            field.set(classObject,objectValue);
+                        }
+
+                    }
+                    //集合类型类型
+                    else if(objectValue instanceof List){
+                        Iterator<Object> iterator = ((List)objectValue).iterator();
+                        //这里使用的是arryList接收
+                        List list=new ArrayList<>();
+                        // 如果是List类型,得到其Generic的类型
+                        Type genericType = field.getGenericType();
+                        //如果是空的
+                        if(genericType == null) {
+                            genericType= Object.class;
+                        }
+                        // 如果是泛型参数的类型
+                        else if(genericType instanceof ParameterizedType){
+                            ParameterizedType pt = (ParameterizedType) genericType;
+                            //得到泛型里的class类型对象
+                            Class<?> genericClazz = (Class<?>)pt.getActualTypeArguments()[0];
+                            genericType=genericClazz;
+                        }
+                        while (iterator.hasNext()){
+                            Object nextObject = iterator.next();
+                            Object fieldValue =  jsonToBean(nextObject, genericType);
+                            list.add(fieldValue);
+                        }
+                        field.set(classObject,list);
+                    }
+                    //如果不是再判断是否是JSONOArray,复杂数据类型
+                    else{
+                        //如果是JSONObject需要判断是否是引用类型,如果是引用类型就还需要将值转为对应类型
+                        Object fieldValue =  jsonToBean(objectValue, field.getType());
+                        field.set(classObject,fieldValue);
+                    }
+
+                }
+
+
+            }
+
+            return classObject;
+        }catch (Exception ex){
+            throw ex;
+        }
+
+    }
+}

+ 136 - 0
src/main/java/com/steerinfo/route/util/HTTPRequestUtils.java

@@ -0,0 +1,136 @@
+package com.steerinfo.route.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+
+public class HTTPRequestUtils {
+    /**
+     * 向指定URL发送GET方法的请求
+     * @param url:发送请求的URL
+     * @param param:请求参数,请求参数应该是 name1=value1&name2=value2&name3=value3 的形式。
+     * @return String[result]:所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param) {
+        String result = "";
+        BufferedReader in = null;
+        try {
+            String urlNameString = url + "?" + param;
+            URL realUrl = new URL(urlNameString);
+
+            // 打开和URL之间的连接
+            URLConnection connection = realUrl.openConnection();
+
+            // 设置通用的请求属性
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+
+            // 建立实际的连接
+            connection.connect();
+
+            // 获取所有响应头字段
+            Map<String, List<String>> map = connection.getHeaderFields();
+
+            // 遍历所有的响应头字段
+//            for (String key : map.keySet()) {
+//                System.out.println(key + "--->" + map.get(key));
+//            }
+
+            // 定义 BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(new InputStreamReader(
+                    connection.getInputStream(),"utf-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result += line;
+            }
+            System.out.println("result");
+            System.out.println(result);
+        } catch (Exception e) {
+            System.out.println("发送GET请求出现异常!" + e);
+            e.printStackTrace();
+        }
+
+        // 使用finally块来关闭输入流
+        finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (Exception e2) {
+                e2.printStackTrace();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url:发送请求的 URL
+     * @param param:请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return String[result]:所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param) {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        String result = "";
+        try {
+            URL realUrl = new URL(url);
+
+            // 打开和URL之间的连接
+            URLConnection conn = realUrl.openConnection();
+
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+
+            // 发送POST请求必须设置如下两行
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            // 获取URLConnection对象对应的输出流
+            out = new PrintWriter(conn.getOutputStream());
+
+            // 发送请求参数
+            out.print(param);
+
+            // flush输出流的缓冲
+            out.flush();
+
+            // 定义BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream()));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result += line;
+            }
+        } catch (Exception e) {
+            System.out.println("发送 POST 请求出现异常!"+e);
+            e.printStackTrace();
+        }
+
+        //使用finally块来关闭输出流、输入流
+        finally{
+            try{
+                if(out!=null){
+                    out.close();
+                }
+                if(in!=null){
+                    in.close();
+                }
+            }
+            catch(IOException ex){
+                ex.printStackTrace();
+            }
+        }
+        return result;
+    }
+
+}

+ 157 - 0
src/main/java/com/steerinfo/route/util/LngLonUtil.java

@@ -0,0 +1,157 @@
+package com.steerinfo.route.util;
+
+/**
+ * GPS84、高德、百度、腾讯编码互转
+ */
+public class LngLonUtil {
+
+    public static double pi = 3.1415926535897932384626;
+    public static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
+    public static double a = 6378245.0;
+    public static double ee = 0.00669342162296594323;
+
+    public static double transformLat(double x, double y) {
+        double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
+        ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
+        ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
+        ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
+        return ret;
+    }
+
+    public static double transformLon(double x, double y) {
+        double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
+        ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
+        ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
+        ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
+        return ret;
+    }
+    public static double[] transform(double lat, double lon) {
+        if (outOfChina(lat, lon)) {
+            return new double[]{lat,lon};
+        }
+        double dLat = transformLat(lon - 105.0, lat - 35.0);
+        double dLon = transformLon(lon - 105.0, lat - 35.0);
+        double radLat = lat / 180.0 * pi;
+        double magic = Math.sin(radLat);
+        magic = 1 - ee * magic * magic;
+        double sqrtMagic = Math.sqrt(magic);
+        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
+        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
+        double mgLat = lat + dLat;
+        double mgLon = lon + dLon;
+        return new double[]{mgLat,mgLon};
+    }
+    /**
+     * 判断是否在中国
+     * @param lat
+     * @param lon
+     * @return
+     */
+    public static boolean outOfChina(double lat, double lon) {
+        if (lon < 72.004 || lon > 137.8347)
+            return true;
+        if (lat < 0.8293 || lat > 55.8271)
+            return true;
+        return false;
+    }
+    /**
+     * 84 ==》 高德/腾讯
+     * @param lat
+     * @param lon
+     * @return
+     */
+    public static double[] gps84_To_Gcj02(double lat, double lon) {
+        if (outOfChina(lat, lon)) {
+            return new double[]{lat,lon};
+        }
+        double dLat = transformLat(lon - 105.0, lat - 35.0);
+        double dLon = transformLon(lon - 105.0, lat - 35.0);
+        double radLat = lat / 180.0 * pi;
+        double magic = Math.sin(radLat);
+        magic = 1 - ee * magic * magic;
+        double sqrtMagic = Math.sqrt(magic);
+        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
+        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
+        double mgLat = lat + dLat;
+        double mgLon = lon + dLon;
+        return new double[]{mgLat, mgLon};
+    }
+
+
+    /**
+     * 高德/腾讯 ==》 84
+     * @param lon * @param lat * @return
+     * */
+    public static double[] gcj02_To_Gps84(double lat, double lon) {
+        double[] gps = transform(lat, lon);
+        double lontitude = lon * 2 - gps[1];
+        double latitude = lat * 2 - gps[0];
+        return new double[]{latitude, lontitude};
+    }
+    /**
+     * 高德/腾讯 == 》 百度
+     * @param lat
+     * @param lon
+     */
+    public static double[] gcj02_To_Bd09(double lat, double lon) {
+        double x = lon, y = lat;
+        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
+        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
+        double tempLon = z * Math.cos(theta) + 0.0065;
+        double tempLat = z * Math.sin(theta) + 0.006;
+        double[] gps = {tempLat,tempLon};
+        return gps;
+    }
+
+    /**
+     * 百度 == 》 高德/腾讯
+     * @param lat
+     * @param lon
+     */
+    public static double[] bd09_To_Gcj02(double lat, double lon) {
+        double x = lon - 0.0065, y = lat - 0.006;
+        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
+        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
+        double tempLon = z * Math.cos(theta);
+        double tempLat = z * Math.sin(theta);
+        double[] gps = {tempLat,tempLon};
+        return gps;
+    }
+
+    /**
+     * 84 == 》 百度
+     * @param lat
+     * @param lon
+     * @return
+     */
+    public static double[] gps84_To_bd09(double lat,double lon){
+        double[] gcj02 = gps84_To_Gcj02(lat,lon);
+        double[] bd09 = gcj02_To_Bd09(gcj02[0],gcj02[1]);
+        return bd09;
+    }
+
+    /**
+     * 百度 == 》 84
+     * @param lat
+     * @param lon
+     * @return
+     */
+    public static double[] bd09_To_gps84(double lat,double lon){
+        double[] gcj02 = bd09_To_Gcj02(lat, lon);
+        double[] gps84 = gcj02_To_Gps84(gcj02[0], gcj02[1]);
+        //保留小数点后六位
+        gps84[0] = retain6(gps84[0]);
+        gps84[1] = retain6(gps84[1]);
+        return gps84;
+    }
+
+    /*
+     * 保留小数点后六位
+     * @param num
+     * @return
+     */
+    private static double retain6(double num){
+        String result = String.format("%.6f", num);
+        return Double.valueOf(result);
+    }
+}

+ 153 - 0
src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/Result.java

@@ -0,0 +1,153 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.FullPathVisualizationTo;
+import com.steerinfo.route.vo.Map.Point;
+
+import java.util.List;
+
+/**
+ * Auto-generated: 2021-10-16 11:56:24
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Result {
+
+    private String adr;
+    private String city;
+    private String country;
+    private String drc;
+    private String estimateArriveTime;
+    private List<Point> estimateRoute;
+    private String lat;
+    private String lon;
+    private String mil;
+    private boolean offlineState;
+    private String offlineTime;
+    private String province;
+    private String remainDistance;
+    private String runDistance;
+    private List<RunRoute> runRoute;
+    private String spd;
+    private String utc;
+    public void setAdr(String adr) {
+         this.adr = adr;
+     }
+     public String getAdr() {
+         return adr;
+     }
+
+    public void setCity(String city) {
+         this.city = city;
+     }
+     public String getCity() {
+         return city;
+     }
+
+    public void setCountry(String country) {
+         this.country = country;
+     }
+     public String getCountry() {
+         return country;
+     }
+
+    public void setDrc(String drc) {
+         this.drc = drc;
+     }
+     public String getDrc() {
+         return drc;
+     }
+
+    public void setEstimateArriveTime(String estimateArriveTime) {
+         this.estimateArriveTime = estimateArriveTime;
+     }
+     public String getEstimateArriveTime() {
+         return estimateArriveTime;
+     }
+
+    public void setEstimateRoute(List<Point> estimateRoute) {
+         this.estimateRoute = estimateRoute;
+     }
+     public List<Point> getEstimateRoute() {
+         return estimateRoute;
+     }
+
+    public void setLat(String lat) {
+         this.lat = lat;
+     }
+     public String getLat() {
+         return lat;
+     }
+
+    public void setLon(String lon) {
+         this.lon = lon;
+     }
+     public String getLon() {
+         return lon;
+     }
+
+    public void setMil(String mil) {
+         this.mil = mil;
+     }
+     public String getMil() {
+         return mil;
+     }
+
+    public void setOfflineState(boolean offlineState) {
+         this.offlineState = offlineState;
+     }
+     public boolean getOfflineState() {
+         return offlineState;
+     }
+
+    public void setOfflineTime(String offlineTime) {
+         this.offlineTime = offlineTime;
+     }
+     public String getOfflineTime() {
+         return offlineTime;
+     }
+
+    public void setProvince(String province) {
+         this.province = province;
+     }
+     public String getProvince() {
+         return province;
+     }
+
+    public void setRemainDistance(String remainDistance) {
+         this.remainDistance = remainDistance;
+     }
+     public String getRemainDistance() {
+         return remainDistance;
+     }
+
+    public void setRunDistance(String runDistance) {
+         this.runDistance = runDistance;
+     }
+     public String getRunDistance() {
+         return runDistance;
+     }
+
+    public void setRunRoute(List<RunRoute> runRoute) {
+         this.runRoute = runRoute;
+     }
+     public List<RunRoute> getRunRoute() {
+         return runRoute;
+     }
+
+    public void setSpd(String spd) {
+         this.spd = spd;
+     }
+     public String getSpd() {
+         return spd;
+     }
+
+    public void setUtc(String utc) {
+         this.utc = utc;
+     }
+     public String getUtc() {
+         return utc;
+     }
+
+}

+ 70 - 0
src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/RunRoute.java

@@ -0,0 +1,70 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.FullPathVisualizationTo;
+
+/**
+ * Auto-generated: 2021-10-16 11:56:24
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class RunRoute {
+
+    private String agl;
+    private String gtm;
+    private String hgt;
+    private String lat;
+    private String lon;
+    private String mil;
+    private String spd;
+    public void setAgl(String agl) {
+         this.agl = agl;
+     }
+     public String getAgl() {
+         return agl;
+     }
+
+    public void setGtm(String gtm) {
+         this.gtm = gtm;
+     }
+     public String getGtm() {
+         return gtm;
+     }
+
+    public void setHgt(String hgt) {
+         this.hgt = hgt;
+     }
+     public String getHgt() {
+         return hgt;
+     }
+
+    public void setLat(String lat) {
+         this.lat = lat;
+     }
+     public String getLat() {
+         return lat;
+     }
+
+    public void setLon(String lon) {
+         this.lon = lon;
+     }
+     public String getLon() {
+         return lon;
+     }
+
+    public void setMil(String mil) {
+         this.mil = mil;
+     }
+     public String getMil() {
+         return mil;
+     }
+
+    public void setSpd(String spd) {
+         this.spd = spd;
+     }
+     public String getSpd() {
+         return spd;
+     }
+
+}

+ 30 - 0
src/main/java/com/steerinfo/route/vo/FullPathVisualizationTo/ViewVisualization.java

@@ -0,0 +1,30 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.FullPathVisualizationTo;
+
+/**
+ * Auto-generated: 2021-10-16 11:56:24
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class ViewVisualization {
+
+    private Result result;
+    private int status;
+    public void setResult(Result result) {
+         this.result = result;
+     }
+     public Result getResult() {
+         return result;
+     }
+
+    public void setStatus(int status) {
+         this.status = status;
+     }
+     public int getStatus() {
+         return status;
+     }
+
+}

+ 40 - 0
src/main/java/com/steerinfo/route/vo/Map/Point.java

@@ -0,0 +1,40 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.Map;
+
+/**
+ * Auto-generated: 2021-09-28 10:36:43
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Point {
+
+    private String lat;
+    private String lon;
+
+    public String getLat() {
+        return lat;
+    }
+
+    public void setLat(String lat) {
+        this.lat = lat;
+    }
+
+    public String getLon() {
+        return lon;
+    }
+
+    public void setLon(String lon) {
+        this.lon = lon;
+    }
+
+    @Override
+    public String toString() {
+        return "Point{" +
+                "lat='" + lat + '\'' +
+                ", lon='" + lon + '\'' +
+                '}';
+    }
+}

+ 26 - 0
src/main/java/com/steerinfo/route/vo/Map/RouteVo.java

@@ -0,0 +1,26 @@
+package com.steerinfo.route.vo.Map;
+
+import java.util.List;
+
+public class RouteVo {
+
+
+
+
+    private List<StartAndEndRoute> startAndEndRoutes;
+
+    public List<StartAndEndRoute> getStartAndEndRoutes() {
+        return startAndEndRoutes;
+    }
+
+    public void setStartAndEndRoutes(List<StartAndEndRoute> startAndEndRoutes) {
+        this.startAndEndRoutes = startAndEndRoutes;
+    }
+
+    @Override
+    public String toString() {
+        return "RouteVo{" +
+                "startAndEndRoutes=" + startAndEndRoutes +
+                '}';
+    }
+}

+ 112 - 0
src/main/java/com/steerinfo/route/vo/Map/StartAndEndRoute.java

@@ -0,0 +1,112 @@
+package com.steerinfo.route.vo.Map;
+
+import java.util.List;
+
+public class StartAndEndRoute {
+    //开始点名称
+    private String startPointName;
+    //开始点
+    private Point startPoint;
+    //结束点名称
+    private String endPointName;
+    //结束点
+    private Point endPoint;
+    //当前点名称
+    private String currentPointName;
+    //当前点
+    private Point currentPoint;
+    //行驶里程数
+    private String miled;
+
+    //已经行驶点的集合,绘制已行驶路径使用的
+    private List<Point> runRoute;
+    //预计行驶点的集合,绘制预计行驶径使用的
+    private List<Point> estimateRoute;
+
+    public String getStartPointName() {
+        return startPointName;
+    }
+
+    public void setStartPointName(String startPointName) {
+        this.startPointName = startPointName;
+    }
+
+    public Point getStartPoint() {
+        return startPoint;
+    }
+
+    public void setStartPoint(Point startPoint) {
+        this.startPoint = startPoint;
+    }
+
+    public String getEndPointName() {
+        return endPointName;
+    }
+
+    public void setEndPointName(String endPointName) {
+        this.endPointName = endPointName;
+    }
+
+    public Point getEndPoint() {
+        return endPoint;
+    }
+
+    public void setEndPoint(Point endPoint) {
+        this.endPoint = endPoint;
+    }
+
+    public String getCurrentPointName() {
+        return currentPointName;
+    }
+
+    public void setCurrentPointName(String currentPointName) {
+        this.currentPointName = currentPointName;
+    }
+
+    public Point getCurrentPoint() {
+        return currentPoint;
+    }
+
+    public void setCurrentPoint(Point currentPoint) {
+        this.currentPoint = currentPoint;
+    }
+
+    public String getMiled() {
+        return miled;
+    }
+
+    public void setMiled(String miled) {
+        this.miled = miled;
+    }
+
+    public List<Point> getEstimateRoute() {
+        return estimateRoute;
+    }
+
+    public void setEstimateRoute(List<Point> estimateRoute) {
+        this.estimateRoute = estimateRoute;
+    }
+
+    public List<Point> getRunRoute() {
+        return runRoute;
+    }
+
+    public void setRunRoute(List<Point> runRoute) {
+        this.runRoute = runRoute;
+    }
+
+    @Override
+    public String toString() {
+        return "StartAndEndRoute{" +
+                "startPointName='" + startPointName + '\'' +
+                ", startPoint=" + startPoint +
+                ", endPointName='" + endPointName + '\'' +
+                ", endPoint=" + endPoint +
+                ", currentPointName='" + currentPointName + '\'' +
+                ", currentPoint=" + currentPoint +
+                ", miled='" + miled + '\'' +
+                ", runRoute=" + runRoute +
+                ", estimateRoute=" + estimateRoute +
+                '}';
+    }
+}

+ 18 - 0
src/main/java/com/steerinfo/route/vo/ResultWarn.java

@@ -0,0 +1,18 @@
+package com.steerinfo.route.vo;
+
+import lombok.Data;
+
+@Data
+public class ResultWarn {
+    private String adr;
+    private String dLoc;
+    private String label;
+    private String rid;
+    private String sLoc;
+    private long time;
+    private String type;
+    private String userName;
+    private String vno;
+    private int warnTime;
+
+}

+ 22 - 0
src/main/java/com/steerinfo/route/vo/resultJson/Ad_info.java

@@ -0,0 +1,22 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.resultJson;
+
+/**
+ * Auto-generated: 2021-10-10 19:26:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Ad_info {
+
+    private String adcode;
+    public void setAdcode(String adcode) {
+         this.adcode = adcode;
+     }
+     public String getAdcode() {
+         return adcode;
+     }
+
+}

+ 54 - 0
src/main/java/com/steerinfo/route/vo/resultJson/Address_components.java

@@ -0,0 +1,54 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.resultJson;
+
+/**
+ * Auto-generated: 2021-10-10 19:26:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Address_components {
+
+    private String province;
+    private String city;
+    private String district;
+    private String street;
+    private String street_number;
+    public void setProvince(String province) {
+         this.province = province;
+     }
+     public String getProvince() {
+         return province;
+     }
+
+    public void setCity(String city) {
+         this.city = city;
+     }
+     public String getCity() {
+         return city;
+     }
+
+    public void setDistrict(String district) {
+         this.district = district;
+     }
+     public String getDistrict() {
+         return district;
+     }
+
+    public void setStreet(String street) {
+         this.street = street;
+     }
+     public String getStreet() {
+         return street;
+     }
+
+    public void setStreet_number(String street_number) {
+         this.street_number = street_number;
+     }
+     public String getStreet_number() {
+         return street_number;
+     }
+
+}

+ 32 - 0
src/main/java/com/steerinfo/route/vo/resultJson/Location.java

@@ -0,0 +1,32 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.resultJson;
+
+import java.math.BigDecimal;
+
+/**
+ * Auto-generated: 2021-10-10 19:26:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Location {
+
+    private BigDecimal lng;
+    private BigDecimal lat;
+    public void setLng(BigDecimal lng) {
+         this.lng = lng;
+     }
+     public BigDecimal getLng() {
+         return lng;
+     }
+
+    public void setLat(BigDecimal lat) {
+         this.lat = lat;
+     }
+     public BigDecimal getLat() {
+         return lat;
+     }
+
+}

+ 80 - 0
src/main/java/com/steerinfo/route/vo/resultJson/Result.java

@@ -0,0 +1,80 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.resultJson;
+
+import java.math.BigDecimal;
+
+/**
+ * Auto-generated: 2021-10-10 19:26:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class Result {
+
+    private String title;
+    private Location location;
+    private Ad_info ad_info;
+    private Address_components address_components;
+    private BigDecimal similarity;
+    private int deviation;
+    private int reliability;
+    private int level;
+    public void setTitle(String title) {
+         this.title = title;
+     }
+     public String getTitle() {
+         return title;
+     }
+
+    public void setLocation(Location location) {
+         this.location = location;
+     }
+     public Location getLocation() {
+         return location;
+     }
+
+    public void setAd_info(Ad_info ad_info) {
+         this.ad_info = ad_info;
+     }
+     public Ad_info getAd_info() {
+         return ad_info;
+     }
+
+    public void setAddress_components(Address_components address_components) {
+         this.address_components = address_components;
+     }
+     public Address_components getAddress_components() {
+         return address_components;
+     }
+
+    public void setSimilarity(BigDecimal similarity) {
+         this.similarity = similarity;
+     }
+     public BigDecimal getSimilarity() {
+         return similarity;
+     }
+
+    public void setDeviation(int deviation) {
+         this.deviation = deviation;
+     }
+     public int getDeviation() {
+         return deviation;
+     }
+
+    public void setReliability(int reliability) {
+         this.reliability = reliability;
+     }
+     public int getReliability() {
+         return reliability;
+     }
+
+    public void setLevel(int level) {
+         this.level = level;
+     }
+     public int getLevel() {
+         return level;
+     }
+
+}

+ 38 - 0
src/main/java/com/steerinfo/route/vo/resultJson/SearchPoint.java

@@ -0,0 +1,38 @@
+/**
+  * Copyright 2021 bejson.com 
+  */
+package com.steerinfo.route.vo.resultJson;
+
+/**
+ * Auto-generated: 2021-10-10 19:26:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class SearchPoint {
+
+    private int status;
+    private String message;
+    private Result result;
+    public void setStatus(int status) {
+         this.status = status;
+     }
+     public int getStatus() {
+         return status;
+     }
+
+    public void setMessage(String message) {
+         this.message = message;
+     }
+     public String getMessage() {
+         return message;
+     }
+
+    public void setResult(Result result) {
+         this.result = result;
+     }
+     public Result getResult() {
+         return result;
+     }
+
+}

+ 10 - 0
src/main/resources/application-dev.yml

@@ -6,4 +6,14 @@ spring:
     driver-class-name: oracle.jdbc.OracleDriver
   application:
     name: dil-tms-truck-dev
+  #Redis相关配置
+  redis:
+    host: 172.16.33.161
+    port: 6379
+    password: 123456
+  cache:
+    type: redis
+    redis:
+      time-to-live: 300000
+      cache-null-values: true
 

+ 34 - 3
src/main/resources/bootstrap.yml

@@ -16,7 +16,7 @@ spring:
 #feign设置
 openfeign:
   ColumnDataFeign:
-    url: ${COLUMNDATAFEIGN_URL:localhost:8083}
+    url: ${COLUMNDATAFEIGN_URL:172.16.33.161:8083}
   BmsShipFeign:
     url: ${BMSSHIPFEIGN_URL:localhost:8078}
   BmsTruckFeign:
@@ -35,7 +35,7 @@ openfeign:
 eureka:
   client:
     service-url:
-      defaultZone: http://root:root@${EUREKA_HOST:localhost}:${EUREKA_PORT:8061}/eureka/
+      defaultZone: http://root:root@${EUREKA_HOST:172.16.33.161}:${EUREKA_PORT:8061}/eureka/
 
   instance:
     prefer-ip-address: true
@@ -60,7 +60,34 @@ redis:
     time: 864000000
   database: 0
 
+#自定义配置Redis相关配置
+  prefix:
+    order: order
+    line: line
+    suffix: end
 
+str:
+  tengxun:
+    key: WDTBZ-A5VKJ-UDLFI-KYJY6-WTP2S-A6B4Y
+  ZhongJiaoXingLu:
+    cid: 2667ca1f-e003-4822-b4c1-f25561c27f31
+    srt: 3dbdc182-b235-4c33-be30-88c0fe8999c5
+    user: 695b3735-9d65-4106-98f9-5f2181b40fb5
+    pwd: fQBac3J090gK4L52a73qM821LF790H
+    #停车
+    parkMins: 60
+    #离线时长
+    outMins : 10
+    #路线偏移时长
+    abnMins: 60
+      #处理类型type=1 异常线路预警
+      #type=2 异常线路预警
+      #+停车
+    #type=3 异常线路预警
+    #+离线
+    #type=4 异常线路预警
+    #+停车+离线
+    type: 4
 
 mybatis:
   type-aliases-package: com.steerinfo.dil.model
@@ -71,4 +98,8 @@ mybatis:
     call-setters-on-nulls: true
 
 server:
-  port: 8088
+  port: 8088
+
+
+
+

+ 130 - 55
src/main/resources/com/steerinfo/dil/mapper/TmstruckEnfactoryResultMapper.xml

@@ -610,7 +610,7 @@
     </select>
 
     <!--  通过车牌号并且状态不为2 或 运输订单 或运输订单ID  查询关联的实绩总表ID -->
-    <select id="selectOrderIdByCpAndOn" parameterType="java.util.Map" resultType="int">
+    <select id="selectTotalResultIdByCpAndOn" parameterType="java.util.Map" resultType="int">
         select TTR.RESULT_TOTAL_ID "resultTotalId"
         from OMSTRUCK_ORDER OO
         left join TMSTRUCK_TOTAL_RESULT TTR
@@ -673,54 +673,122 @@
 
     <!--查询销售进厂实绩 -->
     <select id="getXSEnFactoryResult" parameterType="java.util.Map" resultType="java.util.Map">
-        select *
-        from (
         select
-        TER.RESULT_ID "resultId",
-        ASO.SALE_NUMBER "saleNumber",
-        RM.MATERIAL_NAME "materialName",
-        OO.ORDER_NUMBER "orderNumber",
-        RC.CAPACITY_NUMBER "capacityNumber",
-        RG.GATEPOST_NAME "gatepostName",
-        TER.RESULT_ENTRY_MODE "resultEntryMode",
-        TER.RESULT_ENTRY_GATE_TIME "resultEntryGateTime",
-        RS.SHIPPER_NAME "shipperName",
-        OOM.ORDER_MATERIAL_NUMBER "orderMaterialNumber",
-        TER.INSERT_TIME "insertTime",
-        RCON. CONSIGNEE_COMPANY_NAME "consigneeCompanyName"
-        from TMSTRUCK_ENFACTORY_RESULT TER
-        left join TMSTRUCK_TOTAL_RESULT TTR
-        on TER.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
-        left join OMSTRUCK_ORDER OO
-        on TTR.ORDER_ID = OO.ORDER_ID
-        left join AMS_SALE_ORDER ASO
-        on ASO.SALE_ORDER_ID = OO.ORDER_PLAN_ID
-        left join RMS_DRIVER_CAPACITY RDC
-        on RDC.DRIVER_CAPACITY_ID = OO.DRIVER_CAPACITY_ID
-        left join RMS_CAPACITY RC
-        on RC.CAPACITY_ID = RDC.CAPACITY_ID
-        left join RMS_SHIPPER RS
-        on RS.SHIPPER_ID = ASO.SHIPPER_ID
-        left join RMS_CONSIGNEE RCON
-        on RCON.CONSIGNEE_ID = ASO.RECEIVE_ID
-        left join OMSTRUCK_ORDER_MATERIAL OOM
-        on OOM.ORDER_ID = OO.ORDER_ID
-        left join RMS_MATERIAL RM
-        on RM.MATERIAL_ID = OOM.MATERIAL_ID
-        left join RMS_GATEPOST RG
-        on RG.GATEPOST_ID = TER.GATEPOST_ID
-        where TER.RESULT_ENTRY_GATE_TIME is not null and OO.ORDER_TYPE = #{orderTypee}
+               *
+        from (
+            SELECT
+                -- 进厂时间
+                TER.RESULT_ENTRY_GATE_TIME "resultEntryGateTime",
+                -- 	进厂方式
+                TER.RESULT_ENTRY_MODE "resultEntryMode",
+                -- 	门岗名称
+                RG.GATEPOST_NAME "gatepostName",
+                -- 运输订单号
+                OO.ORDER_NUMBER "orderNumber",
+                -- 车牌号
+                RC.CAPACITY_NUMBER "capacityNumber",
+                -- 运输订单id
+                OO.ORDER_ID "orderId",
+                -- 根据订单类型查询销售订单号/发运计划号
+                (CASE
+                    -- 	运输订单类型等于1的查询销售订单表
+                    WHEN OO.ORDER_TYPE = 1
+                        THEN (
+                            SELECT
+                                -- 销售订单号
+                                ASO.SALE_NUMBER
+                            FROM
+                                -- 销售订单
+                                AMS_SALE_ORDER ASO
+                            WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            )
+                    -- 	运输订单类型等于2,3的查询发运计划表
+                    WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                        THEN(
+                            SELECT
+                                -- 	发运计划号
+                                ARD.DAYPLAN_NO
+                                -- 发运计划
+                            FROM
+                                 AMSTRUCK_RAIL_DAYPLAN ARD
+                            WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                END) "saleNum",
+                --根据订单类型查询发货单位
+                (CASE
+                    WHEN OO.ORDER_TYPE = 1
+                        THEN(
+                            SELECT
+                                -- 发货单位
+                                RS.SHIPPER_NAME
+                            FROM
+                                -- 销售订单
+                                AMS_SALE_ORDER ASO
+                            -- 	托运人
+                            LEFT JOIN RMS_SHIPPER RS ON ASO.SHIPPER_ID = RS.SHIPPER_ID
+                            WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            )
+                    -- 	运输订单类型等于2,3的查询发运计划表
+                    WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                        THEN(
+                            SELECT
+                                -- 发货单位
+                                RS.SHIPPER_NAME
+                            -- 	发运计划
+                            FROM AMSTRUCK_RAIL_DAYPLAN ARD
+                            -- 托运人
+                            LEFT JOIN RMS_SHIPPER RS ON ARD.SHIPMENT_UNIT_ID = RS.SHIPPER_ID
+                            WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                END) "shipperName",
+                --根据订单类型查询收货单位
+                (CASE
+                    WHEN OO.ORDER_TYPE = 1
+                        THEN(
+                            SELECT
+                                -- 收货单位
+                                RS.SUPPLIER_NAME
+                            FROM
+                                -- 销售订单
+                                AMS_SALE_ORDER ASO
+                            -- 托运人
+                            LEFT JOIN RMS_SUPPLIER RS ON ASO.SHIPPER_ID = RS.SUPPLIER_ID
+                            WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            )
+                    -- 运输订单类型等于2,3的查询发运计划表
+                    WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                        THEN(
+                            SELECT
+                                --发货单位
+                                RS.SUPPLIER_NAME
+                            FROM
+                                -- 发运计划
+                                AMSTRUCK_RAIL_DAYPLAN ARD
+                            --托运人
+                            LEFT JOIN RMS_SUPPLIER RS ON ARD.SHIPMENT_UNIT_ID = RS.SUPPLIER_ID
+                            WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                END) "supplierName"
+            FROM
+                -- 进厂实绩
+                TMSTRUCK_ENFACTORY_RESULT TER
+                -- 	门岗
+                LEFT JOIN RMS_GATEPOST RG ON TER.GATEPOST_ID = RG.GATEPOST_ID
+                -- 	总实绩
+                LEFT JOIN TMSTRUCK_TOTAL_RESULT TTR ON TER.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
+                -- 运输订单
+                LEFT JOIN OMSTRUCK_ORDER OO ON TTR.ORDER_ID = OO.ORDER_ID
+                -- 运力信息
+                LEFT JOIN RMS_CAPACITY RC ON OO.CAPACITY_ID = RC.CAPACITY_ID
+            -- 判断进厂实绩的进厂时间不为空
+            WHERE TER.RESULT_ENTRY_GATE_TIME IS NOT NULL
+            -- 	并且订单类型等于1(销售订单),2(焦炭发运计划),3(水渣发运计划)
+            AND OO.ORDER_TYPE IN ( 1, 2, 3 )
         )
         <where>
-            <if test="saleNumber != null">
-                <foreach collection="saleNumber" item="item" open="(" separator="or" close=")">
-                    "saleNumber" like '%${item}%'
-                </foreach>
-            </if>
-            <if test="materialName != null">
-                and
-                <foreach collection="materialName" item="item" open="(" separator="or" close=")">
-                    "materialName" like '%${item}%'
+            <if test="saleNum != null">
+                <foreach collection="saleNum" item="item" open="(" separator="or" close=")">
+                    "saleNum" like '%${item}%'
                 </foreach>
             </if>
             <if test="gatepostName != null">
@@ -759,19 +827,26 @@
                     "resultEntryGateTime" like '%${item}%'
                 </foreach>
             </if>
-            <if test="consigneeCompanyName != null">
-                and
-                <foreach collection="consigneeCompanyName" item="item" open="(" separator="or" close=")">
-                    "consigneeCompanyName" like '%${item}%'
-                </foreach>
-            </if>
-            <if test="orderMaterialNumber != null">
+            <if test="supplierName != null">
                 and
-                <foreach collection="orderMaterialNumber" item="item" open="(" separator="or" close=")">
-                    "orderMaterialNumber" like '%${item}%'
+                <foreach collection="supplierName" item="item" open="(" separator="or" close=")">
+                    "supplierName" like '%${item}%'
                 </foreach>
             </if>
         </where>
         <include refid="orderByEnterTime"></include>
     </select>
+
+    <select id="getMaterial" parameterType="int" resultType="java.util.Map">
+        SELECT
+            RM.MATERIAL_NAME "materialName",
+            CONCAT(CONCAT(RM.MATERIAL_SPECIFICATION , '('), CONCAT(RM.MATERIAL_MODEL ,')')) "specificationModel",
+            OM.ORDER_MATERIAL_NUMBER "orderMaterialNumber"
+        FROM OMSTRUCK_ORDER OO
+            LEFT JOIN OMSTRUCK_ORDER_MATERIAL OM
+            ON OO.ORDER_ID = OM.ORDER_ID
+            LEFT JOIN RMS_MATERIAL RM
+            ON OM.MATERIAL_ID = RM.MATERIAL_ID
+        WHERE OO.ORDER_ID = #{orderId}
+    </select>
 </mapper>

+ 221 - 17
src/main/resources/com/steerinfo/dil/mapper/TmstruckLeaveFactoryResultMapper.xml

@@ -611,28 +611,232 @@
         FROM
             (
                 SELECT
-                    TLFR.RESULT_ID "resultId",
-                    ARD.DAYPLAN_NO "dayplanNo",
-                    RM.MATERIAL_NAME "materialName",
+                    -- 出厂时间
+                    TLFR.RESULT_OUT_GATE_TIME "resultOutGateTime",
+                    --出厂抓拍图片
+                    TLFR.RESULT_TRUCK_SNAPSHOT_PICTURE "resultTruckSnapshotPicture",
+                    -- 	出厂方式
+                    TLFR.RESULT_OUT_MODE "resultOutMode",
+                    -- 	门岗名称
+                    RG.GATEPOST_NAME "gatepostName",
+                    -- 运输订单号
                     OO.ORDER_NUMBER "orderNumber",
+                    -- 车牌号
                     RC.CAPACITY_NUMBER "capacityNumber",
-                    RG.GATEPOST_NAME "gatepostName",
-                    ARD.DAYPLAN_MATERIAL_WEIGHT "materialWeight",
-                    TLFR.RESULT_OUT_MODE "resultOutMode",
-                    TLFR.RESULT_OUT_GATE_TIME "resultOutGateTime",
-                    TLFR.RESULT_TRUCK_SNAPSHOT_PICTURE "resultTruckSnapshotPicture"
+                    -- 运输订单id
+                    OO.ORDER_ID "orderId",
+                    -- 根据订单类型查询销售订单号/发运计划号
+                    ( CASE
+                        -- 	运输订单类型等于1的查询销售订单表
+                        WHEN OO.ORDER_TYPE = 1
+                            THEN (
+                                SELECT
+                                    -- 销售订单号
+                                    ASO.SALE_NUMBER
+                                FROM
+                                    -- 销售订单
+                                    AMS_SALE_ORDER ASO
+                                WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            )
+                        -- 	运输订单类型等于2,3的查询发运计划表
+                        WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                            THEN(
+                                SELECT
+                                    -- 发运计划号
+                                    ARD.DAYPLAN_NO
+                                    -- 发运计划
+                                    FROM AMSTRUCK_RAIL_DAYPLAN ARD
+                                WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                    END) "saleNum",
+                    --根据订单类型查询发货单位
+                    (CASE
+                        WHEN OO.ORDER_TYPE = 1
+                            THEN (
+                                SELECT
+                                    -- 发货单位
+                                    RS.SHIPPER_NAME
+                                FROM
+                                    --销售订单
+                                    AMS_SALE_ORDER ASO --托运人
+                                LEFT JOIN RMS_SHIPPER RS ON ASO.SHIPPER_ID = RS.SHIPPER_ID
+                                WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            )
+                        -- 	运输订单类型等于2,3的查询发运计划表
+                        WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                            THEN (
+                                SELECT
+                                    --发货单位
+                                    RS.SHIPPER_NAME
+                                    --发运计划
+                                FROM
+                                    AMSTRUCK_RAIL_DAYPLAN ARD
+                                    -- 托运人
+                                    LEFT JOIN RMS_SHIPPER RS ON ARD.SHIPMENT_UNIT_ID = RS.SHIPPER_ID
+                                 WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                    END) "shipperName",
+                    --根据订单类型查询收货单位
+                    ( CASE
+                        WHEN OO.ORDER_TYPE = 1
+                            THEN (
+                                SELECT
+                                    --收货单位
+                                    RS.SUPPLIER_NAME
+                                FROM
+                                    -- 销售订单
+                                    AMS_SALE_ORDER ASO
+                                    -- 托运人
+                                LEFT JOIN RMS_SUPPLIER RS ON ASO.SHIPPER_ID = RS.SUPPLIER_ID
+                                WHERE OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                            ) -- 	运输订单类型等于2,3的查询发运计划表
+                        WHEN OO.ORDER_TYPE IN ( 2, 3 )
+                            THEN (
+                                SELECT
+                                    --发货单位
+                                    RS.SUPPLIER_NAME --发运计划
+                                FROM
+                                    AMSTRUCK_RAIL_DAYPLAN ARD
+                                    --托运人
+                                    LEFT JOIN RMS_SUPPLIER RS ON ARD.SHIPMENT_UNIT_ID = RS.SUPPLIER_ID
+                                    WHERE OO.ORDER_PLAN_ID = ARD.DAYPLAN_ID
+                            )
+                    END) "supplierName"
                 FROM
+                    -- 出厂实绩
                     TMSTRUCK_LEAVE_FACTORY_RESULT TLFR
-                        LEFT JOIN TMSTRUCK_TOTAL_RESULT TTR ON TTR.RESULT_TOTAL_ID = TLFR.RESULT_TOTAL_ID
-                        LEFT JOIN OMSTRUCK_ORDER OO ON OO.ORDER_ID = TTR.ORDER_ID
-
-                        LEFT JOIN OMSTRUCK_ORDER_MATERIAL OOM ON OOM.ORDER_ID = OO.ORDER_ID
-                        LEFT JOIN RMS_MATERIAL RM ON RM.MATERIAL_ID = OOM.MATERIAL_ID
-                        LEFT JOIN RMS_CAPACITY RC ON RC.CAPACITY_ID = OO.CAPACITY_ID
-                        LEFT JOIN RMS_GATEPOST RG ON RG.GATEPOST_ID = TLFR.GATEPOST_ID
-                        LEFT JOIN AMSTRUCK_RAIL_DAYPLAN  ARD ON ARD.DAYPLAN_ID=OO.ORDER_PLAN_ID
+                    -- 	门岗
+                    LEFT JOIN RMS_GATEPOST RG ON TLFR.GATEPOST_ID = RG.GATEPOST_ID
+                     -- 	总实绩
+                    LEFT JOIN TMSTRUCK_TOTAL_RESULT TTR ON TLFR.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
+                    -- 运输订单
+                    LEFT JOIN OMSTRUCK_ORDER OO ON TTR.ORDER_ID = OO.ORDER_ID
+                    -- 运力信息
+                    LEFT JOIN RMS_CAPACITY RC ON OO.CAPACITY_ID = RC.CAPACITY_ID
                 WHERE
-                    RESULT_OUT_GATE_TIME IS NOT NULL
+                    -- 判断出厂实绩的出厂时间不为空
+                    TLFR.RESULT_OUT_GATE_TIME IS NOT NULL
+                    -- 	并且订单类型等于1(销售订单),2(焦炭发运计划),3(水渣发运计划)
+                    AND OO.ORDER_TYPE IN ( 1, 2, 3 )
             )
+        <where>
+            <if test="resultOutGateTime != null">
+                <foreach collection="resultOutGateTime" item="item" open="(" separator="or" close=")">
+                    "resultOutGateTime" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="resultTruckSnapshotPicture != null">
+            and
+                <foreach collection="resultTruckSnapshotPicture" item="item" open="(" separator="or" close=")">
+                    "resultTruckSnapshotPicture" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="resultOutMode != null">
+            and
+                <foreach collection="resultOutMode" item="item" open="(" separator="or" close=")">
+                    "resultOutMode" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="gatepostName != null">
+                and
+                <foreach collection="gatepostName" item="item" open="(" separator="or" close=")">
+                    "gatepostName" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="orderNumber != null">
+                and
+                <foreach collection="orderNumber" item="item" open="(" separator="or" close=")">
+                    "orderNumber" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="capacityNumber != null">
+                and
+                <foreach collection="capacityNumber" item="item" open="(" separator="or" close=")">
+                    "capacityNumber" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="saleNum != null">
+                and
+                <foreach collection="saleNum" item="item" open="(" separator="or" close=")">
+                    "saleNum" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="shipperName != null">
+                and
+                <foreach collection="shipperName" item="item" open="(" separator="or" close=")">
+                    "shipperName" like '%${item}%'
+                </foreach>
+            </if>
+            <if test="supplierName != null">
+                and
+                <foreach collection="supplierName" item="item" open="(" separator="or" close=")">
+                    "supplierName" like '%${item}%'
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="getTruckFactoryResult" resultType="java.util.Map">
+                
+                SELECT   * from(
+                
+                 SELECT
+                    -- 出厂时间
+                    to_char(TLFR.RESULT_OUT_GATE_TIME,'yyyy-mm-dd hh24:mi:ss')  "resultOutGateTime",
+                    --出厂抓拍图片
+                    TLFR.RESULT_TRUCK_SNAPSHOT_PICTURE "resultTruckSnapshotPicture",
+                    --出厂方式
+                    TLFR.RESULT_OUT_MODE "resultOutMode",
+                    --门岗名称
+                    RG.GATEPOST_NAME "gatepostName",
+                    -- 运输订单号
+                    OO.ORDER_NUMBER "orderNumber",
+                    -- 车牌号
+                    RC.CAPACITY_NUMBER "capacityNumber",
+                    -- 运输订单id
+                    OO.ORDER_ID "orderId",
+                    -- 订单类型
+                    OO.ORDER_TYPE "orderType",
+                    -- 销售订单号
+                    ASO.SALE_NUMBER  "saleNum",
+                    -- 收货地址
+                    RRA.ADDRESS_DELIVERY_ADDRESS "receiveAddress",
+                    -- 收货单位
+                    RS.SUPPLIER_NAME  "supplierName" ,
+                    -- 发货单位
+                    RS2.SHIPPER_NAME "shipperName"
+                   
+                    
+                    
+                    
+                FROM
+                    -- 出厂实绩
+                    TMSTRUCK_LEAVE_FACTORY_RESULT TLFR
+                    --  总实绩
+                    LEFT JOIN TMSTRUCK_TOTAL_RESULT TTR ON TLFR.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
+                    -- 运输订单
+                    LEFT JOIN OMSTRUCK_ORDER OO ON TTR.ORDER_ID = OO.ORDER_ID
+                     -- 销售订单信息
+                    LEFT JOIN  AMS_SALE_ORDER ASO ON OO.ORDER_PLAN_ID = ASO.SALE_ORDER_ID
+                    -- 托运人
+                    LEFT JOIN RMS_SUPPLIER RS ON ASO.SHIPPER_ID = RS.SUPPLIER_ID
+                    --  门岗
+                    LEFT JOIN RMS_GATEPOST RG ON TLFR.GATEPOST_ID = RG.GATEPOST_ID
+                    -- 运力信息
+                    LEFT JOIN RMS_CAPACITY RC ON OO.CAPACITY_ID = RC.CAPACITY_ID
+                     -- 销售订单中间表
+                    LEFT JOIN AMS_SALE_ORDER_MATERIAL ASOM ON    ASOM.SALE_ORDER_MATERIAL_ID =OO.ORDER_PLAN_ID
+                    -- 收货地址
+                    LEFT JOIN RMS_RECEIVE_ADDRESS RRA ON    ASOM.SALE_SHIPPING_ADDRESS_ID =RRA.ADDRESS_ID
+                    -- 收货单位
+                    LEFT JOIN RMS_SHIPPER RS2 ON ASO.SHIPPER_ID = RS2.SHIPPER_ID
+                    
+                WHERE
+                    -- 判断出厂实绩的出厂时间不为空
+                    TLFR.RESULT_OUT_GATE_TIME IS NOT NULL
+                    --   并且订单类型等于1(销售订单),2(焦炭发运计划),3(水渣发运计划)
+                    AND OO.ORDER_TYPE =1 AND OO.ORDER_NUMBER=#{orderNumber}
+                    
+                    )
+
     </select>
 </mapper>

+ 42 - 38
src/main/resources/com/steerinfo/dil/mapper/TmstruckLoadResultMapper.xml

@@ -720,15 +720,23 @@
     </select>
 
 <!--  通过运输订单号查询 出库实绩 最小Id(第一件扫描时间)  0 成功  1 失败-->
-    <select id="getMinScanIdByOrderNum" parameterType="string" resultType="int">
-        select MIN(WOSR.RESULT_ID)
-        from OMSTRUCK_ORDER OO
-                 left join WMSP_OUTBOUND_RESULT WOR
-                           on OO.ORDER_ID = WOR.BILL_LADING_ID
-                 left join WMSP_OUTBOUND_SCAN_RESULT WOSR
-                           on WOSR.OUTBOUND_RESULT_ID = WOR.RESULT_ID
-        WHERE OO.ORDER_NUMBER = #{orderNumber} and WOR.MATERIAL_ID = #{materailId}
-          and WOSR.RESULT_CHECK = 0
+    <select id="getMinScanIdByOrderNum" parameterType="java.util.Map" resultType="java.util.Map">
+        select *
+        from (
+                 select WOSR.RESULT_ID "resultId",
+                        WOSR.LOAD_ID   "loadId"
+                 from WMSP_OUTBOUND_RESULT WOR
+                          left join WMSP_OUTBOUND_SCAN_RESULT WOSR
+                                    on WOSR.OUTBOUND_RESULT_ID = WOR.RESULT_ID
+                          left join OMSTRUCK_ORDER OO
+                                    on OO.ORDER_ID = WOR.BILL_LADING_ID
+                 WHERE OO.ORDER_NUMBER = #{orderNumber}
+                   and WOR.MATERIAL_ID = #{materialId}
+                   and WOSR.RESULT_CHECK = 0
+                 ORDER BY WOSR.RESULT_ID
+
+             )
+        where rownum = 1
     </select>
 
     <!-- 根据运输订单号查找 -->
@@ -745,7 +753,7 @@
     </select>
 
     <!-- 根据实绩id查找扫描时间 -->
-    <select id="selectLoadTimeByResultId" resultType="java.util.Map" parameterType="java.lang.Integer">
+    <select id="selectLoadTimeByResultId" resultType="java.util.Date" parameterType="java.math.BigDecimal">
         select WOSR.RESULT_LOAD_TIME "loadTime"
         from WMSP_OUTBOUND_SCAN_RESULT WOSR
         where WOSR.RESULT_ID = #{resultId}
@@ -903,7 +911,9 @@
                    TLR.RESULT_LOAD_DURATION "resultLoadDuration",
                    RSD.STANDARD_DATA_MAX "standardDataMax",
                    RP.PERSONNEL_NAME "personnelName",
-                   (CASE WHEN OO.ORDER_TYPE = 1
+                   RM.MATERIAL_THEORETICAL_WEIGHT "materialTheoreticalWeight",
+                   RM.MATERIAL_NAME "materialName",
+                    (CASE WHEN OO.ORDER_TYPE = 1
                         THEN (
                                 SELECT ASO.SALE_NUMBER
                                 FROM AMS_SALE_ORDER_MATERIAL ASOM
@@ -916,32 +926,12 @@
                                 FROM AMSTRUCK_RAIL_DAYPLAN ARD
                                 WHERE ARD.DAYPLAN_ID = OO.ORDER_PLAN_ID
                             )
-                   END) "saleNum",
-                   (CASE WHEN   OO.ORDER_TYPE = 1
-                        THEN (
-                                SELECT RM.MATERIAL_NAME
-                                FROM RMS_MATERIAL_STEEL RMS
-                                LEFT JOIN RMS_MATERIAL RM ON RMS.MATERIAL_ID = RM.MATERIAL_ID
-                                WHERE RMS.MATERIAL_STEEL_ID = OOM.MATERIAL_ID
-                            )
-                        WHEN OO.ORDER_TYPE IN (2, 3)
-                        THEN (
-                                SELECT RM2.MATERIAL_NAME
-                                FROM RMS_MATERIAL RM2
-                                WHERE RM2.MATERIAL_ID = OOM.MATERIAL_ID
-                            )
-                    END) "materialName",
+                   END) "no",
                    (CASE WHEN   OO.ORDER_TYPE = 1
                         THEN OOM.ORDER_MATERIAL_NUMBER
                         WHEN OO.ORDER_TYPE IN (2, 3)
                         THEN OOM.ORDER_MATERIAL_WEIGHT
-                     END) "materialNumWei",
-                   (CASE WHEN   OO.ORDER_TYPE = 1
-                        THEN   (SELECT MATERIAL_THEORETICAL_WEIGHT
-                                FROM RMS_MATERIAL_STEEL RMS2
-                                WHERE OOM.MATERIAL_ID = RMS2.MATERIAL_STEEL_ID
-                            )
-                     END) "materialTheoreticalWeight"
+                     END) "materialNumWei"
             FROM TMSTRUCK_LOAD_RESULT TLR
             LEFT JOIN TMSTRUCK_TOTAL_RESULT TTR
                 ON TLR.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
@@ -949,6 +939,8 @@
                 ON OO.ORDER_ID = TTR.ORDER_ID
             LEFT JOIN OMSTRUCK_ORDER_MATERIAL OOM
                 ON OOM.ORDER_ID = OO.ORDER_ID
+            LEFT JOIN RMS_MATERIAL RM
+                ON RM.MATERIAL_ID = OOM.MATERIAL_ID
             LEFT JOIN RMS_DRIVER_CAPACITY RDC
                 ON RDC.DRIVER_CAPACITY_ID = OO.DRIVER_CAPACITY_ID
             LEFT JOIN RMS_CAPACITY RC
@@ -957,7 +949,9 @@
                 ON RSD.STANDARD_DATA_ID = TLR.LOAD_STANDARD_TIME_ID
             LEFT JOIN RMS_PERSONNEL RP
                 ON TLR.LOADER_ID = RP.PERSONNEL_ID
-
+            where
+                  OO.ORDER_TYPE in (1, 2, 3)
+              and TLR.STATUS = #{status}
         )
         <where>
             <if test="orderNumber != null">
@@ -971,6 +965,12 @@
                     "materialName" like '%${item}%'
                 </foreach>
             </if>
+            <if test="no != null">
+                and
+                <foreach collection="no" item="item" open="(" separator="or" close=")">
+                    "no" like '%${item}%'
+                </foreach>
+            </if>
             <if test="materialNumWei != null">
                 and
                 <foreach collection="materialNumWei" item="item" open="(" separator="or" close=")">
@@ -1037,15 +1037,19 @@
     <select id="getLoadResultIdByMIdAndTotalId" parameterType="int" resultType="java.lang.Integer">
         select TLR.RESULT_ID
         from TMSTRUCK_LOAD_RESULT TLR
-        where TLR.RESULT_TOTAL_ID = #{resultTotalId}
-          and TLR.MATERIAL_ID = #{materialId}
+        <where>
+            TLR.RESULT_TOTAL_ID = #{resultTotalId}
+            <if test="materialId != null">
+                and TLR.MATERIAL_ID = #{materialId}
+            </if>
+        </where>
     </select>
 
 <!--    通过物资唯一编码 查找物资ID -->
     <select id="getMaterialIdByMaterialCode" parameterType="string" resultType="java.math.BigDecimal">
         select MATERIAL_ID
-        from RMS_MATERIAL
-        where MATERIAL_CODE = #{materialCode}
+        from RMS_MATERIAL_STEEL
+        where MATERIAL_ONLY_CODE = #{materialOnlyCode}
     </select>
 
 </mapper>

+ 9 - 1
src/main/resources/com/steerinfo/dil/mapper/TmstruckWeightResultMapper.xml

@@ -614,7 +614,7 @@
 
 
     <!--  通过运输订单号 查询实绩Id、总实绩ID -->
-    <select id="selectTotalIdByOrderNo" parameterType="java.lang.String" resultType="java.util.Map">
+    <select id="selectTotalIdByOrderNo" parameterType="java.util.Map" resultType="java.util.Map">
         select OO.ORDER_ID               "orderId",
                OO.ORDER_TYPE             "orderTypee",
                TWR.WEIGHT_TASK_RESULT_ID "weightTaskResultId",
@@ -627,6 +627,7 @@
                  left join TMSTRUCK_WEIGHT_RESULT TWR
                            on TWR.RESULT_TOTAL_ID = TTR.RESULT_TOTAL_ID
         where OO.ORDER_NUMBER = #{orderNumber}
+                and TWR.MATERIAL_ID = #{materialId}
     </select>
 
     <!--  通过汽车衡编号查询对应的汽车衡ID  -->
@@ -1351,4 +1352,11 @@
         </if>
     </select>
 
+<!--  通过物资名称和物资规格查询物资ID  -->
+    <select id="getMaterialIdByMaterialNameAndSpe" parameterType="java.util.Map" resultType="java.lang.Integer">
+        select RM.MATERIAL_ID
+        from RMS_MATERIAL RM
+        where RM.MATERIAL_NAME = #{materialName} and RM.MATERIAL_SPECIFICATION = #{materialSpecification}
+    </select>
+
 </mapper>

+ 14 - 0
src/main/resources/com/steerinfo/dil/mapper/UtilsMapper.xml

@@ -42,4 +42,18 @@
         </if>
     </update>
 
+<!--   通过仓库名称查询仓库Id -->
+    <select id="queryWarehouseIdByName" parameterType="string" resultType="java.lang.Integer">
+        select RW.WAREHOUSE_ID
+        from RMS_WAREHOUSE RW
+        where RW.WAREHOUSE_NAME = #{warehouseName}
+    </select>
+
+<!--    通过月台名称查询月台Id -->
+    <select id="queryPlatformIdByName" parameterType="string" resultType="java.lang.Integer">
+        select RPP.PLATFORM_ID
+        from RMS_PWAREHOUSE_PLATFORM RPP
+        where RPP.PLATFORM_NAME = #{platformName}
+    </select>
+
 </mapper>