From e95de698a8a0619ede3d5b672ebaf24cac321297 Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期二, 31 十月 2023 04:08:38 +0800
Subject: [PATCH] 四川省网关接口相关10

---
 src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java |  194 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 190 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
index fd196ab..32656b2 100644
--- a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
+++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
@@ -4,24 +4,44 @@
 import com.bstek.dorado.annotation.DataResolver;
 import com.bstek.dorado.annotation.Expose;
 import com.fzzy.api.utils.ContextUtil;
-import com.fzzy.api.utils.RedisConst;
-import com.fzzy.api.utils.RedisUtil;
+import com.fzzy.api.utils.DateUtil;
+import com.fzzy.async.fzzy40.Fzzy40CommonService;
+import com.fzzy.async.fzzy40.entity.Fz40Grain;
 import com.fzzy.gateway.GatewayUtils;
+import com.fzzy.gateway.api.DeviceReportService;
+import com.fzzy.gateway.api.GatewayRemoteManager;
+import com.fzzy.gateway.data.QueryParam;
 import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.gateway.hx2023.ScConstant;
+import com.fzzy.gateway.hx2023.data.GrainData;
+import com.fzzy.gateway.hx2023.data.GrainDataDetail;
 import com.fzzy.gateway.service.repository.GatewayDeviceRep;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateFormatUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
