dacoo-data-sdk-yongfeng/src/main/java/com/cisdi/data/IDCardReader/IDCardReaderGateway.java

101 lines
3.8 KiB
Java
Raw Normal View History

2024-09-04 14:38:10 +08:00
package com.cisdi.data.IDCardReader;
import com.alibaba.fastjson.JSON;
import com.cisdi.data.IDCardReader.gateway.impl.ZKIDROnlineClient;
import com.cisdi.data.IDCardReader.gateway.impl.ZKIDROnlineListener;
import com.cisdi.data.IDCardReader.gateway.vo.ZKIDROnlineConfigVo;
import com.cisdi.data.IDCardReader.gateway.vo.ZKIDROnlineResponseVo;
import com.cisdi.data.common.exception.BusinessException;
import com.cisdi.data.emserver.EmiaProSocketGateway;
import com.cisdi.data.sdk.consts.ServiceName;
import com.cisdi.data.sdk.enums.GatewayState;
import com.cisdi.data.sdk.gateway.base.SocketGatewayBase;
import com.cisdi.data.sdk.param.ListenSocketParam;
import com.cisdi.data.sdk.procotol.message.SocketReturnMessage;
import com.cisdi.data.sdk.service.RouteService;
import com.cisdi.data.sdk.vo.DeviceVo;
import com.cisdi.data.sdk.vo.ExeResultVo;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Set;
public class IDCardReaderGateway extends SocketGatewayBase {
private static Logger logger = LoggerFactory.getLogger(IDCardReaderGateway.class);
private ZKIDROnlineClient zkidrOnlineClient=null;
private String deviceId;
@Override
public ExeResultVo sendReturnMessage(SocketReturnMessage returnMsg) {
ExeResultVo resultVo = new ExeResultVo();
resultVo.setMessage("该协议不允许下发数据");
resultVo.setSuccess(false);
logger.info("网关:{}->设备,消息:{},结果:{}",instanceVo.getRunId(), returnMsg, resultVo);
return resultVo;
}
@Override
public void start() {
if (state == GatewayState.RUNNING) {
return;
}
ListenSocketParam socketParam = JSON.parseObject(getInstanceVo().getParameter(), ListenSocketParam.class);
String otherParameter = socketParam.getOtherParameter();
ZKIDROnlineConfigVo zkidrOnlineConfigVo = null;
// 处理分组
if (StringUtils.isNotBlank(otherParameter)) {
zkidrOnlineConfigVo = JSON.parseObject(otherParameter, ZKIDROnlineConfigVo.class);
}
if (zkidrOnlineConfigVo == null) {
throw new BusinessException("网关Id:" + instanceVo.getRunId() + "为ZKIDROnline网关请配置正确的ZKIDROnline配置");
}
RouteService routeService = (RouteService) serviceProvider.getByName(ServiceName.Route);
List<DeviceVo> deviceVos = routeService.findByRunId(instanceVo.getRunId());
if (deviceVos.size() > 1) {
throw new BusinessException("网关Id:" + instanceVo.getRunId() + "为ZKIDROnline网关只允许关联一个设备Id");
}
deviceId = deviceVos.size() > 0 ? deviceVos.get(0).getDeviceId() : null;
if (StringUtils.isEmpty(deviceId)) {
throw new BusinessException("runId=" + getInstanceVo().getRunId() + "未正确配置网关和设备关联");
}
logger.info("ZKIDROnline网关:{}读取启动配置参数:{}", instanceVo.getRunId(), getInstanceVo().getParameter());
zkidrOnlineClient=new ZKIDROnlineClient(deviceId,serviceProvider,this,zkidrOnlineConfigVo);
Thread thread=new Thread(zkidrOnlineClient);
thread.start();
state = GatewayState.RUNNING;
}
@Override
public void shutdown() {
if (state == GatewayState.CLOSED) {
return;
}
if(zkidrOnlineClient.close())
{
state=GatewayState.CLOSED;
logger.info("网关:" + instanceVo.getRunId() + "关闭成功", instanceVo.getRunId());
}
}
@Override
public Set<String> getActiveDeviceIds() {
Set<String> set = Sets.newConcurrentHashSet();
if (StringUtils.isNotEmpty(deviceId)) {
set.add(deviceId);
}
return set;
}
}