AccessControlQrcodeVerificationCmd.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.java110.common.cmd.machine;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.annotation.Java110Cmd;
  4. import com.java110.core.context.ICmdDataFlowContext;
  5. import com.java110.core.event.cmd.Cmd;
  6. import com.java110.core.event.cmd.CmdEvent;
  7. import com.java110.doc.annotation.*;
  8. import com.java110.dto.accessControl.AccessControlWhiteAuthDto;
  9. import com.java110.dto.community.CommunityLocationDto;
  10. import com.java110.dto.machine.MachineDto;
  11. import com.java110.dto.owner.OwnerDto;
  12. import com.java110.dto.owner.OwnerRoomRelDto;
  13. import com.java110.dto.room.RoomDto;
  14. import com.java110.dto.user.UserDto;
  15. import com.java110.intf.common.IAccessControlWhiteAuthV1InnerServiceSMO;
  16. import com.java110.intf.common.IMachineV1InnerServiceSMO;
  17. import com.java110.intf.community.IRoomV1InnerServiceSMO;
  18. import com.java110.intf.user.*;
  19. import com.java110.utils.exception.CmdException;
  20. import com.java110.utils.util.Assert;
  21. import com.java110.vo.ResultVo;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import java.text.ParseException;
  24. import java.util.List;
  25. @Java110CmdDoc(title = "门禁二维码核验接口",
  26. description = "主要用于门禁机刷二维码时调用该接口核验,<br/>" +
  27. "请求其他接口时 头信息中需要加 Authorization: Bearer token ,<br/>" +
  28. "token 是这个接口返回的内容<br/> " +
  29. "会话保持为2小时,请快要到2小时时,再次登录,保持会话</br>",
  30. httpMethod = "post",
  31. url = "http://{ip}:{port}/app/machine.accessControlQrcodeVerification",
  32. resource = "commonDoc",
  33. author = "吴学文",
  34. serviceCode = "machine.accessControlQrcodeVerification",
  35. seq = 1
  36. )
  37. @Java110ParamsDoc(
  38. headers = {
  39. @Java110HeaderDoc(name = "APP-ID", defaultValue = "通过dev账户分配应用", description = "应用APP-ID"),
  40. @Java110HeaderDoc(name = "TRANSACTION-ID", defaultValue = "uuid", description = "交易流水号"),
  41. @Java110HeaderDoc(name = "REQ-TIME", defaultValue = "20220917120915", description = "请求时间 YYYYMMDDhhmmss"),
  42. @Java110HeaderDoc(name = "JAVA110-LANG", defaultValue = "zh-cn", description = "语言中文"),
  43. @Java110HeaderDoc(name = "USER-ID", defaultValue = "-1", description = "调用用户ID 一般写-1"),
  44. },
  45. params = {
  46. @Java110ParamDoc(name = "qrCode", length = 30, remark = "二维码"),
  47. @Java110ParamDoc(name = "machineCode", length = 30, remark = "设备编码"),
  48. })
  49. @Java110ResponseDoc(
  50. params = {
  51. @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
  52. @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
  53. @Java110ParamDoc(name = "data", type = "Object", remark = "有效数据"),
  54. @Java110ParamDoc(parentNodeName = "data", name = "userName", type = "String", remark = "用户名称"),
  55. @Java110ParamDoc(parentNodeName = "data", name = "openDoor", type = "boolean", remark = "开门 true 开门 false 不开门"),
  56. }
  57. )
  58. @Java110ExampleDoc(
  59. reqBody = "{'qrCode':'wuxw','machineCode':'admin'}",
  60. resBody = "{'code':0,'msg':'成功','data':{'userName':'123123','openDoor':true}}"
  61. )
  62. /**
  63. * 门禁二维码核验接口
  64. */
  65. @Java110Cmd(serviceCode = "machine.accessControlQrcodeVerification")
  66. public class AccessControlQrcodeVerificationCmd extends Cmd {
  67. @Autowired
  68. private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
  69. @Autowired
  70. private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
  71. @Autowired
  72. private IMachineV1InnerServiceSMO machineV1InnerServiceSMOImpl;
  73. @Autowired
  74. private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
  75. @Autowired
  76. private IRoomV1InnerServiceSMO roomV1InnerServiceSMOImpl;
  77. @Autowired
  78. private IAccessControlWhiteAuthV1InnerServiceSMO accessControlWhiteAuthV1InnerServiceSMOImpl;
  79. @Override
  80. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  81. Assert.hasKeyAndValue(reqJson, "qrCode", "未包含二维码信息");
  82. Assert.hasKeyAndValue(reqJson, "machineCode", "未包含设备编码");
  83. }
  84. @Override
  85. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
  86. JSONObject data = new JSONObject();
  87. //todo 查询设备信息
  88. MachineDto machineDto = new MachineDto();
  89. machineDto.setMachineCode(reqJson.getString("machineCode"));
  90. List<MachineDto> machineDtos = machineV1InnerServiceSMOImpl.queryMachines(machineDto);
  91. if (machineDtos == null || machineDtos.size() < 1) {
  92. throw new IllegalArgumentException("设备不存在");
  93. }
  94. String userId = userV1InnerServiceSMOImpl.getUserIdByQrCode(reqJson.getString("qrCode"));
  95. Assert.hasLength(userId, "二维码错误");
  96. UserDto userDto = new UserDto();
  97. userDto.setUserId(userId);
  98. List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
  99. Assert.listOnlyOne(userDtos, "用户不存在");
  100. data.put("userName", userDtos.get(0).getName());
  101. boolean openDoor = false;
  102. //todo 判断是否为业主
  103. openDoor = hasOwnerRole(machineDtos.get(0), userDtos.get(0));
  104. if (openDoor) {
  105. data.put("openDoor", openDoor);
  106. context.setResponseEntity(ResultVo.createResponseEntity(data));
  107. return;
  108. }
  109. AccessControlWhiteAuthDto accessControlWhiteAuthDto = new AccessControlWhiteAuthDto();
  110. accessControlWhiteAuthDto.setMachineId(machineDtos.get(0).getMachineId());
  111. accessControlWhiteAuthDto.setPersonId(userDtos.get(0).getUserId());
  112. int count = accessControlWhiteAuthV1InnerServiceSMOImpl.queryAccessControlWhiteAuthsCount(accessControlWhiteAuthDto);
  113. if (count > 0) {
  114. openDoor = true;
  115. }
  116. data.put("openDoor", openDoor);
  117. context.setResponseEntity(ResultVo.createResponseEntity(data));
  118. }
  119. /**
  120. * 判断是否是业主角色
  121. *
  122. * @param machineDto
  123. * @param userDto
  124. * @return
  125. */
  126. private boolean hasOwnerRole(MachineDto machineDto, UserDto userDto) {
  127. OwnerDto ownerDto = new OwnerDto();
  128. ownerDto.setLink(userDto.getTel());
  129. ownerDto.setCommunityId(machineDto.getMachineCode());
  130. List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
  131. if (ownerDtos == null || ownerDtos.size() < 1) {//todo 是业主
  132. return false;
  133. }
  134. //在小区位置
  135. if (CommunityLocationDto.LOCAL_TYPE_COMMUNITY.equals(machineDto.getLocationType())) {
  136. return true;
  137. }
  138. //todo 在单元门位置
  139. if (!CommunityLocationDto.LOCAL_TYPE_UNIT.equals(machineDto.getMachineTypeCd())) {
  140. return false;
  141. }
  142. OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
  143. ownerRoomRelDto.setOwnerId(ownerDtos.get(0).getOwnerId());
  144. ownerRoomRelDto.setCommunityId(ownerDtos.get(0).getCommunityId());
  145. List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelV1InnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
  146. if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) {
  147. return false;
  148. }
  149. RoomDto roomDto = null;
  150. int count = 0;
  151. for (OwnerRoomRelDto tmpOwnerRoomRelDto : ownerRoomRelDtos) {
  152. roomDto = new RoomDto();
  153. roomDto.setRoomId(tmpOwnerRoomRelDto.getRoomId());
  154. roomDto.setUnitId(machineDto.getLocationObjId());
  155. count = roomV1InnerServiceSMOImpl.queryRoomsCount(roomDto);
  156. if (count > 0) {
  157. return true;
  158. }
  159. }
  160. return false;
  161. }
  162. }