DeJuRFIDService.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package com.zd.netty.sdk;
  2. import com.gg.reader.api.dal.GClient;
  3. import com.gg.reader.api.dal.HandlerTagEpcLog;
  4. import com.gg.reader.api.dal.HandlerTagEpcOver;
  5. import com.gg.reader.api.protocol.gx.*;
  6. import com.zd.common.core.exception.ServiceException;
  7. import com.zd.netty.service.ISendService;
  8. import com.zd.netty.service.IService;
  9. import com.zd.netty.thread.ThreadPoolTaskConfig;
  10. import com.zd.system.api.domain.InventoryTag;
  11. import com.zd.system.api.laboratory.domain.RemoteLabHardware;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.BeanUtils;
  14. import org.springframework.stereotype.Service;
  15. import javax.annotation.Resource;
  16. import java.util.Hashtable;
  17. import java.util.Map;
  18. import java.util.Objects;
  19. import java.util.concurrent.ConcurrentHashMap;
  20. @Slf4j
  21. @Service
  22. public class DeJuRFIDService implements IService {
  23. @Resource
  24. private ISendService sendService;
  25. private final Map<String, GClient> clientMap = new ConcurrentHashMap<>();
  26. @Resource
  27. private ThreadPoolTaskConfig threadPoolTaskConfig;
  28. @Override
  29. public void start(RemoteLabHardware hardware) {
  30. GClient client;
  31. String ipAddress = hardware.getIpAddress();
  32. if (clientMap.containsKey(ipAddress)) {
  33. client = clientMap.get(ipAddress);
  34. } else {
  35. client = new GClient();
  36. clientMap.put(ipAddress, client);
  37. }
  38. if (client.openTcp(ipAddress + ":8160", 2000)) {
  39. // 订阅标签上报事件
  40. subscribeHandler(client);
  41. // 功率配置, 将4个天线功率都设置为30dBm.
  42. Integer uniformPower = hardware.getUniformPower();
  43. MsgBaseGetPower msgBaseGetPower = new MsgBaseGetPower();
  44. client.sendSynMsg(msgBaseGetPower);
  45. if (0 == msgBaseGetPower.getRtCode()) {
  46. Hashtable<Integer, Integer> dicPower = msgBaseGetPower.getDicPower();
  47. Integer integer = dicPower.get(0);
  48. if (!Objects.equals(integer, uniformPower)) {
  49. MsgBaseSetPower msgBaseSetPower = new MsgBaseSetPower();
  50. Hashtable<Integer, Integer> hashtable = new Hashtable<>();
  51. Integer channels = hardware.getChannels();
  52. for (int i = 1; i <= channels; i++) {
  53. hashtable.put(i, uniformPower);
  54. }
  55. msgBaseSetPower.setDicPower(hashtable);
  56. client.sendSynMsg(msgBaseSetPower);
  57. if (0 == msgBaseSetPower.getRtCode()) {
  58. log.info("Power configuration successful.");
  59. } else {
  60. log.info("Power configuration error.");
  61. }
  62. }
  63. } else {
  64. log.info("Power configuration error.");
  65. }
  66. //蜂鸣器设置
  67. // MsgAppSetBeep msgAppSetBeep = new MsgAppSetBeep();
  68. // msgAppSetBeep.setBeepMode(hardware.getSessionIndex() > 1 ? 1 : 0);
  69. // msgAppSetBeep.setBeepStatus(1);
  70. // client.sendSynMsg(msgAppSetBeep);
  71. //
  72. // if (0 == msgAppSetBeep.getRtCode()) {
  73. // log.info("Beep epc successful.");
  74. // } else {
  75. // log.info("Beep epc error.");
  76. // }
  77. //天线读卡, 读取EPC数据区以及TID数据区
  78. MsgBaseInventoryEpc msgBaseInventoryEpc = new MsgBaseInventoryEpc();
  79. switch (hardware.getChannels()) {
  80. case 4:
  81. msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4);
  82. break;
  83. case 8:
  84. msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8);
  85. break;
  86. case 16:
  87. msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8 | EnumG.AntennaNo_9 | EnumG.AntennaNo_10 | EnumG.AntennaNo_11 | EnumG.AntennaNo_12 | EnumG.AntennaNo_13 | EnumG.AntennaNo_14 | EnumG.AntennaNo_15 | EnumG.AntennaNo_16);
  88. break;
  89. case 1:
  90. default:
  91. msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1);
  92. }
  93. msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory);
  94. client.sendSynMsg(msgBaseInventoryEpc);
  95. if (0 == msgBaseInventoryEpc.getRtCode()) {
  96. log.info("Inventory epc successful.");
  97. } else {
  98. log.info("Inventory epc error.");
  99. }
  100. } else {
  101. throw new ServiceException("Connect failure.");
  102. }
  103. }
  104. @Override
  105. public void disconnect(RemoteLabHardware hardware) {
  106. String ipAddress = hardware.getIpAddress();
  107. if (clientMap.containsKey(ipAddress)) {
  108. GClient client = clientMap.get(ipAddress);
  109. MsgAppSetGpo msgAppSetGpo=new MsgAppSetGpo();
  110. msgAppSetGpo.setGpo1(0);
  111. msgAppSetGpo.setGpo2(0);
  112. msgAppSetGpo.setGpo3(0);
  113. msgAppSetGpo.setGpo4(0);
  114. msgAppSetGpo.setGpo5(0);
  115. msgAppSetGpo.setGpo6(0);
  116. msgAppSetGpo.setGpo7(0);
  117. msgAppSetGpo.setGpo8(0);
  118. client.sendSynMsg(msgAppSetGpo);
  119. if (0 == msgAppSetGpo.getRtCode()) {
  120. log.info("Gpo epc stop successful.");
  121. } else {
  122. log.error("Gpo epc stop error.");
  123. }
  124. MsgBaseStop msg = new MsgBaseStop();
  125. // 停止读卡,空闲态
  126. client.sendSynMsg(msg);
  127. if (0 == msg.getRtCode()) {
  128. log.info("Stop successful.");
  129. } else {
  130. log.info("Stop error.");
  131. }
  132. log.info("Close the connection");
  133. client.close();
  134. clientMap.remove(ipAddress);
  135. }
  136. }
  137. /**
  138. * 订阅6c标签信息上报
  139. *
  140. * @param client 客户端
  141. */
  142. private void subscribeHandler(GClient client) {
  143. client.onTagEpcLog = (s, logBaseEpcInfo) -> {
  144. if (logBaseEpcInfo.getResult() == 0) {
  145. //灯带设置
  146. MsgAppSetGpo msgAppSetGpo=new MsgAppSetGpo();
  147. msgAppSetGpo.setGpo1(1);
  148. msgAppSetGpo.setGpo2(1);
  149. msgAppSetGpo.setGpo3(1);
  150. msgAppSetGpo.setGpo4(1);
  151. msgAppSetGpo.setGpo5(1);
  152. msgAppSetGpo.setGpo6(1);
  153. msgAppSetGpo.setGpo7(1);
  154. msgAppSetGpo.setGpo8(1);
  155. client.sendSynMsg(msgAppSetGpo);
  156. if (0 == msgAppSetGpo.getRtCode()) {
  157. log.info("Gpo epc successful.");
  158. } else {
  159. log.error("Gpo epc error.");
  160. }
  161. threadPoolTaskConfig.getAsyncExecutor().execute(() -> {
  162. msgAppSetGpo.setGpo1(0);
  163. msgAppSetGpo.setGpo2(0);
  164. msgAppSetGpo.setGpo3(0);
  165. msgAppSetGpo.setGpo4(0);
  166. msgAppSetGpo.setGpo5(0);
  167. msgAppSetGpo.setGpo6(0);
  168. msgAppSetGpo.setGpo7(0);
  169. msgAppSetGpo.setGpo8(0);
  170. client.sendSynMsg(msgAppSetGpo);
  171. if (0 == msgAppSetGpo.getRtCode()) {
  172. log.info("Gpo epc stop successful.");
  173. } else {
  174. log.error("Gpo epc stop error.");
  175. }
  176. },8*1000);
  177. InventoryTag tag = new InventoryTag();
  178. BeanUtils.copyProperties(logBaseEpcInfo, tag);
  179. sendService.send(tag);
  180. }
  181. };
  182. client.onTagEpcOver = (s, logBaseEpcOver) -> log.info("HandlerTagEpcOver");
  183. }
  184. }