//package com.yida.data.server.handler;
//
//import cc.mrbird.febs.common.redis.service.RedisService;
//import cn.hutool.core.util.StrUtil;
//import com.yida.data.common.core.entity.constant.CachePrefixConstant;
//import com.yida.data.common.core.entity.constant.LockPrefixConstant;
//import com.yida.data.common.core.utils.EnumUtils;
//import com.yida.data.server.constants.MsgType;
//import com.yida.data.server.service.DataService;
//import com.yida.data.server.utils.ChannelUtil;
//import io.netty.channel.Channel;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.SimpleChannelInboundHandler;
//import java.time.LocalTime;
//import java.time.format.DateTimeFormatter;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//
//@Slf4j
//@RequiredArgsConstructor
//public class MyHandler extends SimpleChannelInboundHandler<String> {
//
//    private final DataService dataService;
//    private final RedisService redisService;
//
//    @Override
//    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws NoSuchMethodException {
//        msg = StrUtil.trim(msg).substring(1);
//        log.info("接收消息:[{}]", msg);
//        String[] datas = msg.split(",");
//        String type = datas[2];
//        String imei = datas[1];
//        if (MsgType.V4.getValue().equals(type)) { // 指令上报回复
//            // 释放锁
//            redisService.falseUnLock(LockPrefixConstant.CARD_CMD_LOCK + datas[1]);
////            type = datas[3];
////            switch (EnumUtils.valueOf(MsgType.class, type, MsgType.class.getMethod("getValue"))) {
////                case LOCATION:
////                    dataService.dealLocation(datas);
////            }
//        } else {  // 定位信息
//            Channel channel = ctx.channel();
//            // 初次登录系统
//            if (!redisService.hasKey(CachePrefixConstant.DEVICE_CARD_ONLINE + imei)) {
//                redisService.hset(CachePrefixConstant.DEVICE_CARD_IMEI_VENDOR, imei, datas[0]);
//                ChannelUtil.online(channel, imei);
//            }
//            switch (EnumUtils.valueOf(MsgType.class, type, MsgType.class.getMethod("getValue"))) {
//                case V2:
//                    dataService.dealDeviceV2(datas);
//                    break;
//                case WIFIMAC:
//                    dataService.dealDeviceWifi(datas);
//                    break;
//                case KA:
//                    dataService.dealDeviceKa(datas);
//                    break;
//                case V3:
//                    dataService.dealDeviceV3(datas);
//                    break;
//                case FENCE_IN:
//                    dataService.dealFenceAlarm(datas, 0);
//                    break;
//                case FENCE_OUT:
//                    dataService.dealFenceAlarm(datas, 1);
//                    break;
//                case STEP:
//                    dataService.dealStep(datas);
//            }
//
//            // 回复设备
//            StringBuilder sb = new StringBuilder();
//            sb.append("*")
//                .append(datas[0])
//                .append(",")
//                .append(datas[1])
//                .append(",V4,")
//                .append(type)
//                .append(",")
//                .append(datas[3])
//                .append(",")
//                .append(LocalTime.now().format(DateTimeFormatter.ofPattern("HHmmss")))
//                .append("#");
//            channel.writeAndFlush(sb.toString());
//
//        }
//        // 在线数据保留300s
//        redisService.set(CachePrefixConstant.DEVICE_CARD_ONLINE + imei, 0, 300L);
//    }
//
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        log.info("链接成功");
//    }
//
//    @Override
//    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
//        Channel channel = ctx.channel();
//        String imei = ChannelUtil.getImei(channel);
//        if (StrUtil.isNotBlank(imei)) {
//            redisService.del(CachePrefixConstant.DEVICE_CARD_ONLINE + imei);
//            ChannelUtil.removeChannel(imei);
//        }
//    }
//}
