浏览代码

更新websocket

txf 3 年之前
父节点
当前提交
5dee1bcc2d

+ 15 - 0
src/main/java/com/steerinfo/dil/feign/IMFeign.java

@@ -0,0 +1,15 @@
+package com.steerinfo.dil.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.HashMap;
+
+@FeignClient(value = "DIL-IM-DEV",url = "${openfeign.Im.url}")
+public interface IMFeign {
+    @PostMapping("/websocket/sendToUser")
+    @ResponseBody
+    String sendToUser(@RequestBody HashMap map);
+}

+ 10 - 6
src/main/java/com/steerinfo/dil/mapper/QmsQueueResultMapper.java

@@ -16,13 +16,13 @@ public interface QmsQueueResultMapper extends IBaseMapper<QmsQueueResult, BigDec
     BigDecimal selectMaxId();
 
     //车辆进入电子围栏后触发排队申请 发送数据:运输订单号 返回 运力Id、实绩总表Id、订单ID
-    List<Map<String, Object>> queryCIdAndTIdByOrderNumber(String orderNumber);
+    List<Map<String, Object>>   queryCIdAndTIdByOrderNumber(String orderNumber);
 
-    //通过运输订单号 查找 层次号  垛位 以及 仓储网格ID
-    List<Map<String, Object>> getWarehouseMesByOrderNum(String orderNumber);
+    //通过运输订单Id查询推送给司机进厂的数据
+    Map<String, Object> sendEnFactoryMesToWebSocket(Integer orderId);
 
-    //通过运输订单号查询某个销售订单所有的装车点
-    List<Integer> getAllLoadingByOrderNumber(String orderNumber);
+    //通过网格Id查询进厂门岗名称
+    Map<String, Object> queryGatepostNameByGridId(Integer gridId);
 
     //人工添加排队申请查询所有执行中订单 订单状态 :1
     List<Map<String, Object>> getAllExecutionOrder(Map<String, Object> map);
@@ -30,13 +30,17 @@ public interface QmsQueueResultMapper extends IBaseMapper<QmsQueueResult, BigDec
     //根据运输订单Id查询物资Id
     BigDecimal queryOrderMesByOrderId(BigDecimal orderId);
 
-
     //通过门岗名称查询门岗ID
     BigDecimal getGatepostIdByGatepostName(String gatepostName);
 
     //通过月台名称查询月台ID
     BigDecimal getPlatformIdByPlatformName(String platformName);
 
+    //通过运输订单Id查询司机仓库排队的数据
+    Map<String, Object> sendWarehouseMesToWebSocket(Integer orderId);
+
+    //通过月台网格ID查询仓库名称 和 月台名称
+    Map<String, Object> queryWarehouseNameByPlatformId(Integer gridId);
 
     //查询排队申请 判断条件:接收时间为空
     //查询指令下发 判断条件:接收时间为空

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

@@ -34,6 +34,4 @@ public interface QueuingRulesMapper {
     //通过月台Id 查询月台当前排队车辆数
     BigDecimal queueCountByPlatformId(BigDecimal platformId);
 
-    //如果当前状态满足之前所有条件 则根据仓库优先级进行选择仓库
-
 }

+ 47 - 37
src/main/java/com/steerinfo/dil/service/impl/QmsQueueResultServiceImpl.java

@@ -1,5 +1,6 @@
 package com.steerinfo.dil.service.impl;
 
+import com.steerinfo.dil.feign.IMFeign;
 import com.steerinfo.dil.feign.TmsTruckFeign;
 import com.steerinfo.dil.mapper.QmsQueueListMapper;
 import com.steerinfo.dil.model.QmsQueueList;
@@ -40,7 +41,7 @@ public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
     private QueuingRulesServiceImpl queuingRulesService;
 
     @Autowired
