ApiDeviceServiceImpl.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package com.xy.alipay;
  2. import cn.hutool.json.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.xxl.job.core.biz.model.ReturnT;
  5. import com.xxl.job.core.handler.annotation.XxlJob;
  6. import com.xy.config.DeviceThreadPoolConfig;
  7. import com.xy.consumer.connected.ConnectedMqttConfiguration;
  8. import com.xy.consumer.connected.ConnectedProducer;
  9. import com.xy.consumer.disconnect.DisconnectedMqttConfiguration;
  10. import com.xy.consumer.disconnect.DisconnectedProducer;
  11. import com.xy.dto.DeviceDetailDTO;
  12. import com.xy.entity.DeviceStatus;
  13. import com.xy.service.AlipayDeviceService;
  14. import com.xy.service.DeviceStatusServiceImpl;
  15. import com.xy.utils.R;
  16. import com.xy.utils.ThreadPoolUtils;
  17. import com.xy.vo.DeviceDetailVO;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import lombok.AllArgsConstructor;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.stereotype.Component;
  23. import org.springframework.web.bind.annotation.PostMapping;
  24. import org.springframework.web.bind.annotation.RequestBody;
  25. import java.util.List;
  26. /**
  27. * <p>
  28. * 支付宝设备服务
  29. * </p>
  30. *
  31. * @author lijin
  32. * @since 2023-04-20
  33. */
  34. @Slf4j
  35. @Component
  36. @AllArgsConstructor
  37. @Api(tags = "支付宝设备API")
  38. public class ApiDeviceServiceImpl {
  39. private DeviceStatusServiceImpl deviceStatusService;
  40. private AlipayDeviceService alipayDeviceService;
  41. private ConnectedProducer connectedProducer;
  42. private DisconnectedProducer disconnectedProducer;
  43. /**
  44. * 查询支付宝设备详情job
  45. *
  46. * @return
  47. */
  48. @XxlJob("alipayDeviceDetail")
  49. public ReturnT<String> alipayDeviceDetail() {
  50. //查询离线设备
  51. List<DeviceStatus> deviceStatuses = deviceStatusService.list(new LambdaQueryWrapper<DeviceStatus>().eq(DeviceStatus::getNetState, 2));
  52. if (deviceStatuses.size() == 0) {
  53. return ReturnT.SUCCESS;
  54. }
  55. //查询支付宝设备详情
  56. ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.ALIPAY_DEVICE_DETAIL, deviceStatuses.size());
  57. deviceStatuses.forEach(deviceStatus -> execute.execute(() -> {
  58. DeviceDetailVO deviceDetailVO = alipayDeviceService.queryDetail(new DeviceDetailDTO().setTerminalId(String.valueOf(deviceStatus.getDeviceId())));
  59. //修改设备为在线
  60. if (deviceDetailVO.getOnline()) {
  61. JSONObject jsonObject = new JSONObject().set("clientid", deviceStatus.getDeviceId());
  62. connectedProducer.sendToMqtt(jsonObject.toString(), ConnectedMqttConfiguration.TOPIC, 1);
  63. }
  64. }));
  65. execute.end();
  66. return ReturnT.SUCCESS;
  67. }
  68. @ApiOperation("刷新设备联网状态")
  69. @PostMapping("refurbishDeviceNetWork")
  70. public R refurbishDeviceNetWork(@RequestBody List<Long> deviceIds) {
  71. ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.ALIPAY_DEVICE_DETAIL, deviceIds.size());
  72. deviceIds.forEach(deviceId -> execute.execute(() -> {
  73. DeviceDetailVO deviceDetailVO = alipayDeviceService.queryDetail(new DeviceDetailDTO().setTerminalId(String.valueOf(deviceId)));
  74. JSONObject jsonObject = new JSONObject().set("clientid", deviceId);
  75. if (deviceDetailVO.getOnline()) {
  76. connectedProducer.sendToMqtt(jsonObject.toString(), ConnectedMqttConfiguration.TOPIC, 1);
  77. } else {
  78. disconnectedProducer.sendToMqtt(jsonObject.toString(), DisconnectedMqttConfiguration.TOPIC, 1);
  79. }
  80. }));
  81. execute.end();
  82. return R.ok();
  83. }
  84. }