| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package com.tmzn.devicelinkykc.taskQueue.runner;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.tmzn.devicelinkykc.constant.Constant;
- import com.tmzn.devicelinkykc.constant.DeviceOnlineStatus;
- import com.tmzn.devicelinkykc.constant.PortStatusConstant;
- import com.tmzn.devicelinkykc.constant.RedisConstant;
- import com.tmzn.devicelinkykc.constant.ykc.StatusConstant;
- import com.tmzn.devicelinkykc.entity.Device;
- import com.tmzn.devicelinkykc.entity.DeviceStatus;
- import com.tmzn.devicelinkykc.frameMsg.FrameDataSplicing;
- import com.tmzn.devicelinkykc.frameMsg.TransMoney;
- import com.tmzn.devicelinkykc.frameMsg.frameType.HeartFrameSend;
- import com.tmzn.devicelinkykc.frameMsg.frameType.LoginFrame;
- import com.tmzn.devicelinkykc.frameMsg.frameType.RealTimeStatusPushFrame;
- import com.tmzn.devicelinkykc.frameMsg.frameType.TransactionFlowPushFrame;
- import com.tmzn.devicelinkykc.redis.RedisCache;
- import com.tmzn.devicelinkykc.service.*;
- import com.tmzn.devicelinkykc.socket.DeviceConnectionMsg;
- import com.tmzn.devicelinkykc.socket.SocketHandle;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Component;
- import java.math.BigDecimal;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
- @Component
- @Slf4j(topic = "MsgHeartRunner")
- public class MsgFreeRunner {
- @Autowired
- private DeviceService deviceService;
- @Autowired
- private LoginFrame loginFrame;
- @Autowired
- private RedisCache redisCache;
- @Autowired
- private RealTimeStatusPushFrame realTimeStatusPushFrame;
- private static final BigDecimal zero = new BigDecimal("0");
- @Async("freeTaskAsyncPool")
- public void freeMsg(Map<String, DeviceConnectionMsg> map) throws Exception {
- log.info("空闲上报>>"+map.size());
- map.forEach(( devicePileCode,deviceConnectionMsg)->{
- try{
- DeviceStatus deviceStatusOne = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE, devicePileCode);
- if(deviceStatusOne!=null){
- handleOne(deviceStatusOne,deviceConnectionMsg);
- }
- DeviceStatus deviceStatusTwo = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO, devicePileCode);
- if(deviceStatusTwo!=null){
- handleOne(deviceStatusTwo,deviceConnectionMsg);
- }
- }catch (Exception e){
- e.printStackTrace();
- log.info("上报空闲异常{},{}",devicePileCode,e.getMessage());
- }
- });
- //任务处理
- //redis取出在线设备集合
- log.info("======Free status push task ending=====");
- }
- public void handleOne( DeviceStatus deviceStatus,DeviceConnectionMsg deviceConnectionMsg){
- if(deviceStatus==null){
- return;
- }
- try{
- long ts = redisCache.getCacheMapValue(RedisConstant.PILE_GUN_PAY_TIME, deviceStatus.getPileCode()+"_"+deviceStatus.getGunPort());
- if(ts!=0){
- long ts1 = System.currentTimeMillis();
- if((ts1-ts)<300*1000){
- log.info("{}下单时间未超过5分钟不主动上报空闲状态",deviceStatus.getPileCode()+"_"+deviceStatus.getGunPort());
- return;
- }
- }
- }catch (Exception e){
- }
- //标记最后订单时间 5分钟内不上报空闲状态 避免刚下单状态还没更新就被freeTask任务给顶掉了
- //存在设备在线状态的上送空闲状态
- if (deviceConnectionMsg.getLoginStatus()== Constant.DEVICE_NOT_LOGIN_STATUS){
- Long heartTime = deviceConnectionMsg.getHeartTime();
- if (deviceStatus.getOnlineStatus() == DeviceOnlineStatus.ONLINE && (System.currentTimeMillis() - heartTime) > 50 * 1000L) {
- log.info("heartTaskAsyncPool-1>not longin and heart normal>>" + deviceStatus.getPileCode());
- QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
- deviceQueryWrapper.eq("pile_code", deviceStatus.getPileCode()).eq("disabled", DeviceOnlineStatus.NORMAL);
- Device device = deviceService.getOne(deviceQueryWrapper);
- if(device!=null){
- loginFrame.loginMsgSend(deviceConnectionMsg,device);
- }
- }
- return;
- }
- if (deviceStatus.getGunStatus() != StatusConstant.CHARGING) {
- if (deviceConnectionMsg.getLoginStatus() == 1) {
- if (deviceStatus.getGunStatus() == PortStatusConstant.EMERGENCY_STOP) {
- //急停中也是空闲状态上报
- deviceStatus.setGunStatus(StatusConstant.FREE);
- }
- log.info("↑↑↑↑{}-{}空闲实时状态上报",deviceStatus.getPileCode(),deviceStatus.getGunPort());
- realTimeStatusPushFrame.deviceStatusPush(deviceConnectionMsg, FrameDataSplicing.
- transactionNum(deviceStatus.getPileCode(), deviceConnectionMsg.getMessageCount()), deviceStatus.getPileCode(), deviceStatus.getGunPort(), deviceStatus.getGunStatus(), deviceStatus.getInsertGunStatus(), 0, 0, zero, zero, 0);
- }
- }
- }
- }
|