-    private TmsTruckFeign tmsTruckFeign;
+    private IMFeign imFeign;
 
     /**
      * 新增进厂排队实绩
@@ -56,21 +57,6 @@ public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
         String orderNumber = (String) map.get("orderNumber");
         //查询实绩总表ID 运力Id  物资Id (OO-->OOM 一对多)  只有钢材会有多条数据 但都属于钢材类型 取第一个获取物资ID匹配
         map.putAll(qmsQueueResultMapper.queryCIdAndTIdByOrderNumber(orderNumber).get(0)); //使用传进来的map将数据一路带到尾
-        //判断是否销售订单 销售订单进厂时查询装车点
-        BigDecimal orderType = DataChange.dataToBigDecimal(map.get("orderType"));
-        if (orderType.intValue() == 1){
-            //查询当前订单关联几种物资
-            List<Integer> materialIdList = queuingRulesService.getAllMaterialId(map);
-            //取得月台ID、以及对应的物资Id
-            List<Map<String, Object>> platIdList = queuingRulesService.getPlatId(materialIdList);
-            List<Map<String, Object>> list = new ArrayList<>();
-            for (Map<String, Object> map1 : platIdList) {
-                map1.put("orderId", map.get("orderId"));
-                list.add(map1);
-            }
-            //远程调用 修改装车点
-            tmsTruckFeign.updateLoadResultList(list);
-        }
         //获取网格Id
         BigDecimal gridId = queuingRulesService.calculateGridId(DataChange.dataToBigDecimal(map.get("materialId")));
         map.put("gridId", gridId);
@@ -85,39 +71,46 @@ public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
 
         qmsQueueResult.setInsertTime(new Date());
         qmsQueueResult.setInsertUsername("admin");
-        return qmsQueueResultMapper.insertSelective(qmsQueueResult);
+        int i = qmsQueueResultMapper.insertSelective(qmsQueueResult);
+        //推送数据 给司机
+        pushCGMesToWebsocket(DataChange.dataToBigDecimal(map.get("orderId")).intValue(), gridId.intValue());
+        return i;
+    }
+
+
+    /**
+     * 推送消息到websocket
+     * @return
+     */
+    public void pushCGMesToWebsocket(Integer orderId, Integer gridId){
+        //通过运输订单ID查询推送给司机的数据
+        Map<String, Object> mesMap = qmsQueueResultMapper.sendEnFactoryMesToWebSocket(orderId);
+        //通过网格Id查询门岗名称
+        mesMap.putAll(qmsQueueResultMapper.queryGatepostNameByGridId(gridId));
+        HashMap<String, Object> sendMap = new HashMap<>();
+        sendMap.put("messageType", 2);
+        sendMap.put("receivePerson", mesMap.get("capacityNumber"));
+        sendMap.put("sendPerson", "system");
+        sendMap.put("messageContent", mesMap);
+        //调用websocket接口
+        imFeign.sendToUser(sendMap);
     }
 
 
     /**
      * 新增仓库排队实绩
-     * @param map orderNumber运输订单号
+     * @param map orderNumber运输订单号  loadingId 装车点
      * @return
      */
     public int addQueueResultByCk(Map<String, Object> map){
         QmsQueueResult qmsQueueResult = new QmsQueueResult();
         //生成主键
         qmsQueueResult.setId(qmsQueueResultMapper.selectMaxId());
-        //查询当前订单下所有的装车作业点
-        List<Integer> loadingIdList = qmsQueueResultMapper.getAllLoadingByOrderNumber((String) map.get("orderNumber"));
-        //遍历所有装车点查询排队车辆数 选择最少的一个先进行排队
-        int platId = 0;
-        int num = 100; //
-        for (Integer platformId : loadingIdList) {
-            int count = queuingRulesService.queueCountByPlatformId(new BigDecimal(platformId)).intValue();
-            if(count == 0){
-                platId = platformId;
-                break;
-            }
-            if(count < num){
-                num = count; //取代比较数
-                platId = platformId; //替换月台ID
-            }
-        }
         //获取添加网格Id
-        map.put("queueLocationId", platId);
+        map.put("queueLocationId", map.get("loadingId"));
         map.put("gridType", 1);
-        qmsQueueResult.setGridId(queuingRulesService.getGridIdByGatepostIdAndGridType(map));
+        BigDecimal gridId = queuingRulesService.getGridIdByGatepostIdAndGridType(map);
+        qmsQueueResult.setGridId(gridId);
         //通过运输订单号查询实绩ID 等数据
         map.putAll(qmsQueueResultMapper.queryCIdAndTIdByOrderNumber((String) map.get("orderNumber")).get(0));
         qmsQueueResult.setResultApplyforTime(new Date());
@@ -128,9 +121,26 @@ public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
         qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
         qmsQueueResult.setInsertTime(new Date());
         qmsQueueResult.setInsertUsername("admin");
+        pushCKMesToWebSocket(DataChange.dataToBigDecimal(map.get("orderId")).intValue(), gridId.intValue());
         return qmsQueueResultMapper.insertSelective(qmsQueueResult);
     }
 
