MachineApi.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package com.java110.common.api;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.common.bmo.machine.IMachineHeartbeatBMO;
  4. import com.java110.common.bmo.machine.IMachineOpenDoorBMO;
  5. import com.java110.common.bmo.machine.ISaveMachineRecordBMO;
  6. import com.java110.common.bmo.machine.IUpdateMachineTransactionStateBMO;
  7. import com.java110.common.bmo.machineTranslateError.IGetMachineTranslateErrorBMO;
  8. import com.java110.dto.machine.MachineDto;
  9. import com.java110.dto.machine.MachineRecordDto;
  10. import com.java110.dto.machine.MachineTranslateDto;
  11. import com.java110.dto.machineTranslateError.MachineTranslateErrorDto;
  12. import com.java110.utils.constant.KafkaConstant;
  13. import com.java110.utils.kafka.KafkaFactory;
  14. import com.java110.utils.util.Assert;
  15. import com.java110.utils.util.BeanConvertUtil;
  16. import com.java110.utils.util.DateUtil;
  17. import com.java110.vo.ResultVo;
  18. import org.slf4j.Logger;
  19. import com.java110.core.log.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.http.ResponseEntity;
  22. import org.springframework.web.bind.annotation.*;
  23. /**
  24. * 设备相关接口类
  25. * <p>
  26. * add by 吴学文 2020-12-28
  27. */
  28. @RestController
  29. @RequestMapping(value = "/machine")
  30. public class MachineApi {
  31. private static Logger logger = LoggerFactory.getLogger(MachineApi.class);
  32. private static final String USER_ROLE_OWNER = "owner";
  33. @Autowired
  34. private IMachineOpenDoorBMO machineOpenDoorBMOImpl;
  35. @Autowired
  36. private IGetMachineTranslateErrorBMO getMachineTranslateErrorBMOImpl;
  37. @Autowired
  38. private ISaveMachineRecordBMO saveMachineRecordBMOImpl;
  39. @Autowired
  40. private IUpdateMachineTransactionStateBMO updateMachineTransactionStateBMOImpl;
  41. @Autowired
  42. private IMachineHeartbeatBMO machineHeartbeatBMOImpl;
  43. /**
  44. * 设备开门功能
  45. *
  46. * @param reqJson
  47. * @return
  48. * @serviceCode /machine/openDoor
  49. * @path /app/machine/openDoor
  50. */
  51. @RequestMapping(value = "/openDoor", method = RequestMethod.POST)
  52. public ResponseEntity<String> openDoor(@RequestBody JSONObject reqJson,
  53. @RequestHeader(value = "user-id", required = false) String userId) {
  54. Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含小区信息");
  55. Assert.hasKeyAndValue(reqJson, "machineCode", "请求报文中未包含设备信息");
  56. Assert.hasKeyAndValue(reqJson, "userRole", "请求报文中未包含用户角色");
  57. if (!USER_ROLE_OWNER.equals(reqJson.getString("userRole"))) { //这种为 员工的情况呢
  58. reqJson.put("userId", userId);
  59. }
  60. Assert.hasKeyAndValue(reqJson, "userId", "请求报文中未包含用户信息");
  61. return machineOpenDoorBMOImpl.openDoor(reqJson);
  62. }
  63. /**
  64. * 设备二维码
  65. *
  66. * @param reqJson
  67. * @return
  68. * @serviceCode /machine/getQRcode
  69. * @path /app/machine/getQRcode
  70. */
  71. @RequestMapping(value = "/getQRcode", method = RequestMethod.POST)
  72. public ResponseEntity<String> getQRcode(@RequestBody JSONObject reqJson) {
  73. Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含小区信息");
  74. Assert.hasKeyAndValue(reqJson, "userId", "请求报文中未包含用户信息");
  75. Assert.hasKeyAndValue(reqJson, "machineCode", "请求报文中未包含设备信息");
  76. return machineOpenDoorBMOImpl.getQRcode(reqJson);
  77. }
  78. /**
  79. * 设备开门功能
  80. *
  81. * @param reqJson
  82. * @return
  83. * @serviceCode /machine/restartMachine
  84. * @path /app/machine/restartMachine
  85. */
  86. @RequestMapping(value = "/restartMachine", method = RequestMethod.POST)
  87. public ResponseEntity<String> restartMachine(@RequestBody JSONObject reqJson) {
  88. Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含小区信息");
  89. Assert.hasKeyAndValue(reqJson, "machineCode", "请求报文中未包含设备信息");
  90. return machineOpenDoorBMOImpl.restartMachine(reqJson);
  91. }
  92. /**
  93. * 重新送物联网系统
  94. *
  95. * @param reqJson
  96. * @return
  97. * @serviceCode /machine/resendIot
  98. * @path /app/machine/resendIot
  99. */
  100. @RequestMapping(value = "/resendIot", method = RequestMethod.POST)
  101. public ResponseEntity<String> resendIot(@RequestBody JSONObject reqJson) {
  102. Assert.hasKeyAndValue(reqJson, "machineTranslateId", "未包含同步ID");
  103. Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
  104. return machineOpenDoorBMOImpl.resendIot(reqJson);
  105. }
  106. /**
  107. * 微信删除消息模板
  108. *
  109. * @param communityId 小区ID
  110. * @return
  111. * @serviceCode /machine/queryMachineTranslateError
  112. * @path /app/machine/queryMachineTranslateError
  113. */
  114. @RequestMapping(value = "/queryMachineTranslateError", method = RequestMethod.GET)
  115. public ResponseEntity<String> queryMachineTranslateError(@RequestParam(value = "communityId") String communityId,
  116. @RequestParam(value = "page") int page,
  117. @RequestParam(value = "row") int row) {
  118. MachineTranslateErrorDto machineTranslateErrorDto = new MachineTranslateErrorDto();
  119. machineTranslateErrorDto.setPage(page);
  120. machineTranslateErrorDto.setRow(row);
  121. machineTranslateErrorDto.setCommunityId(communityId);
  122. return getMachineTranslateErrorBMOImpl.get(machineTranslateErrorDto);
  123. }
  124. /**
  125. * 重新送物联网系统
  126. *
  127. * @param reqJson
  128. * @return
  129. * @serviceCode /machine/openDoorLog
  130. * @path /app/machine/openDoorLog
  131. */
  132. @RequestMapping(value = "/openDoorLog", method = RequestMethod.POST)
  133. public ResponseEntity<String> openDoorLog(@RequestBody JSONObject reqJson) {
  134. Assert.hasKeyAndValue(reqJson, "userId", "未包含用户信息");
  135. Assert.hasKeyAndValue(reqJson, "userName", "未包含用户名称");
  136. Assert.hasKeyAndValue(reqJson, "machineCode", "未包含设备编码");
  137. Assert.hasKeyAndValue(reqJson, "openTypeCd", "未包含开门方式");
  138. Assert.hasKeyAndValue(reqJson, "similar", "未包含开门相似度");
  139. //Assert.hasKeyAndValue(reqJson, "photo", "未包含抓拍照片");
  140. Assert.hasKeyAndValue(reqJson, "dateTime", "未包含开门时间");
  141. Assert.hasKeyAndValue(reqJson, "extCommunityId", "未包含小区信息");
  142. Assert.hasKeyAndValue(reqJson, "recordTypeCd", "未包含记录类型");
  143. MachineRecordDto machineRecordDto = BeanConvertUtil.covertBean(reqJson, MachineRecordDto.class);
  144. machineRecordDto.setCommunityId(reqJson.getString("extCommunityId"));
  145. machineRecordDto.setName(reqJson.getString("userName"));
  146. if (reqJson.containsKey("idNumber")) {
  147. machineRecordDto.setIdCard(reqJson.getString("idNumber"));
  148. } else {
  149. machineRecordDto.setIdCard("-1");
  150. }
  151. if (reqJson.containsKey("tel")) {
  152. machineRecordDto.setTel(reqJson.getString("tel"));
  153. } else {
  154. machineRecordDto.setTel("-1");
  155. }
  156. return saveMachineRecordBMOImpl.saveRecord(machineRecordDto);
  157. }
  158. /**
  159. * 物联网系统指令执行情况
  160. *
  161. * @param reqJson
  162. * @return
  163. * @serviceCode /machine/cmdResult
  164. * @path /app/machine/cmdResult
  165. */
  166. @RequestMapping(value = "/cmdResult", method = RequestMethod.POST)
  167. public ResponseEntity<String> cmdResult(@RequestBody JSONObject reqJson) {
  168. Assert.hasKeyAndValue(reqJson, "taskId", "未包含任务信息");
  169. Assert.hasKeyAndValue(reqJson, "code", "未包含结果编码");
  170. Assert.hasKeyAndValue(reqJson, "msg", "未包含结果说明");
  171. MachineTranslateDto machineRecordDto = new MachineTranslateDto();
  172. machineRecordDto.setMachineTranslateId(reqJson.getString("taskId"));
  173. machineRecordDto.setState(reqJson.getIntValue("code") == 0
  174. ? MachineTranslateDto.STATE_SUCCESS : MachineTranslateDto.STATE_ERROR);
  175. machineRecordDto.setRemark(reqJson.getString("msg"));
  176. return updateMachineTransactionStateBMOImpl.update(machineRecordDto);
  177. }
  178. /**
  179. * 物联网系统设备心跳
  180. *
  181. * @param reqJson
  182. * @return
  183. * @serviceCode /machine/heartbeat
  184. * @path /app/machine/heartbeat
  185. */
  186. @RequestMapping(value = "/heartbeat", method = RequestMethod.POST)
  187. public ResponseEntity<String> heartbeat(@RequestBody JSONObject reqJson) {
  188. Assert.hasKeyAndValue(reqJson, "taskId", "未包含任务信息");
  189. Assert.hasKeyAndValue(reqJson, "machineCode", "未包含设备编码");
  190. Assert.hasKeyAndValue(reqJson, "heartbeatTime", "未包含心跳时间");
  191. Assert.hasKeyAndValue(reqJson, "extCommunityId", "未包含小区ID");
  192. MachineDto machineDto = new MachineDto();
  193. machineDto.setMachineCode(reqJson.getString("machineCode"));
  194. machineDto.setCommunityId(reqJson.getString("extCommunityId"));
  195. //machineDto.setHeartbeatTime(reqJson.getString("heartbeatTime"));
  196. machineDto.setHeartbeatTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));//这里自己生成 不获取传递时间 因为可能时钟不一致 导致前台状态显示不正常
  197. return machineHeartbeatBMOImpl.heartbeat(machineDto);
  198. }
  199. }