SpiDeviceServiceImpl.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.xy.alipay;
  2. import cn.hutool.json.JSONObject;
  3. import com.xy.constants.SpiResponseConst;
  4. import com.xy.consumer.disconnect.DisconnectedMqttConfiguration;
  5. import com.xy.consumer.disconnect.DisconnectedProducer;
  6. import com.xy.dto.DeviceEventMsgDto;
  7. import com.xy.dto.spi.DeviceAlarmNotifyDTO;
  8. import com.xy.dto.spi.DeviceStatusChangeNotifyDTO;
  9. import com.xy.entity.DeviceCharging;
  10. import com.xy.entity.DeviceInfo;
  11. import com.xy.entity.SysDictRedis;
  12. import com.xy.service.DeviceChargingServiceImpl;
  13. import com.xy.service.DeviceEventMsgServiceImpl;
  14. import com.xy.service.DeviceInfoServiceImpl;
  15. import com.xy.utils.SysDictUtils;
  16. import com.xy.utils.enums.DeviceErrorRecordTypesEnum;
  17. import com.xy.utils.enums.DictsEnum;
  18. import com.xy.utils.enums.DictsSonEnum;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiOperation;
  21. import lombok.AllArgsConstructor;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.springframework.stereotype.Service;
  24. import java.time.LocalDateTime;
  25. /**
  26. * spi 设备相关
  27. *
  28. * @author 谭斌
  29. * @date 2023/04/16
  30. */
  31. @Service
  32. @AllArgsConstructor
  33. @Slf4j
  34. @Api(tags = "支付宝设备相关SPI")
  35. public class SpiDeviceServiceImpl implements SpiDeviceService {
  36. private DeviceInfoServiceImpl deviceInfoService;
  37. private DeviceEventMsgServiceImpl deviceEventMsgService;
  38. private DisconnectedProducer disconnectedProducer;
  39. private DeviceChargingServiceImpl deviceChargingService;
  40. @Override
  41. @ApiOperation("设备告警通知")
  42. public String deviceAlarmNotify(DeviceAlarmNotifyDTO deviceAlarmNotifyDTO) {
  43. //查询设备信息
  44. DeviceInfo deviceInfo = deviceInfoService.getById(Long.valueOf(deviceAlarmNotifyDTO.getTerminalId()));
  45. String faultCode = deviceAlarmNotifyDTO.getFaultCode();
  46. DeviceErrorRecordTypesEnum deviceErrorRecordTypesEnum = faultCode.equals("DeviceOffline") ? DeviceErrorRecordTypesEnum.NET
  47. : faultCode.equals("DoorOpenedOnNoTrade") ? DeviceErrorRecordTypesEnum.DOOR_LOCK
  48. : null;
  49. if (deviceErrorRecordTypesEnum == null) {
  50. return SpiResponseConst.FAIL;
  51. }
  52. //添加设备异常记录
  53. DeviceEventMsgDto.Save save = new DeviceEventMsgDto.Save()
  54. .setDeviceId(deviceInfo.getDeviceId());
  55. save.setCode(deviceErrorRecordTypesEnum.getCode());
  56. save.setMsg(deviceAlarmNotifyDTO.getFaultMsg());
  57. deviceEventMsgService.save(save);
  58. //修改设备为离线
  59. if (deviceErrorRecordTypesEnum.getCode() == DeviceErrorRecordTypesEnum.NET.getCode()) {
  60. JSONObject jsonObject = new JSONObject().set("clientid", deviceInfo.getDeviceId());
  61. disconnectedProducer.sendToMqtt(jsonObject.toString(), DisconnectedMqttConfiguration.TOPIC, 1);
  62. }
  63. return SpiResponseConst.SPI_SUCCESS;
  64. }
  65. @Override
  66. @ApiOperation("设备状态变更通知")
  67. public String deviceStatusChangeNotify(DeviceStatusChangeNotifyDTO deviceStatusChangeNotifyDTO) {
  68. //查询设备信息
  69. DeviceInfo deviceInfo = deviceInfoService.getById(Long.valueOf(deviceStatusChangeNotifyDTO.getTerminalId()));
  70. Integer status = deviceStatusChangeNotifyDTO.getStatus();
  71. if (deviceInfo.getFreezeStatus().equals(status)) {
  72. return SpiResponseConst.FAIL;
  73. }
  74. //修改冻结状态、运营状态
  75. DeviceInfo updateDeviceInfo = new DeviceInfo()
  76. .setDeviceId(deviceInfo.getDeviceId())
  77. .setBusyState(status)
  78. .setFreezeStatus(status);
  79. //修改激活状态
  80. if (deviceStatusChangeNotifyDTO.getActiveStatus() != null && deviceStatusChangeNotifyDTO.getActiveStatus() == 1) {
  81. if (deviceInfo == null || deviceInfo.getActiveState() != 1) {
  82. LocalDateTime now = LocalDateTime.now();
  83. updateDeviceInfo.setActiveState(deviceStatusChangeNotifyDTO.getActiveStatus());
  84. updateDeviceInfo.setActiveTime(now);
  85. //首次激活可试用x天
  86. DeviceCharging deviceCharging = deviceChargingService.getById(deviceInfo.getDeviceId());
  87. if (deviceCharging == null) {
  88. SysDictRedis sysDictRedis = SysDictUtils.get(DictsEnum.DEVICE_CHARGING.getKey(), DictsSonEnum.DEVICE_CHARGING_X.getKey());
  89. deviceChargingService.save(new DeviceCharging()
  90. .setDeviceId(deviceInfo.getDeviceId())
  91. .setChargingX(Integer.valueOf(sysDictRedis.getValue()))
  92. .setTimeout(now)
  93. .setCreateTime(now)
  94. );
  95. }
  96. }
  97. }
  98. deviceInfoService.updateById(updateDeviceInfo);
  99. return SpiResponseConst.SPI_SUCCESS;
  100. }
  101. }