+    /**
+     * 推送仓库排队消息到websocket
+     */
+    public void pushCKMesToWebSocket(Integer orderId, Integer gridId){
+        //通过运输订单ID查询推送给司机的数据
+        Map<String, Object> mesMap = qmsQueueResultMapper.sendWarehouseMesToWebSocket(orderId);
+        mesMap.putAll(qmsQueueResultMapper.queryWarehouseNameByPlatformId(gridId));
+        HashMap<String, Object> sendMap = new HashMap<>();
+        sendMap.put("messageType", 2);
+        sendMap.put("receivePerson", mesMap.get("capacityNumber"));
+        sendMap.put("sendPerson", "system");
+        sendMap.put("messageContent", mesMap);
+        //调用websocket接口
+        imFeign.sendToUser(sendMap);
+    }
+
     /**
      * 查看排队转移界面
      * @param map
@@ -162,7 +172,7 @@ public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
     }
 
     /**
-     * 指令接收 判断条件:是否有排队结束时间
+     * 查询指令接收 判断条件:是否有排队结束时间
      * @param map
      * @return
      */

+ 3 - 1
src/main/java/com/steerinfo/dil/service/impl/QueuingRulesServiceImpl.java

@@ -122,7 +122,9 @@ public class QueuingRulesServiceImpl implements IQueuingRulesService {
 
     /**
      * 获取月台Id 通过物资ID 根据排队规则 获取车辆该去哪个月台
-     * 遗留问题:多种物资会有多个装车实绩 多个月台该如何插入装车实绩  先装哪个物资 查询线路会有多条数据 如何进行筛选
+     * 规则:首先遍历每一种物资 --> 不同物资在不同仓库 -->  遍历仓库通过物资Id和仓库Id查找对应的仓储网格表
+     *       --> 找出多条数据 也就是说多个月台可以装  --> 遍历月台查看每个月台的排队车辆数 寻找最小的排队车辆数的月台
+     *       --> 返回物资ID 和 月台ID
      * @param materialIdList
      * @return
      */

+ 2 - 0
src/main/resources/bootstrap.yml

@@ -55,6 +55,8 @@ openfeign:
     url: ${COLUMNDATAFEIGN_URL:172.16.33.161:8083}
   TmsTruckFeign:
     url: ${TMSTRUCKFEIGN_URL:localhost:8088}
+  Im:
+    url: ${AMSFEIGN_URL:localhost:8888}
 
 
 mybatis:

+ 59 - 31
src/main/resources/com/steerinfo/dil/mapper/QmsQueueResultMapper.xml

@@ -693,37 +693,6 @@
         where OO.ORDER_NUMBER = #{orderNumber}
     </select>
 
-    <!--  通过运输订单号 查找 层次号  垛位 以及仓储网格主键 -->
-    <select id="getWarehouseMesByOrderNum" parameterType="string" resultType="java.util.LinkedHashMap">
-        select DISTINCT RPG.GRID_GRADATION_NUMBER "gridGradationNumber",
-                        RPG.GRID_ID               "gridId",
-                        RPG.WAREHOUSE_ID          "warehouseId"
-        from OMSTRUCK_ORDER OO
-                 left join OMSTRUCK_ORDER_MATERIAL OOM
-                           on OO.ORDER_ID = OOM.ORDER_ID
-                 left join RMS_MATERIAL_STEEL RMS
-                           on RMS.MATERIAL_ID = OOM.MATERIAL_ID
-                 left join WMSP_GRID_MATERIAL WGM
-                           on WGM.MATERIAL_ID = RMS.MATERIAL_STEEL_ID
-                 left join RMS_PWAREHOUSE_GRID RPG
-                           on RPG.GRID_ID = WGM.GRID_ID
-        where OO.ORDER_NUMBER = #{orderNumber}
-        order by RPG.GRID_GRADATION_NUMBER desc
-    </select>
-
-    <!--  查找所有还未装车的装车点 判断条件:是否有装车时间  -->
-    <select id="getAllLoadingByOrderNumber" parameterType="string" resultType="java.lang.Integer">
-        select TLR.LOADING_ID
-
-        from OMSTRUCK_ORDER OO
-                 left join TMSTRUCK_TOTAL_RESULT TTR
-                           on TTR.ORDER_ID = OO.ORDER_ID
-                 left join TMSTRUCK_LOAD_RESULT TLR
-                           on TTR.RESULT_TOTAL_ID = TLR.RESULT_TOTAL_ID
-        where OO.ORDER_NUMBER = #{orderNumber}
-          and TLR.RESULT_LOAD_START_TIME is null
-    </select>
-
 
     <!--  人工添加排队申请查询所有执行中订单 订单状态 :1  -->
     <select id="getAllExecutionOrder" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
@@ -2229,4 +2198,63 @@
         </if>
     </select>
 
+<!--  通过运输订单Id查询推送给司机的数据  -->
+    <select id="sendEnFactoryMesToWebSocket" parameterType="int" resultType="java.util.Map">
+        select
+               OO.ORDER_ID      "orderId",
+               OO.ORDER_NUMBER "orderNumber",
+               RCD.DRIVER_NAME "driverName",
+               RC.CAPACITY_NUMBER "capacityNumber"
+        from OMSTRUCK_ORDER OO
+        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_CAR_DRIVER RCD
+        ON RCD.DRIVER_ID = RDC.DRIVER_ID
+        WHERE ORDER_ID = #{orderId}
+    </select>
+
+<!--  通过网格Id查询进厂门岗名称  -->
+    <select id="queryGatepostNameByGridId" parameterType="int" resultType="java.util.Map">
+        select RG.GATEPOST_NAME "gatepostName"
+        from QMS_QUEUE_GRID QQG
+        left join RMS_GATEPOST RG
+        on RG.GATEPOST_ID = QQG.QUEUE_LOCATION_ID
+        where QQG.GRID_ID = #{gridId}
+    </select>
+
+<!--  通过运输订单Id查询司机仓库排队的数据  -->
+    <select id="sendWarehouseMesToWebSocket" parameterType="int" resultType="java.util.Map">
+        select
+            OO.ORDER_ID      "orderId",
+            OO.ORDER_NUMBER "orderNumber",
+            RCD.DRIVER_NAME "driverName",
+            RC.CAPACITY_NUMBER "capacityNumber"
+        from OMSTRUCK_ORDER OO
+                 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_CAR_DRIVER RCD
+                           ON RCD.DRIVER_ID = RDC.DRIVER_ID
+        WHERE ORDER_ID = #{orderId}
+    </select>
+
+<!--  通过月台网格ID查询仓库名称 和 月台名称  -->
+    <select id="queryWarehouseNameByPlatformId"  parameterType="int" resultType="java.util.Map">
+        select RPP.PLATFORM_NAME "platformName",
+               (  SELECT DISTINCT
+                       RW.WAREHOUSE_NAME
+                  FROM "RMS_PWAREHOUSE_GRID" RPG
+                  JOIN RMS_WAREHOUSE RW
+                    ON RW.WAREHOUSE_ID = RPG.WAREHOUSE_ID
+                  WHERE RPG.PLATFORM_ID = QQG.QUEUE_LOCATION_ID AND PLATFORM_ID IS NOT NULL )
+                "warehouseName"
+        from QMS_QUEUE_GRID QQG
+        left join RMS_PWAREHOUSE_PLATFORM RPP
+        on RPP.PLATFORM_ID = QQG.QUEUE_LOCATION_ID
+        where QQG.GRID_ID = #{gridId}
+    </select>
+
 </mapper>