wenhongquan 2 năm trước cách đây
mục cha
commit
8d5f363851

+ 1 - 1
ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java

@@ -1,5 +1,6 @@
 package org.dromara;
 package org.dromara;
 
 
+import com.dtflys.forest.springboot.annotation.ForestScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
 import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
@@ -11,7 +12,6 @@ import org.springframework.context.annotation.ComponentScan;
  * @author Lion Li
  * @author Lion Li
  */
  */
 
 
-//@ComponentScan(basePackages={"cn.hutool.extra.spring"})
 @SpringBootApplication
 @SpringBootApplication
 public class DromaraApplication {
 public class DromaraApplication {
 
 

+ 7 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -247,3 +247,10 @@ justauth:
       redirect-uri: ${justauth.address}/social-callback?source=gitlab
       redirect-uri: ${justauth.address}/social-callback?source=gitlab
 
 
 camelxmlpath: ${XML_PATH:./router/t.xml}
 camelxmlpath: ${XML_PATH:./router/t.xml}
+
+ruoyi:
+  deviceenable: false
+
+yingshi:
+  appkey: 41d1a7a41baa4981a352ab76ff1e652c
+  appsecret: 8ba28044d0c063a79316d3a18a3d3397

+ 6 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -269,3 +269,9 @@ camel:
     name: SampleCamel
     name: SampleCamel
 
 
 
 
+forest:
+  max-connections: 1000        # 连接池最大连接数
+  connect-timeout: 3000        # 连接超时时间,单位为毫秒
+  read-timeout: 3000           # 数据读取超时时间,单位为毫秒
+
+

+ 6 - 1
ruoyi-admin/src/main/resources/router/t.xml

@@ -8,7 +8,7 @@
     <!--同步服务配置-->
     <!--同步服务配置-->
 
 
     <route>
     <route>
-        <from uri="paho:/dev/gps/#?brokerUrl=tcp://122.51.118.117:1883&amp;userName=iot2yun&amp;password=123456&amp;clientId=khy_redclient"></from>
+        <from uri="paho:/dev/gps/#?brokerUrl=tcp://xt.wenhq.top:8581&amp;userName=iot2yun&amp;password=123456&amp;clientId=khy_redclient"></from>
         <to uri="bean:org.dromara.util.CamelDataUtil?method=ReciveData(${body})"></to>
         <to uri="bean:org.dromara.util.CamelDataUtil?method=ReciveData(${body})"></to>
     </route>
     </route>
 
 
@@ -19,6 +19,11 @@
         <to uri="bean:org.dromara.util.CamelDataUtil?method=ReciveTcpData(${body})"></to>
         <to uri="bean:org.dromara.util.CamelDataUtil?method=ReciveTcpData(${body})"></to>
     </route>
     </route>
 
 
+    <route>
+        <from uri="direct:sendMessage"/>
+        <to uri="bean:org.dromara.util.CamelDataUtil?method=processdata(${body})"></to>
+        <to uri="paho:/dev/?brokerUrl=tcp://xt.wenhq.top:8581&amp;userName=iot2yun&amp;password=123456&amp;clientId=khy_writeclient"/>
+    </route>
 
 
 
 
 </routes>
 </routes>

+ 8 - 0
ruoyi-common/ruoyi-common-core/pom.xml

@@ -71,6 +71,14 @@
             <artifactId>lombok</artifactId>
             <artifactId>lombok</artifactId>
         </dependency>
         </dependency>
 
 
+
+        <dependency>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot3-starter</artifactId>
+            <version>1.5.36</version>
+        </dependency>
+
+
         <!--  自动生成YML配置关联JSON文件  -->
         <!--  自动生成YML配置关联JSON文件  -->
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>

+ 1 - 0
ruoyi-modules/ruoyi-khy/pom.xml

@@ -187,6 +187,7 @@
         </dependency>
         </dependency>
 
 
 
 
+
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>

+ 81 - 0
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/system/controller/CommonController.java

@@ -0,0 +1,81 @@
+package org.dromara.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import com.dtflys.forest.backend.okhttp3.OkHttp3;
+import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.system.domain.bo.TblCarInfoBo;
+import org.dromara.system.domain.vo.TblCarInfoVo;
+import org.dromara.system.service.ITblCarDriveWarningService;
+import org.dromara.util.YingshiHttp;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@Slf4j
+@RequestMapping("/system/common")
+public class CommonController extends BaseController {
+
+    @Value("${yingshi.appkey}")
+    String appkey;
+    @Value("${yingshi.appsecret}")
+    String appsecret;
+
+    private final YingshiHttp yingshiHttp;
+//    @Resource
+//    YingshiHttp yingshiHttp;
+    final  static String ACCESTOKEN = "yingshi_token";
+    private final OkHttpClient client = new OkHttpClient();
+    @GetMapping("/{code}/getPlayConfig")
+    public Object getPlayurl(@PathVariable String code) {
+
+        //获取token
+        String accesstoken = RedisUtils.getCacheObject(ACCESTOKEN);
+        if (accesstoken == null) {
+            //登录获取
+            Map resdata =  yingshiHttp.getAccessToken(appkey,appsecret);
+            accesstoken =  ((Map<String,Object>)resdata.get("data")).get("accessToken").toString();
+            Long expire = Long.valueOf(((Map<String,Object>)resdata.get("data")).get("expireTime").toString());
+            RedisUtils.setCacheObject(ACCESTOKEN,accesstoken, Duration.ofMillis(expire- DateUtil.current()));
+        }
+        Map resdata =  yingshiHttp.getLiveAddress(accesstoken,code);
+        String msg = "系统错误";
+        try{
+            msg= (String) resdata.get("msg");
+            Integer codei = Integer.parseInt(resdata.get("code").toString());
+            if(codei!=200) throw new Exception();
+            String playurl =  ((Map<String,Object>)resdata.get("data")).get("url").toString();
+
+            Map<String,Object> ret = new HashMap<>();
+            ret.put("url",playurl);
+            ret.put("accessToken",accesstoken);
+
+            return R.ok(ret);
+
+        }catch (Exception e){
+            R.fail(msg);
+        }
+        log.info("{}",resdata);
+
+        return R.ok();
+
+    }
+}

+ 39 - 10
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/system/controller/TblGpsDataController.java

@@ -30,6 +30,7 @@ import org.dromara.util.MessageUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -62,17 +63,45 @@ public class TblGpsDataController extends BaseController {
 
 
     @GetMapping("/peoplecount/list")
     @GetMapping("/peoplecount/list")
     public Object list(CountDataBo bo) {
     public Object list(CountDataBo bo) {
-        List<CountDataVo> dataVos = countDataService.queryList(bo);
-        Map<String,Object> data = new HashMap<>();
-        int totalin = 0;
-        int totalout = 0;
-        for (int i = 0; i < dataVos.size(); i++) {
-            totalin+=dataVos.get(i).getIncount();
-            totalout+=dataVos.get(i).getOutcount();
+        if(bo.getParams()!=null && bo.getParams().get("times")!=null){
+            List<Map> ret = new ArrayList<>();
+           String [] times = bo.getParams().get("times").toString().split("\\$");
+            for (int i = 0; i <times.length ; i++) {
+               String [] dates = times[i].split("\\|");
+               bo.getParams().put("starttime",dates[0]);
+               bo.getParams().put("endtime",dates[1]);
+                List<CountDataVo> dataVos = countDataService.queryList(bo);
+                Map<String,Object> data = new HashMap<>();
+                int totalin = 0;
+                int totalout = 0;
+                for (int j = 0; j < dataVos.size(); j++) {
+                    totalin+=dataVos.get(j).getIncount();
+                    totalout+=dataVos.get(j).getOutcount();
+                }
+                data.put("totalin",totalin);
+                data.put("totalout",totalout);
+
+                ret.add(data);
+
+            }
+            return R.ok(ret);
+
+        }else{
+            List<CountDataVo> dataVos = countDataService.queryList(bo);
+            Map<String,Object> data = new HashMap<>();
+            int totalin = 0;
+            int totalout = 0;
+            for (int i = 0; i < dataVos.size(); i++) {
+                totalin+=dataVos.get(i).getIncount();
+                totalout+=dataVos.get(i).getOutcount();
+            }
+            data.put("totalin",totalin);
+            data.put("totalout",totalout);
+            return R.ok(data);
         }
         }
-        data.put("totalin",totalin);
-        data.put("totalout",totalout);
-        return R.ok(data);
+
+
+
     }
     }
 
 
 }
 }

+ 4 - 0
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/system/domain/TblCarSchedule.java

@@ -42,5 +42,9 @@ public class TblCarSchedule extends BaseEntity {
 
 
     private String carNum;
     private String carNum;
 
 
+    private String ext1;
+
+    private String ext2;
+
 
 
 }
 }

