diff --git a/fastbee-admin/src/main/resources/application.yml b/fastbee-admin/src/main/resources/application.yml index c9b063b..03b74cf 100644 --- a/fastbee-admin/src/main/resources/application.yml +++ b/fastbee-admin/src/main/resources/application.yml @@ -6,6 +6,7 @@ fastbee: demoEnabled: true # 实例演示开关 # 文件路径,以uploadPath结尾 示例( Windows配置 D:/uploadPath,Linux配置 /uploadPath) profile: /home/soft/hzwmiot/uploadPath +# profile: D:/uploadPath addressEnabled: true # 获取ip地址开关 captchaType: math # 验证码类型 math 数组计算 char 字符验证 diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/controller/UploadedPhotosController.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/controller/UploadedPhotosController.java index cc2d4dc..f242231 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/controller/UploadedPhotosController.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/controller/UploadedPhotosController.java @@ -110,9 +110,12 @@ public class UploadedPhotosController extends BaseController // 处理时间戳 long timestamp = Long.parseLong(time + "000"); Date date = new Date(timestamp); - + //抓拍监控,并返回路径 + String monitorPath = uploadedPhotosService.captureMonitorPhoto(sn); + //推送告警短信通知 + uploadedPhotosService.sendAlarmMessage(sn, doorState, shakeState); UploadedPhotos uploadedPhotos = new UploadedPhotos( - null, fileName, imei, sn, latitude, longitude, temperature, doorState, shakeState, date + null, fileName, monitorPath,imei, sn, latitude, longitude, temperature, doorState, shakeState, date ); return toAjax(uploadedPhotosService.insertUploadedPhotos(uploadedPhotos)); } catch (IOException e) { diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/IUploadedPhotosService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/IUploadedPhotosService.java index b1b301f..8bdec76 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/IUploadedPhotosService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/IUploadedPhotosService.java @@ -59,4 +59,19 @@ public interface IUploadedPhotosService * @return 结果 */ public int deleteUploadedPhotosById(Long id); + + /** + * 抓拍监控照片 + * @param sn + * @return + */ + String captureMonitorPhoto(String sn); + + /** + * 发送短信通知 + * @param sn + * @param doorState + * @param shakeState + */ + void sendAlarmMessage(String sn, String doorState, String shakeState); } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/impl/UploadedPhotosServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/impl/UploadedPhotosServiceImpl.java index 8a59186..9f7e1e3 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/impl/UploadedPhotosServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/anfang/service/impl/UploadedPhotosServiceImpl.java @@ -1,13 +1,28 @@ package com.fastbee.iot.anfang.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONObject; +import com.fastbee.common.config.RuoYiConfig; +import com.fastbee.common.utils.DevParamsUtils; +import com.fastbee.common.utils.file.FileUploadUtils; import com.fastbee.iot.anfang.service.IUploadedPhotosService; +import com.fastbee.iot.domain.Device; +import com.fastbee.iot.haikang.HaikangYingshiApi; import com.fastbee.iot.mapper.UploadedPhotosMapper; import com.fastbee.iot.model.anfang.UploadedPhotos; +import com.fastbee.iot.service.IDeviceService; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.logging.Handler; /** * 存储上传的照片信息Service业务层处理 @@ -20,7 +35,8 @@ public class UploadedPhotosServiceImpl implements IUploadedPhotosService { @Resource private UploadedPhotosMapper uploadedPhotosMapper; - + @Autowired + private IDeviceService deviceService; /** * 查询存储上传的照片信息 * @@ -92,4 +108,101 @@ public class UploadedPhotosServiceImpl implements IUploadedPhotosService { return uploadedPhotosMapper.deleteUploadedPhotosById(id); } + + @Override + public String captureMonitorPhoto(String sn) { + Device device = deviceService.selectDeviceBySerialNumber(sn); + if (device == null) { + return ""; + } + Map devParams = DevParamsUtils.getDevParams(device.getDevParams()); + if(!devParams.containsKey("jiankongIds")){ + return ""; + } + String jiankongIds = devParams.get("jiankongIds").toString(); + Device jiankongDevice = deviceService.selectDeviceByDeviceId(Long.parseLong(jiankongIds)); + if(jiankongDevice == null){ + return ""; + } + Map devData = DevParamsUtils.getDevParams(jiankongDevice.getDevParams()); + if (devData.get("appKey") == null) { + return ""; + } + if (devData.get("appSecret") == null) { + return ""; + } + if (devData.get("channelNo") == null) { + return ""; + } + Map map = new HashMap<>();//存放参数 + map.put("appKey", devData.get("appKey")); + map.put("appSecret", devData.get("appSecret")); + cn.hutool.json.JSONObject token = HaikangYingshiApi.getToken(map); + if (token != null && token.get("code").equals("200")) { + Map params = new HashMap<>(); + token = (cn.hutool.json.JSONObject) token.get("data"); + params.put("accessToken", token.get("accessToken")); + params.put("deviceSerial", jiankongDevice.getSerialNumber()); + params.put("channelNo", devData.get("channelNo")); + cn.hutool.json.JSONObject token1 = HaikangYingshiApi.capture(params); + if (token1 != null && token1.get("code").equals("200")) { + String dirs = DateUtil.thisYear() + "/" + (DateUtil.thisMonth() + 1) + "/" + DateUtil.thisDayOfMonth(); + File dirfile = new File(RuoYiConfig.getUploadPath() + "/" + dirs); + if (!dirfile.exists()) { + // 目录不存在,创建目录 + boolean created = dirfile.mkdirs(); + if (created) { + } else { + } + } else { + } + Map data = (JSONObject) token1.get("data"); + Map reMap = new HashMap<>(); + reMap.put("picUrl", data.get("picUrl")); + if (data.get("picUrl") != null) { + try { + String picUrl = data.get("picUrl").toString(); + URL url = new URL(picUrl); + HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); + int responseCode = httpConnection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + InputStream inputStream = httpConnection.getInputStream(); + byte[] buffer = new byte[4096]; + int bytesRead = -1; + String[] split1 = picUrl.split("\\."); + String filename = + DateUtil.date().toDateStr() + "-" + DateUtil.thisHour(true) + + DateUtil.thisMinute() + + "-anfangmonitor-" + device.getDeviceId() + "." + + split1[split1.length - 1].split("\\?")[0]; + String pathUrl = RuoYiConfig.getUploadPath() + "/" + dirs + "/" + filename; + OutputStream outputStream = new FileOutputStream(pathUrl); + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.close(); + inputStream.close(); + String httpimg = FileUploadUtils.getPathFileName(RuoYiConfig.getUploadPath(), dirs + + "/" + filename); + return httpimg; + } else { + System.out.println("读取http图片失败!"); + return ""; + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return ""; + } else { + return ""; + } + } + return ""; + } + + @Override + public void sendAlarmMessage(String sn, String doorState, String shakeState) { + + } } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/anfang/UploadedPhotos.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/anfang/UploadedPhotos.java index 9add5a8..0d0f516 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/anfang/UploadedPhotos.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/anfang/UploadedPhotos.java @@ -28,7 +28,9 @@ public class UploadedPhotos extends BaseEntity /** 照片存储路径 */ @Excel(name = "照片存储路径") private String photoPath; - + /** 监控抓拍 */ + @Excel(name = "监控抓拍") + private String monitorPath; /** 设备IMEI号 */ @Excel(name = "设备IMEI号") private String imei; diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/UploadedPhotosMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/UploadedPhotosMapper.xml index 2f0fda2..ba035d3 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/UploadedPhotosMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/UploadedPhotosMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -18,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, photo_path, imei, sn, lat, lng, temp, door_state, shake_state, upload_time from uploaded_photos + select id, photo_path,monitor_path, imei, sn, lat, lng, temp, door_state, shake_state, upload_time from uploaded_photos - and photo_path = #{photoPath} @@ -46,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into uploaded_photos photo_path, + monitor_path, imei, sn, lat, @@ -57,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{photoPath}, + #{monitorPath}, #{imei}, #{sn}, #{lat}, @@ -72,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update uploaded_photos photo_path = #{photoPath}, + monitor_path = #{monitorPath}, imei = #{imei}, sn = #{sn}, lat = #{lat},