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 { @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().eq("fire_no",fireNo)); if(null != locMast){ if(locMast.getFireStatus() != 1) { locMast.setFireStatus(1); locMast.setModiTime(new Date()); locMastService.update(locMast, new EntityWrapper().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() .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); } }