| | |
| | | import com.ruoyi.system.api.model.Enterprise; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/3/4 18:35 |
| | |
| | | public R<Enterprise> getEnterprise(String username) { |
| | | return R.fail("获取企业失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Enterprise>> getAllEnterprise() { |
| | | return R.fail("查询所有数据失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/3/4 18:34 |
| | |
| | | */ |
| | | @PostMapping("/enterprise/getEnterprise") |
| | | R<Enterprise> getEnterprise(@RequestParam("username") String username); |
| | | |
| | | |
| | | /** |
| | | * 查询所有数据 |
| | | * @return |
| | | */ |
| | | @PostMapping("/enterprise/getAllEnterprise") |
| | | R<List<Enterprise>> getAllEnterprise(); |
| | | } |
| | |
| | | // live_hls(data.getUrl(), car); |
| | | // resp.setServerIp(hlsIp); |
| | | // resp.setServerPort(hlsPort); |
| | | |
| | | live_flv(data.getUrl(), car.getId()); |
| | | resp.setUrl(data.getUrl()); |
| | | // live_flv(data.getUrl(), car.getId()); |
| | | resp.setServerIp(flvIp); |
| | | resp.setServerPort(flvHttpPort); |
| | | return R.ok(resp); |
| | |
| | | // live_hls(data.getUrl(), car); |
| | | // resp.setServerIp(hlsIp); |
| | | // resp.setServerPort(hlsPort); |
| | | |
| | | live_flv(data.getUrl(), car.getId()); |
| | | resp.setUrl(data.getUrl()); |
| | | // live_flv(data.getUrl(), car.getId()); |
| | | resp.setServerIp(flvIp); |
| | | resp.setServerPort(flvHttpPort); |
| | | return R.ok(resp); |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | |
| | | Enterprise enterprise = enterpriseService.getById(id); |
| | | return R.ok(enterprise); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取所有数据 |
| | | * @return |
| | | */ |
| | | @PostMapping("/getAllEnterprise") |
| | | public R<List<Enterprise>> getAllEnterprise(){ |
| | | List<Enterprise> list = enterpriseService.list(); |
| | | return R.ok(list); |
| | | } |
| | | } |
| | |
| | | public R<RealVideoResp> getOrderMonitoring(Integer id) { |
| | | Order order = orderService.getById(id); |
| | | if (null == order) { |
| | | return R.fail("获取视频失败"); |
| | | return R.fail("发起实时音视频失败,可能是车辆离线导致"); |
| | | } |
| | | Car car = carService.getById(order.getCarId()); |
| | | //手动加一次状态数据,避免定时任务结束任务线程 |
| | |
| | | // live_hls(data.getUrl(), car); |
| | | // resp.setServerIp(hlsIp); |
| | | // resp.setServerPort(hlsPort); |
| | | |
| | | live_flv(data.getUrl(), car.getId()); |
| | | resp.setUrl(data.getUrl()); |
| | | // live_flv(data.getUrl(), car.getId()); |
| | | resp.setServerIp(flvIp); |
| | | resp.setServerPort(flvHttpPort); |
| | | return R.ok(resp); |
| | | } |
| | | log.error("获取视频失败:{}", startupAckVoR.getMsg()); |
| | | return R.fail("获取视频失败"); |
| | | return R.fail("发起实时音视频失败,可能是车辆离线导致"); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | @Override |
| | | public List<SysMenus> getAllMenu() { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserMapper.selectById(userid); |
| | | SysUserRole sysUserRole = sysUserRoleMapper.selectSysUserRoleByUserId(userid); |
| | | Long roleId = sysUserRole.getRoleId(); |
| | | List<SysMenus> list = menuMapper.getAll(); |
| | | |
| | | // 获取所有 |
| | |
| | | <if test="status != null and status != ''">status,</if> |
| | | <if test="remark != null and remark != ''">remark,</if> |
| | | <if test="createBy != null and createBy != ''">create_by,</if> |
| | | <if test="shopId != null and shopId != ''">shop_id,</if> |
| | | create_time |
| | | )values( |
| | | <if test="roleId != null and roleId != 0">#{roleId},</if> |
| | |
| | | <if test="status != null and status != ''">#{status},</if> |
| | | <if test="remark != null and remark != ''">#{remark},</if> |
| | | <if test="createBy != null and createBy != ''">#{createBy},</if> |
| | | <if test="shopId != null and shopId != ''">#{shopId},</if> |
| | | sysdate() |
| | | ) |
| | | </insert> |
| | |
| | | vo.setUrl("http://" + vo.getServerIP() + ":" + vo.getServerPort() + "/" + encode + "." + vo.getVehicleColor() + ".1.0." + realVideo.getData()); |
| | | return R.ok(vo); |
| | | case 1: |
| | | return R.fail("发起实时音视频失败"); |
| | | return R.fail("发起实时音视频失败,可能是车辆离线导致"); |
| | | case 2: |
| | | return R.fail("不支持实时音视频"); |
| | | case 3: |
| | |
| | | case 5: |
| | | return R.fail("实时音视频不满足跨域条件"); |
| | | default: |
| | | return R.fail("发起实时音视频失败"); |
| | | return R.fail("发起实时音视频失败,可能是车辆离线导致"); |
| | | } |
| | | } |
| | | if (num >= 30) { |
| | | return R.fail("发起实时音视频失败"); |
| | | return R.fail("发起实时音视频失败,可能是车辆离线导致"); |
| | | } |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.dataInterchange.api.vo.UPExgMsgTakeEwayBillAckVo; |
| | | import com.ruoyi.dataInterchange.dao.UPExgMsgTakeEwayBillAckDao; |
| | | import com.ruoyi.dataInterchange.model.UPExgMsgTakeEwayBillAck; |
| | | import org.elasticsearch.index.query.MatchAllQueryBuilder; |
| | | import org.elasticsearch.index.query.RangeQueryBuilder; |
| | | import org.elasticsearch.search.sort.FieldSortBuilder; |
| | | import org.elasticsearch.search.sort.SortBuilders; |
| | | import org.elasticsearch.search.sort.SortOrder; |
| | | import org.springframework.data.domain.PageRequest; |
| | | import org.springframework.data.domain.Sort; |
| | | import org.springframework.data.elasticsearch.client.elc.QueryBuilders; |
| | | import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; |
| | | import org.springframework.data.elasticsearch.core.SearchHit; |
| | | import org.springframework.data.elasticsearch.core.SearchHits; |
| | | import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; |
| | | import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; |
| | | 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 javax.annotation.Resource; |
| | | import javax.naming.directory.SearchResult; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | |
| | | @Resource |
| | | private UPExgMsgTakeEwayBillAckDao upExgMsgTakeEwayBillAckDao; |
| | | |
| | | @Resource |
| | | private ElasticsearchRestTemplate elasticsearchRestTemplate; |
| | | |
| | | |
| | | /** |
| | | * 获取大于给定日期的数据 |
| | |
| | | public R<List<UPExgMsgTakeEwayBillAckVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime) { |
| | | List<UPExgMsgTakeEwayBillAckVo> list = new ArrayList<>(); |
| | | if (-1 == createTime) { |
| | | Iterator<UPExgMsgTakeEwayBillAck> iterator = upExgMsgTakeEwayBillAckDao.findAll().iterator(); |
| | | //设置排序(排序方式,正序还是倒序,排序的 id) |
| | | Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); |
| | | //设置分页(页码,每页显示的条数) |
| | | //当前页码0开始 |
| | | int currentPage = 0; |
| | | //每页显示的条数 |
| | | int pageSize = 10000; |
| | | PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort); |
| | | Iterator<UPExgMsgTakeEwayBillAck> iterator = upExgMsgTakeEwayBillAckDao.findAll(pageRequest).iterator(); |
| | | if (iterator.hasNext()) { |
| | | UPExgMsgTakeEwayBillAck takeEwayBillAck = iterator.next(); |
| | | UPExgMsgTakeEwayBillAckVo vo = new UPExgMsgTakeEwayBillAckVo(); |
| | |
| | | list.add(vo); |
| | | } |
| | | } else { |
| | | List<UPExgMsgTakeEwayBillAck> takeEwayBillAcks = upExgMsgTakeEwayBillAckDao.findByCreateTimeAfter(createTime); |
| | | for (UPExgMsgTakeEwayBillAck takeEwayBillAck : takeEwayBillAcks) { |
| | | //查询,获取查询结果 |
| | | List<UPExgMsgTakeEwayBillAck> byCreateTimeIsAfter = upExgMsgTakeEwayBillAckDao.findByCreateTimeIsAfter(createTime); |
| | | for (UPExgMsgTakeEwayBillAck searchHit : byCreateTimeIsAfter) { |
| | | UPExgMsgTakeEwayBillAckVo vo = new UPExgMsgTakeEwayBillAckVo(); |
| | | BeanUtils.copyProperties(takeEwayBillAck, vo); |
| | | BeanUtils.copyProperties(searchHit, vo); |
| | | list.add(vo); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.dataInterchange.dao; |
| | | |
| | | import com.ruoyi.dataInterchange.model.UPExgMsgTakeEwayBillAck; |
| | | import org.springframework.data.domain.PageRequest; |
| | | import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.awt.print.Pageable; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | * @param createTime |
| | | * @return |
| | | */ |
| | | List<UPExgMsgTakeEwayBillAck> findByCreateTimeAfter(Long createTime); |
| | | List<UPExgMsgTakeEwayBillAck> findByCreateTimeIsAfter(Long createTime); |
| | | } |
| | |
| | | import io.netty.channel.group.DefaultChannelGroup; |
| | | import io.netty.util.concurrent.GlobalEventExecutor; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | |
| | | */ |
| | | public class ChannelMap { |
| | | //存储主链路通道 |
| | | private static final ChannelGroup SERVER_GROUP = new DefaultChannelGroup("Jtt809Server", GlobalEventExecutor.INSTANCE); |
| | | private static ChannelGroup SERVER_GROUP = new DefaultChannelGroup("Jtt809Server", GlobalEventExecutor.INSTANCE); |
| | | //存储主链路ID |
| | | private static final Map<Integer, ChannelId> SERVER_ID_MAP = new ConcurrentHashMap<>(); |
| | | private static Map<Integer, ChannelId> SERVER_ID_MAP = new HashMap<>(); |
| | | //存储从链路通道 |
| | | private static final ChannelGroup CLIENT_GROUP = new DefaultChannelGroup("Jtt809Client", GlobalEventExecutor.INSTANCE); |
| | | private static ChannelGroup CLIENT_GROUP = new DefaultChannelGroup("Jtt809Client", GlobalEventExecutor.INSTANCE); |
| | | //存储从链路ID |
| | | private static final Map<Integer, ChannelId> CLIENT_ID_MAP = new ConcurrentHashMap<>(); |
| | | private static Map<Integer, ChannelId> CLIENT_ID_MAP = new HashMap<>(); |
| | | //存储从链路连接地址和端口号 |
| | | private static final Map<Integer, UPConnect> IP_PORT = new ConcurrentHashMap<>(); |
| | | private static Map<Integer, UPConnect> IP_PORT = new HashMap<>(); |
| | | //存储从链路连接重试次数 |
| | | private static final Map<Integer, Integer> TIMES = new ConcurrentHashMap<>(); |
| | | private static Map<Integer, Integer> TIMES = new HashMap<>(); |
| | | |
| | | /** |
| | | * 保存通道 |
| | |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public static int getTimes(int key) { |
| | | public static Integer getTimes(int key) { |
| | | return TIMES.get(key); |
| | | } |
| | | |
| | |
| | | |
| | | public void up_authorize_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | |
| | | public void up_base_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | |
| | | public void up_ctrl_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | import com.ruoyi.dataInterchange.netty.client.ChannelMap; |
| | | import com.ruoyi.dataInterchange.util.jtt809.packet.common.OuterPacket; |
| | | import com.ruoyi.dataInterchange.wapper.UPConnect; |
| | | import com.ruoyi.system.api.feignClient.EnterpriseClient; |
| | | import com.ruoyi.system.api.model.Enterprise; |
| | | import io.netty.buffer.ByteBuf; |
| | | import io.netty.buffer.Unpooled; |
| | | import io.netty.channel.Channel; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | | import java.util.concurrent.ScheduledThreadPoolExecutor; |
| | |
| | | @Resource |
| | | private ConnectReqService connectReqService; |
| | | |
| | | private Map<Integer, ScheduledExecutorService> scheduledMap = new HashMap<>(); |
| | | @Resource |
| | | private EnterpriseClient enterpriseClient; |
| | | |
| | | |
| | | /** |
| | |
| | | public void connectRsp(ChannelHandlerContext ctx, OuterPacket outerPacket) { |
| | | ByteBuf byteBuf = Unpooled.wrappedBuffer(outerPacket.getBody()); |
| | | DOWNConnectRsp downConnectRsp = new DOWNConnectRsp().decode(byteBuf); |
| | | //从链路保持请求 |
| | | downLinkTest(outerPacket.getGnsscenterId()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从链路连接保持请求 |
| | | * |
| | | * @param inferiorPlatformId |
| | | */ |
| | | public void downLinkTest(int inferiorPlatformId) { |
| | | ScheduledExecutorService scheduledExecutorService = scheduledMap.get(inferiorPlatformId); |
| | | if (null == scheduledExecutorService) { |
| | | //创建定时任务间隔发送链接保持请求 |
| | | scheduledExecutorService = new ScheduledThreadPoolExecutor(1); |
| | | scheduledExecutorService.scheduleAtFixedRate(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | public void downLinkTest(Integer inferiorPlatformId) { |
| | | //获取从链路通道 |
| | | Channel channel = ChannelMap.getClientChannel(inferiorPlatformId); |
| | | if (null != channel && channel.isActive()) { |
| | |
| | | redisTemplate.opsForValue().set("login:" + inferiorPlatformId, System.currentTimeMillis(), 1, TimeUnit.MINUTES); |
| | | } else { |
| | | //记录失败次数,然后再重新连接 |
| | | int times = ChannelMap.getTimes(inferiorPlatformId); |
| | | Integer times = ChannelMap.getTimes(inferiorPlatformId); |
| | | if(null == times){ |
| | | times = 0; |
| | | } |
| | | if (times >= 18) { |
| | | UPConnect ipAndPort = ChannelMap.getIpAndPort(inferiorPlatformId); |
| | | boolean b = connectReqService.downConnect(inferiorPlatformId, ipAndPort.getDownLinkIp(), ipAndPort.getDownLinkPort(), ipAndPort.getVerifyCode()); |
| | |
| | | times++; |
| | | } |
| | | ChannelMap.saveTimes(inferiorPlatformId, times); |
| | | } |
| | | } |
| | | }, 10, 10, TimeUnit.SECONDS); |
| | | scheduledMap.put(inferiorPlatformId, scheduledExecutorService); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | public void up_exg_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | */ |
| | | public void down_exg_msg_take_ewaybill_req(int inferiorPlatformId, String vehicleNo, int VehicleColor) { |
| | | if (!redisTemplate.hasKey("login:" + inferiorPlatformId)) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", inferiorPlatformId); |
| | | return; |
| | | } |
| | | DOWNExgMsgTakeEwaybillReq downExgMsgTakeEwaybillReq = new DOWNExgMsgTakeEwaybillReq(); |
| | |
| | | */ |
| | | public void down_base_msg_vehicle_added(int inferiorPlatformId, String vehicleNo, int VehicleColor) { |
| | | if (!redisTemplate.hasKey("login:" + inferiorPlatformId)) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", inferiorPlatformId); |
| | | return; |
| | | } |
| | | DOWNBaseMsgVehicleAdded downBaseMsgVehicleAdded = new DOWNBaseMsgVehicleAdded(); |
| | |
| | | |
| | | public void up_platform_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | */ |
| | | public void up_playback_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | |
| | | public void up_realvideo_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | @Resource |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Resource |
| | | private DOWNConnectRspService downConnectRspService; |
| | | |
| | | |
| | | /** |
| | | * 主链路连接保持 |
| | |
| | | */ |
| | | public void linkTest(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | rep.setGnsscenterId(gnsscenterId); |
| | | log.info("主链路连接保持应答({}):{}", DataType.UP_LINKTEST_RSP.getCode(), JSON.toJSONString(rep)); |
| | | ctx.writeAndFlush(rep); |
| | | //从链路保持请求 |
| | | downConnectRspService.downLinkTest(gnsscenterId); |
| | | } |
| | | } |
| | |
| | | |
| | | public void up_warn_msg(ChannelHandlerContext ctx, OuterPacket out) { |
| | | if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId()); |
| | | ctx.close(); |
| | | return; |
| | | } |
| | |
| | | */ |
| | | public void down_warn_msg_urge_todo_req(UPWarnMsgAdptInfo upWarnMsgAdptInfo) { |
| | | if (!redisTemplate.hasKey("login:" + upWarnMsgAdptInfo.getInferiorPlatformId())) { |
| | | log.error("链路还未登录校验,拒绝连接"); |
| | | log.error("链路还未登录校验,拒绝连接:{}", upWarnMsgAdptInfo.getInferiorPlatformId()); |
| | | return; |
| | | } |
| | | int inferiorPlatformId = upWarnMsgAdptInfo.getInferiorPlatformId(); |
| | |
| | | package com.ruoyi.dataInterchange.util; |
| | | |
| | | import com.ruoyi.dataInterchange.server.DOWNConnectRspService; |
| | | import com.ruoyi.dataInterchange.server.ExgMsgService; |
| | | import com.ruoyi.dataInterchange.server.WarnMsgService; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | |
| | | @Resource |
| | | private WarnMsgService warnMsgService; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 定时任务获取驾驶员信息 |
| | | */ |