|
|
@@ -0,0 +1,203 @@
|
|
|
+package com.yunfeiyun.agmp.iots.device.serviceImp;
|
|
|
+
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.yunfeiyun.agmp.common.utils.DateUtils;
|
|
|
+import com.yunfeiyun.agmp.common.utils.StringUtils;
|
|
|
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
|
|
|
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotAdznGssqdata;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
|
|
|
+import com.yunfeiyun.agmp.iot.common.enums.EnumAdznGssqElement;
|
|
|
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
|
|
|
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
|
|
|
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
|
|
|
+import com.yunfeiyun.agmp.iots.core.http.HttpClient;
|
|
|
+import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
|
|
|
+import com.yunfeiyun.agmp.iots.service.IotDeviceAddressService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@HttpCore(serviceName = ServiceNameConst.SERVICE_ADZN_GSSQ)
|
|
|
+public class AdznGssqService extends HttpClient {
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// private MongoService mongoService;
|
|
|
+//
|
|
|
+// @Autowired
|
|
|
+// private IIotDeviceService iotDeviceService;
|
|
|
+
|
|
|
+
|
|
|
+ public JSONObject requestPost(String url, Map<String, Object> payload) {
|
|
|
+ JSONObject configJson = getClientConfig();
|
|
|
+ log.info("【爱迪智农管式墒情配置】:{}", configJson);
|
|
|
+ String baseurl = configJson.getString("baseurl");
|
|
|
+ String userID = configJson.getString("userID");
|
|
|
+ if(StringUtils.isEmpty(baseurl) && StringUtils.isEmpty(userID)) {
|
|
|
+ log.info("【爱迪智农管式墒情】:{} \n {}", "未配置相关参数!", configJson);
|
|
|
+ }
|
|
|
+
|
|
|
+ String sendUrl = baseurl + url;
|
|
|
+ payload.put("userID", userID);
|
|
|
+
|
|
|
+ String response = HttpUtil.createPost(sendUrl).form(payload).execute().body();
|
|
|
+ log.info("【爱迪智农管式墒情】:{} {} \n {}", payload, "请求结果:", response);
|
|
|
+ return JSONObject.parseObject(response);
|
|
|
+ }
|
|
|
+
|
|
|
+ public JSONArray getDevList(){
|
|
|
+ String url = "/getDevList";
|
|
|
+ Map<String, Object> payload = new HashMap<>();
|
|
|
+ JSONObject jsonObject = requestPost(url, payload);
|
|
|
+ JSONArray devListArray = jsonObject.getJSONArray("devList");
|
|
|
+ JSONArray devList = new JSONArray();
|
|
|
+ if(devListArray != null && !devListArray.isEmpty()){
|
|
|
+ devList = devListArray;
|
|
|
+ }
|
|
|
+ return devList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public JSONObject getDevLastData(String devCode){
|
|
|
+ String url = "/getDevLastData";
|
|
|
+ Map<String, Object> payload = new HashMap<>();
|
|
|
+ payload.put("devID", devCode);
|
|
|
+ JSONObject jsonObject = requestPost(url, payload);
|
|
|
+ JSONArray devLastDataArray = jsonObject.getJSONArray("devLastData");
|
|
|
+ JSONObject devLastData = null;
|
|
|
+ if(devLastDataArray != null && !devLastDataArray.isEmpty()){
|
|
|
+ devLastData = devLastDataArray.getJSONObject(0);
|
|
|
+ }
|
|
|
+ return devLastData;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<IotAdznGssqdata> parseDevListData(IotDevice iotDevice){
|
|
|
+ List<IotAdznGssqdata> iotAdznGssqdataList = new ArrayList<>();
|
|
|
+ String devCode = iotDevice.getDevCode();
|
|
|
+ JSONObject devLastData = getDevLastData(devCode);
|
|
|
+ if(devLastData == null){
|
|
|
+ return iotAdznGssqdataList;
|
|
|
+ }
|
|
|
+
|
|
|
+ String time = devLastData.getString("TIME");
|
|
|
+ Date timeDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, time);
|
|
|
+ String[] keys = {"DataATM", "DataAT", "DataATS", "DataTEMPStr", "DataSWCStr"};
|
|
|
+ int ekey = 1;
|
|
|
+ for(String key : keys){
|
|
|
+ EnumAdznGssqElement adznGssqElement = EnumAdznGssqElement.findEnumByeName(key);
|
|
|
+ if(adznGssqElement == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if("DataTEMPStr".equals(key) || "DataSWCStr".equals(key)) {
|
|
|
+ String[] temp = devLastData.getString(key).split(",");
|
|
|
+ for (String value : temp) {
|
|
|
+ String eKey = "e" + ekey;
|
|
|
+ IotAdznGssqdata iotAdznGssqdata = new IotAdznGssqdata();
|
|
|
+ iotAdznGssqdata.setDevBid(iotDevice.getDevBid());
|
|
|
+ iotAdznGssqdata.setDevBid(iotDevice.getDevBid());
|
|
|
+ iotAdznGssqdata.setTime(timeDate);
|
|
|
+ iotAdznGssqdata.setENum(adznGssqElement.geteNum());
|
|
|
+ iotAdznGssqdata.setEName(adznGssqElement.geteName());
|
|
|
+ iotAdznGssqdata.setEValue(value);
|
|
|
+ iotAdznGssqdata.setEKey(eKey);
|
|
|
+
|
|
|
+ iotAdznGssqdataList.add(iotAdznGssqdata);
|
|
|
+
|
|
|
+ ekey += 1;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ String eKey = "e" + ekey;
|
|
|
+ String value = devLastData.getString(key);
|
|
|
+ IotAdznGssqdata iotAdznGssqdata = new IotAdznGssqdata();
|
|
|
+ iotAdznGssqdata.setDevBid(iotDevice.getDevBid());
|
|
|
+ iotAdznGssqdata.setTime(timeDate);
|
|
|
+ iotAdznGssqdata.setENum(adznGssqElement.geteNum());
|
|
|
+ iotAdznGssqdata.setEName(adznGssqElement.geteName());
|
|
|
+ iotAdznGssqdata.setEValue(value);
|
|
|
+ iotAdznGssqdata.setEKey(eKey);
|
|
|
+
|
|
|
+ iotAdznGssqdataList.add(iotAdznGssqdata);
|
|
|
+
|
|
|
+ ekey += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return iotAdznGssqdataList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步设备数据
|
|
|
+ * @param iotDeviceList
|
|
|
+ */
|
|
|
+ public void syncDeviceData(List<IotDevice> iotDeviceList){
|
|
|
+ JSONArray devArray = getDevList();
|
|
|
+ if(devArray == null || devArray.isEmpty()){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<String, Object> devMap = new HashMap<>();
|
|
|
+ for(int i = 0; i < devArray.size(); i++){
|
|
|
+ JSONObject dev = devArray.getJSONObject(i);
|
|
|
+ String devCode = dev.getString("devID");
|
|
|
+ devMap.put(devCode, dev);
|
|
|
+ }
|
|
|
+ IotDeviceAddressService iotDeviceAddressService = SpringUtils.getBean(IotDeviceAddressService.class);
|
|
|
+ List<IotAdznGssqdata> iotAdznGssqdataList = new ArrayList<>();
|
|
|
+ List<IotDevice> updateList = new ArrayList<>();
|
|
|
+ for(IotDevice iotDevice : iotDeviceList){
|
|
|
+ List<IotAdznGssqdata> childList = parseDevListData(iotDevice);
|
|
|
+
|
|
|
+ log.info("【爱迪智农管式墒情】解析数据:{} \n {}", iotDevice, childList);
|
|
|
+
|
|
|
+ if(childList != null && !childList.isEmpty()){
|
|
|
+ IotAdznGssqdata iotAdznGssqdata = childList.get(0);
|
|
|
+ Date updateTime = iotAdznGssqdata.getTime();
|
|
|
+ String devUpdateddate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, updateTime);
|
|
|
+ String oldUpdateddate = iotDevice.getDevUpdateddate();
|
|
|
+ if(StringUtils.isNotEmpty(oldUpdateddate) && DateUtils.compareDateStr(devUpdateddate, oldUpdateddate)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ iotAdznGssqdataList.addAll(childList);
|
|
|
+
|
|
|
+ JSONObject devInfo = (JSONObject)devMap.get(iotDevice.getDevCode());
|
|
|
+ String devLng = devInfo.getString("LNG");
|
|
|
+ String devLat = devInfo.getString("LAT");
|
|
|
+
|
|
|
+ IotDevice updateDevice = new IotDevice();
|
|
|
+ //如果存在经纬度
|
|
|
+ if(StringUtils.isNotEmpty(devLng) && StringUtils.isNotEmpty(devLat)){
|
|
|
+ // 自动的可以更新数据库 0 手动
|
|
|
+ if (!Objects.equals(iotDevice.getDevPositionstatus(), "0")) {
|
|
|
+ iotDeviceAddressService.setDeviceAddress(updateDevice, devLng, devLat);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ updateDevice.setDevBid(iotDevice.getDevBid());
|
|
|
+ updateDevice.setDevUpdateddate(devUpdateddate);
|
|
|
+ updateDevice.setDevStatus(IotDeviceStatusTypeEnum.ONLINE.getCode());
|
|
|
+ updateList.add(updateDevice);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!iotAdznGssqdataList.isEmpty()){
|
|
|
+ MongoService mongoService = SpringUtils.getBean(MongoService.class);
|
|
|
+ mongoService.insertList(IotAdznGssqdata.class, iotAdznGssqdataList);
|
|
|
+ }
|
|
|
+ if(!updateList.isEmpty()){
|
|
|
+ SpringUtils.getBean(IIotDeviceService.class).updateIotDeviceBatch(updateList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步设备数据
|
|
|
+ * @param iotDevice
|
|
|
+ */
|
|
|
+ public void syncDeviceData(IotDevice iotDevice){
|
|
|
+ List<IotDevice> iotDeviceList = new ArrayList<>();
|
|
|
+ iotDeviceList.add(iotDevice);
|
|
|
+ syncDeviceData(iotDeviceList);
|
|
|
+ }
|
|
|
+}
|