jiazx0107@163.com
2023-12-14 a69402c8b67d8ce4b698d0c394d15ff43b5d99d0
src/main/java/com/fzzy/protocol/fzzy/analysis/AnalysisGrain.java
@@ -2,7 +2,18 @@
import com.alibaba.fastjson.JSONObject;
import com.fzzy.api.data.ApiCommonDevice;
import com.fzzy.api.data.GatewayDeviceType;
import com.fzzy.api.utils.NumberUtil;
import com.fzzy.gateway.GatewayUtils;
import com.fzzy.gateway.api.GatewayDeviceReportService;
import com.fzzy.gateway.api.GatewayRemoteManager;
import com.fzzy.gateway.data.BaseReqData;
import com.fzzy.gateway.data.BaseResp;
import com.fzzy.gateway.data.WeatherWebDto;
import com.fzzy.gateway.entity.GatewayDevice;
import com.fzzy.gateway.hx2023.ScConstant;
import com.fzzy.gateway.hx2023.data.*;
import com.fzzy.protocol.ProtocolUtils;
import com.fzzy.protocol.fzzy.builder.SimpleCommandBuilder;
import com.fzzy.protocol.fzzy.cmd.BaseRemoteImpl;
import com.fzzy.protocol.fzzy.data.ReMessage;
@@ -10,7 +21,12 @@
import com.fzzy.protocol.fzzy.resp.Response2102;
import com.fzzy.protocol.fzzy.server.ServerUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
 * 粮情解析
@@ -20,6 +36,9 @@
@Slf4j
@Component(AnalysisGrain.BEAN_ID)
public class AnalysisGrain extends BaseRemoteImpl {
    @Resource
    private GatewayRemoteManager gatewayRemoteManager;
    public static final String BEAN_ID = "fzzy.analysisGrain";
@@ -48,14 +67,16 @@
            Response2102 response = JSONObject.parseObject(reMessage.getContent(), Response2102.class);
            String depotId = response.getHouseId();
            //获取请求信息
            BaseReqData reqData = ServerUtils.getSyncReq(depotId);
            //粮情解析
            log.info("控制柜--->平台粮情信息--{}", response);
            log.info("控制柜--->平台,控制柜返回粮情检测结果--{}", response);
            //粮情封装和处理
            if (StringUtils.isEmpty(response.getLayerPerCircle())) {
                buildBizInfo1(response);
            } else {
                buildBizInfo2(response);
            }
        } catch (Exception e) {
@@ -65,6 +86,128 @@
        }
    }
    private void buildBizInfo2(Response2102 response) {
        //TODO 筒仓的封装解析待处理
    }
    //信息调整封装
    private void buildBizInfo1(Response2102 response) {
        //获取请求信息
        BaseReqData reqData = ProtocolUtils.getSyncReq(response.getHouseId());
        if (null == reqData) {
            log.error("--粮情封装解析,未获取到请求相关参数----");
            return;
        }
        int cableZ = Integer.valueOf(response.getLay());
        int cableY = Integer.valueOf(response.getRow());
        int cableX = Integer.valueOf(response.getCol());
        GatewayDevice device = reqData.getDevice();
        //数据封装
        GrainData grain = new GrainData();
        grain.setMessageId(ScConstant.getMessageId());
        grain.setDeviceId(device.getDeviceId());
        grain.setTimestamp(System.currentTimeMillis() + "");
        ClientHeaders headers = new ClientHeaders();
        headers.setDeviceName(device.getDeviceName());
        headers.setProductId(device.getProductId());
        headers.setOrgId(device.getOrgId());
        headers.setMsgId(reqData.getMessageId());
        grain.setHeaders(headers);
        GrainOutPut outPut = new GrainOutPut();
        outPut.setAvgTemperature(response.getTAvg() + "");
        outPut.setMinTemperature(response.getTMin() + "");
        outPut.setMaxTemperature(response.getTMax() + "");
        List<GrainTemp> temperature = new ArrayList<>();
        //根号
        int cableNum = 1, position = 0;
        double curTemp;
        String[] attr = response.getPoints().split(",");
        int x = 0, y = 0, z = 0;
        for (int i = 0; i < attr.length; i++) {
            curTemp = Double.valueOf(attr[i]);
            if (curTemp < -900) {
                curTemp = ERROR_CHECK_TAG;
            }
            //数据优化
            if (curTemp > 35) {
                curTemp = response.getTAvg();
            }
            position = i;
            z = i % cableZ + 1;
            x = i / (cableZ * cableY);
            y = x * (cableZ * cableY);
            y = (i - y) / cableZ;
            //根号
            cableNum = (i / cableZ) + 1;
            temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + ""));
        }
        outPut.setTemperature(temperature);
        grain.setOutput(com.alibaba.fastjson2.JSONObject.toJSONString(outPut));
        GatewayDevice gatewayDeviceWeather = GatewayUtils.getCacheByDeviceTypeOne(GatewayDeviceType.TYPE_09.getCode());
        //系统气象站信息
        WeatherWebDto weather = WeatherWebDto.contextMap.get("default");
        //气象信息
        GrainWeather weatherStation = new GrainWeather();
        weatherStation.setMessageId(ScConstant.getMessageId());
        weatherStation.setMessgeId(weatherStation.getMessageId());
        if (null != gatewayDeviceWeather) {
            weatherStation.setId(gatewayDeviceWeather.getDeviceId());
        } else {
            weatherStation.setId(device.getDeviceId());
        }
        weatherStation.setAirPressure(weather.getPressure());
        weatherStation.setHumidity(weather.getHumidity());
        weatherStation.setPm(weather.getAir_pm25());
        weatherStation.setRadiation("0");
        weatherStation.setRainfallAmount(weather.getWea());
        weatherStation.setTemperature(weather.getTem());
        weatherStation.setWindDirection(weather.getWin());
        weatherStation.setWindPower(weather.getWin_meter());
        weatherStation.setWindSpeed(weather.getWin_speed());
        grain.setWeatherStation(JSONObject.toJSONString(weatherStation));
        //封装好的数据
        log.info("---粮情机械封装完成----开始执行推送");
        reqData.setData(JSONObject.toJSONString(grain));
        doPushGrain(reqData);
    }
    private void doPushGrain(BaseReqData reqData) {
        GatewayDeviceReportService reportService = gatewayRemoteManager.getDeviceReportService(reqData.getDevice().getPushProtocol());
        if (null == reportService) {
            log.error("------------粮情推送失败,系统不存在当前协议执行类----{}", reqData.getDevice().getDeviceName());
            return;
        }
        reportService.reportGrainData(reqData);
    }
    private void returnMsg(ApiCommonDevice ser) {
        //先回复控制柜
        SimpleCommandBuilder commandBuilder = SimpleCommandBuilder.getInstance();