|
@@ -0,0 +1,94 @@
|
|
|
+package com.xy.alipay;
|
|
|
+
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.xxl.job.core.biz.model.ReturnT;
|
|
|
+import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
+import com.xy.config.DeviceThreadPoolConfig;
|
|
|
+import com.xy.consumer.connected.ConnectedMqttConfiguration;
|
|
|
+import com.xy.consumer.connected.ConnectedProducer;
|
|
|
+import com.xy.consumer.disconnect.DisconnectedMqttConfiguration;
|
|
|
+import com.xy.consumer.disconnect.DisconnectedProducer;
|
|
|
+import com.xy.dto.DeviceDetailDTO;
|
|
|
+import com.xy.entity.DeviceStatus;
|
|
|
+import com.xy.service.AlipayDeviceService;
|
|
|
+import com.xy.service.DeviceStatusServiceImpl;
|
|
|
+import com.xy.utils.R;
|
|
|
+import com.xy.utils.ThreadPoolUtils;
|
|
|
+import com.xy.vo.DeviceDetailVO;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 支付宝设备服务
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author lijin
|
|
|
+ * @since 2023-04-20
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+@AllArgsConstructor
|
|
|
+@Api(tags = "支付宝设备API")
|
|
|
+public class AliPayDeviceControllerJob {
|
|
|
+
|
|
|
+ private DeviceStatusServiceImpl deviceStatusService;
|
|
|
+
|
|
|
+ private AlipayDeviceService alipayDeviceService;
|
|
|
+
|
|
|
+ private ConnectedProducer connectedProducer;
|
|
|
+
|
|
|
+ private DisconnectedProducer disconnectedProducer;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询支付宝设备详情job
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @XxlJob("alipayDeviceDetail")
|
|
|
+ public ReturnT<String> alipayDeviceDetail() {
|
|
|
+ //查询离线设备
|
|
|
+ List<DeviceStatus> deviceStatuses = deviceStatusService.list(new LambdaQueryWrapper<DeviceStatus>().eq(DeviceStatus::getNetState, 2));
|
|
|
+ if (deviceStatuses.size() == 0) {
|
|
|
+ return ReturnT.SUCCESS;
|
|
|
+ }
|
|
|
+ //查询支付宝设备详情
|
|
|
+ ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.ALIPAY_DEVICE_DETAIL, deviceStatuses.size());
|
|
|
+ deviceStatuses.forEach(deviceStatus -> execute.execute(() -> {
|
|
|
+ DeviceDetailVO deviceDetailVO = alipayDeviceService.queryDetail(new DeviceDetailDTO().setTerminalId(String.valueOf(deviceStatus.getDeviceId())));
|
|
|
+ //修改设备为在线
|
|
|
+ if (deviceDetailVO.getOnline()) {
|
|
|
+ JSONObject jsonObject = new JSONObject().set("clientid", deviceStatus.getDeviceId());
|
|
|
+ connectedProducer.sendToMqtt(jsonObject.toString(), ConnectedMqttConfiguration.TOPIC, 1);
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ execute.end();
|
|
|
+ return ReturnT.SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation("刷新设备联网状态")
|
|
|
+ @PostMapping("refurbishDeviceNetWork")
|
|
|
+ public R refurbishDeviceNetWork(@RequestBody List<Long> deviceIds) {
|
|
|
+ ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.ALIPAY_DEVICE_DETAIL, deviceIds.size());
|
|
|
+ deviceIds.forEach(deviceId -> execute.execute(() -> {
|
|
|
+ DeviceDetailVO deviceDetailVO = alipayDeviceService.queryDetail(new DeviceDetailDTO().setTerminalId(String.valueOf(deviceId)));
|
|
|
+ JSONObject jsonObject = new JSONObject().set("clientid", deviceId);
|
|
|
+ if (deviceDetailVO.getOnline()) {
|
|
|
+ connectedProducer.sendToMqtt(jsonObject.toString(), ConnectedMqttConfiguration.TOPIC, 1);
|
|
|
+ } else {
|
|
|
+ disconnectedProducer.sendToMqtt(jsonObject.toString(), DisconnectedMqttConfiguration.TOPIC, 1);
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ execute.end();
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|