123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package com.gzlh.device.rfid.handler.impl;
- import cn.hutool.cache.CacheUtil;
- import cn.hutool.cache.impl.TimedCache;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.extra.spring.SpringUtil;
- import com.gzlh.bus.EventBus;
- import com.gzlh.bus.EventDataManager;
- import com.gzlh.config.ModuleEnum;
- import com.gzlh.device.led.utils.CRC16;
- import com.gzlh.device.rfid.action.IElectronAction;
- import com.gzlh.device.rfid.brand.ElectronBrandType;
- import com.gzlh.device.rfid.client.ElectronNettyConfig;
- import com.gzlh.device.rfid.enums.CardType;
- import com.gzlh.device.rfid.event.RFIDDefaultEvent;
- import com.gzlh.device.rfid.handler.IElectronHandler;
- import com.gzlh.device.rfid.service.RfidService;
- import com.gzlh.utils.CRC16Util;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
- import javax.annotation.Resource;
- import javax.xml.bind.DatatypeConverter;
- import java.util.ArrayList;
- import java.util.List;
- @Slf4j
- @Component
- public class ZKRfidHandler implements IElectronHandler {
- private static final TimedCache<String, Integer> TIMED_CACHE = CacheUtil.newTimedCache(30000);
- @Resource
- private ElectronNettyConfig electronNettyConfig;
- @Resource
- private RfidService rfidService;
- @Override
- public ElectronBrandType brandType() {
- return ElectronBrandType.ZH_BRAND;
- }
- @Override
- public void handlerAction(String action) {
- if (action.equals(IElectronAction.START_READ_CARD)) {
- startToRead(CardType.TYPE_6C);
- } else if (action.equals(IElectronAction.CHECK_HARBORPOLE_VERIFICATION)) {
- rfidService.checkHarborpoleVerification();
- } else if (action.equalsIgnoreCase(IElectronAction.FIND_CAR_NO_BY_RFID)) {
- rfidService.findCarNoByRfid();
- }
- }
- @Override
- public void sendMsg(String msg) {
- electronNettyConfig.send(msg);
- }
- @Override
- public void handlerMsg(String msg) {
- int len = msg.length();
- String crcStr = StrUtil.sub(msg, len - 4, len);
- String packetStr = StrUtil.sub(msg, 0, len - 4);
- String checkCRC16 = CRC16Util.getCRC16Hex(packetStr);
- if (!StrUtil.equals(crcStr, checkCRC16)) {
- return;
- }
- String dataPack = StrUtil.subSuf(packetStr, 10);
- //卡数量
- int cardNum = Integer.parseInt(StrUtil.sub(packetStr, 8, 10));
- List<String> cardList = new ArrayList<>();
- int startIndex = 2;
- for (int i = 0; i < cardNum; i++) {
- String cardHex = StrUtil.sub(dataPack, startIndex, startIndex + 24);
- startIndex += 26;
- System.out.println(cardHex);
- cardList.add(cardHex);
- }
- String cacheKey = StrUtil.join(",", cardList);
- Integer count = TIMED_CACHE.get(cacheKey, true);
- if (count != null && count == 5) {
- log.info("rfid dataHex zk==== :{}", cacheKey);
- EventBus eventBus = SpringUtil.getBean(EventBus.class);
- EventDataManager.cacheData("eri", cacheKey);
- eventBus.startEvent(ModuleEnum.ELECTRON_MODULE.getModuleEn() + "." + RFIDDefaultEvent.RFID_READ);
- return;
- }
- if (count == null) {
- count = 0;
- }
- count = count + 1;
- TIMED_CACHE.put(cacheKey, count);
- //13 00 01 01 01 0C E2 00 00 00 1A 0C 02 72 18 20 EC B8 16EA
- //20 00 01 01 02 0C E200001D8817007817602D1F 0C E20000001A0C02721820ECB8 2813
- //3A000101040CFEDC000000000000008102BA0CE200001B170902202610C3A60CE200001D8817007817602D1F0CE20000001A0C02721820ECB81F29
- // log.info("接收到ZKRfid消息:{}", msg);
- // TODO 卡号处理
- }
- @Override
- public void setReaderCmdModule(boolean commandModule) {
- }
- @Override
- public void startToRead(CardType cardType) {
- String command = "040001DB4B";
- // String command="040036E70E";
- sendMsg(command);
- }
- }
|