From e5e40869b53a0e8c9c4e86d3f488dceb08b3b845 Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期二, 31 十月 2023 12:18:11 +0800 Subject: [PATCH] 四川省网关接口相关11 --- src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java | 211 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 194 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java index 5a738b1..1135ee6 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.List; +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 RedisUtil redisUtil; - + private Fzzy40CommonService fzzy40CommonService; + @Resource + private GatewayRemoteManager gatewayRemoteManager; /** * gatewayDeviceService#listAll @@ -30,10 +50,8 @@ */ @DataProvider public List<GatewayDevice> listAll() { - - List<GatewayDevice> list = gatewayDeviceRep.findAll(); - - return list; + Sort sort = new Sort(Sort.Direction.ASC, "deviceId"); + return gatewayDeviceRep.findAll(sort); } /** @@ -48,6 +66,15 @@ if (null == data.getId()) { data.setId(ContextUtil.getUUID()); + } + + + if (null == data.getDeviceSn()) { + if (null != entity.getIp()) { + data.setDeviceSn(entity.getIp()); + } else { + data.setDeviceSn(data.getDeviceId()); + } } gatewayDeviceRep.save(data); @@ -66,6 +93,8 @@ BeanUtils.copyProperties(data, data2); gatewayDeviceRep.delete(data2); + GatewayUtils.removeCache(data2); + flushCache(); return null; } @@ -78,23 +107,171 @@ public void flushCache() { List<GatewayDevice> list = listAll(); if (null == list || list.isEmpty()) return; - String key; for (GatewayDevice device : list) { - key = RedisConst.buildKey(RedisConst.KYE_GATE_DEVICE, device.getDeviceId()); - redisUtil.set(key, device); + GatewayUtils.add2Cache(device); } } + /** - * 缂撳瓨鑾峰彇璁惧淇℃伅 + * gatewayDeviceService#ajaxTestGrain + * 绮儏鎺ㄩ�佹祴璇� * - * @param deviceId + * @param parameter * @return */ - public GatewayDevice getCacheDevice(String deviceId) { - String key = RedisConst.buildKey(RedisConst.KYE_GATE_DEVICE, deviceId); - return (GatewayDevice) redisUtil.get(key); + @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(); + + Date start = DateUtil.getCurZero(dayTime); + Date end = DateUtil.getNextZero(dayTime); + + + //濡傛灉閮ㄧ讲FZZY-IGDS-V40鐗堟湰绯荤粺 + return this.pushByV40(list, start,end); + } + private String pushByV40(List<GatewayDevice> list, Date start,Date end) { + + 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, start, end); + + 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