ApiDeviceServiceImpl.java 3.6 KB

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