+
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Component
 public class GatewayDeviceService {
 
     @Resource
     private GatewayDeviceRep gatewayDeviceRep;
+    @Resource
+    private Fzzy40CommonService fzzy40CommonService;
+    @Resource
+    private GatewayRemoteManager gatewayRemoteManager;
 
     /**
      * gatewayDeviceService#listAll
@@ -30,7 +50,8 @@
      */
     @DataProvider
     public List<GatewayDevice> listAll() {
-        return gatewayDeviceRep.findAll();
+        Sort sort = new Sort(Sort.Direction.ASC, "deviceId");
+        return gatewayDeviceRep.findAll(sort);
     }
 
     /**
@@ -90,4 +111,169 @@
             GatewayUtils.add2Cache(device);
         }
     }
+
+
+    /**
+     * gatewayDeviceService#ajaxTestGrain
+     * 绮儏鎺ㄩ�佹祴璇�
+     *
+     * @param param
+     * @return
+     */
+    @Expose
+    public String ajaxTestGrain(Map<String,Object> parameter) {
+
+        //鑾峰彇璁惧閰嶇疆锛屽彧閽堝绮儏璁惧杩涜鎵ц
+
+        List<GatewayDevice> list = this.listAll();
+
+        if (null == list || list.isEmpty()) {
+            return "ERROR锛氫负鑾峰彇鍒扮郴缁熶腑璁惧閰嶇疆锛屽彇娑堟墽琛�";
+        }
+
+        Date dayTime = (Date) parameter.get("dayTime");
+        if (null == dayTime) dayTime = new Date();
+        QueryParam param = new QueryParam();
+        param.setDayTime(dayTime);
+        param.setStart(DateUtil.getCurZero(dayTime));
+        param.setEnd(DateUtil.getNextZero(dayTime));
+
+
+        //濡傛灉閮ㄧ讲FZZY-IGDS-V40鐗堟湰绯荤粺
+        return this.pushByV40(list, param);
+
+    }
+
+    private String pushByV40(List<GatewayDevice> list, QueryParam param) {
+
+        String depotIdSys;
+        List<Fz40Grain> listGrain;
+
+        Fz40Grain lastData;
+
+        GrainData pushData;
+
+        DeviceReportService deviceReportService = null;
+        for (GatewayDevice device : list) {
+            depotIdSys = device.getDepotIdSys();
+
+            if (StringUtils.isEmpty(depotIdSys)) {
+                log.info("--------璁惧--{}-鏈厤缃郴缁熺浉鍏充粨搴撶紪鐮侊紝鏃犳硶鎵ц褰撳墠鎿嶄綔",device.getDeviceName());
+                continue;
+            }
+
+            listGrain = fzzy40CommonService.listGrain(depotIdSys, param.getStart(), param.getEnd());
+
+            if (null == listGrain || listGrain.isEmpty()) {
+                log.info("---------璁惧---{}--鏈悓姝ュ埌绮儏淇℃伅锛岃纭褰撳墠鏉′欢涓嬫槸鍚︽湁鏁版嵁",device.getDeviceName());
+                continue;
+            }
+
+
+            //鑾峰彇鏈�鍚庝竴鏉$伯鎯呬綔涓哄綋鍓嶆暟鎹�
+            lastData = listGrain.get(listGrain.size() - 1);
+
+            pushData = this.lastData2PushData(lastData, device);
+
+
+            if (null == deviceReportService) {
+                deviceReportService = gatewayRemoteManager.getDeviceReportService(device.getProvinceProtocol());
+            }
+
+
+            deviceReportService.pushGrainData2Cloud(pushData);
+
+        }
+
+        return "SUCCESS";
+    }
+
+    /**
+     * 灏嗙伯鎯呮暟鎹浆鎹负鎺ㄩ�侀渶瑕佺殑鏁版嵁鏍煎紡
+     *
+     * @param lastData
+     * @return
+     */
+    private GrainData lastData2PushData(Fz40Grain lastData, GatewayDevice device) {
+        GrainData result = new GrainData();
+
+        result.setMessageId(ScConstant.getMessageId());
+        result.setDeviceId(device.getDeviceId());
+        result.setAvgTemperature(lastData.getTempAve() + "");
+        result.setMinTemperature(lastData.getTempMin() + "");
+        result.setMaxTemperature(lastData.getTempMax() + "");
+        result.setCollectTime(DateFormatUtils.format(lastData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss"));
+
+        //灞�-琛�-鍒�
+        String[] attrCable = lastData.getCable().split("-");
+
+        //灞傞厤缃�
+        int layMax = Integer.valueOf(attrCable[0]);
+
+        //閽堝绛掍粨閰嶇疆
+        String[] cableCirAtt = new String[0];
+        if (StringUtils.isNotEmpty(lastData.getCableCir())) {
+            cableCirAtt = lastData.getCableCir().split("-");
+        }
+
+        //娓╁害闆嗗悎
+        String[] attr = lastData.getPoints().split(",");
+
+        //鏍瑰彿
+        int cableNum = 1, layerNumber = 1, position = 0;
+
+        int curCir = 1;//鎵�鍦ㄥ湀
+        int cirLay = 1;//褰撳墠鍦堢殑灞�
+        String curTemp;
+        List<GrainDataDetail> details = new ArrayList<>();
+        for (int i = 0; i < attr.length; i++) {
+            position = i;
+            curTemp = attr[i];
+            //鏍瑰彿
+            cableNum = (i / layMax) + 1;
+            layerNumber = (i % layMax) + 1;
+
+            if (cableCirAtt.length > 0) {
+                curCir = getCurCir(cableNum, attrCable);
+                cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
+
+                details.add(new GrainDataDetail(cableNum, cirLay, position, curTemp));
+            } else {
+
+                //鍒ゆ柇鏈�澶� TODO 寰呬紭鍖�
+                if (curTemp.equals(result.getMaxTemperature())) {
+                    result.setMaxX(cableNum + "");
+                    result.setMaxZ(curTemp);
+                }
+
+
+                //鍒ゆ柇鏈�灏� TODO 寰呬紭鍖�
+                if (curTemp.equals(result.getMinTemperature())) {
+                    result.setMinX(cableNum + "");
+                    result.setMinZ(curTemp);
+                }
+
+
+
+                details.add(new GrainDataDetail(cableNum, layerNumber, position, curTemp));
+            }
+
+        }
+
+        result.setTemperature(details);
+
+        return result;
+    }
+
+    private int getCurCir(int curRoot, String[] cableRuleAtt) {
+
+        int sum = 0;
+        for (int i = 0; i < cableRuleAtt.length; i++) {
+            sum += Integer.valueOf(cableRuleAtt[i]);
+            if (curRoot <= sum) return i + 1;
+        }
+
+        return 1;
+    }
+
 }

--
Gitblit v1.9.3