Newer
Older
newfiber-termite / newfiber-termites / newfiber-termites-dataup / src / main / java / com / newfiber / termite / service / impl / TermiteServiceImpl.java
@xiongkai xiongkai on 27 May 9 KB 基础代码整理
package com.newfiber.termite.service.impl;


import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.newfiber.common.core.web.service.BaseServiceImpl;
import com.newfiber.termite.domain.DeviceInfo;
import com.newfiber.termite.domain.DeviceMonitoringData;
import com.newfiber.termite.domain.OneByOneNow;
import com.newfiber.termite.domain.Termite;
import com.newfiber.termite.domain.dto.*;
import com.newfiber.termite.domain.request.*;
import com.newfiber.termite.domain.request.deviceMonitoringData.DeviceMonitoringDataQueryRequest;
import com.newfiber.termite.domain.response.DataUpResponse;
import com.newfiber.termite.domain.response.TermiteInfoResponse;
import com.newfiber.termite.enums.EExistsAnt;
import com.newfiber.termite.enums.EIdentColle;
import com.newfiber.termite.mapper.TermiteMapper;
import com.newfiber.termite.service.IDeviceInfoService;
import com.newfiber.termite.service.IDeviceMonitoringDataService;
import com.newfiber.termite.service.ITermiteService;
import com.newfiber.termite.util.FileUploadUtils;
import com.newfiber.termite.util.MinioConfig;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

@Service
public class TermiteServiceImpl extends BaseServiceImpl<TermiteMapper, Termite> implements ITermiteService {


    @Resource
    private TermiteMapper termiteMapper;

    @Autowired
    private MinioConfig minioConfig;

    @Autowired
    private MinioClient client;

    @Resource
    private RestTemplate restTemplate;

    @Resource
    private DeviceInfoServiceImpl deviceInfoService;

    @Resource
    private IDeviceMonitoringDataService deviceMonitoringDataService;

    public DataUpResponse termiteDataup(TermiteDataDto dataDto, MultipartFile image) throws Exception{
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String fileName = FileUploadUtils.extractFilename(image);
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(minioConfig.getBucketName())
                .object(fileName)
                .stream(image.getInputStream(), image.getSize(), -1)
                .contentType(image.getContentType())
                .build();
        client.putObject(args);
        String url= minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
        termiteMapper.addtermiteData(dataDto.getSn(),format.format(new Date()),dataDto.getDruing(),new Date(),url,dataDto.getSoftware(),dataDto.getHardware(),dataDto.getTemperature(),dataDto.getVoltage(),dataDto.getRssi(),dataDto.getAP(),dataDto.getCamera());
        DataUpResponse result =new DataUpResponse();
        result.setUrl(url);
        result.setTime(format.format(new Date()));
        String isduring = termiteMapper.queryNeeddurding(dataDto.getSn());
        if("1".equals(isduring)){
            result.setDruing("1");
        }else {
            result.setDruing("0");
        }
        termiteMapper.updateDeviceLastUpTime(dataDto.getSn(),format.format(new Date()));
        return result;
    }


    public String photoIdentify(PhotoIdentifyDto dataDto, MultipartFile image) throws Exception{
        String fileName = FileUploadUtils.extractFilename(image);
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(minioConfig.getBucketName())
                .object(fileName)
                .stream(image.getInputStream(), image.getSize(), -1)
                .contentType(image.getContentType())
                .build();
        client.putObject(args);
        String url= minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
        termiteMapper.updatephotoIdentify(dataDto.getId(),dataDto.getYesnoant(),url);

        return url;
    }

    @Override
    public List<TermiteInfoResponse> querytermiteData(TermiteInfoQueryRequest request){
        return termiteMapper.querytermiteData(request);
    }

    @Override
    public TermiteInfoResponse queryMonitorData(TermiteHistoryQueryRequest request){
        return termiteMapper.queryMonitorData(request);
    }

