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();
}
}