Newer
Older
pichan-haerbin / src / main / java / com / casic / service / impl / GasDataRecvServiceImpl.java
package com.casic.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.dao.GasDataRecvMapper;
import com.casic.dao.NbAlarmConfigMapper;
import com.casic.dao.NbConfigMapper;
import com.casic.dao.NbDeviceMapper;
import com.casic.entity.LucencyGasData;
import com.casic.entity.NbDevice;
import com.casic.model.DataGasConfigParam;
import com.casic.model.ResponseData;
import com.casic.service.AepCommandSend;
import com.casic.service.GasDataRecvService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.*;


@Slf4j
@AllArgsConstructor
@Service
public class GasDataRecvServiceImpl extends ServiceImpl<GasDataRecvMapper, LucencyGasData> implements GasDataRecvService {

    private final NbDeviceMapper nbDeviceMapper;
    private final AepCommandSend aepCommandSend;
    private final NbConfigMapper nbConfigMapper;
    private final NbAlarmConfigMapper nbAlarmConfigMapper;

    @Override
    public Object saveRev(Map<String, Object> recvDataMap) {
        ResponseData responseData = new ResponseData();
        try {
            Map<String, String> contentMap = (Map) recvDataMap.get("payload");
            if (contentMap.containsKey("status")) {
                nbDeviceProvider(recvDataMap, contentMap);
            } else if (contentMap.containsKey("update")) {
                configStatusDataProvider(recvDataMap, String.valueOf(contentMap.get("update")));
            } else if (contentMap.containsKey("time")) {
                realTimeGasDataProvider(recvDataMap, contentMap);
            } else if (contentMap.containsKey("history")) {
                historyGasDataProvider(recvDataMap, contentMap);
            }
            responseData.setCode(200);
            responseData.setMessage("保存成功");
        } catch (Exception dex) {
            log.error("主题:哈尔滨燃气设备存储异常,异常信息:{}", dex.getMessage());
            responseData.setCode(500);
            responseData.setMessage("保存异常");
        }
        return responseData;
    }

    private Boolean nbDeviceProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) {
        nbDeviceMapper.deleteDeviceByDeviceId(String.valueOf(recvDataMap.get("deviceId")));
        NbDevice nbDevice = NbDevice.builder()
                .logtime(new Date())
                .productId(String.valueOf(recvDataMap.get("productId")))
                .devcode(String.valueOf(contentMap.get("devid")))
                .iccid(String.valueOf(contentMap.get("iccid")))
                .status(String.valueOf(contentMap.get("status")))
                .deviceId(String.valueOf(recvDataMap.get("deviceId")))
                .valid(1)
                .imei(String.valueOf(contentMap.get("imei"))).build();
        nbDeviceMapper.insert(nbDevice);
        if (!StringUtils.isEmpty(nbDevice.getImei()) && !StringUtils.isEmpty(nbDevice.getDevcode())) {
            this.baseMapper.updateData(nbDevice.getImei(), nbDevice.getDevcode());
        }
        return true;
    }

    private Boolean realTimeGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) throws Exception {
        String imei = String.valueOf(recvDataMap.get("IMEI"));
        String deviceId = String.valueOf(recvDataMap.get("deviceId"));
        String productId = String.valueOf(recvDataMap.get("productId"));
        firstSaveDeviceAndSend(imei, productId, deviceId);
        String devcode = nbDeviceMapper.getDevcodeByDeviceId(deviceId);
        LucencyGasData lucencyGasBuilder = LucencyGasData.builder()
                .tenantId(Long.valueOf(String.valueOf(recvDataMap.get("tenantId"))))
                .deviceId(String.valueOf(recvDataMap.get("deviceId")))
                .imei(String.valueOf(recvDataMap.get("IMEI")))
                .uptime(new Date(contentMap.containsKey("time") ?
                        Long.valueOf(String.valueOf(contentMap.get("time")))
                        : System.currentTimeMillis()))
                .logtime(new Date())
                .dataValue(String.valueOf(contentMap.get("ch4")))
                .cell(Double.valueOf(contentMap.containsKey("ba") ? String.valueOf(contentMap.get("ba")) : "0"))
                .chha(String.valueOf(contentMap.get("chha")))
                .chhha(String.valueOf(contentMap.get("chhha")))
                .signals(String.valueOf(contentMap.get("si")))
                .devcode(StringUtils.isEmpty(devcode) ? "" : devcode)
                .build();
        this.baseMapper.insert(lucencyGasBuilder);
        return true;
    }

    //历史数据暂不处理
    private Boolean historyGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) {
        List<Map<String, String>> historyDataList = (List<Map<String, String>>) JSONArray.parse(contentMap.get("history"));
        String devcode = nbDeviceMapper.getDevcodeByDeviceId(String.valueOf(recvDataMap.get("deviceId")));
        String tenantId = String.valueOf(recvDataMap.get("tenantId"));
        String deviceId = String.valueOf(recvDataMap.get("deviceId"));
        String cell = StringUtils.isEmpty(deviceId) ? "" : nbDeviceMapper.getLastCellByDeviceId(deviceId);
        String imei = String.valueOf(recvDataMap.get("IMEI"));
        for (Map<String, String> historyData : historyDataList) {
            this.baseMapper.addData(devcode, tenantId, deviceId, imei, new Date(historyData.containsKey("time") ?
                    Long.valueOf(String.valueOf(historyData.get("time")))
                    : System.currentTimeMillis()), String.valueOf(historyData.get("ch4")), new Date(), cell);
        }
        return true;
    }

    private Boolean firstSaveDeviceAndSend(String imei, String productId, String deviceId) throws Exception {
        String id = nbDeviceMapper.isDeviceId(deviceId);
        if (StringUtils.isEmpty(id)) {
            NbDevice nbDevice = NbDevice.builder()
                    .logtime(new Date())
                    .deviceId(deviceId)
                    .productId(productId)
                    .imei(imei).build();
            nbDeviceMapper.insert(nbDevice);
            DataGasConfigParam dataGasConfigParam = new DataGasConfigParam();
            dataGasConfigParam.setOperator("casic");
            dataGasConfigParam.setProductId(productId);
            dataGasConfigParam.setDeviceId(deviceId);
            List<DataGasConfigParam> dataGasConfigList = new ArrayList<>();
            dataGasConfigList.add(dataGasConfigParam);
            aepCommandSend.sendStatusNb(dataGasConfigList);
            return false;
        }
        return true;
    }

    private void configStatusDataProvider(Map<String, Object> recvDataMap, String status) {
        String deviceId = String.valueOf(recvDataMap.get("deviceId"));
        String recentConf = nbDeviceMapper.getRecentByDevciceId(deviceId);
        String configMsg = status.equals("1") ? "成功下发" : "下发失败(参数不在有效范围内)";
        if (recentConf.equals("1")) {
            nbConfigMapper.configStatusData(configMsg, deviceId);
        } else {
            nbAlarmConfigMapper.configStatusData(configMsg, deviceId);
        }

    }
}