ConfigurationUpload.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.fjhx.equipment;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.cron.CronUtil;
  5. import cn.hutool.cron.task.Task;
  6. import cn.hutool.http.HttpRequest;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONArray;
  9. import com.alibaba.fastjson.JSONObject;
  10. import com.fjhx.MyMain;
  11. import com.fjhx.entity.ConfigEntity;
  12. import com.fjhx.entity.UploadEntity;
  13. import com.fjhx.entity.agreement.data.ConfigurationData;
  14. import com.fjhx.utils.MyUtil;
  15. import java.util.*;
  16. public class ConfigurationUpload {
  17. /**
  18. * 组态软件url
  19. */
  20. private final String configurationUrl;
  21. /**
  22. * 组态软件账号
  23. */
  24. private final String configurationUsername;
  25. /**
  26. * 组态软件密码
  27. */
  28. private final String configurationPassword;
  29. /**
  30. * 组态软件工程名称
  31. */
  32. private final String configurationProjectInstanceName;
  33. /**
  34. * 组态软件设备名称列表
  35. */
  36. private final List<String> configurationDeviceNameList;
  37. private String ipAddress;
  38. private Integer port;
  39. /**
  40. * token
  41. */
  42. private String token;
  43. public static void execute(ConfigEntity config) {
  44. new ConfigurationUpload(config);
  45. }
  46. private ConfigurationUpload(ConfigEntity config) {
  47. configurationUrl = config.getConfigurationUrl();
  48. configurationUsername = config.getConfigurationUsername();
  49. configurationPassword = config.getConfigurationPassword();
  50. configurationProjectInstanceName = config.getConfigurationProjectInstanceName();
  51. configurationDeviceNameList = config.getConfigurationDeviceNameList();
  52. if (ObjectUtil.isAllNotEmpty(configurationUrl, configurationUsername, configurationPassword,
  53. configurationProjectInstanceName, configurationDeviceNameList)) {
  54. String[] split = configurationUrl
  55. .replace("http://", "")
  56. .replace("https://", "")
  57. .replace("/", "")
  58. .split(":");
  59. ipAddress = split[0];
  60. port = Convert.toInt(split[1]);
  61. this.start();
  62. }
  63. }
  64. /**
  65. * 开始读取数据
  66. */
  67. private void start() {
  68. refreshToken();
  69. for (String device : configurationDeviceNameList) {
  70. CronUtil.schedule("0/3 * * * * *", (Task) () -> {
  71. List<ConfigurationData> dataList = getDataList(device);
  72. MyUtil.infoLog(JSONObject.toJSONString(dataList));
  73. uploadIot(dataList, device);
  74. });
  75. }
  76. }
  77. /**
  78. * 刷新token
  79. */
  80. private void refreshToken() {
  81. Map<String, Object> map = new HashMap<>(2);
  82. map.put("username", configurationUsername);
  83. map.put("password", configurationPassword);
  84. String dataStr = HttpRequest.post(configurationUrl + "api/v1/login")
  85. .body(JSONObject.toJSONString(map))
  86. .execute()
  87. .body();
  88. JSONObject data = JSONObject.parseObject(dataStr);
  89. Integer code = data.getInteger("code");
  90. if (code != 0) {
  91. throw new IllegalArgumentException("获取token失败");
  92. }
  93. token = data.getJSONObject("data").getString("Authorization");
  94. }
  95. /**
  96. * 获取数据list
  97. */
  98. private List<ConfigurationData> getDataList(String deviceName) {
  99. String dataStr = HttpRequest.get(configurationUrl + "api/v1/devicerealvalue?projectInstanceName="
  100. + configurationProjectInstanceName + "&DeviceName=" + deviceName)
  101. .header("Authorization", token)
  102. .execute()
  103. .body();
  104. JSONObject data = JSONObject.parseObject(dataStr);
  105. Integer code = data.getInteger("code");
  106. if (code != 0) {
  107. this.refreshToken();
  108. return getDataList(deviceName);
  109. }
  110. JSONArray dataList = data.getJSONArray("data");
  111. return dataList.toJavaList(ConfigurationData.class);
  112. }
  113. /**
  114. * 把数据推送到华为云Iot
  115. */
  116. public void uploadIot(List<ConfigurationData> configurationDataList, String equipmentNo) {
  117. UploadEntity uploadEntity = new UploadEntity();
  118. uploadEntity.setEquipmentNo(equipmentNo);
  119. uploadEntity.setIpAddress(ipAddress);
  120. uploadEntity.setPort(port);
  121. uploadEntity.setType(99);
  122. uploadEntity.setCreateTime(new Date());
  123. uploadEntity.setData(configurationDataList);
  124. Map<String, Object> properties = new HashMap<>();
  125. properties.put("DeviceData", JSON.toJSONString(uploadEntity));
  126. Map<String, Object> service = new HashMap<>();
  127. service.put("service_id", "Data");
  128. service.put("properties", properties);
  129. Map<Object, Object> services = new HashMap<>();
  130. services.put("services", Collections.singletonList(service));
  131. // 上传统计数据到华为IoTDA
  132. MyMain.mqttClient.publishMessage(JSON.toJSONString(services));
  133. }
  134. }