    @Override
    public boolean updateMonitorData(TermiteInfoUpdateyRequest request){
        termiteMapper.updateMonitorData(request);

        // 更新第一次报警时间
        DeviceInfo deviceInfo = deviceInfoService.selectDetail(request.getSn());
        if(null != deviceInfo.getFirstWarnDatetime() && EIdentColle.True.getCode().equals(request.getIdencolle())){
            DeviceMonitoringDataQueryRequest deviceMonitoringDataQueryRequest = new DeviceMonitoringDataQueryRequest();
            deviceMonitoringDataQueryRequest.setYesnoant(EExistsAnt.True.getCode());
            deviceMonitoringDataQueryRequest.setIdencolle(EIdentColle.True.getCode());
            deviceMonitoringDataQueryRequest.setOrderBy("date asc");
            List<DeviceMonitoringData> deviceMonitoringDataList = deviceMonitoringDataService.selectList(deviceMonitoringDataQueryRequest);
            if(deviceMonitoringDataList.size() >= 3){
                deviceInfo.setFirstWarnDatetime(DateUtil.parse(deviceMonitoringDataList.get(0).getDate()));
                deviceInfoService.updateById(deviceInfo);
            }
        }
        return true;
    }

    @Override
    public boolean updateMonitorDevice(DeviceInfoUpdateRequest request){
        termiteMapper.updateMonitorDevice(request);
        return true;
    }


    @Override
    public List<TermiteInfoResponse> queryhistoryData(TermiteHistoryQueryRequest request){
        return termiteMapper.queryhistoryData(request);
    }

    @Override
    public boolean insertMonitorDevice(TermiteInfoSaveRequest request){
        termiteMapper.insertMonitorDevice(request);
        return true;
    }
    @Override
    public boolean removeMonitorDevice(String id){
        termiteMapper.removeMonitorDevice(id);
        return true;
    }

    @Override
    public boolean updateModlefirstData(String sn){
        String newphoto = termiteMapper.querynewphoto(sn);
        termiteMapper.updateModlefirstData(sn,newphoto);
        return true;
    }
    @Override
    public UnitInfoDto queryUnitdata(){
        return termiteMapper.queryUnitdata();
    }

     @Override
     @Deprecated
    public List<AlarmDataDto> queryAlarmdata(String projectCode){
         return termiteMapper.queryAlarmdata(projectCode);
     }

     @Override
    public List<SnAlarmStatisticDto> querySnalarmStatistic(String projectCode){
        List<SnAlarmStatisticDto> result = new ArrayList<>();
        //查询所有站点的数据信息
        List<DeviceInfoDto> snlist = termiteMapper.queryDeviceData(projectCode);
        List<AlarmDataDto> alarmlist = termiteMapper.queryAlarmdata(projectCode);
        AtomicInteger outlineflag = new AtomicInteger(0);
        snlist.forEach(e->{
            Date date1 = new Date();
            if(e.getLastPicTime() !=null && !"".equals(e.getLastPicTime())){
                Date date2 =e.getLastPicTime();
                double diff = Math.abs(date1.getTime()-date2.getTime());
                double diffdays = diff/(1000l*60l*60l*24l);
                if(diffdays>1){
                    outlineflag.getAndIncrement();
                }
            }else {
                outlineflag.getAndIncrement();
            }
        });
        int onlineflag = snlist.size()- outlineflag.get();
        SnAlarmStatisticDto snAlarmStatisticDto =new SnAlarmStatisticDto();
        snAlarmStatisticDto.setName("在线");
        snAlarmStatisticDto.setValue(onlineflag);
        result.add(snAlarmStatisticDto);
        SnAlarmStatisticDto snAlarmStatisticDto2 =new SnAlarmStatisticDto();
        snAlarmStatisticDto2.setName("离线");
        snAlarmStatisticDto2.setValue(outlineflag.get());
        result.add(snAlarmStatisticDto2);
        SnAlarmStatisticDto snAlarmStatisticDto3 =new SnAlarmStatisticDto();
        snAlarmStatisticDto3.setName("告警");
        snAlarmStatisticDto3.setValue(alarmlist.size());
        result.add(snAlarmStatisticDto3);
        return result;
    }

    @Override
    public Object queryNowWeather(){

        String url = "https://gfapi.mlogcn.com/weather/v001/now?areacode=101201403&key=F2hH0eoTQS99jaKr3v4AIWFQkJwRjMAU&output_type=json";

        ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
        if (forEntity.getStatusCode().is2xxSuccessful()) {
            JSONObject object = JSONObject.parseObject(forEntity.getBody());
            JSONObject result = JSONObject.parseObject(JSON.toJSONString(object.get("result")));
            OneByOneNow oneByOneHours = JSONObject.parseObject(JSONObject.toJSONString(result.get("realtime")),OneByOneNow.class);
            return oneByOneHours;
        }
        else {
            return "gaofen天气Api调用失败";
        }
    }
}