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; /** *

* 支付宝设备服务 *

* * @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 alipayDeviceDetail() { //查询离线设备 List deviceStatuses = deviceStatusService.list(new LambdaQueryWrapper().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 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(); } }