+ 4 - 0
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/system/domain/bo/TblCarScheduleBo.java

@@ -42,5 +42,9 @@ public class TblCarScheduleBo extends BaseEntity {
      */
      */
     private String carNum;
     private String carNum;
 
 
+    private String ext1;
+
+    private String ext2;
+
 
 
 }
 }

+ 4 - 0
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/system/domain/vo/TblCarScheduleVo.java

@@ -54,4 +54,8 @@ public class TblCarScheduleVo implements Serializable {
 
 
     private String stationInfo;
     private String stationInfo;
 
 
+    private String ext1;
+
+    private String ext2;
+
 }
 }

+ 52 - 8
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/util/CamelDataUtil.java

@@ -1,5 +1,6 @@
 package org.dromara.util;
 package org.dromara.util;
 
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSON;
 import cn.hutool.json.JSON;
@@ -145,7 +146,27 @@ public class CamelDataUtil {
                                                 //靠近站点 还得计算当前是否跨站点
                                                 //靠近站点 还得计算当前是否跨站点
                                                 String stationName =  RedisUtils.getCacheObject(StringUtils.format("car_{}_{}_tip",carInfoVo1.getCarNum(),DateFormatUtils.format( scheduleVo.getScheduleDate(),DateUtils.YYYYMMDDHHMMSS) ));
                                                 String stationName =  RedisUtils.getCacheObject(StringUtils.format("car_{}_{}_tip",carInfoVo1.getCarNum(),DateFormatUtils.format( scheduleVo.getScheduleDate(),DateUtils.YYYYMMDDHHMMSS) ));
                                                 if(stationName!=null && stationName.contains(jsonObject.getStr("stationName"))){
                                                 if(stationName!=null && stationName.contains(jsonObject.getStr("stationName"))){
-                                                    //提报过的不再提报
+                                                    //提报过的不再提报  //离开站记录时间
+
+                                                    try {
+                                                        if (scheduleVo.getExt1() != null) {
+                                                            //进站点 记录时间
+                                                            JSONObject datainout = new JSONObject();
+                                                            datainout = JSONUtil.parseObj(scheduleVo.getExt1());
+                                                            if (datainout.get(jsonObject.getStr("stationName")) != null) {
+                                                                JSONObject inout = datainout.getJSONObject(jsonObject.getStr("stationName"));
+                                                                if (inout.getStr("outtime") == null) {
+                                                                    inout.set("outtime", DateUtil.now());
+                                                                }
+                                                                datainout.set(jsonObject.getStr("stationName"), inout);
+                                                                scheduleVo.setExt1(JSONUtil.toJsonStr(datainout));
+                                                                TblCarScheduleBo scheduleVo1 = new TblCarScheduleBo();
+                                                                scheduleVo1.setId(scheduleVo.getId());
+                                                                scheduleVo1.setExt1(scheduleVo.getExt1());
+                                                                tblCarScheduleService.updateByBo(scheduleVo1);
+                                                            }
+                                                        }
+                                                    }catch (Exception e){}
                                                 }else{
                                                 }else{
                                                    lines1.add(jsonObject);
                                                    lines1.add(jsonObject);
                                                 }
                                                 }
@@ -171,6 +192,23 @@ public class CamelDataUtil {
                                             sysDictData.setDictType("tbl_sites");
                                             sysDictData.setDictType("tbl_sites");
                                             List<SysDictDataVo> stations = sysDictDataService.selectDictDataList(sysDictData);
                                             List<SysDictDataVo> stations = sysDictDataService.selectDictDataList(sysDictData);
                                             if(stations.size()>0){
                                             if(stations.size()>0){
+                                                try{
+                                                    //进站点 记录时间
+                                                    JSONObject datainout = new JSONObject();
+                                                    if(scheduleVo.getExt1()!=null){
+                                                        datainout = JSONUtil.parseObj(scheduleVo.getExt1());
+                                                    }
+                                                    JSONObject inout = new JSONObject();
+                                                    inout.set("intime", DateUtil.now());
+                                                    datainout.set(stations.get(0).getDictLabel(),inout);
+                                                    scheduleVo.setExt1(JSONUtil.toJsonStr(datainout));
+                                                    TblCarScheduleBo scheduleVo1 = new TblCarScheduleBo();
+                                                    scheduleVo1.setId(scheduleVo.getId());
+                                                    scheduleVo1.setExt1(scheduleVo.getExt1());
+                                                    tblCarScheduleService.updateByBo(scheduleVo1);
+                                                }catch (Exception e){}
+
+
                                                 //满足条件播报(led or 广播)
                                                 //满足条件播报(led or 广播)
                                                 String message = StringUtils.format("{}即将到达{},即将到达,请准备接货。", carInfoVo1.getCarNum(),stations.get(0).getDictLabel());
                                                 String message = StringUtils.format("{}即将到达{},即将到达,请准备接货。", carInfoVo1.getCarNum(),stations.get(0).getDictLabel());
                                                 if(StringUtils.isNotEmpty(stations.get(0).getRemark())){
                                                 if(StringUtils.isNotEmpty(stations.get(0).getRemark())){
@@ -255,14 +293,20 @@ public class CamelDataUtil {
                     }
                     }
                 }
                 }
                 iCreatedTime = ((JSONObject)(countdata.getJSONArray("data").get(0))).getLong("iCreatedTime");
                 iCreatedTime = ((JSONObject)(countdata.getJSONArray("data").get(0))).getLong("iCreatedTime");
+                if(iCreatedTime*1000>DateUtil.current()-24*3600*1000  && iCreatedTime*1000<DateUtil.current()+24*3600*1000){
+                    //正确的时间
+                    CountData countData = new CountData();
+                    countData.setIncount(in);
+                    countData.setOutcount(out);
+                    countData.setDevicecode(sn);
+                    countData.setTslong(iCreatedTime*1000);
+                    countDataService.insertData(countData);
+                }else{
+                    log.error("{}:时间错误",iCreatedTime);
+
+                }
                 //存储数据
                 //存储数据
-                log.info("{},{},{},{},{}",sn,type,in,out,iCreatedTime);
-                CountData countData = new CountData();
-                countData.setIncount(in);
-                countData.setOutcount(out);
-                countData.setDevicecode(sn);
-                countData.setTslong(iCreatedTime*1000);
-                countDataService.insertData(countData);
+//                log.info("{},{},{},{},{}",sn,type,in,out,iCreatedTime);
             }
             }
 
 
 
 

+ 15 - 0
ruoyi-modules/ruoyi-khy/src/main/java/org/dromara/util/YingshiHttp.java

@@ -0,0 +1,15 @@
+package org.dromara.util;
+
+import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.Query;
+
+import java.util.Map;
+
+public interface YingshiHttp {
+
+    @Post("https://open.ys7.com/api/lapp/token/get")
+    Map<String,Object> getAccessToken(@Query("appKey") String accessKey, @Query("appSecret") String secretKey);
+
+    @Post("https://open.ys7.com/api/lapp/v2/live/address/get")
+    Map<String,Object> getLiveAddress(@Query("accessToken") String accessToken, @Query("deviceSerial") String deviceSerial);
+}