| package com.zy.core.netty.handle; | 
|   | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.core.common.DateUtils; | 
| import com.core.common.SpringUtils; | 
| import com.zy.asrs.entity.FireLog; | 
| import com.zy.asrs.entity.LocMast; | 
| import com.zy.asrs.service.FireLogService; | 
| import com.zy.asrs.service.LocMastService; | 
| import com.zy.asrs.service.impl.MainServiceImpl; | 
| import com.zy.asrs.utils.Utils; | 
| import com.zy.core.netty.AbstractInboundHandler; | 
| import com.zy.core.netty.cache.ChannelCache; | 
| import com.zy.core.netty.constant.Constant; | 
| import com.zy.core.netty.constant.FireDataType; | 
| import com.zy.core.netty.domain.ChPackage; | 
| import com.zy.core.netty.domain.fire.Fire_3030; | 
| import io.netty.channel.Channel; | 
| import io.netty.channel.ChannelHandler; | 
| import io.netty.channel.ChannelHandlerContext; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.util.Date; | 
|   | 
| /** | 
|  * 国标业务处理handler | 
|  * Created by vincent on 2019-04-02 | 
|  */ | 
| @Slf4j | 
| @Component | 
| @ChannelHandler.Sharable | 
| public class PackageServerHandler extends AbstractInboundHandler<ChPackage> { | 
|   | 
|     @Autowired | 
|     private MainServiceImpl mainService; | 
|     //消防心跳,火警 | 
|     @Override | 
|     protected boolean channelRead0(ChannelHandlerContext ctx, ChPackage pac) { | 
|         FireDataType dataType = FireDataType.get(pac.getBytes()[1], pac.getBytes()[2]); | 
|         Fire_3030 fire3030 = new Fire_3030().readFromBytes(pac.getBytes()); | 
|         switch (dataType) { | 
|             case HEARTBEAT: | 
|                 ChannelCache.setChannel(String.valueOf(fire3030.getNo()), ctx.channel()); | 
|                 Constant.errorMap.remove(fire3030.getNo()); | 
|                 LocMastService locMastService2 = SpringUtils.getBean(LocMastService.class); | 
|                 break; | 
|             case FIRE_ALARM: | 
|                 //消防IO点编号 | 
| //                String fireNo = fire3030.getNo().toString() + fire3030.getLoop().toString() + fire3030.getPartNo().toString(); | 
|                 String fireNo =fire3030.getPartNo().toString();  //0100201 对应  30 31   0200201 对应 34 35 | 
|                 int count=Integer.valueOf(fireNo)/2+Integer.valueOf(fireNo)%2; | 
|                 fireNo=""+count; | 
| //                String fireTime = "20" + fire3030.getYear() + "-" + fire3030.getMonth() + "-" + fire3030.getDay() | 
| //                        + " " + fire3030.getHour() + ":" + fire3030.getMinute() + ":" + fire3030.getSeconds(); | 
|                 Date dt = new Date(); | 
|                 LocMastService locMastService = SpringUtils.getBean(LocMastService.class); | 
|                 if(null != locMastService){ | 
|                     //报警信号更新到库存主档 fire_status字段 | 
|                     LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("fire_no",fireNo)); | 
|                     if(null != locMast){ | 
|                         if(locMast.getFireStatus() != 1) { | 
|                             locMast.setFireStatus(1); | 
|                             locMast.setModiTime(new Date()); | 
|                             locMastService.update(locMast, new EntityWrapper<LocMast>().eq("fire_no", fireNo)); | 
|                         } | 
|   | 
|                         //插入报警日志记录,同一库位同一报警只插入一次 | 
|                         FireLogService fireLogService = SpringUtils.getBean(FireLogService.class); | 
|                         if(null != fireLogService){ | 
|                             String ymd = "20" + fire3030.getYear() + "" + fire3030.getMonth() + "" + fire3030.getDay(); | 
|                             FireLog one = fireLogService.selectOne(new EntityWrapper<FireLog>() | 
|                                     .eq("ymd",ymd) | 
|                                     .eq("fire_no",fireNo)); | 
|                             if(null == one) { | 
|                                 FireLog fireLog = new FireLog(); | 
|                                 fireLog.setYmd(ymd); | 
|                                 fireLog.setFireNo(fireNo); | 
|                                 fireLog.setFireTime(dt); | 
|                                 fireLog.setLocNo(locMast.getLocNo()); | 
|                                 fireLog.setCreateTime(new Date()); | 
|                                 fireLogService.insert(fireLog); | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|                 break; | 
|             default: | 
|                 break; | 
|         } | 
|         return true; | 
|     } | 
|   | 
|     /** | 
|      * 数据下行 | 
|      */ | 
|     public static void write(ChPackage chPackage){ | 
|         String uuid = chPackage.getUuid(); | 
|         Channel channel = ChannelCache.getChannel(uuid); | 
|         if (null == channel){ | 
|             log.warn("通道uuid={} 不在线", uuid); | 
|             return; | 
|         } | 
|         channel.writeAndFlush(chPackage); | 
|     } | 
|   | 
|     /**************************************** 测试专用 *****************************************/ | 
|     public static void main(String[] args){ | 
|         byte[] rfidBytes = new byte[]{(byte)0xA0, 0x13, 0x01, (byte)0x8A, (byte)0xB6, 0x30, 0x00, | 
|                 0x38, 0x30, 0x33, 0x34, 0x35, 0x36, 0x37, (byte)0x38, 0x28, (byte)0xC3, (byte)0x81, 0x2D, (byte)0xB0, 0x2F }; | 
|         if(rfidBytes.length > 15) { | 
|             byte[] dataBytes = new byte[8]; | 
|             dataBytes[0] = rfidBytes[7]; | 
|             dataBytes[1] = rfidBytes[8]; | 
|             dataBytes[2] = rfidBytes[9]; | 
|             dataBytes[3] = rfidBytes[10]; | 
|             dataBytes[4] = rfidBytes[11]; | 
|             dataBytes[5] = rfidBytes[12]; | 
|             dataBytes[6] = rfidBytes[13]; | 
|             dataBytes[7] = rfidBytes[14]; | 
|             String str = new String(dataBytes); | 
|             String barcode = new String(rfidBytes,7,8); | 
|             System.out.println(str); | 
|         } | 
|   | 
|         String aa= "ILY0127 0001"; | 
|         byte[] byteAa = aa.getBytes(); | 
|   | 
|         byte[] bytes = new byte[]{(byte)0x82, 0x38, 0x30, 0x32, 0x34, 0x30, 0x38, 0x39, 0x3B, 0x30, 0x31, 0x31, 0x31, | 
|                                     0x30, 0x33, 0x30, 0x38, 0x31, 0x30, 0x30, 0x34, 0x30, 0x38, 0x38, 0x30, (byte)0x83}; | 
|         Fire_3030 fire3030 = new Fire_3030().readFromBytes(bytes); | 
|         String now = "20" + fire3030.getYear() + "-" + fire3030.getMonth() + "-" + fire3030.getDay() | 
|                 + " " + fire3030.getHour() + ":" + fire3030.getMinute() + ":" + fire3030.getSeconds(); | 
|         //消防IO点编号 | 
|         String fireNo = fire3030.getNo().toString() + fire3030.getLoop().toString() + fire3030.getPartNo().toString(); | 
|         System.out.println(fireNo); | 
|     } | 
| } |