Browse Source

设备管理费修改

李进 2 years ago
parent
commit
78b2ec1f05

+ 1 - 7
device-api-service/src/main/java/com/xy/alipay/AliPayAspet.java

@@ -124,15 +124,9 @@ public class AliPayAspet {
         if (deviceInfo == null) {
             return true;
         }
-        Long deviceId = busySate.getDeviceId();
-        DeviceInfo updateDeviceInfo = new DeviceInfo()
-                .setDeviceId(deviceId)
-                .setBusyState(busySate.getBusyState())
-                .setFreezeStatus(busySate.getBusyState());
-        deviceInfoService.updateById(updateDeviceInfo);
         //发送支付宝设备修改运营状态请求
         DeviceChangeStatusDTO deviceChangeStatusDTO = new DeviceChangeStatusDTO()
-                .setTerminalId(String.valueOf(deviceId))
+                .setTerminalId(String.valueOf(busySate.getDeviceId()))
                 .setOperatorId(AuthorizeUtils.getLoginId(String.class))
                 .setStatus(busySate.getBusyState());
         alipayDeviceService.changeStatus(deviceChangeStatusDTO);

+ 94 - 0
device-api-service/src/main/java/com/xy/alipay/AliPayDeviceControllerJob.java

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

+ 0 - 61
device-api-service/src/main/java/com/xy/alipay/AliPayUtils.java

@@ -1,61 +0,0 @@
-package com.xy.alipay;
-
-import cn.hutool.json.JSONObject;
-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.utils.SpringBeanUtils;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * todo 支付宝设备工具类
- */
-public class AliPayUtils {
-
-    /**
-     * 设备上线
-     *
-     * @param deviceId
-     */
-    public static void connectedNotify(Long deviceId) {
-        connectedNotify(Arrays.asList(deviceId));
-    }
-
-    /**
-     * 设备上线
-     *
-     * @param deviceIds
-     */
-    public static void connectedNotify(List<Long> deviceIds) {
-        ConnectedProducer connectedProducer = SpringBeanUtils.getBean(ConnectedProducer.class);
-        deviceIds.forEach(deviceId -> {
-            JSONObject jsonObject = new JSONObject().set("clientid", deviceId);
-            connectedProducer.sendToMqtt(jsonObject.toString(), ConnectedMqttConfiguration.TOPIC, 1);
-        });
-    }
-
-    /**
-     * 设备下线
-     *
-     * @param deviceId
-     */
-    public static void disConnectedNotify(Long deviceId) {
-        disConnectedNotify(Arrays.asList(deviceId));
-    }
-
-    /**
-     * 设备下线
-     *
-     * @param deviceIds
-     */
-    public static void disConnectedNotify(List<Long> deviceIds) {
-        DisconnectedProducer disconnectedProducer = SpringBeanUtils.getBean(DisconnectedProducer.class);
-        deviceIds.forEach(deviceId -> {
-            JSONObject jsonObject = new JSONObject().set("clientid", deviceId);
-            disconnectedProducer.sendToMqtt(jsonObject.toString(), DisconnectedMqttConfiguration.TOPIC, 1);
-        });
-    }
-}

+ 46 - 2
device-api-service/src/main/java/com/xy/alipay/SpiDeviceServiceImpl.java

@@ -1,7 +1,15 @@
 package com.xy.alipay;
 
+import cn.hutool.json.JSONObject;
+import com.xy.consumer.disconnect.DisconnectedMqttConfiguration;
+import com.xy.consumer.disconnect.DisconnectedProducer;
+import com.xy.dto.DeviceErrorsRecordDto;
 import com.xy.dto.spi.DeviceAlarmNotifyDTO;
 import com.xy.dto.spi.DeviceStatusChangeNotifyDTO;
+import com.xy.entity.DeviceInfo;
+import com.xy.service.DeviceErrorsRecordServiceImpl;
+import com.xy.service.DeviceInfoServiceImpl;
+import com.xy.utils.enums.DeviceErrorTypesEnum;
 import com.xy.work.SpiDeviceService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -24,15 +32,51 @@ import java.util.Map;
 @Api(tags = "支付宝设备相关SPI")
 public class SpiDeviceServiceImpl implements SpiDeviceService {
 
+    private DeviceInfoServiceImpl deviceInfoService;
+
+    private DeviceErrorsRecordServiceImpl deviceErrorsRecordService;
+
+    private DisconnectedProducer disconnectedProducer;
+
     @Override
     @ApiOperation("设备告警通知")
     public void deviceAlarmNotify(Map<String, String> params, DeviceAlarmNotifyDTO deviceAlarmNotifyDTO) {
-
+        //查询设备信息
+        DeviceInfo deviceInfo = deviceInfoService.getById(Long.valueOf(deviceAlarmNotifyDTO.getTerminalId()));
+        String faultCode = deviceAlarmNotifyDTO.getFaultCode();
+        DeviceErrorTypesEnum deviceErrorTypesEnum = faultCode.equals("DeviceOffline") ? DeviceErrorTypesEnum.DEVICE_ERROR_TYPES_1
+                : faultCode.equals("DoorOpenedOnNoTrade") ? DeviceErrorTypesEnum.DEVICE_ERROR_TYPES_2
+                : null;
+        if (deviceErrorTypesEnum == null) {
+            return;
+        }
+        //添加设备异常记录
+        DeviceErrorsRecordDto.Save save = new DeviceErrorsRecordDto.Save()
+                .setDeviceId(deviceInfo.getDeviceId());
+        save.setErrorType(deviceErrorTypesEnum.getKey());
+        save.setErrorDescript(deviceErrorTypesEnum.getMsg());
+        deviceErrorsRecordService.save(save);
+        //修改设备为离线
+        if (deviceErrorTypesEnum.getKey() == DeviceErrorTypesEnum.DEVICE_ERROR_TYPES_1.getKey()) {
+            JSONObject jsonObject = new JSONObject().set("clientid", deviceInfo.getDeviceId());
+            disconnectedProducer.sendToMqtt(jsonObject.toString(), DisconnectedMqttConfiguration.TOPIC, 1);
+        }
     }
 
     @Override
     @ApiOperation("设备状态变更通知")
     public void deviceStatusChangeNotify(Map<String, String> params, DeviceStatusChangeNotifyDTO deviceStatusChangeNotifyDTO) {
-
+        //查询设备信息
+        DeviceInfo deviceInfo = deviceInfoService.getById(Long.valueOf(deviceStatusChangeNotifyDTO.getTerminalId()));
+        Integer status = deviceStatusChangeNotifyDTO.getStatus();
+        if (deviceInfo.getFreezeStatus().equals(status)) {
+            return;
+        }
+        //修改冻结状态、运营状态
+        DeviceInfo updateDeviceInfo = new DeviceInfo()
+                .setDeviceId(deviceInfo.getDeviceId())
+                .setBusyState(status)
+                .setFreezeStatus(status);
+        deviceInfoService.updateById(updateDeviceInfo);
     }
 }

+ 18 - 0
device-api-service/src/main/java/com/xy/config/DeviceThreadPoolConfig.java

@@ -15,6 +15,8 @@ public class DeviceThreadPoolConfig {
 
     public static final String DEVICE_NETWORK_POLL = "deviceNetWorkPoll";
 
+    public static final String ALIPAY_DEVICE_DETAIL = "alipayDeviceDetail";
+
     /**
      * 公用线程池
      */
@@ -62,4 +64,20 @@ public class DeviceThreadPoolConfig {
                 .queueSize(coreSize * 10)
                 .builder();
     }
+
+    /**
+     * 查询支付宝设备详情线程池
+     */
+    @DynamicTp
+    @Bean(ALIPAY_DEVICE_DETAIL)
+    public ThreadPoolTaskExecutor alipayDeviceDetail() {
+        int coreSize = 5;
+        return ThreadPoolUtils.newPoll()
+                .name(ALIPAY_DEVICE_DETAIL)
+                .coreSize(coreSize)
+                .maxSize(coreSize * 10)
+                .keepAlive(30)
+                .queueSize(coreSize * 10)
+                .builder();
+    }
 }