Newer
Older
pichan-haerbin / src / main / java / com / casic / service / impl / PressDataRecvServiceImpl.java
chaizhuang on 13 Apr 2023 5 KB 1、增加压力下发设备配置
package com.casic.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.dao.GasPressDataMapper;
import com.casic.dao.NbPressMapper;
import com.casic.entity.GasPressData;
import com.casic.entity.NbDevice;
import com.casic.entity.NbPress;
import com.casic.model.ResponseData;
import com.casic.service.PressDataRecvService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.sql.Wrapper;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

@Service
@Slf4j
@AllArgsConstructor
public class PressDataRecvServiceImpl extends ServiceImpl<GasPressDataMapper, GasPressData> implements PressDataRecvService {

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

    private PressDataRecvServiceImpl flagFieldProcessor(String flagField, Map<String, String> contentMap, Supplier cse) {
        if (contentMap.containsKey(flagField)) {
            cse.get();
        }
        return this;
    }

    private Boolean realTimeGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) {
        GasPressData gasPressData = GasPressData.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()))
                .cell(Double.valueOf(contentMap.containsKey("ba") ? String.valueOf(contentMap.get("ba")) : "0"))
                .signals(String.valueOf(contentMap.get("si")))
                .pss(String.valueOf(contentMap.get("pss")))
                .ipla(String.valueOf(contentMap.get("ipla")))
                .ipl(String.valueOf(contentMap.get("ipl")))
                .ipha(String.valueOf(contentMap.get("ipha")))
                .iph(String.valueOf(contentMap.get("iph")))
                .ip(String.valueOf(contentMap.get("ip")))
                .bv(String.valueOf(contentMap.get("bv")))
                .build();
        this.baseMapper.insert(gasPressData);
        flushNbPressStatus(recvDataMap,gasPressData.getCell());
        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"));
        for (Map<String, String> historyData : historyDataList) {
            GasPressData historyGasPressData = GasPressData.builder()
                    .tenantId(Long.valueOf(String.valueOf(recvDataMap.get("tenantId"))))
                    .deviceId(String.valueOf(recvDataMap.get("deviceId")))
                    .imei(String.valueOf(recvDataMap.get("IMEI")))
                    .uptime(new Date(historyData.containsKey("time") ?
                            Long.valueOf(String.valueOf(historyData.get("time")))
                            : System.currentTimeMillis()))
                    .ip(String.valueOf(historyData.get("ip")))
                    .build();
            this.baseMapper.insert(historyGasPressData);
        }
        flushNbPressStatus(recvDataMap,null);
        return true;
    }


    private void  flushNbPressStatus(Map<String, Object> recvDataMap,Double cell){
        QueryWrapper<NbPress>  nbPressWrapper=  new QueryWrapper<NbPress>().eq("device_id",String.valueOf(recvDataMap.get("deviceId")));
        List<NbPress> nbPressList=this.nbPressMapper.selectList(nbPressWrapper);
        if(CollectionUtils.isEmpty(nbPressList)){
            NbPress nbPress=new NbPress();
            nbPress.setDeviceId(String.valueOf(recvDataMap.get("deviceId")));
            nbPress.setImei(String.valueOf(recvDataMap.get("IMEI")));
            nbPress.setProductId(String.valueOf(recvDataMap.get("productId")));
            nbPress.setTenantId(String.valueOf(recvDataMap.get("tenantId")));
            if(!ObjectUtils.isEmpty(cell)){
                nbPress.setCell(String.valueOf(cell));
            }
            this.nbPressMapper.insert(nbPress);
        }else {
            NbPress  nbPress=nbPressList.stream().findFirst().get();
            if(ObjectUtils.isEmpty(cell)){
                return;
            }else {
                nbPress.setCell(String.valueOf(cell));
            }
            this.nbPressMapper.updateById(nbPress);
        }
    }


}