package com.newfiber.termite.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.newfiber.common.core.web.service.BaseServiceImpl; 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.response.DataUpResponse; import com.newfiber.termite.domain.response.TermiteInfoResponse; import com.newfiber.termite.mapper.TermiteMapper; 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.util.CollectionUtils; 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; 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); 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 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调用失败"; } } }