diff --git a/nursing-unit-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/nursing-unit-base-core/src/main/java/org/jeecg/common/util/DateUtils.java index 4e929a1..cc142ba 100644 --- a/nursing-unit-base-core/src/main/java/org/jeecg/common/util/DateUtils.java +++ b/nursing-unit-base-core/src/main/java/org/jeecg/common/util/DateUtils.java @@ -650,6 +650,38 @@ public class DateUtils extends PropertyEditorSupport { return 0; } + public static String dateDiff(Long startMillis, Long endMillis) { + + long millisDiff = endMillis - startMillis; + String secondStr = "00"; + int second = (int) (millisDiff / SECOND_IN_MILLIS); + second = second % 60; + if(second>=10){ + secondStr = ""+second; + }else{ + secondStr = "0"+second; + } + + String minuteStr = "00"; + int minute = (int) (millisDiff / MINUTE_IN_MILLIS); + minute = minute % 60; + if(minute>=10){ + minuteStr = ""+minute; + }else{ + minuteStr = "0"+minute; + } + + String hourStr = "00"; + int hour = (int) (millisDiff / HOUR_IN_MILLIS); + hour = hour % 60; + if(hour>=10){ + hourStr = ""+hour; + }else{ + hourStr = "0"+hour; + } + return hourStr+":"+minuteStr+":"+secondStr; + } + public static Long getCurrentTimestamp() { return Long.valueOf(DateUtils.yyyymmddhhmmss.get().format(new Date())); } diff --git a/nursing-unit-iot/nu-iot-biz/pom.xml b/nursing-unit-iot/nu-iot-biz/pom.xml index a7d6313..69094f3 100644 --- a/nursing-unit-iot/nu-iot-biz/pom.xml +++ b/nursing-unit-iot/nu-iot-biz/pom.xml @@ -30,6 +30,12 @@ weixin4j + + com.tplink.ignite.libs + tums-auth + 2.0.0 + + diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/controller/AlarmLogController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/controller/AlarmLogController.java new file mode 100644 index 0000000..80192cc --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/controller/AlarmLogController.java @@ -0,0 +1,187 @@ +package com.nu.modules.tplink.alarm.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import com.nu.modules.tplink.alarm.entity.AlarmLog; +import com.nu.modules.tplink.alarm.service.IAlarmLogService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 护理单元-物联管理-TPLINK告警日志信息 + * @Author: jeecg-boot + * @Date: 2025-01-23 + * @Version: V1.0 + */ +@Api(tags="护理单元-物联管理-TPLINK告警日志信息") +@RestController +@RequestMapping("/iot/alarmLog") +@Slf4j +public class AlarmLogController extends JeecgController { + @Autowired + private IAlarmLogService alarmLogService; + + /** + * 分页列表查询 + * + * @param alarmLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-分页列表查询") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-分页列表查询", notes="护理单元-物联管理-TPLINK告警日志信息-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AlarmLog alarmLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + // 自定义查询规则 + Map customeRuleMap = new HashMap<>(); + // 自定义多选的查询规则为:LIKE_WITH_OR + customeRuleMap.put("alarmDeviceType", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("alarmType", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("alarmLevel", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("readMark", QueryRuleEnum.LIKE_WITH_OR); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(alarmLog, req.getParameterMap(),customeRuleMap); + Page page = new Page(pageNo, pageSize); + IPage pageList = alarmLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param alarmLog + * @return + */ + @AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-添加") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-添加", notes="护理单元-物联管理-TPLINK告警日志信息-添加") + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AlarmLog alarmLog) { + alarmLogService.save(alarmLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param alarmLog + * @return + */ + @AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-编辑") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-编辑", notes="护理单元-物联管理-TPLINK告警日志信息-编辑") + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AlarmLog alarmLog) { + alarmLogService.updateById(alarmLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-通过id删除") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-通过id删除", notes="护理单元-物联管理-TPLINK告警日志信息-通过id删除") + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + alarmLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-批量删除") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-批量删除", notes="护理单元-物联管理-TPLINK告警日志信息-批量删除") + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.alarmLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "护理单元-物联管理-TPLINK告警日志信息-通过id查询") + @ApiOperation(value="护理单元-物联管理-TPLINK告警日志信息-通过id查询", notes="护理单元-物联管理-TPLINK告警日志信息-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AlarmLog alarmLog = alarmLogService.getById(id); + if(alarmLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(alarmLog); + } + + /** + * 导出excel + * + * @param request + * @param alarmLog + */ + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AlarmLog alarmLog) { + return super.exportXls(request, alarmLog, AlarmLog.class, "护理单元-物联管理-TPLINK告警日志信息"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("iot:nu_iot_tplink_alarm_log:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AlarmLog.class); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/entity/AlarmLog.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/entity/AlarmLog.java new file mode 100644 index 0000000..eb5746f --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/entity/AlarmLog.java @@ -0,0 +1,157 @@ +package com.nu.modules.tplink.alarm.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 护理单元-物联管理-TPLINK告警日志信息 + * @Author: jeecg-boot + * @Date: 2025-01-23 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_alarm_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tplink_alarm_log对象", description="护理单元-物联管理-TPLINK告警日志信息") +public class AlarmLog implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + /**消息ID*/ + @Excel(name = "消息ID", width = 15) + @ApiModelProperty(value = "消息ID") + private String logId; + /**告警时间*/ + @Excel(name = "告警时间", width = 15) + @ApiModelProperty(value = "告警时间") + private Long logTime; + /**告警时间*/ + @Excel(name = "告警时间", width = 15) + @ApiModelProperty(value = "告警时间") + private String logTimeFm; + /**告警内容*/ + @Excel(name = "告警内容", width = 15) + @ApiModelProperty(value = "告警内容") + private String content; + /**报警设备名称*/ + @Excel(name = "报警设备名称", width = 15) + @ApiModelProperty(value = "报警设备名称") + private String alarmDeviceName; + /**报警设备类型*/ + @Excel(name = "报警设备类型", width = 15, dicCode = "tplink_alarm_device_type") + @Dict(dicCode = "tplink_alarm_device_type") + @ApiModelProperty(value = "报警设备类型") + private Integer alarmDeviceType; + /**报警名称*/ + @Excel(name = "报警名称", width = 15) + @ApiModelProperty(value = "报警名称") + private String alarmName; + /**消息类型*/ + @Excel(name = "消息类型", width = 15, dicCode = "tplink_alarm_type") + @Dict(dicCode = "tplink_alarm_type") + @ApiModelProperty(value = "消息类型") + private Integer alarmType; + /**设备源类型*/ + @Excel(name = "设备源类型", width = 15) + @ApiModelProperty(value = "设备源类型") + private String alarmSourceType; + /**报警等级*/ + @Excel(name = "报警等级", width = 15, dicCode = "tplink_alarm_level") + @Dict(dicCode = "tplink_alarm_level") + @ApiModelProperty(value = "报警等级") + private Integer alarmLevel; + /**企业ID*/ + @Excel(name = "企业ID", width = 15) + @ApiModelProperty(value = "企业ID") + private Integer enterpriseId; + /**项目ID*/ + @Excel(name = "项目ID", width = 15) + @ApiModelProperty(value = "项目ID") + private Integer projectId; + /**项目名称*/ + @Excel(name = "项目名称", width = 15) + @ApiModelProperty(value = "项目名称") + private String projectName; + /**分组ID*/ + @Excel(name = "分组ID", width = 15) + @ApiModelProperty(value = "分组ID") + private Integer regionId; + /**分组名称*/ + @Excel(name = "分组名称", width = 15) + @ApiModelProperty(value = "分组名称") + private String regionName; + /**报警设备ID*/ + @Excel(name = "报警设备ID", width = 15) + @ApiModelProperty(value = "报警设备ID") + private String sourceId; + /**网页提醒 0关闭,1开启*/ + @Excel(name = "网页提醒 0关闭,1开启", width = 15) + @ApiModelProperty(value = "网页提醒 0关闭,1开启") + private Integer screenWarningMark; + /**是否已读 0未读,1已读*/ + @Excel(name = "是否已读 0未读,1已读", width = 15, dicCode = "tplink_read_mark") + @Dict(dicCode = "tplink_read_mark") + @ApiModelProperty(value = "是否已读 0未读,1已读") + private Integer readMark; + /**录像标记 0无录像,1有录像*/ + @Excel(name = "录像标记 0无录像,1有录像", width = 15) + @ApiModelProperty(value = "录像标记 0无录像,1有录像") + private Integer videoMark; + /**系统类型 “”,“客控”,“网络”,“监控”中的一个*/ + @Excel(name = "系统类型 “”,“客控”,“网络”,“监控”中的一个", width = 15) + @ApiModelProperty(value = "系统类型 “”,“客控”,“网络”,“监控”中的一个") + private String systemType; + /**设备MAC地址*/ + @Excel(name = "设备MAC地址", width = 15) + @ApiModelProperty(value = "设备MAC地址") + private String macAddr; + /**设备IP地址*/ + @Excel(name = "设备IP地址", width = 15) + @ApiModelProperty(value = "设备IP地址") + private String ipAddr; + /**联动设备ID*/ + @Excel(name = "联动设备ID", width = 15) + @ApiModelProperty(value = "联动设备ID") + private String unionDevId; + /**RAID报警的阵列信息*/ + @Excel(name = "RAID报警的阵列信息", width = 15) + @ApiModelProperty(value = "RAID报警的阵列信息") + private String extend; + /**消息提示音 0表示无消息音、1表示普通、2表示重要、3表示紧急*/ + @Excel(name = "消息提示音 0表示无消息音、1表示普通、2表示重要、3表示紧急", width = 15) + @ApiModelProperty(value = "消息提示音 0表示无消息音、1表示普通、2表示重要、3表示紧急") + private Integer promptAudio; + /**消息弹窗标记 0表示已处理,1表示需要弹窗*/ + @Excel(name = "消息弹窗标记 0表示已处理,1表示需要弹窗", width = 15) + @ApiModelProperty(value = "消息弹窗标记 0表示已处理,1表示需要弹窗") + private Integer popUpAlarmMark; + /**消息中携带的其他参数*/ + @Excel(name = "消息中携带的其他参数", width = 15) + @ApiModelProperty(value = "消息中携带的其他参数") + private String alarmParams; + /**联动大屏消息标记 0否,1是*/ + @Excel(name = "联动大屏消息标记 0否,1是", width = 15) + @ApiModelProperty(value = "联动大屏消息标记 0否,1是") + private Integer linkageScreenMark; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/job/AlarmLogSyncJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/job/AlarmLogSyncJob.java new file mode 100644 index 0000000..45e81fa --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/job/AlarmLogSyncJob.java @@ -0,0 +1,58 @@ +package com.nu.modules.tplink.alarm.job; + +import lombok.extern.slf4j.Slf4j; +import com.nu.modules.tplink.alarm.entity.AlarmLog; +import com.nu.modules.tplink.alarm.service.IAlarmLogService; +import com.nu.modules.tplink.utils.TumsApi; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class AlarmLogSyncJob implements Job { + + @Autowired + IAlarmLogService service; + + @Autowired + private TumsApi tumsApi; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + Long logTime = service.getMaxLogTime(null); +// String jsonRequest = "{\n" + +// " \"start\": 0,\n" + +// " \"limit\": 1000,\n" + +// " \"filterAnd\": {\n"+ +// " \"logTimeGe\": "+logTime+"\n"+ +// " },\n"+ +// " \"sort\": [{\n"+ +// " \"key\": \"logTime\",\n"+ +// " \"value\": \"asc\"\n"+ +// " }]\n"+ +// "}"; +// System.out.println(jsonRequest); +// String jsonResponse = tumsApi.getAlarmLog(jsonRequest); + + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"start\"").append(":").append(0).append(","); + sb.append("\"limit\"").append(":").append(1000).append(","); + if(logTime!=null){ + sb.append("\"filterAnd\"").append(":").append("{"); + sb.append("\"logTimeGe\"").append(":").append(logTime); + sb.append("}").append(","); + } + sb.append("\"sort\"").append(":").append("[{"); + sb.append("\"key\"").append(":").append("\"logTime\"").append(","); + sb.append("\"value\"").append(":").append("\"asc\""); + sb.append("}]"); + sb.append("}"); +// System.out.println(sb.toString()); + String jsonResponse = tumsApi.getAlarmLog(sb.toString()); + if(jsonResponse!=null&&!jsonResponse.equals("")){ + service.sync(jsonResponse); + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/AlarmLogMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/AlarmLogMapper.java new file mode 100644 index 0000000..e1a14de --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/AlarmLogMapper.java @@ -0,0 +1,16 @@ +package com.nu.modules.tplink.alarm.mapper; + +import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tplink.alarm.entity.AlarmLog; + +/** + * @Description: 护理单元-物联管理-TPLINK告警日志信息 + * @Author: jeecg-boot + * @Date: 2025-01-23 + * @Version: V1.0 + */ +public interface AlarmLogMapper extends BaseMapper { + Long getMaxLogTime(AlarmLog alarmLog); + AlarmLog getByAlarmLogId(AlarmLog alarmLog); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/xml/AlarmLogMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/xml/AlarmLogMapper.xml new file mode 100644 index 0000000..18e8aa5 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/mapper/xml/AlarmLogMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/IAlarmLogService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/IAlarmLogService.java new file mode 100644 index 0000000..8a0dab3 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/IAlarmLogService.java @@ -0,0 +1,16 @@ +package com.nu.modules.tplink.alarm.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tplink.alarm.entity.AlarmLog; + +/** + * @Description: 护理单元-物联管理-TPLINK告警日志信息 + * @Author: jeecg-boot + * @Date: 2025-01-23 + * @Version: V1.0 + */ +public interface IAlarmLogService extends IService { + Long getMaxLogTime(AlarmLog alarmLog); + void sync(String jsonResponse); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/impl/AlarmLogServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/impl/AlarmLogServiceImpl.java new file mode 100644 index 0000000..cf71da6 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/alarm/service/impl/AlarmLogServiceImpl.java @@ -0,0 +1,62 @@ +package com.nu.modules.tplink.alarm.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nu.modules.tplink.alarm.entity.AlarmLog; +import com.nu.modules.tplink.alarm.mapper.AlarmLogMapper; +import com.nu.modules.tplink.alarm.service.IAlarmLogService; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Description: 护理单元-物联管理-TPLINK告警日志信息 + * @Author: jeecg-boot + * @Date: 2025-01-23 + * @Version: V1.0 + */ +@Service +public class AlarmLogServiceImpl extends ServiceImpl implements IAlarmLogService { + + @Override + public Long getMaxLogTime(AlarmLog alarmLog){ + return baseMapper.getMaxLogTime(alarmLog); + } + + @Override + public void sync(String jsonResponse){ + JSONObject jsonObject = new JSONObject(jsonResponse); + if(jsonObject.getInt("error_code").equals(0)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + if(result.getInt("total")>0){ + JSONArray list = result.getJSONArray("list"); + for(int i=0;i { + @Autowired + private ICameraInfoService service; + + /** + * 分页列表查询 + * + * @param CameraInfo + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "护理单元-物联管理-摄像头信息-分页列表查询") + @ApiOperation(value="护理单元-物联管理-摄像头信息-分页列表查询", notes="护理单元-物联管理-摄像头信息-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(CameraInfo CameraInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findPage(page, CameraInfo); + return Result.OK(pageList); + } + + @ApiOperation(value="护理单元分页列表查询", notes="护理单元分页列表查询") + @GetMapping(value = "/nuList") + public Result> queryNuPageList(CameraInfo CameraInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findNuPage(page, CameraInfo); + return Result.OK(pageList); + } + + /** + * 编辑 + * + * @param cameraInfo + * @return + */ + @AutoLog(value = "护理单元-物联管理-摄像头信息-编辑") + @ApiOperation(value="护理单元-物联管理-摄像头信息-编辑", notes="护理单元-物联管理-摄像头信息-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody CameraInfo cameraInfo) { + service.edit(cameraInfo); + return Result.OK("编辑成功!"); + } + + /** + * 修改摄像头信息 + * + * @param cameraInfo + * @return + */ + @RequestMapping(value = "/rebootDevice", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result rebootDevice(@RequestBody CameraInfo cameraInfo) { + service.rebootDevice(cameraInfo); + return Result.OK("重启成功!"); + } + + /** + * 获取IPC设备能力集 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getIpcCapability") + public Result getIpcCapability(CameraInfo cameraInfo) { + return service.getIpcCapability(cameraInfo); + } + + /** + * 获取画面基本信息 + * + * @param map + * @return + */ + @PostMapping(value = "/getImageCommon") + public Result getImageCommon(@RequestBody Map map) { + return service.getImageCommon(map); + } + + /** + * 设置画面基本信息 + * + * @param map + * @return + */ + @PostMapping(value = "/setImageCommon") + public Result setImageCommon(@RequestBody Map map) { + return service.setImageCommon(map); + } + + /** + * 获取OSD能力集 + * + * @param map + * @return + */ + @PostMapping(value = "/getOsdCapability") + public Result getOsdCapability(@RequestBody Map map) { + return service.getOsdCapability(map); + } + + /** + * 获取OSD参数 + * + * @param map + * @return + */ + @PostMapping(value = "/getOsd") + public Result getOsd(@RequestBody Map map) { + return service.getOsd(map); + } + + /** + * 设置OSD参数 + * + * @param map + * @return + */ + @PostMapping(value = "/setOsd") + public Result setOsd(@RequestBody Map map) { + return service.setOsd(map); + } + + /** + * 获取码率参数 + * + * @param map + * @return + */ + @PostMapping(value = "/getVideoParams") + public Result getVideoParams(@RequestBody Map map) { + return service.getVideoParams(map); + } + + /** + * 设置码率参数 + * + * @param map + * @return + */ + @PostMapping(value = "/setVideoParams") + public Result setVideoParams(@RequestBody Map map) { + return service.setVideoParams(map); + } + + /** + * 恢复画面默认值 + * + * @param map + * @return + */ + @PostMapping(value = "/configRecovery") + public Result configRecovery(@RequestBody Map map) { + return service.configRecovery(map); + } + + /** + * 获取摄像头实时播放地址 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getPreviewUrl") + public Result> getPreviewUrl(CameraInfo cameraInfo) { + return service.getPreviewUrl(cameraInfo); + } + + /** + * 获取录像配置--暂无用 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getRecordCfgs") + public Result getRecordCfgs(CameraInfo cameraInfo) throws Exception{ + return service.getRecordCfgs(cameraInfo); + } + + /** + * 设置录像计划--暂无用 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/setRecordCfgs") + public Result setRecordCfgs(CameraInfo cameraInfo) throws Exception{ + return service.setRecordCfgs(cameraInfo); + } + + /** + * 获取批量操作录像计划进度--暂无用 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getBatchProgress") + public Result getBatchProgress(CameraInfo cameraInfo) throws Exception{ + return service.getBatchProgress(cameraInfo); + } + + /** + * 获取镜头遮挡参数 + * + * @param map + * @return + */ + @PostMapping(value = "/getTamperDet") + public Result getTamperDet(@RequestBody Map map) { + return service.getTamperDet(map); + } + + /** + * 设置镜头遮挡参数 + * + * @param map + * @return + */ + @PostMapping(value = "/setTamperDet") + public Result setTamperDet(@RequestBody Map map) { + return service.setTamperDet(map); + } + + /** + * 获取镜头遮挡处理方式 + * + * @param map + * @return + */ + @PostMapping(value = "/getTamperNotif") + public Result getTamperNotif(@RequestBody Map map) { + return service.getTamperNotif(map); + } + + /** + * 设置镜头遮挡处理方式 + * + * @param map + * @return + */ + @PostMapping(value = "/setTamperNotif") + public Result setTamperNotif(@RequestBody Map map) { + return service.setTamperNotif(map); + } + + /** + * 报警声音试听 + * + * @param map + * @return + */ + @PostMapping(value = "/testAudio") + public Result testAudio(@RequestBody Map map) { + return service.testAudio(map); + } + + /** + * 获取白光/声音告警参数 + * + * @param map + * @return + */ + @PostMapping(value = "/getAlarmInfo") + public Result getAlarmInfo(@RequestBody Map map) { + return service.getAlarmInfo(map); + } + + /** + * 设置白光/声音告警参数 + * + * @param map + * @return + */ + @PostMapping(value = "/setAlarmInfo") + public Result setAlarmInfo(@RequestBody Map map) { + return service.setAlarmInfo(map); + } + + /** + * 获取白光/声音告警布防时间 + * + * @param map + * @return + */ + @PostMapping(value = "/getAlarmPlan") + public Result getAlarmPlan(@RequestBody Map map) { + return service.getAlarmPlan(map); + } + + /** + * 设置白光/声音告警布防时间 + * + * @param map + * @return + */ + @PostMapping(value = "/setAlarmPlan") + public Result setAlarmPlan(@RequestBody Map map) { + return service.setAlarmPlan(map); + } + + /** + * 搜索某天的录像数据 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/searchVideo") + public Result> searchVideo(CameraInfo cameraInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + return service.searchVideo(pageNo, pageSize, cameraInfo); + } + + /** + * 获取摄像头录像回放地址 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getPlaybackUrlList") + public Result> getPlaybackUrlList(CameraInfo cameraInfo) { + return service.getPlaybackUrlList(cameraInfo); + } + + /** + * 删除回放通道 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/deletePlaybackChn") + public Result deletePlaybackChn(CameraInfo cameraInfo) { + return service.deletePlaybackChn(cameraInfo); + } + + /** + * 获取摄像头录像回放地址 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getMultitransUrl") + public Result> getMultitransUrl(CameraInfo cameraInfo) throws Exception{ + return service.getMultitransUrl(cameraInfo); + } + + /** + * 回放视频转mp4上传 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/uploadToServer") + public Result uploadToServer(CameraInfo cameraInfo) throws Exception{ + return service.uploadToServer(cameraInfo); + } + + /** + * 停止转存MP4上传任务 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/stopUploadToServer") + public Result stopUploadToServer(CameraInfo cameraInfo) throws Exception{ + return service.stopUploadToServer(cameraInfo); + } + + /** + * 获取转存MP4上传任务进度 + * + * @param cameraInfo + * @return + */ + @GetMapping(value = "/getUploadToServerProcess") + public Result getUploadToServerProcess(CameraInfo cameraInfo) throws Exception{ + return service.getUploadToServerProcess(cameraInfo); + } + + } diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/entity/CameraInfo.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/entity/CameraInfo.java new file mode 100644 index 0000000..b622c6b --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/entity/CameraInfo.java @@ -0,0 +1,281 @@ +package com.nu.modules.tplink.camera.entity; + +import java.io.Serializable; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 护理单元-物联管理-TPLINK摄像头信息 + * @Author: jeecg-boot + * @Date: 2025-01-17 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_camera") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tplink_camera对象", description="护理单元-物联管理-TPLINK摄像头信息") +public class CameraInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + /**设备序号*/ + @Excel(name = "设备序号", width = 15) + @ApiModelProperty(value = "设备序号") + private String deviceIndex; + /**设备名称*/ + @Excel(name = "设备名称", width = 15) + @ApiModelProperty(value = "设备名称") + private String deviceName; + /**设备类型*/ + @Excel(name = "设备类型", width = 15) + @ApiModelProperty(value = "设备类型") + private String deviceType; + /**设备状态 0 离线 1 在线 2 重启中 3 升级中 4 配置中 5 同步中*/ + @Excel(name = "设备状态 0 离线 1 在线 2 重启中 3 升级中 4 配置中 5 同步中", width = 15, dicCode = "tplink_status") + @Dict(dicCode = "tplink_status") + @ApiModelProperty(value = "设备状态 0 离线 1 在线 2 重启中 3 升级中 4 配置中 5 同步中") + private String deviceStatus; + /**设备型号*/ + @Excel(name = "设备型号", width = 15) + @ApiModelProperty(value = "设备型号") + private String deviceModel; + /**IP地址*/ + @Excel(name = "IP地址", width = 15) + @ApiModelProperty(value = "IP地址") + private String ip; + /**MAC地址*/ + @Excel(name = "MAC地址", width = 15) + @ApiModelProperty(value = "MAC地址") + private String mac; + /**分组ID*/ + @Excel(name = "分组ID", width = 15) + @ApiModelProperty(value = "分组ID") + private String regionId; + /**分组名称*/ + @Excel(name = "分组名称", width = 15) + @ApiModelProperty(value = "分组名称") + private String regionName; + /**父设备ID*/ + @Excel(name = "父设备ID", width = 15) + @ApiModelProperty(value = "父设备ID") + private String parentId; + /**父设备名称*/ + @Excel(name = "父设备名称", width = 15) + @ApiModelProperty(value = "父设备名称") + private String parentDeviceName; + /**项目ID*/ + @Excel(name = "项目ID", width = 15) + @ApiModelProperty(value = "项目ID") + private String projectId; + /**项目名称*/ + @Excel(name = "项目名称", width = 15) + @ApiModelProperty(value = "项目名称") + private String projectName; + /**软件版本*/ + @Excel(name = "软件版本", width = 15) + @ApiModelProperty(value = "软件版本") + private String firmwareVer; + /**硬件版本*/ + @Excel(name = "硬件版本", width = 15) + @ApiModelProperty(value = "硬件版本") + private String hardwareVer; + /**用户权限类型 -1 无权限 0 可读 1 可控制 2 可配置 3 可控制/配置 4 所有*/ + @Excel(name = "用户权限类型 -1 无权限 0 可读 1 可控制 2 可配置 3 可控制/配置 4 所有", width = 15, dicCode = "tplink_manager_auth_type") + @Dict(dicCode = "tplink_manager_auth_type") + @ApiModelProperty(value = "用户权限类型 -1 无权限 0 可读 1 可控制 2 可配置 3 可控制/配置 4 所有") + private String managerAuthType; + /**告警消息权限 1 有权限 -1 无权限*/ + @Excel(name = "告警消息权限 1 有权限 -1 无权限", width = 15, dicCode = "tplink_msg_auth_type") + @Dict(dicCode = "tplink_msg_auth_type") + @ApiModelProperty(value = "告警消息权限 1 有权限 -1 无权限") + private String msgAuthType; + /**扩展信息*/ + @Excel(name = "扩展信息", width = 15) + @ApiModelProperty(value = "扩展信息") + @TableField(exist = false) + private JSONObject extend; + /**国标编码*/ + @Excel(name = "国标编码", width = 15) + @ApiModelProperty(value = "国标编码") + private String sipCode; + /**位置名称*/ + @Excel(name = "位置名称", width = 15) + @ApiModelProperty(value = "位置名称") + private String locationName; + /**系统类型 public 通用 vms 监控 nms 网络 evcs 新能源充电桩 rms 客控 nbs 音箱 bas 楼控 ams 门禁 smart_agriculture 智慧农业 vps 停车管理 aaa 认证计费*/ + @Excel(name = "系统类型 public 通用 vms 监控 nms 网络 evcs 新能源充电桩 rms 客控 nbs 音箱 bas 楼控 ams 门禁 smart_agriculture 智慧农业 vps 停车管理 aaa 认证计费", width = 15, dicCode = "tplink_system_type") + @Dict(dicCode = "tplink_system_type") + @ApiModelProperty(value = "系统类型 public 通用 vms 监控 nms 网络 evcs 新能源充电桩 rms 客控 nbs 音箱 bas 楼控 ams 门禁 smart_agriculture 智慧农业 vps 停车管理 aaa 认证计费") + private String systemType; + /**协议类型*/ + @Excel(name = "协议类型", width = 15) + @ApiModelProperty(value = "协议类型") + private String protocol; + /**置顶的时间*/ + @Excel(name = "用户设置置顶的时间,毫秒级时间戳", width = 15) + @ApiModelProperty(value = "用户设置置顶的时间,毫秒级时间戳") + @TableField(exist = false) + private String topTime; + /**护理单元*/ + @ApiModelProperty(value = "护理单元ID") + @Dict(dictTable ="nu_base_info",dicText = "name",dicCode = "id") + private String nuId; + /**护理单元*/ + @ApiModelProperty(value = "护理单元") + @TableField(exist = false) + private String nuName; + @ApiModelProperty(value = "码流类型 0 代表主码流,1 代码子码流") + @TableField(exist = false) + private int streamType; + + /** + * 能力集属性 ==> + */ + @ApiModelProperty(value = "运动检测") + @TableField(exist = false) + private String motionDetection; + @ApiModelProperty(value = "视频封面") + @TableField(exist = false) + private String videoCover; + @ApiModelProperty(value = "云台") + @TableField(exist = false) + private String ptz; + @ApiModelProperty(value = "motor") + @TableField(exist = false) + private String motor; + @ApiModelProperty(value = "smartCode") + @TableField(exist = false) + private String smartCode; + @ApiModelProperty(value = "强制在H.264编码过程中生成IDR帧的函数") + @TableField(exist = false) + private String forceIdrFrame; + @ApiModelProperty(value = "音频") + @TableField(exist = false) + private String audio; + @ApiModelProperty(value = "本地存储") + @TableField(exist = false) + private String localStorage; + @ApiModelProperty(value = "回放API本版") + @TableField(exist = false) + private String playbackApiVersionTwo; + @ApiModelProperty(value = "多变性") + @TableField(exist = false) + private String multitrans; + @ApiModelProperty(value = "客流") + @TableField(exist = false) + private String passengerFlow; + @ApiModelProperty(value = "获取预览缩略图") + @TableField(exist = false) + private String getPreviewThumbnail; + @ApiModelProperty(value = "JPG预览缩略图") + @TableField(exist = false) + private String previewThumbnailJpeg; + @ApiModelProperty(value = "走廊") + @TableField(exist = false) + private String corridorMod; + @ApiModelProperty(value = "背光共存") + @TableField(exist = false) + private String backlightCoexistence; + /** + * <== 能力集属性 + */ + @ApiModelProperty(value = "查询日期") + @TableField(exist = false) + private String dataDate; + @ApiModelProperty(value = "设备索引") + @TableField(exist = false) + private String videoDevId; + @ApiModelProperty(value = "存储设备ID") + @TableField(exist = false) + private String storageDevId; + @ApiModelProperty(value = "存储设备名称") + @TableField(exist = false) + private String storageDevName; + @ApiModelProperty(value = "双摄IPC通道ID,双摄IPC的全景摄像头,其值为0.双摄IPC的特写摄像头,其值为1") + @TableField(exist = false) + private String channelId; + @ApiModelProperty(value = "当录像存在存储池中, 录像所属的nvs的ID") + @TableField(exist = false) + private String nvsIdInPoolList; + @ApiModelProperty(value = "录像开始时间. GMT时间,即1970.1.1零时至今的秒数") + @TableField(exist = false) + private String startTime; + @ApiModelProperty(value = "录像结束时间. GMT时间,即1970.1.1零时至今的秒数") + @TableField(exist = false) + private String endTime; + @ApiModelProperty(value = "录像开始时间,YYYY-MM-DD HH:MI:SS") + @TableField(exist = false) + private String startTimeFt; + @ApiModelProperty(value = "录像结束时间,YYYY-MM-DD HH:MI:SS") + @TableField(exist = false) + private String endTimeFt; + @ApiModelProperty(value = "录像时长,HH:MI:SS") + @TableField(exist = false) + private String duration; + @ApiModelProperty(value = "回放录像类型。1: 定时录像; 2: 移动侦测等") + @TableField(exist = false) + private String videoType; + @ApiModelProperty(value = "录像片段大小,单位字节") + @TableField(exist = false) + private String size; + @ApiModelProperty(value = "错误码") + @TableField(exist = false) + private String errorCode; + @ApiModelProperty(value = "错误描述") + @TableField(exist = false) + private String errorMsg; + @ApiModelProperty(value = "录像存储设备类型 -1:未找到,0:ipc,1:nvr,2:nvs:3:server,4:vcs,5:storagePool") + @TableField(exist = false) + private String storageType; + @ApiModelProperty(value = "预览/回放url") + @TableField(exist = false) + private String url; + @ApiModelProperty(value = "预览/回放备用url") + @TableField(exist = false) + private String backupUrl; + @ApiModelProperty(value = "ws连接传输视频地址") + @TableField(exist = false) + private String wsUrl; + @ApiModelProperty(value = "wss接传输视频地址") + @TableField(exist = false) + private String wssUrl; + @ApiModelProperty(value = "预览/回放通道对应的sessionId") + @TableField(exist = false) + private String sessionId; + @ApiModelProperty(value = "双摄IPC通道ID") + @TableField(exist = false) + private String videoChannelId; + @ApiModelProperty(value = "回放速率") + @TableField(exist = false) + private String scale; + @ApiModelProperty(value = "回放api访问前缀") + @TableField(exist = false) + private String queryAddress; + @ApiModelProperty(value = "录像开关;枚举:[0:表示关,1:表示开]") + @TableField(exist = false) + private String recordSwitch; + @ApiModelProperty(value = "任务taskId") + @TableField(exist = false) + private String taskId; + @ApiModelProperty(value = "上传mp4文件名称") + @TableField(exist = false) + private String fileName; + @ApiModelProperty(value = "上传进度") + @TableField(exist = false) + private String process; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraCapabilitySyncJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraCapabilitySyncJob.java new file mode 100644 index 0000000..922efce --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraCapabilitySyncJob.java @@ -0,0 +1,50 @@ +package com.nu.modules.tplink.camera.job; + +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.DateUtils; +import com.nu.modules.tplink.camera.entity.CameraInfo; +import com.nu.modules.tplink.camera.service.ICameraInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 摄像头能力集同步 + */ +@Slf4j +public class CameraCapabilitySyncJob implements Job { + + @Autowired + ICameraInfoService service; + + @Autowired + private TumsApi tumsApi; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + List list = service.findAllList(); + if(list!=null&&list.size()>0){ + for(int i=0;i< list.size();i++){ + CameraInfo cameraInfo = list.get(i); + String id = cameraInfo.getDeviceIndex(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\""); + sb.append("}"); + String jsonResponse = tumsApi.getIpcCapability(sb.toString()); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + service.syncCapability(id,jsonResponse); + }else{ + log.error("CameraCapabilitySyncJob:{}-{}", DateUtils.now(),"devId:"+id+","+jsonObject.getStr("msg")); + } + } + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraDeviceSyncJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraDeviceSyncJob.java new file mode 100644 index 0000000..7932c67 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/job/CameraDeviceSyncJob.java @@ -0,0 +1,63 @@ +package com.nu.modules.tplink.camera.job; + +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.DateUtils; +import com.nu.modules.tplink.camera.service.ICameraInfoService; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.service.IProjectInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 摄像头设备信息同步 + */ +@Slf4j +public class CameraDeviceSyncJob implements Job { + + @Autowired + ICameraInfoService service; + @Autowired + IProjectInfoService pService; + + @Autowired + private TumsApi tumsApi; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + ProjectInfo pi = new ProjectInfo(); + pi.setStatus(1);//正常状态 + List projectList = pService.findList(pi); + if(projectList!=null&&projectList.size()>0){ + for(int i=0;i< projectList.size();i++){ + ProjectInfo projectInfo = projectList.get(i); + String jsonRequest = "{\n" + + " \"start\": 0,\n" + + " \"limit\": 1000,\n" + + " \"filterAnd\": {\n"+ + " \"projectId\": \""+projectInfo.getProjectId()+"\",\n"+ + " \"deviceTypeList\": [\"SURVEILLANCECAMERA\"]\n"+ + " },\n"+ + " \"sort\": [{\n"+ + " \"key\": \"deviceIndex\",\n"+ + " \"value\": \"asc\"\n"+ + " }]\n"+ + "}"; +// System.out.println(jsonRequest); + String jsonResponse = tumsApi.getDeviceList(jsonRequest); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + service.sync(jsonResponse); + }else{ + log.error("CameraDeviceSyncJob:{}-{}", DateUtils.now(),jsonObject.getStr("msg")); + } + } + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/CameraInfoMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/CameraInfoMapper.java new file mode 100644 index 0000000..ebc2425 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/CameraInfoMapper.java @@ -0,0 +1,28 @@ +package com.nu.modules.tplink.camera.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import com.nu.modules.tplink.camera.entity.CameraInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * @Description: 护理单元-物联管理-摄像头信息 + * @Author: jeecg-boot + * @Date: 2025-01-17 + * @Version: V1.0 + */ + +@Mapper +public interface CameraInfoMapper extends BaseMapper { + IPage findPage(Page page, @Param("params") CameraInfo cameraInfo); + List findAllList(); + IPage findNuPage(Page page, @Param("params") CameraInfo cameraInfo); + CameraInfo getByDeviceId(CameraInfo cameraInfo); + CameraInfo getCapabilityByDeviceId(CameraInfo cameraInfo); + void insertCapability(CameraInfo cameraInfo); + void updateCapabilityById(CameraInfo cameraInfo); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/xml/CameraInfoMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/xml/CameraInfoMapper.xml new file mode 100644 index 0000000..1f51577 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/mapper/xml/CameraInfoMapper.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + insert into nu_iot_tplink_camera_capability ( + id, + device_index, + motion_detection, + video_cover, + ptz, + motor, + smart_code, + force_idr_frame, + audio, + local_storage, + playback_api_version_two, + multitrans, + passenger_flow, + get_preview_thumbnail, + preview_thumbnail_jpeg, + corridor_mod, + backlight_coexistence + ) + values ( + #{id}, + #{deviceIndex}, + #{motionDetection}, + #{videoCover}, + #{ptz}, + #{motor}, + #{smartCode}, + #{forceIdrFrame}, + #{audio}, + #{localStorage}, + #{playbackApiVersionTwo}, + #{multitrans}, + #{passengerFlow}, + #{getPreviewThumbnail}, + #{previewThumbnailJpeg}, + #{corridorMod}, + #{backlightCoexistence} + ) + + + + UPDATE nu_iot_tplink_camera_capability + SET + device_index = #{deviceIndex}, + motion_detection = #{motionDetection}, + video_cover = #{videoCover}, + ptz = #{ptz}, + motor = #{motor}, + smart_code = #{smartCode}, + force_idr_frame = #{forceIdrFrame}, + audio = #{audio}, + local_storage = #{localStorage}, + playback_api_version_two = #{playbackApiVersionTwo}, + multitrans = #{multitrans}, + passenger_flow = #{passengerFlow}, + get_preview_thumbnail = #{getPreviewThumbnail}, + preview_thumbnail_jpeg = #{previewThumbnailJpeg}, + corridor_mod = #{corridorMod}, + backlight_coexistence = #{backlightCoexistence} + where id = #{id} + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoService.java new file mode 100644 index 0000000..7d0cf7d --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoService.java @@ -0,0 +1,56 @@ +package com.nu.modules.tplink.camera.service; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.camera.entity.CameraInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-摄像头信息 + * @Author: jeecg-boot + * @Date: 2025-01-17 + * @Version: V1.0 + */ +public interface ICameraInfoService extends IService { + IPage findPage(Page page, CameraInfo cameraInfo); + List findAllList(); + IPage findNuPage(Page page, CameraInfo cameraInfo); + void edit(CameraInfo cameraInfo); + void rebootDevice(CameraInfo cameraInfo); + void sync(String jsonResponse); + void syncCapability(String deviceIndex,String jsonResponse); + Result getIpcCapability(CameraInfo cameraInfo); + Result getImageCommon(Map map); + Result setImageCommon(Map map); + Result getOsdCapability(Map map); + Result getOsd(Map map); + Result setOsd(Map map); + Result getVideoParams(Map map); + Result setVideoParams(Map map); + Result configRecovery(Map map); + Result> getPreviewUrl(CameraInfo cameraInfo); + Result getRecordCfgs(CameraInfo cameraInfo) throws Exception; + Result setRecordCfgs(CameraInfo cameraInfo) throws Exception; + Result getBatchProgress(CameraInfo cameraInfo) throws Exception; + Result getTamperDet(Map map); + Result setTamperDet(Map map); + Result getTamperNotif(Map map); + Result setTamperNotif(Map map); + Result testAudio(Map map); + Result getAlarmInfo(Map map); + Result setAlarmInfo(Map map); + Result getAlarmPlan(Map map); + Result setAlarmPlan(Map map); + Result> searchVideo(Integer pageNo, Integer pageSize, CameraInfo cameraInfo); + Result> getPlaybackUrlList(CameraInfo cameraInfo); + Result deletePlaybackChn(CameraInfo cameraInfo); + Result> getMultitransUrl(CameraInfo cameraInfo) throws Exception; + Result uploadToServer(CameraInfo cameraInfo); + Result stopUploadToServer(CameraInfo cameraInfo); + Result getUploadToServerProcess(CameraInfo cameraInfo); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoServiceImpl.java new file mode 100644 index 0000000..094d2f4 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoServiceImpl.java @@ -0,0 +1,2174 @@ +package com.nu.modules.tplink.camera.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.DateUtils; +import com.nu.modules.tplink.camera.entity.CameraInfo; +import com.nu.modules.tplink.camera.mapper.CameraInfoMapper; +import com.nu.modules.tplink.camera.service.ICameraInfoService; +import com.nu.modules.tplink.common.entity.ErrorCode; +import com.nu.modules.tplink.common.service.IErrorCodeService; +import com.nu.modules.tplink.utils.TumsApi; +import com.nu.modules.tplink.utils.TumsConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; + +import static java.lang.Thread.sleep; + +/** + * @Description: 护理单元-物联管理-摄像头信息 + * @Author: jeecg-boot + * @Date: 2025-01-17 + * @Version: V1.0 + */ +@Service +@Slf4j +public class CameraInfoServiceImpl extends ServiceImpl implements ICameraInfoService { + + @Resource + TumsConfig tumsConfig; + @Autowired + private TumsApi tumsApi; + @Autowired + private IErrorCodeService errorCodeService; + + /** + * 获取摄像头信息-分页 + * @param page + * @param cameraInfo + * @return + */ + public IPage findPage(Page page, CameraInfo cameraInfo){ + return baseMapper.findPage(page,cameraInfo); + } + + /** + * 获取所有摄像头信息 + * @return + */ + public List findAllList(){ + return baseMapper.findAllList(); + } + + /** + * 获取护理单元信息 + * @return + */ + public IPage findNuPage(Page page, CameraInfo cameraInfo){ + return baseMapper.findNuPage(page,cameraInfo); + } + + /** + * 调用接口-修改tums摄像头名称 + * @param cameraInfo + * @return + */ + public Result modifyDeviceDetails(CameraInfo cameraInfo){ + String id = cameraInfo.getDeviceIndex(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"deviceName\"").append(":").append("\"").append(cameraInfo.getDeviceName()).append("\""); + sb.append("}"); + String jsonRes = tumsApi.modifyDeviceDetails(sb.toString()); + JSONObject jsonObject = new JSONObject(jsonRes); + if(jsonObject.getInt("error_code").equals(0)){ + return Result.OK(); + }else{ + return Result.error(jsonObject.getStr("msg")); + } + } + + /** + * 修改摄像头设备信息 + * @param cameraInfo + * @return + */ + @Override + public void edit(CameraInfo cameraInfo){ + modifyDeviceDetails(cameraInfo); + baseMapper.updateById(cameraInfo); + } + + /** + * 调用接口-重启摄像头设备 + * @param cameraInfo + * @return + */ + public Result rebootDeviceList(CameraInfo cameraInfo){ + //1、先设置项目 2、重启设备 + String projectId = cameraInfo.getProjectId(); + String id = cameraInfo.getDeviceIndex(); + StringBuffer psb = new StringBuffer(); + psb.append("{"); + psb.append("\"projectId\"").append(":").append("\"").append(projectId).append("\""); + psb.append("}"); + System.out.println(psb.toString()); + String pJsonRes = tumsApi.setCurrentProject(psb.toString()); + System.out.println(pJsonRes); + JSONObject pJsonObject = new JSONObject(pJsonRes); + if(pJsonObject.getInt("error_code").equals(0)){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"deviceIndexList\"").append(":").append("[\"").append(id).append("\"]"); + sb.append("}"); + String jsonRes = tumsApi.rebootDeviceList(sb.toString()); + JSONObject jsonObject = new JSONObject(jsonRes); + if(jsonObject.getInt("error_code").equals(0)){ + return Result.OK(); + }else{ + return Result.error(jsonObject.getStr("msg")); + } + }else{ + return Result.error(pJsonObject.getStr("msg")); + } + } + + /** + * 重启摄像头设备 + * @param cameraInfo + * @return + */ + @Override + public void rebootDevice(CameraInfo cameraInfo){ + rebootDeviceList(cameraInfo); + } + + /** + * 同步摄像头设备信息入库 + * @param jsonResponse + * @return + */ + @Override + public void sync(String jsonResponse){ + JSONObject jsonObject = new JSONObject(jsonResponse); + if(jsonObject.getInt("error_code").equals(0)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + if(result.getInt("total")>0){ + JSONArray list = result.getJSONArray("list"); + for(int i=0;i getIpcCapability(CameraInfo cameraInfo){ + JSONObject capability = new JSONObject(); + String id = cameraInfo.getDeviceIndex(); + StringBuffer paramsSb = new StringBuffer(); + paramsSb.append("{"); + paramsSb.append("\"devId\"").append(":").append("\"").append(id).append("\""); + paramsSb.append("}"); + String ipcCapabilityRes = tumsApi.getIpcCapability(paramsSb.toString()); + JSONObject jsonObject = new JSONObject(ipcCapabilityRes); + if(jsonObject.getInt("error_code").equals(0)){ + JSONObject ipcCapabilityResult = (JSONObject)jsonObject.get("result"); + capability = (JSONObject)ipcCapabilityResult.get("capability"); + } + return Result.OK(capability); + } + + /** + * 获取画面基本信息 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getImageCommon(Map map){ + String id = map.get("deviceIndex").toString(); + String type = map.get("type").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"image\"").append(":").append("{"); + sb.append("\"name\"").append(":").append("\"").append(type).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject image = (JSONObject)responseData.get("image"); + JSONObject data = (JSONObject)image.get(type); + return Result.OK(data); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getImageCommon:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getImageCommon:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置画面基本信息 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setImageCommon(Map map){ + String id = map.get("deviceIndex").toString(); + String type = map.get("type").toString(); + Map paramMap = (Map)map.get("param"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"image\"").append(":").append("{"); + sb.append("\"").append(type).append("\"").append(":").append("{"); + //类属性+类值 + StringBuffer csb = new StringBuffer(); + Set keys = paramMap.keySet(); + // 遍历键的集合并打印每个键 + for (String key : keys) { + String value = paramMap.get(key).toString(); + csb.append("\"").append(key).append("\"").append(":").append("\"").append(value).append("\"").append(","); + } + String cstr = csb.toString(); + if(cstr.length()>0){ + cstr = cstr.substring(0,cstr.length()-1); + } + sb.append(cstr); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK("设置成功"); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getImageCommon:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setImageCommon:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取OSD能力集参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getOsdCapability(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"osd_capability\"").append(":").append("{"); + sb.append("\"name\"").append(":").append("\"capability\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject osdCapability = (JSONObject)responseData.get("osd_capability"); + JSONObject capability = (JSONObject)osdCapability.get("capability"); + return Result.OK(capability); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getOsdCapability:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getOsdCapability:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取OSD参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getOsd(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"OSD\"").append(":").append("{"); + sb.append("\"name\"").append(":[").append("\"font\",").append("\"week\",").append("\"date\"").append("],"); + sb.append("\"table\"").append(":").append("\"label_info\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject osd = (JSONObject)responseData.get("OSD"); + return Result.OK(osd); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getOsd:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getOsd:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置OSD参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setOsd(Map map){ + String id = map.get("deviceIndex").toString(); + String dateEnabled = map.get("dateEnabled").toString(); + String weekEnabled = map.get("weekEnabled").toString(); + String labelEnabled = map.get("labelEnabled").toString(); + String mainFontPixel = map.get("mainFontPixel").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"OSD\"").append(":").append("{"); + sb.append("\"font\"").append(":").append("{"); + sb.append("\"display\"").append(":").append("\"ntnb\","); + sb.append("\"main_font_pixel\"").append(":").append(mainFontPixel); + sb.append("},"); + sb.append("\"date\"").append(":").append("{"); + sb.append("\"enabled\"").append(":").append("\"").append(dateEnabled).append("\""); + sb.append("},"); + sb.append("\"week\"").append(":").append("{"); + sb.append("\"enabled\"").append(":").append("\"").append(weekEnabled).append("\""); + sb.append("},"); + sb.append("\"label_info_1\"").append(":").append("{"); + sb.append("\"enabled\"").append(":").append("\"").append(labelEnabled).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK("设置成功"); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setOsd:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setOsd:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取码率参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getVideoParams(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"video\"").append(":").append("{"); + sb.append("\"name\"").append(":[").append("\"main\"").append(",").append("\"minor\"").append("]"); + sb.append("},"); + sb.append("\"video_capability\"").append(":").append("{"); + sb.append("\"name\"").append(":[").append("\"main\"").append(",").append("\"minor\"").append("]"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject resObject = new JSONObject(); + JSONObject video = (JSONObject)responseData.get("video"); + JSONObject mainData = (JSONObject)video.get("main"); + resObject.set("mainData",mainData); + JSONObject minorData = (JSONObject)video.get("minor"); + resObject.set("minorData",minorData); + JSONObject videoCapability = (JSONObject)responseData.get("video_capability"); + JSONObject mainCapability = (JSONObject)videoCapability.get("main"); + JSONArray encodeTypes = mainCapability.getJSONArray("encode_types"); + JSONArray mainEncodeTypeArr = new JSONArray(); + for(int i=0;i map){ + String id = map.get("deviceIndex").toString(); + Map mainMap = (Map)map.get("main"); + Map minorMap = (Map)map.get("minor"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"video\"").append(":").append("{"); + sb.append("\"main\"").append(":").append("{"); + //类属性+类值 + StringBuffer mainSb = new StringBuffer(); + Set mainKeys = mainMap.keySet(); + // 遍历键的集合并打印每个键 + for (String key : mainKeys) { + String value = mainMap.get(key).toString(); + mainSb.append("\"").append(key).append("\"").append(":").append("\"").append(value).append("\"").append(","); + } + String mainStr = mainSb.toString(); + if(mainStr.length()>0){ + mainStr = mainStr.substring(0,mainStr.length()-1); + } + sb.append(mainStr); + sb.append("},"); + sb.append("\"minor\"").append(":").append("{"); + //类属性+类值 + StringBuffer minorSb = new StringBuffer(); + Set minorKeys = minorMap.keySet(); + // 遍历键的集合并打印每个键 + for (String key : minorKeys) { + String value = minorMap.get(key).toString(); + minorSb.append("\"").append(key).append("\"").append(":").append("\"").append(value).append("\"").append(","); + } + String minorStr = minorSb.toString(); + if(minorStr.length()>0){ + minorStr = minorStr.substring(0,minorStr.length()-1); + } + sb.append(minorStr); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK(); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setVideoParams:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setVideoParams:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 恢复画面默认值 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result configRecovery(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"do\"").append(","); + sb.append("\"system\"").append(":").append("{"); + sb.append("\"config_recovery\"").append(":").append("{"); + sb.append("\"config_name\"").append(":").append("[").append("\"image\"").append("]"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK(); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("configRecovery:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("configRecovery:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取摄像头实时播放地址 + * 添加预览通道 + * @param cameraInfo + * @return + */ + @Override + public Result> getPreviewUrl(CameraInfo cameraInfo){ + Map map = new HashMap<>(); + map.put("url",""); + map.put("backupUrl",""); + map.put("wsUrl",""); + map.put("wssUrl",""); + String id = cameraInfo.getDeviceIndex(); + int streamType = cameraInfo.getStreamType(); + StringBuffer addPreviewSb = new StringBuffer(); + addPreviewSb.append("{"); + addPreviewSb.append("\"id\"").append(":").append("\"").append(id).append("\"").append(","); + addPreviewSb.append("\"streamType\"").append(":").append(streamType); + addPreviewSb.append("}"); + String addPreviewRes = tumsApi.addPreviewChn(addPreviewSb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + if(jsonObject.getInt("error_code").equals(0)){ + JSONObject addPreviewResult = (JSONObject)jsonObject.get("result"); + String sessionId = addPreviewResult.getStr("sessionId"); + map = getPreviewUrl(id,streamType,sessionId); + } + return Result.OK(map); + } + + /** + * 获取摄像头实时播放地址 + * 获取预览通道的url + * @param id + * @param streamType + * @param sessionId + * @return + */ + private Map getPreviewUrl(String id,int streamType,String sessionId){ + Map map = new HashMap<>(); + map.put("url",""); + map.put("backupUrl",""); + map.put("wsUrl",""); + map.put("wssUrl",""); + StringBuffer getPreviewSb = new StringBuffer(); + getPreviewSb.append("{"); + getPreviewSb.append("\"id\"").append(":").append("\"").append(id).append("\"").append(","); + getPreviewSb.append("\"streamType\"").append(":").append(streamType).append(","); + getPreviewSb.append("\"sessionId\"").append(":").append("\"").append(sessionId).append("\""); + getPreviewSb.append("}"); + String getPreviewSbRes = tumsApi.getPreviewUrl(getPreviewSb.toString()); + JSONObject jsonObject = new JSONObject(getPreviewSbRes); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONObject getPreviewResult = (JSONObject)jsonObject.get("result"); + String url = getPreviewResult.getStr("url"); + String backupUrl = getPreviewResult.getStr("backupUrl"); + String wsUrl = getPreviewResult.getStr("wsUrl"); + String wssUrl = getPreviewResult.getStr("wssUrl"); + map.put("url",url); + map.put("backupUrl",backupUrl); + map.put("wsUrl",wsUrl); + map.put("wssUrl",wssUrl); + }else if(errorCode == -80703){ + try { + sleep(1000); + map = getPreviewUrl(id,streamType,sessionId); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return map; + } + + /** + * 获取录像配置 + * + * @param cameraInfo + * @return + * @throws Exception + */ + @Override + public Result getRecordCfgs(CameraInfo cameraInfo) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"start\"").append(":").append("0,"); + sb.append("\"limit\"").append(":").append("10,"); + sb.append("\"filterAnd\"").append(":").append("{"); + sb.append("\"projectId\"").append(":").append("\"").append(cameraInfo.getProjectId()).append("\","); + sb.append("\"regionId\"").append(":").append("\"").append(cameraInfo.getRegionId()).append("\""); +// sb.append("\"ipFloor\"").append(":").append("\"").append(cameraInfo.getIp()).append("\","); +// sb.append("\"ipCeiling\"").append(":").append("\"").append(cameraInfo.getIp()).append("\","); +// if(cameraInfo.getParentId()!=null&&!cameraInfo.getParentId().equals("")&&!cameraInfo.getParentId().equals("0")){ +// //存储设备ID +// sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getParentId()).append("\""); +// }else{ +// //SK卡,取自身设备ID +// sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getDeviceIndex()).append("\""); +// } + sb.append("},"); + sb.append("\"sort\"").append(":").append("[{"); + sb.append("\"key\"").append(":").append("\"ip\","); + sb.append("\"value\"").append(":").append("\"desc\""); + sb.append("}]"); + sb.append("}"); + String res = tumsApi.getRecordCfgs(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + return Result.OK("获取录像配置成功!"); + }else{ + return Result.error("获取录像配置失败!"); + } + } + + /** + * 设置录像计划 + * + * @param cameraInfo + * @return + * @throws Exception + */ + @Override + public Result setRecordCfgs(CameraInfo cameraInfo) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"ids\"").append(":").append("[").append(cameraInfo.getDeviceIndex()).append("],"); + sb.append("\"recordSwitch\"").append(":").append(cameraInfo.getRecordSwitch()).append(","); + sb.append("\"streamType\"").append(":").append(cameraInfo.getStreamType()).append(","); + sb.append("\"recordPlanId\"").append(":").append("1,"); + if(cameraInfo.getParentId()!=null&&!cameraInfo.getParentId().equals("")&&!cameraInfo.getParentId().equals("0")){ + //存储设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getParentId()).append("\""); + }else{ + //SK卡,取自身设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getDeviceIndex()).append("\""); + } + sb.append("}"); + String res = tumsApi.setRecordCfgs(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + return Result.OK("设置录像计划成功!"); + }else{ + return Result.error("设置录像计划失败!"); + } + } + + /** + * 获取批量操作录像计划进度 + * + * @param cameraInfo + * @return + * @throws Exception + */ + @Override + public Result getBatchProgress(CameraInfo cameraInfo) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"batchType\"").append(":1"); + sb.append("}"); + String res = tumsApi.getBatchProgress(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + return Result.OK("获取批量操作录像计划进度成功!"); + }else{ + return Result.error("获取批量操作录像计划进度失败!"); + } + } + + /** + * 获取镜头遮挡参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getTamperDet(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"tamper_detection\"").append(":").append("{"); + sb.append("\"name\"").append(":[").append("\"tamper_det\"").append("]"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject tamperDetection = (JSONObject)responseData.get("tamper_detection"); + JSONObject tamperDet = (JSONObject)tamperDetection.get("tamper_det"); + return Result.OK(tamperDet); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getTamperDet:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getTamperDet:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置镜头遮挡参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setTamperDet(Map map){ + String id = map.get("deviceIndex").toString(); + String enabled = map.get("enabled").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"tamper_detection\"").append(":").append("{"); + sb.append("\"tamper_det\"").append(":").append("{"); + if("on".equals(enabled)){ + String digitalSensitivity = map.get("digitalSensitivity").toString(); + sb.append("\"digital_sensitivity\"").append(":").append(digitalSensitivity).append(","); + } + sb.append("\"enabled\"").append(":").append("\"").append(enabled).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK("设置成功"); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setTamperDet:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setTamperDet:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取镜头遮挡处理方式 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getTamperNotif(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"tamper_detection\"").append(":").append("{"); + sb.append("\"name\"").append(":[").append("\"tamper_notif_list\",").append("\"sound_alarm_info\"").append("]"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject tamperDetection = (JSONObject)responseData.get("tamper_detection"); + return Result.OK(tamperDetection); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getTamperNotif:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getTamperNotif:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置镜头遮挡处理方式 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setTamperNotif(Map map){ + String id = map.get("deviceIndex").toString(); + String msgPushEnabled = map.get("msgPushEnabled").toString(); + String lightAlarmEnabled = map.get("lightAlarmEnabled").toString(); + String soundAlarmEnabled = map.get("soundAlarmEnabled").toString(); + String soundAlarmType = map.get("soundAlarmType").toString(); + String soundAlarmTimes = map.get("soundAlarmTimes").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"tamper_detection\"").append(":").append("{"); + sb.append("\"tamper_notif_list\"").append(":").append("{"); + sb.append("\"msg_push_enabled\"").append(":").append("\"").append(msgPushEnabled).append("\","); + sb.append("\"light_alarm_enabled\"").append(":").append("\"").append(lightAlarmEnabled).append("\","); + sb.append("\"sound_alarm_enabled\"").append(":").append("\"").append(soundAlarmEnabled).append("\""); + sb.append("},"); + sb.append("\"sound_alarm_info\"").append(":").append("{"); + sb.append("\"sound_alarm_type\"").append(":").append("\"").append(soundAlarmType).append("\","); + sb.append("\"sound_alarm_times\"").append(":").append("\"").append(soundAlarmTimes).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK(); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setTamperNotif:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setTamperNotif:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 报警声音试听 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result testAudio(Map map){ + String devId = map.get("deviceIndex").toString(); + String id = map.get("id").toString(); + String force = map.get("force").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(devId).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"do\"").append(","); + sb.append("\"usr_def_audio_alarm\"").append(":").append("{"); + sb.append("\"test_audio\"").append(":").append("{"); + sb.append("\"id\"").append(":").append("\"").append(id).append("\","); + sb.append("\"force\"").append(":").append("\"").append(force).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK(); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("testAudio:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("testAudio:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取白光/声音告警参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getAlarmInfo(Map map){ + String id = map.get("deviceIndex").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"msg_alarm\"").append(":").append("{"); + sb.append("\"name\"").append(":").append("\"chn1_msg_alarm_info\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject msgAlarm = (JSONObject)responseData.get("msg_alarm"); + JSONObject alarmInfo = (JSONObject)msgAlarm.get("chn1_msg_alarm_info"); + return Result.OK(alarmInfo); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getAlarmInfo:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getAlarmInfo:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置白光/声音告警参数 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setAlarmInfo(Map map){ + String id = map.get("deviceIndex").toString(); + String type = map.get("type").toString(); + String enabled = map.get("enabled").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"msg_alarm\"").append(":").append("{"); + sb.append("\"chn1_msg_alarm_info\"").append(":").append("{"); + if("light".equals(type)){ + sb.append("\"light_alarm_enabled\"").append(":").append("\"").append(enabled).append("\""); + } + if("sound".equals(type)){ + sb.append("\"sound_alarm_enabled\"").append(":").append("\"").append(enabled).append("\""); + } + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK("设置成功"); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setAlarmInfo:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setAlarmInfo:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取白光/声音告警布防时间 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result getAlarmPlan(Map map){ + String id = map.get("deviceIndex").toString(); + String type = map.get("type").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"get\"").append(","); + sb.append("\"msg_alarm_plan\"").append(":").append("{"); + if("light".equals(type)){ + sb.append("\"name\"").append(":[").append("\"arming_schedule_light\"").append("]"); + } + if("sound".equals(type)){ + sb.append("\"name\"").append(":[").append("\"arming_schedule_sound\"").append("]"); + } + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + JSONObject alarmPlan = (JSONObject)responseData.get("msg_alarm_plan"); + return Result.OK(alarmPlan); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("getAlarmPlan:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("getAlarmPlan:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 设置白光/声音告警布防时间 + * + * @param map + * @return + * @throws Exception + */ + @Override + public Result setAlarmPlan(Map map){ + String id = map.get("deviceIndex").toString(); + String type = map.get("type").toString(); + Map alarmPlan = (Map)map.get("alarmPlan"); + String monday = alarmPlan.get("monday").toString(); + String tuesday = alarmPlan.get("tuesday").toString(); + String wednesday = alarmPlan.get("wednesday").toString(); + String thursday = alarmPlan.get("thursday").toString(); + String friday = alarmPlan.get("friday").toString(); + String saturday = alarmPlan.get("saturday").toString(); + String sunday = alarmPlan.get("sunday").toString(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(id).append("\"").append(","); + sb.append("\"param\"").append(":").append("{"); + sb.append("\"method\"").append(":").append("\"set\"").append(","); + sb.append("\"msg_alarm_plan\"").append(":").append("{"); + if("light".equals(type)){ + sb.append("\"arming_schedule_light\""); + } + if("sound".equals(type)){ + sb.append("\"arming_schedule_sound\""); + } + sb.append(":{"); + sb.append("\"monday\"").append(":").append("\"").append(monday).append("\"").append(","); + sb.append("\"tuesday\"").append(":").append("\"").append(tuesday).append("\"").append(","); + sb.append("\"wednesday\"").append(":").append("\"").append(wednesday).append("\"").append(","); + sb.append("\"thursday\"").append(":").append("\"").append(thursday).append("\"").append(","); + sb.append("\"friday\"").append(":").append("\"").append(friday).append("\"").append(","); + sb.append("\"saturday\"").append(":").append("\"").append(saturday).append("\"").append(","); + sb.append("\"sunday\"").append(":").append("\"").append(sunday).append("\""); + sb.append("}"); + sb.append("}"); + sb.append("}"); + sb.append("}"); + String addPreviewRes = tumsApi.passthrough(sb.toString()); + JSONObject jsonObject = new JSONObject(addPreviewRes); + String errCode = jsonObject.getStr("error_code"); + if("0".equals(errCode)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + JSONObject responseData = (JSONObject)result.get("responseData"); + String errorCode = responseData.getStr("error_code"); + if("0".equals(errorCode)){ + return Result.OK(); + }else{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + String errorMsg = errorVo.getErrorMsg(); + log.info("setAlarmPlan:{}",errorMsg); + return Result.error(errorMsg); + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + log.info("setAlarmPlan:{}",errMsg); + return Result.error(errMsg); + } + } + + /** + * 搜索存在回放录像的日期-预留 + * @param videoDevId,year + * @return + */ + public Map searchYear(String videoDevId,String year){ + Map map = new HashMap<>(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("[{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(videoDevId).append("\""); + sb.append("}],"); + sb.append("\"year\"").append(":").append("\"").append(year).append("\""); + sb.append("}"); + String res = tumsApi.searchYear(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONArray result = jsonObject.getJSONArray("result"); + map.put("result",result); + }else{ + map.put("result",new JSONArray()); + } + return map; + } + + /** + * 搜索某天的录像数据的总条数 + * + * @param deviceIndex + * @param parentId + * @param dataDate + * @param pageNo + * @param pageSize + * @return + */ + int getVideoTotal(String deviceIndex,String parentId,String dataDate,int pageNo,int pageSize){ + int count = 0; + int startIdx = (pageNo-1)*pageSize; + int endIdx = pageNo*pageSize-1; + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("[{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(deviceIndex).append("\","); + if(parentId!=null&&!parentId.equals("")&&!parentId.equals("0")){ + //存储设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(parentId).append("\""); + }else{ + //SK卡,取自身设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(deviceIndex).append("\""); + } + sb.append("}],"); + sb.append("\"searchDay\"").append(":").append("\"").append(dataDate).append("\","); + sb.append("\"startIdx\"").append(":").append(startIdx).append(","); + sb.append("\"endIdx\"").append(":").append(endIdx); + sb.append("}"); + String res = tumsApi.searchVideo(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0) { + JSONObject result = (JSONObject) jsonObject.get("result"); + int total = result.getInt("total"); + count = count + total; + if(total>=pageSize){ + int more = getVideoTotal(deviceIndex,parentId,dataDate,pageNo+1,pageSize); + count = count + more; + } + } + return count; + } + + /** + * 搜索某天的录像数据 + * + * @param pageNo + * @param pageSize + * @param cameraInfo + * @return + */ + @Override + public Result> searchVideo(Integer pageNo, Integer pageSize, CameraInfo cameraInfo){ + Page page = new Page(pageNo, pageSize); + String deviceIndex = cameraInfo.getDeviceIndex(); + String parentId = cameraInfo.getParentId(); + String dataDate = cameraInfo.getDataDate(); + dataDate = dataDate.replaceAll("-",""); + int totalCount = getVideoTotal(deviceIndex,parentId,dataDate,1,800); + page = new Page(pageNo, pageSize, totalCount); + int startIdx = (pageNo-1)*pageSize; + int endIdx = pageNo*pageSize-1; + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("[{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(deviceIndex).append("\","); + if(parentId!=null&&!parentId.equals("")&&!parentId.equals("0")){ + //存储设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(parentId).append("\""); + }else{ + //SK卡,取自身设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(deviceIndex).append("\""); + } + sb.append("}],"); + sb.append("\"searchDay\"").append(":").append("\"").append(dataDate).append("\","); + sb.append("\"startIdx\"").append(":").append(startIdx).append(","); + sb.append("\"endIdx\"").append(":").append(endIdx); + sb.append("}"); + String res = tumsApi.searchVideo(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONObject result = (JSONObject)jsonObject.get("result"); + int total = result.getInt("total"); + if(total>0){ + List list = Lists.newArrayList(); + JSONArray videos = result.getJSONArray("videos"); + JSONObject videoJson = (JSONObject)videos.get(0); + String videoDevId = videoJson.getStr("videoDevId"); + String storageDevId = videoJson.getStr("storageDevId"); + String channelId = videoJson.getStr("channelId"); + String nvsIdInPoolList = videoJson.getStr("nvsIdInPoolList"); + JSONArray startTime = videoJson.getJSONArray("startTime"); + JSONArray endTime = videoJson.getJSONArray("endTime"); + JSONArray videoTypeArr = videoJson.getJSONArray("videoType"); + JSONArray size = videoJson.getJSONArray("size"); + String errCode = videoJson.getStr("errorCode"); + ErrorCode errVo = errorCodeService.getByCode(errCode); + String errMsg = errVo.getErrorMsg(); + for(int i=0;i getStoragesById(CameraInfo cameraInfo){ + Map map = new HashMap<>(); + map.put("error","0"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devIds\"").append(":").append("[\"").append(cameraInfo.getDeviceIndex()).append("\"]"); + sb.append("}"); + String res = tumsApi.getStoragesById(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + List ciList = Lists.newArrayList(); + JSONArray list = jsonObject.getJSONArray("result"); + for(int i=0;i addPlaybackChn(CameraInfo cameraInfo){ + Map map = new HashMap<>(); + map.put("error","0"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("[{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(cameraInfo.getVideoDevId()).append("\","); + sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getStorageDevId()).append("\","); + sb.append("\"storageType\"").append(":").append(cameraInfo.getStorageType()); + sb.append("}],"); + sb.append("\"videoType\"").append(":").append("[").append(cameraInfo.getVideoType()).append("],"); + sb.append("\"scale\"").append(":\"").append(cameraInfo.getScale()).append("/1").append("\","); + sb.append("\"startTime\"").append(":").append(cameraInfo.getStartTime()).append(","); + sb.append("\"endTime\"").append(":").append(cameraInfo.getEndTime()); + sb.append("}"); + String res = tumsApi.addPlaybackChn(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + List ciList = Lists.newArrayList(); + JSONArray list = jsonObject.getJSONArray("result"); + for(int i=0;i getPlaybackUrl(CameraInfo cameraInfo,int counter){ + Map map = new HashMap<>(); + map.put("error","0"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("[{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(cameraInfo.getVideoDevId()).append("\","); + sb.append("\"storageDevId\"").append(":").append("\"").append(cameraInfo.getStorageDevId()).append("\","); + sb.append("\"storageType\"").append(":").append(cameraInfo.getStorageType()).append(","); + sb.append("\"sessionId\"").append(":").append("\"").append(cameraInfo.getSessionId()).append("\""); + sb.append("}],"); + sb.append("\"videoType\"").append(":").append("[").append(cameraInfo.getVideoType()).append("],"); + sb.append("\"scale\"").append(":\"").append(cameraInfo.getScale()).append("/1").append("\","); + sb.append("\"startTime\"").append(":").append(cameraInfo.getStartTime()).append(","); + sb.append("\"endTime\"").append(":").append(cameraInfo.getEndTime()); + sb.append("}"); + String res = tumsApi.getPlaybackUrl(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + List ciList = Lists.newArrayList(); + JSONArray list = jsonObject.getJSONArray("result"); + for(int i=0;i10){ + deletePlaybackChn(cameraInfo.getVideoDevId(),cameraInfo.getSessionId()); + map.put("error",errCode); + break; + } + sleep(1000); + map = getPlaybackUrl(cameraInfo,++counter); + return map; + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else{ + System.out.println("getPlaybackUrl:"+errCode); + } + } + map.put("data",ciList); + }else if(errorCode == -80703){ + try { + if(counter>10){ + deletePlaybackChn(cameraInfo.getVideoDevId(),cameraInfo.getSessionId()); + } + sleep(1000); + map = getPlaybackUrl(cameraInfo,++counter); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else{ + map.put("error",errorCode); + log.info("getPlaybackUrl:{}",errorCode); + } + return map; + } + + @Override + public Result> getPlaybackUrlList(CameraInfo cameraInfo){ + Map map = new HashMap<>(); + String errorMsgs = ""; + List dataList = Lists.newArrayList(); + Map storageMap = getStoragesById(cameraInfo); + String error = storageMap.get("error").toString(); + if(error.equals("0")){ + List storageList = (List)storageMap.get("data"); + if(storageList!=null&&storageList.size()>0){ + for(int i=0;i chnMap = addPlaybackChn(storage); + String chnError = chnMap.get("error").toString(); + if(chnError.equals("0")){ + List chnList = (List)chnMap.get("data"); + if(chnList!=null&&chnList.size()>0){ + for(int j=0;j playbackMap = getPlaybackUrl(chn,1); + String pbError = playbackMap.get("error").toString(); + if(pbError.equals("0")){ + List pbList = (List)playbackMap.get("data"); + if(pbList!=null&&pbList.size()>0){ + for(int k=0;k获取回放通道时:"+errMsg+""; + } + } + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(chnError); + String errMsg = errVo.getErrorMsg(); + errorMsgs = errorMsgs+ "
添加回放通道时:"+errMsg+"
"; + } + } + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(error); + String errMsg = errVo.getErrorMsg(); + errorMsgs = errorMsgs+ "
获取指定监控点的存储设备列表时:"+errMsg+"
"; + } + map.put("error",errorMsgs); + map.put("data",dataList); + return Result.ok(map); + } + + /** + * 删除某一回放通道 + * @param videoDevId + * @param sessionId + */ + public void deletePlaybackChn(String videoDevId,String sessionId){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("["); + sb.append("{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(videoDevId).append("\","); + sb.append("\"sessionId\"").append(":").append("\"").append(sessionId).append("\""); + sb.append("}"); + sb.append("]"); + sb.append("}"); + String res = tumsApi.deletePlaybackChn(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + JSONArray list = jsonObject.getJSONArray("result"); + for(int i=0;i deletePlaybackChn(CameraInfo cameraInfo){ + String errorMsgs = ""; + String sessions = cameraInfo.getSessionId(); + if(sessions!=null&&!sessions.equals("")){ + String[] sessionIds = sessions.split(","); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"id\"").append(":").append("["); + for(int i=0;isessionId为"+sessionId+"的回放通道删除失败,原因:"+errMsg+""; + } + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(errorCode); + String errMsg = errVo.getErrorMsg(); + errorMsgs = errorMsgs + errMsg; + log.info("deletePlaybackChn:{}",errMsg); + } + if(errorMsgs.equals("")){ + return Result.error(errorMsgs); + }else{ + return Result.OK(""); + } + } + return Result.OK(""); + } + + + /** + * 获取nvmp设备双向通信URL + * @param cameraInfo + * @return + */ + public Map getMultitransUrl(CameraInfo cameraInfo,int counter){ + Map map = new HashMap<>(); + map.put("error","0"); + map.put("error","0"); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"devId\"").append(":").append("\"").append(cameraInfo.getVideoDevId()).append("\""); + sb.append("}"); + String res = tumsApi.getMultitransUrl(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONObject result = jsonObject.getJSONObject("result"); + String url = result.getStr("rtspUrl"); + String wsUrl = result.getStr("wsUrl"); + String wssUrl = result.getStr("wssUrl"); + CameraInfo entity = new CameraInfo(); + entity.setVideoDevId(cameraInfo.getVideoDevId()); + entity.setUrl(url); + entity.setWsUrl(wsUrl); + entity.setWssUrl(wssUrl); + entity.setStorageDevId(cameraInfo.getStorageDevId()); + entity.setStorageType(cameraInfo.getStorageType()); + entity.setVideoType(cameraInfo.getVideoType()); + entity.setStartTime(cameraInfo.getStartTime()); + entity.setEndTime(cameraInfo.getEndTime()); + entity.setScale(cameraInfo.getScale()); + map.put("data",entity); + }else if(errorCode == -80703){ + try { + if(counter>10){ + map.put("error",errorCode); + return map; + } + sleep(1000); + map = getMultitransUrl(cameraInfo,++counter); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else{ + map.put("error",errorCode); + log.info("getMultitransUrl:{}",errorCode); + } + return map; + } + + /** + * 获取nvmp设备双向通信URL + * @param cameraInfo + * @return + */ + @Override + public Result getMultitransUrl(CameraInfo cameraInfo) throws Exception{ +// Map map = new HashMap<>(); + String errorMsgs = ""; + List dataList = Lists.newArrayList(); + Map storageMap = getStoragesById(cameraInfo); + String error = storageMap.get("error").toString(); + if(error.equals("0")){ + List storageList = (List)storageMap.get("data"); + if(storageList!=null&&storageList.size()>0){ + for(int i=0;i multitransMap = getMultitransUrl(storage,1); + String multitransError = multitransMap.get("error").toString(); + if(multitransError.equals("0")){ + CameraInfo entity = (CameraInfo)multitransMap.get("data"); + entity.setQueryAddress(tumsConfig.getUrl()); + dataList.add(entity); + }else{ + ErrorCode errVo = errorCodeService.getByCode(multitransError); + String errMsg = errVo.getErrorMsg(); + errorMsgs = errorMsgs+ "
获取nvmp设备双向通信URL:"+errMsg+"
"; + } + } + } + }else{ + ErrorCode errVo = errorCodeService.getByCode(error); + String errMsg = errVo.getErrorMsg(); + errorMsgs = errorMsgs+ "
获取指定监控点的存储设备列表时:"+errMsg+"
"; + } +// map.put("error",errorMsgs); +// map.put("data",dataList); + if(errorMsgs.equals("")){ + return Result.OK(dataList); + }else { + return Result.error(errorMsgs); + } + } + + /** + * 回放视频转mp4上传 + * @param cameraInfo + * @return + */ + @Override + public Result uploadToServer(CameraInfo cameraInfo){ + String deviceIndex = cameraInfo.getDeviceIndex(); + String parentId = cameraInfo.getParentId(); + String fileName = cameraInfo.getFileName(); + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"videoDevId\"").append(":").append("\"").append(deviceIndex).append("\","); + if(parentId!=null&&!parentId.equals("")&&!parentId.equals("0")){ + //存储设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(parentId).append("\","); + }else{ + //SK卡,取自身设备ID + sb.append("\"storageDevId\"").append(":").append("\"").append(deviceIndex).append("\","); + } + sb.append("\"videoType\"").append(":").append(cameraInfo.getVideoType()).append(","); + sb.append("\"storageType\"").append(":").append(cameraInfo.getStorageType()).append(","); + if(fileName!=null&&!fileName.equals("")){ + //存储设备ID + sb.append("\"filename\"").append(":").append("\"").append(fileName).append("\","); + } + sb.append("\"startTime\"").append(":").append(cameraInfo.getStartTime()).append(","); + sb.append("\"endTime\"").append(":").append(cameraInfo.getEndTime()).append(","); + sb.append("\"downloadInfo\"").append(":{"); + sb.append("\"username\"").append(":").append("\"").append(tumsConfig.getFtpUsername()).append("\","); + sb.append("\"password\"").append(":").append("\"").append(tumsConfig.getFtpPassword()).append("\","); + sb.append("\"path\"").append(":").append("\"").append(tumsConfig.getFtpUploadpath()).append("\","); + sb.append("\"ftpIp\"").append(":").append("\"").append(tumsConfig.getFtpIp()).append("\","); + sb.append("\"ftpPort\"").append(":").append(tumsConfig.getFtpPort()); + sb.append("}"); + sb.append("}"); + String res = tumsApi.uploadToServer(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONObject result = jsonObject.getJSONObject("result"); + String taskId = result.getStr("taskId"); + cameraInfo.setTaskId(taskId); + return Result.OK(cameraInfo); + }else{ + ErrorCode errVo = errorCodeService.getByCode(String.valueOf(errorCode)); + String errMsg = errVo.getErrorMsg(); + log.info("uploadToServer:{}-{}",errorCode,errMsg); + return Result.error(errMsg); + } + } + + /** + * 停止转存MP4上传任务 + * @param cameraInfo + * @return + */ + @Override + public Result stopUploadToServer(CameraInfo cameraInfo){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"taskId\"").append(":").append("\"").append(cameraInfo.getTaskId()).append("\""); + sb.append("}"); + String res = tumsApi.stopUploadToServer(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + return Result.OK("停止转存MP4上传成功"); + }else{ + ErrorCode errVo = errorCodeService.getByCode(String.valueOf(errorCode)); + String errMsg = errVo.getErrorMsg(); + log.info("stopUploadToServer:{}-{}",errorCode,errMsg); + return Result.error(errMsg); + } + } + + /** + * 获取转存MP4上传任务进度 + * @param cameraInfo + * @return + */ + @Override + public Result getUploadToServerProcess(CameraInfo cameraInfo){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"taskId\"").append(":").append("\"").append(cameraInfo.getTaskId()).append("\""); + sb.append("}"); + String res = tumsApi.getUploadToServerProcess(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + int errorCode = jsonObject.getInt("error_code"); + if(errorCode == 0){ + JSONObject result = jsonObject.getJSONObject("result"); + String process = result.getStr("process"); + cameraInfo.setProcess(process); + return Result.OK(cameraInfo); + }else{ + ErrorCode errVo = errorCodeService.getByCode(String.valueOf(errorCode)); + String errMsg = errVo.getErrorMsg(); + log.info("getUploadToServerProcess:{}-{}",errorCode,errMsg); + return Result.error(errMsg); + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/controller/TpLinkController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/controller/TpLinkController.java new file mode 100644 index 0000000..efc52ef --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/controller/TpLinkController.java @@ -0,0 +1,52 @@ +package com.nu.modules.tplink.common.controller; + +import com.tplink.ignite.libs.developersdk.api.TumsClient; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.utils.TumsApi; +import com.nu.modules.tplink.utils.TumsConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/iot/tplink") +@Slf4j +public class TpLinkController { + + @Autowired + private TumsApi tumsApi; + @Resource + TumsConfig tumsConfig; + + /** + * 登录图门系统 + * @return + */ + @GetMapping(value = "/login") + public Result> login() { + Map map = new HashMap<>(); + map.put("cookie",""); + map.put("serverUrl",tumsConfig.getUrl()); + TumsClient tc = tumsApi.createTumsClient(); + if(tc!=null){ + map.put("cookie",tc.getCookie()); + } + return Result.OK(map); + } + + /** + * 登出图门系统 + * @return + */ + @GetMapping(value = "/logout") + public Result logout() { + tumsApi.destroyTumsClient(); + return Result.OK(); + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/entity/ErrorCode.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/entity/ErrorCode.java new file mode 100644 index 0000000..0e24d47 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/entity/ErrorCode.java @@ -0,0 +1,41 @@ +package com.nu.modules.tplink.common.entity; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +/** + * @Description: 护理单元-物联管理-TPLINK错误码 + * @Author: jeecg-boot + * @Date: 2025-02-10 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_error_code") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tplink_error_code对象", description="护理单元-物联管理-TPLINK错误码") +public class ErrorCode implements Serializable { + private static final long serialVersionUID = 1L; + + /**错误码*/ + @Excel(name = "错误码", width = 15) + @ApiModelProperty(value = "错误码") + private String errorCode; + /**错误描述*/ + @Excel(name = "错误描述", width = 15) + @ApiModelProperty(value = "错误描述") + private String errorMsg; + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/ErrorCodeMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/ErrorCodeMapper.java new file mode 100644 index 0000000..3243dda --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/ErrorCodeMapper.java @@ -0,0 +1,17 @@ +package com.nu.modules.tplink.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import com.nu.modules.tplink.common.entity.ErrorCode; + +/** + * @Description: 护理单元-物联管理-错误码 + * @Author: jeecg-boot + * @Date: 2025-02-10 + * @Version: V1.0 + */ + +@Mapper +public interface ErrorCodeMapper extends BaseMapper { + ErrorCode getByCode(String errorCode); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/xml/ErrorCodeMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/xml/ErrorCodeMapper.xml new file mode 100644 index 0000000..ba87c43 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/mapper/xml/ErrorCodeMapper.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/IErrorCodeService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/IErrorCodeService.java new file mode 100644 index 0000000..2fc4ac9 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/IErrorCodeService.java @@ -0,0 +1,14 @@ +package com.nu.modules.tplink.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nu.modules.tplink.common.entity.ErrorCode; + +/** + * @Description: 护理单元-物联管理-错误码 + * @Author: jeecg-boot + * @Date: 2025-02-10 + * @Version: V1.0 + */ +public interface IErrorCodeService extends IService { + ErrorCode getByCode(String errorCode); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/impl/ErrorCodeServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/impl/ErrorCodeServiceImpl.java new file mode 100644 index 0000000..134a58c --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/common/service/impl/ErrorCodeServiceImpl.java @@ -0,0 +1,24 @@ +package com.nu.modules.tplink.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nu.modules.tplink.common.entity.ErrorCode; +import com.nu.modules.tplink.common.mapper.ErrorCodeMapper; +import com.nu.modules.tplink.common.service.IErrorCodeService; +import org.springframework.stereotype.Service; + + +/** + * @Description: 护理单元-物联管理-错误码 + * @Author: jeecg-boot + * @Date: 2025-02-10 + * @Version: V1.0 + */ +@Service +public class ErrorCodeServiceImpl extends ServiceImpl implements IErrorCodeService { + + @Override + public ErrorCode getByCode(String errorCode){ + return baseMapper.getByCode(errorCode); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/enums/ApiEnum.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/enums/ApiEnum.java new file mode 100644 index 0000000..329397b --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/enums/ApiEnum.java @@ -0,0 +1,63 @@ +package com.nu.modules.tplink.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 接口枚举类 + */ +@Getter +@RequiredArgsConstructor +public enum ApiEnum { + //前缀对应相应设备的API,无前缀则是公用API + //IPC 视频 + //NVS 存储服务器 + //AUDIO 音箱 + //ROUTER 路由器 + //SWITCH 交换机 + //AP 无线路由器 + //AC ⽆线控制器 + + GET_ENCRYPT_KEY_FOR_LOGIN("/tums/account/v1/getEncryptKeyForLogin","获取登录公钥"), + LOGIN("/tums/account/v2/login","登录"), + LOGOUT("/tums/account/v1/logout","注销"), + SET_CURRENT_PROJECT("/tums/resource/v2/setCurrentProject","设置当前项目"), + GET_ALL_PROJECT_INFO("/tums/resource/v2/getAllProjectInfo","获取所有项目信息"), + GET_ROOT_REGIONS("/tums/resource/v2/getRootRegions","获取区域列表"), + GET_DEVICE_LIST("/tums/deviceManager/v2/getDeviceList","获取设备列表"), + MODIFY_DEVICE_DETAILS("/tums/deviceManager/v1/modifyDeviceDetails","修改设备信息"), + REBOOT_DEVICE_LIST("/tums/deviceManager/v2/rebootDeviceList","重启设备"), + QUERY_ALARM_LOG("/tums/logManager/v2/queryAlarmLog","查询告警日志列表"), + QUERY_UNREAD_ALARM_MSG("/tums/logManager/v2/queryUnreadAlarmMsg","查询未读告警日志列表"), + IPC_GET_IPC_CAPABILITY("/tums/deviceManager/v1/getIpcCapability","获取ipc能力集"), + IPC_PASSTHROUGH("/tums/devConfig/v1/passthrough","设备配置信息"), + + IPC_ADD_PREVIEW_CHN("/tums/preview/v1/addPreviewChn","添加预览通道"), + IPC_GET_PREVIEW_URL("/tums/preview/v1/getPreviewUrl","获取预览通道的url"), + IPC_SEARCH_YEAR("/tums/playback/v1/searchYear","搜索存在回放录像的日期"), + IPC_GET_PLAYBACK_URL("/tums/playback/v1/getPlaybackUrl","获取回放通道的url"), + IPC_SUSPEND_PLAYBACK("/tums/playback/v1/suspendPlayback","暂停通道回放"), + IPC_DELETE_PLAYBACK_CHN("/tums/playback/v1/deletePlaybackChn","删除回放通道"), + IPC_GET_STORAGES_BY_ID("/tums/playback/v1/getStoragesById","获取指定监控点的存储设备列表"), + IPC_SEARCH_VIDEO("/tums/playback/v3/searchVideo","搜索当天的录像数据V3"), + IPC_ADD_PLAYBACK_CHN("/tums/playback/v2/addPlaybackChn","添加回放通道V2"), + IPC_GET_MULTITRANS_URL("/tums/playback/v1/getMultitransUrl","获取nvmp设备双向通信URL"), + IPC_GET_RECORD_CFGS("/tums/record/v1/getRecordCfgs","获取录像配置"), + IPC_SET_RECORD_CFGS("/tums/record/v1/setRecordCfgs","设置录像计划"), + IPC_GET_BATCH_PROGRESS("/tums/record/v1/getBatchProgress","获取批量操作录像计划进度"), + IPC_MOTION_CTRL("/tums/ptz/v1/motionCtrl","高速球机移动方向控制"), + IPC_GET_ALL_PRESETS("/tums/ptz/v1/getAllPresets","获取高速球机的所有预置点"), + IPC_OPERATE_PRESET("/tums/ptz/v1/operatePreset","操作高速球机的预置点"), + IPC_GET_ALL_TOURS("/tums/ptz/v1/getAllTours","获取高速球机的所有巡航列表"), + IPC_GET_TOURS_INFO("/tums/ptz/v1/getToursInfo","获取高速球机的巡航信息"), + IPC_ADD_NEW_TOUR("/tums/ptz/v1/addNewTour","高速球机新增巡航点"), + IPC_MODIFY_TOUR("/tums/ptz/v1/modifyTour","修改高速球机的巡航点配置"), + IPC_EXECUTE_TOUR("/tums/ptz/v1/executeTour","操作高速球机的巡航点"), + IPC_DELETE_TOUR("/tums/ptz/v1/deleteTour","删除高速球机巡航点"), + IPC_UPLOAD_TO_SERVER("/tums/playback/v1/uploadToServer","回放视频转mp4上传"), + IPC_STOP_UPLOAD_TO_SERVER("/tums/preview/v1/stopUploadToServer","停止转存MP4上传任务"), + IPC_GET_UPLOAD_TO_SERVER_PROCESS("/tums/preview/v1/getUploadToServerProcess","获取转存MP4上传任务进度"); + + private final String value;//自定义属性,枚举值,获取:如ApiEnum.GET_ENCRYPT_KEY_FOR_LOGIN.getValue(); + private final String remark;//自定义属性,枚举描述,获取:如ApiEnum.GET_ENCRYPT_KEY_FOR_LOGIN.getRemark(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/controller/ProjectInfoController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/controller/ProjectInfoController.java new file mode 100644 index 0000000..c759cc3 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/controller/ProjectInfoController.java @@ -0,0 +1,88 @@ +/** + * Version:v1.0.0 , + * Description:TP-LINK厂家项目信息相关操作 + * CreateDate:2025-01-22 09:00:00 + * Author:曹磊 + */ +package com.nu.modules.tplink.project.controller; + +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.model.ProjectTreeModel; +import com.nu.modules.tplink.project.service.IProjectInfoService; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description: 护理单元-物联管理-TPLINK项目信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +@Api(tags="护理单元-物联管理-TPLINK项目信息") +@RestController +@RequestMapping("/iot/projectInfo") +@Slf4j +public class ProjectInfoController extends JeecgController { + @Autowired + private IProjectInfoService service; + + /** + * 分页列表查询 + * + * @param projectInfo + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "护理单元-物联管理-TPLINK项目信息-分页列表查询") + @ApiOperation(value="护理单元-物联管理-TPLINK项目信息-分页列表查询", notes="护理单元-物联管理-TPLINK项目信息-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(ProjectInfo projectInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findPage(page, projectInfo); + return Result.OK(pageList); + } + + /** + * 同步项目信息 + * + * @return + */ + @GetMapping(value = "/sync") + public Result getUploadToServerProcess()throws Exception{ + return service.sync(); + } + + /** + * 异步查询项目list + * @return + */ + @RequestMapping(value = "/queryRegionTreeSync", method = RequestMethod.GET) + public Result> queryDepartTreeSync() { + Result> result = new Result<>(); + try { + List list = service.queryTreeList(); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.setSuccess(false); + result.setMessage("查询失败"); + } + return result; + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/entity/ProjectInfo.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/entity/ProjectInfo.java new file mode 100644 index 0000000..9cc85a8 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/entity/ProjectInfo.java @@ -0,0 +1,120 @@ +package com.nu.modules.tplink.project.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.*; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 护理单元-物联管理-TPLINK项目信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_project") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tplink_project对象", description="护理单元-物联管理-TPLINK项目信息") +public class ProjectInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + /**项目ID*/ + @Excel(name = "项目ID", width = 15) + @ApiModelProperty(value = "项目ID") + private String projectId; + /**项目名称*/ + @Excel(name = "项目名称", width = 15) + @ApiModelProperty(value = "项目名称") + private String projectName; + /**创建时间戳,单位秒*/ + @ApiModelProperty(value = "创建时间戳,单位秒") + private String createTime; + @TableField(exist = false) + @ApiModelProperty(value = "创建时间,年月日时分秒") + private String createTimeStr; + /**设备数量*/ + @Excel(name = "设备数量", width = 15) + @ApiModelProperty(value = "设备数量") + private Integer deviceNum; + /**消息数量*/ + @Excel(name = "消息数量", width = 15) + @ApiModelProperty(value = "消息数量") + private Integer messageNum; + /**项目次序*/ + @Excel(name = "项目次序", width = 15) + @ApiModelProperty(value = "项目次序") + private Integer sort; + /**项目次序,接口对应字段,在数据库中是关键字,数据库中用sort代替order*/ + @ApiModelProperty(value = "项目次序") + @TableField(exist = false) + private String order; + /** 离线设备数*/ + @Excel(name = "离线设备数", width = 15) + @ApiModelProperty(value = "离线设备数") + private Integer offlineNum; + /**异常设备数*/ + @Excel(name = "异常设备数", width = 15) + @ApiModelProperty(value = "异常设备数") + private Integer abnormalNum; + /**未读消息数*/ + @Excel(name = "未读消息数", width = 15) + @ApiModelProperty(value = "未读消息数") + private Integer unreadMessageNum; + /**nms设备总数*/ + @Excel(name = "nms设备总数", width = 15) + @ApiModelProperty(value = "nms设备总数") + private Integer totalNmsDevNum; + /**vms设备总数*/ + @Excel(name = "vms设备总数", width = 15) + @ApiModelProperty(value = "vms设备总数") + private Integer totalVmsDevNum; + /**nbs设备总数*/ + @Excel(name = "nbs设备总数", width = 15) + @ApiModelProperty(value = "nbs设备总数") + private Integer totalNbsDevNum; + /**离线nms设备总数*/ + @Excel(name = "离线nms设备总数", width = 15) + @ApiModelProperty(value = "离线nms设备总数") + private Integer offlineNmsDevNum; + /**离线vms设备总数*/ + @Excel(name = "离线vms设备总数", width = 15) + @ApiModelProperty(value = "离线vms设备总数") + private Integer offlineVmsDevNum; + /**离线nbs设备总数*/ + @Excel(name = "离线nbs设备总数", width = 15) + @ApiModelProperty(value = "离线nbs设备总数") + private Integer offlineNbsDevNum; + /**运行时间,单位s*/ + @Excel(name = "运行时间,单位s", width = 15) + @ApiModelProperty(value = "运行时间,单位s") + private Integer runningTime; + @TableField(exist = false) + @ApiModelProperty(value = "运行天数") + private String runningTimeStr; + /**状态1正常 2冻结*/ + @Excel(name = "状态1正常 2冻结", width = 15) + @ApiModelProperty(value = "状态1正常 2冻结") + private Integer status; + /**是否有叶子节点: 1是0否*/ + @Excel(name = "是否有叶子节点: 1是0否", width = 15) + @ApiModelProperty(value = "是否有叶子节点: 1是0否") + private Integer izLeaf; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/job/ProjectSyncJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/job/ProjectSyncJob.java new file mode 100644 index 0000000..0db13f7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/job/ProjectSyncJob.java @@ -0,0 +1,39 @@ +package com.nu.modules.tplink.project.job; + +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.DateUtils; +import com.nu.modules.tplink.common.entity.ErrorCode; +import com.nu.modules.tplink.common.service.IErrorCodeService; +import com.nu.modules.tplink.project.service.IProjectInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class ProjectSyncJob implements Job { + + @Autowired + IProjectInfoService service; + @Autowired + private TumsApi tumsApi; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + String jsonRequest = "{\n" + + " \"start\": 0,\n" + + " \"limit\": 1000\n" + + "}"; + String jsonResponse = tumsApi.getAllProjectInfo(jsonRequest); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + service.sync(jsonResponse); + }else{ + log.error("ProjectSyncJob:{}-{}", DateUtils.now(),jsonObject.getStr("msg")); + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/ProjectInfoMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/ProjectInfoMapper.java new file mode 100644 index 0000000..f154cbb --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/ProjectInfoMapper.java @@ -0,0 +1,26 @@ +package com.nu.modules.tplink.project.mapper; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * @Description: 护理单元-物联管理-TPLINK项目信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +public interface ProjectInfoMapper extends BaseMapper { + ProjectInfo getByProjectId(Map map); + List findList(ProjectInfo projectInfo); + IPage findPage(Page page, @Param("params") ProjectInfo projectInfo); + int add(Map map); + int updateById(Map map); + int updateLeafByPId(Map map); + List queryTreeList(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/xml/ProjectInfoMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/xml/ProjectInfoMapper.xml new file mode 100644 index 0000000..0160700 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/mapper/xml/ProjectInfoMapper.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + + insert into nu_iot_tplink_project( + project_id, + project_name, + create_time, + device_num, + message_num, + sort, + offline_num, + abnormal_num, + unread_message_num, + total_nms_dev_num, + total_vms_dev_num, + total_nbs_dev_num, + offline_nms_dev_num, + offline_vms_dev_num, + offline_nbs_dev_num, + running_time, + status, + iz_leaf + ) + values( + #{projectId}, + #{projectName}, + #{createTime}, + #{deviceNum}, + #{messageNum}, + #{sort}, + #{offlineNum}, + #{abnormalNum}, + #{unreadMessageNum}, + #{totalNmsDevNum}, + #{totalVmsDevNum}, + #{totalNbsDevNum}, + #{offlineNmsDevNum}, + #{offlineVmsDevNum}, + #{offlineNbsDevNum}, + #{runningTime}, + #{status}, + 1 + ) + + + + update nu_iot_tplink_project + set + project_id = #{projectId}, + project_name = #{projectName}, + create_time = #{createTime}, + device_num = #{deviceNum}, + message_num = #{messageNum}, + sort = #{sort}, + offline_num = #{offlineNum}, + abnormal_num = #{abnormalNum}, + unread_message_num = #{unreadMessageNum}, + total_nms_dev_num = #{totalNmsDevNum}, + total_vms_dev_num = #{totalVmsDevNum}, + total_nbs_dev_num = #{totalNbsDevNum}, + offline_nms_dev_num = #{offlineNmsDevNum}, + offline_vms_dev_num = #{offlineVmsDevNum}, + offline_nbs_dev_num = #{offlineNbsDevNum}, + running_time = #{runningTime} + where id = #{id} + + + + update nu_iot_tplink_project + set iz_leaf = #{izLeaf} + where project_id = #{projectId} + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/model/ProjectTreeModel.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/model/ProjectTreeModel.java new file mode 100644 index 0000000..0b11464 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/model/ProjectTreeModel.java @@ -0,0 +1,193 @@ +package com.nu.modules.tplink.project.model; + +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.region.model.RegionTreeModel; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 项目表 存储项目结构数据的实体类 + *

+ * + * @Author 曹磊 + * @Since 2025-02-27 + */ +public class ProjectTreeModel implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** 对应ProjectInfo中的projectId字段,前端数据树中的key*/ + private String key; + + /** 对应ProjectInfo中的projectId字段,前端数据树中的value*/ + private String value; + + /** 对应ProjectInfo中的projectName字段,前端数据树中的title*/ + private String title; + + private boolean isLeaf; + + private String type; + // 以下所有字段均与ProjectInfo相同 + + private String id; + + private String projectId; + + private String projectName; + + private String order; + + private Integer sort; + + private List children = new ArrayList<>(); + + + /** + * 将ProjectInfo对象转换成ProjectTreeModel对象 + * @param projectInfo + */ + public ProjectTreeModel(ProjectInfo projectInfo) { + this.key = projectInfo.getProjectId(); + this.value = projectInfo.getProjectId(); + this.title = projectInfo.getProjectName(); + this.type = "project"; + this.id = "0"; + this.projectId = projectInfo.getProjectId(); + this.projectName = projectInfo.getProjectName(); + this.order = projectInfo.getOrder(); + this.sort = projectInfo.getSort(); + if(0 == projectInfo.getIzLeaf()){ + this.isLeaf = false; + }else{ + this.isLeaf = true; + } + } + + public boolean getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(boolean isleaf) { + this.isLeaf = isleaf; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + if (children==null){ + this.isLeaf=true; + } + this.children = children; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getOrder() { + return order; + } + + public void setOrder(String order) { + this.order = order; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProjectTreeModel model = (ProjectTreeModel) o; + return Objects.equals(id, model.id) && + Objects.equals(projectId, model.projectId) && + Objects.equals(projectName, model.projectName) && + Objects.equals(order, model.order) && + Objects.equals(sort, model.sort) && + Objects.equals(children, model.children); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + return Objects.hash(id, projectId, projectName, order, sort, children); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/IProjectInfoService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/IProjectInfoService.java new file mode 100644 index 0000000..e7845c0 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/IProjectInfoService.java @@ -0,0 +1,24 @@ +package com.nu.modules.tplink.project.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.model.ProjectTreeModel; + +import java.util.List; + +/** + * @Description: 护理单元-物联管理-TPLINK项目信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +public interface IProjectInfoService extends IService { + Result sync(); + void sync(String jsonResponse); + List findList(ProjectInfo projectInfo); + IPage findPage(Page page, ProjectInfo projectInfo); + List queryTreeList(); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/impl/ProjectInfoServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/impl/ProjectInfoServiceImpl.java new file mode 100644 index 0000000..1431682 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/project/service/impl/ProjectInfoServiceImpl.java @@ -0,0 +1,131 @@ +package com.nu.modules.tplink.project.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.mapper.ProjectInfoMapper; +import com.nu.modules.tplink.project.model.ProjectTreeModel; +import com.nu.modules.tplink.project.service.IProjectInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-TPLINK项目信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +@Service +@Slf4j +public class ProjectInfoServiceImpl extends ServiceImpl implements IProjectInfoService { + + @Autowired + private TumsApi tumsApi; + + + /** + * 同步项目信息 + * @return + */ + @Override + public Result sync(){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"start\"").append(":0,"); + sb.append("\"limit\"").append(":1000"); + sb.append("}"); + String jsonResponse = tumsApi.getAllProjectInfo(sb.toString()); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + sync(jsonResponse); + return Result.OK("同步项目成功!"); + }else{ + return Result.error(jsonObject.getStr("msg")); + } + } + + /** + * 接口返回数据同步入库 + * @param jsonResponse + */ + @Override + public void sync(String jsonResponse){ + JSONObject jsonObject = new JSONObject(jsonResponse); + if(jsonObject.getInt("error_code").equals(0)){ + JSONObject result = (JSONObject)jsonObject.get("result"); + if(result.getInt("total")>0){ + JSONArray list = result.getJSONArray("list"); + for(int i=0;i map = new HashMap<>(); + for (String key : voObject.keySet()) { + map.put(key, voObject.getStr(key)); + } + map.put("sort", map.get("order")); + ProjectInfo entity = baseMapper.getByProjectId(map); + if(entity==null){ + //新增 + map.put("status","1"); + baseMapper.add(map); + }else{ + //修改 + map.put("id",String.valueOf(entity.getId())); + baseMapper.updateById(map); + } + } + } + } + } + + /** + * TPLINK项目信息列表查询 + * + * @param projectInfo + * @return + */ + @Override + public List findList(ProjectInfo projectInfo){ + return baseMapper.findList(projectInfo); + } + + /** + * TPLINK项目信息分页列表查询 + * + * @param page + * @param projectInfo + * @return + */ + @Override + public IPage findPage(Page page,ProjectInfo projectInfo){ + return baseMapper.findPage(page,projectInfo); + } + + /** + * 查询项目treeList + * + */ + @Override + public List queryTreeList(){ + List records = new ArrayList<>(); + List list = baseMapper.queryTreeList(); + for (int i = 0; i < list.size(); i++) { + ProjectInfo project = list.get(i); + ProjectTreeModel treeModel = new ProjectTreeModel(project); + records.add(treeModel); + } + return records; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/controller/RegionInfoController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/controller/RegionInfoController.java new file mode 100644 index 0000000..b33a2dc --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/controller/RegionInfoController.java @@ -0,0 +1,89 @@ +/** + * Version:v1.0.0 , + * Description:TP-LINK厂家区域信息相关操作 + * CreateDate:2025-02-20 09:00:00 + * Author:曹磊 + */ +package com.nu.modules.tplink.region.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.base.controller.JeecgController; +import com.nu.modules.tplink.region.entity.RegionInfo; +import com.nu.modules.tplink.region.model.RegionTreeModel; +import com.nu.modules.tplink.region.service.IRegionInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** +* @Description: 护理单元-物联管理-TPLINK区域信息 +* @Author: jeecg-boot +* @Date: 2025-02-20 +* @Version: V1.0 +*/ +@Api(tags="护理单元-物联管理-TPLINK区域信息") +@RestController +@RequestMapping("/iot/regionInfo") +@Slf4j +public class RegionInfoController extends JeecgController { + @Autowired + private IRegionInfoService service; + + /** + * 分页列表查询 + * + * @param regionInfo + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "护理单元-物联管理-TPLINK项目信息-分页列表查询") + @ApiOperation(value="护理单元-物联管理-TPLINK项目信息-分页列表查询", notes="护理单元-物联管理-TPLINK项目信息-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(RegionInfo regionInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page(pageNo, pageSize); + IPage pageList = service.findPage(page, regionInfo); + return Result.OK(pageList); + } + + /** + * 同步区域信息 + * + * @return + */ + @GetMapping(value = "/sync") + public Result getUploadToServerProcess(RegionInfo regionInfo)throws Exception{ + return service.sync(regionInfo); + } + + /** + * 异步查询区域list + * @param parentId 父节点 异步加载时传递 + * @return + */ + @RequestMapping(value = "/queryRegionTreeSync", method = RequestMethod.GET) + public Result> queryDepartTreeSync(@RequestParam(name = "parentId", required = false) String parentId, @RequestParam(name = "projectId", required = false) String projectId) { + Result> result = new Result<>(); + try { + List list = service.queryTreeListByPid(parentId,projectId); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.setSuccess(false); + result.setMessage("查询失败"); + } + return result; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/entity/RegionInfo.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/entity/RegionInfo.java new file mode 100644 index 0000000..99e2d49 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/entity/RegionInfo.java @@ -0,0 +1,109 @@ +package com.nu.modules.tplink.region.entity; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +/** + * @Description: 护理单元-物联管理-TPLINK区域信息 + * @Author: jeecg-boot + * @Date: 2025-02-20 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_region") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="nu_iot_tplink_region对象", description="护理单元-物联管理-TPLINK区域信息") +public class RegionInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "ID") + private Integer id; + /**区域ID*/ + @Excel(name = "区域ID", width = 15) + @ApiModelProperty(value = "区域ID") + private String regionId; + /**区域名称*/ + @Excel(name = "区域名称", width = 15) + @ApiModelProperty(value = "区域名称") + private String regionName; + /**区域层级*/ + @Excel(name = "区域层级", width = 15) + @ApiModelProperty(value = "区域层级") + private String regionLevel; + /**区域次序,接口对应字段,在数据库中是关键字,数据库中用sort代替order*/ + @ApiModelProperty(value = "项目次序") + @TableField(exist = false) + private String order; + /**项目次序*/ + @Excel(name = "项目次序", width = 15) + @ApiModelProperty(value = "项目次序") + private Integer sort; + /**父区域ID*/ + @Excel(name = "父区域ID", width = 15) + @ApiModelProperty(value = "父区域ID") + private String parentId; + /**父区域ID*/ + @Excel(name = "父区域", width = 15) + @ApiModelProperty(value = "父区域") + @TableField(exist = false) + private String parentName; + /**项目ID*/ + @Excel(name = "项目ID", width = 15) + @ApiModelProperty(value = "项目ID") + private String projectId; + /**项目名称*/ + @Excel(name = "项目名称", width = 15) + @ApiModelProperty(value = "项目名称") + @TableField(exist = false) + private String projectName; + /**系统类型*/ + @Excel(name = "系统类型", width = 15) + @ApiModelProperty(value = "系统类型") + private String sysType; + /**流道*/ + @Excel(name = "流道", width = 15) + @ApiModelProperty(value = "流道") + private String streamWay; + /**是否有子区域*/ + @Excel(name = "是否有子区域", width = 15) + @ApiModelProperty(value = "是否有子区域 0无 1有") + private String hasChildren; + /**区域类型*/ + @Excel(name = "区域类型", width = 15) + @ApiModelProperty(value = "区域类型") + private String regionType; + /**更新时间*/ + @Excel(name = "更新时间", width = 15) + @ApiModelProperty(value = "更新时间,年月日时分秒") + private String updateTime; + /**流媒体服务器ID*/ + @Excel(name = "流媒体服务器ID", width = 15) + @ApiModelProperty(value = "流媒体服务器ID") + private String mediaServerId; + /**备用流媒体服务器ID*/ + @Excel(name = "备用流媒体服务器ID", width = 15) + @ApiModelProperty(value = "备用流媒体服务器ID") + private String backupMediaServerId; + /**绑定类型*/ + @Excel(name = "绑定类型", width = 15) + @ApiModelProperty(value = "绑定类型 0:设备直接取流/流媒体转发模式,1: 自动模式") + private String bindType; + /**是否有叶子节点: 1是0否*/ + @Excel(name = "是否有叶子节点: 1是0否", width = 15) + @ApiModelProperty(value = "是否有叶子节点: 1是0否") + private Integer izLeaf; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/job/RegionSyncJob.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/job/RegionSyncJob.java new file mode 100644 index 0000000..05dc45e --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/job/RegionSyncJob.java @@ -0,0 +1,55 @@ +package com.nu.modules.tplink.region.job; + +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.DateUtils; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.service.IProjectInfoService; +import com.nu.modules.tplink.region.service.IRegionInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 区域信息同步 + */ +@Slf4j +public class RegionSyncJob implements Job { + + @Autowired + IRegionInfoService service; + @Autowired + IProjectInfoService pService; + + @Autowired + private TumsApi tumsApi; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + ProjectInfo pi = new ProjectInfo(); + pi.setStatus(1);//正常状态 + List projectList = pService.findList(pi); + if(projectList!=null&&projectList.size()>0){ + for(int i=0;i< projectList.size();i++){ + ProjectInfo projectInfo = projectList.get(i); + String jsonRequest = "{\n" + + " \"projectId\": \""+projectInfo.getProjectId()+"\",\n"+ + " \"sysType\": 3\n"+ + "}"; +// System.out.println(jsonRequest); + String jsonResponse = tumsApi.getRootRegions(jsonRequest); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + service.sync(jsonResponse); + }else{ + log.error("RegionSyncJob:{}-{}", DateUtils.now(),jsonObject.getStr("msg")); + } + } + } + } +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/RegionInfoMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/RegionInfoMapper.java new file mode 100644 index 0000000..2fe3196 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/RegionInfoMapper.java @@ -0,0 +1,24 @@ +package com.nu.modules.tplink.region.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import com.nu.modules.tplink.region.entity.RegionInfo; +import java.util.List; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-TPLINK区域信息 + * @Author: jeecg-boot + * @Date: 2025-02-20 + * @Version: V1.0 + */ +public interface RegionInfoMapper extends BaseMapper { + RegionInfo getByRegionId(Map map); + List findList(RegionInfo regionInfo); + IPage findPage(Page page, @Param("params") RegionInfo regionInfo); + int add(Map map); + int updateById(Map map); + List queryTreeListByPid(String parentId,String projectId); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/xml/RegionInfoMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/xml/RegionInfoMapper.xml new file mode 100644 index 0000000..a755b3e --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/mapper/xml/RegionInfoMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + insert into nu_iot_tplink_region( + region_id, + region_name, + region_level, + sort, + parent_id, + project_id, + sys_type, + stream_way, + has_children, + region_type, + update_time, + media_server_id, + backup_media_server_id, + bind_type + ) + values( + #{regionId}, + #{regionName}, + #{regionLevel}, + #{sort}, + #{parentId}, + #{projectId}, + #{sysType}, + #{streamWay}, + #{hasChildren}, + #{regionType}, + #{updateTime}, + #{mediaServerId}, + #{backupMediaServerId}, + #{bindType} + ) + + + + update nu_iot_tplink_region + set + region_id = #{regionId}, + region_name = #{regionName}, + region_level = #{regionLevel}, + sort = #{sort}, + parent_id = #{parentId}, + project_id = #{projectId}, + sys_type = #{sysType}, + stream_way = #{streamWay}, + has_children = #{hasChildren}, + region_type = #{regionType}, + update_time = #{updateTime}, + media_server_id = #{mediaServerId}, + backup_media_server_id = #{backupMediaServerId}, + bind_type = #{bindType} + where id = #{id} + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/model/RegionTreeModel.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/model/RegionTreeModel.java new file mode 100644 index 0000000..9b16874 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/model/RegionTreeModel.java @@ -0,0 +1,352 @@ +package com.nu.modules.tplink.region.model; + +import com.nu.modules.tplink.region.entity.RegionInfo; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 区域表 存储区域结构数据的实体类 + *

+ * + * @Author 曹磊 + * @Since 2025-02-27 + */ +public class RegionTreeModel implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** 对应SysDepart中的id字段,前端数据树中的key*/ + private String key; + + /** 对应SysDepart中的id字段,前端数据树中的value*/ + private String value; + + /** 对应depart_name字段,前端数据树中的title*/ + private String title; + + private boolean isLeaf; + + private String type; + // 以下所有字段均与RegionInfo相同 + + private String id; + + private String regionId; + + private String regionName; + + private String regionLevel; + + private String order; + + private Integer sort; + + private String parentId; + + private String parentName; + + private String projectId; + + private String projectName; + + private String sysType; + + private String streamWay; + + private String hasChildren; + + private String regionType; + + private String updateTime; + + private String mediaServerId; + + private String backupMediaServerId; + + private String bindType; + + private List children = new ArrayList<>(); + + + /** + * 将RegionInfo对象转换成RegionTreeModel对象 + * @param regionInfo + */ + public RegionTreeModel(RegionInfo regionInfo) { + this.key = regionInfo.getRegionId(); + this.value = regionInfo.getRegionId(); + this.title = regionInfo.getRegionName(); + this.type = "region"; + this.id = regionInfo.getRegionId(); + this.regionId = regionInfo.getRegionId(); + this.regionName = regionInfo.getRegionName(); + this.regionLevel = regionInfo.getRegionLevel(); + this.order = regionInfo.getOrder(); + this.sort = regionInfo.getSort(); + this.parentId = regionInfo.getParentId(); + this.parentName = regionInfo.getParentName(); + this.projectId = regionInfo.getProjectId(); + this.projectName = regionInfo.getProjectName(); + this.sysType = regionInfo.getSysType(); + this.streamWay = regionInfo.getStreamWay(); + this.hasChildren = regionInfo.getHasChildren(); + this.regionType = regionInfo.getRegionType(); + this.updateTime = regionInfo.getUpdateTime(); + this.mediaServerId = regionInfo.getMediaServerId(); + this.backupMediaServerId = regionInfo.getBackupMediaServerId(); + this.bindType = regionInfo.getBindType(); + if(0 == regionInfo.getIzLeaf()){ + this.isLeaf = false; + }else{ + this.isLeaf = true; + } + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(boolean isleaf) { + this.isLeaf = isleaf; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + if (children==null){ + this.isLeaf=true; + } + this.children = children; + } + + public String getRegionId() { + return regionId; + } + + public void setRegionId(String regionId) { + this.regionId = regionId; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getRegionName() { + return regionName; + } + + public void setRegionName(String regionName) { + this.regionName = regionName; + } + + public String getRegionLevel() { + return regionLevel; + } + + public void setRegionLevel(String regionLevel) { + this.regionLevel = regionLevel; + } + + public String getOrder() { + return order; + } + + public void setOrder(String order) { + this.order = order; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getSysType() { + return sysType; + } + + public void setSysType(String sysType) { + this.sysType = sysType; + } + + public String getStreamWay() { + return streamWay; + } + + public void setStreamWay(String streamWay) { + this.streamWay = streamWay; + } + + public String getHasChildren() { + return hasChildren; + } + + public void setHasChildren(String hasChildren) { + this.hasChildren = hasChildren; + } + + public String getRegionType() { + return regionType; + } + + public void setRegionType(String regionType) { + this.regionType = regionType; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getMediaServerId() { + return mediaServerId; + } + + public void setMediaServerId(String mediaServerId) { + this.mediaServerId = mediaServerId; + } + + public String getBackupMediaServerId() { + return backupMediaServerId; + } + + public void setBackupMediaServerId(String backupMediaServerId) { + this.backupMediaServerId = backupMediaServerId; + } + + public String getBindType() { + return bindType; + } + + public void setBindType(String bindType) { + this.bindType = bindType; + } + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RegionTreeModel model = (RegionTreeModel) o; + return Objects.equals(id, model.id) && + Objects.equals(regionId, model.regionId) && + Objects.equals(regionName, model.regionName) && + Objects.equals(regionLevel, model.regionLevel) && + Objects.equals(order, model.order) && + Objects.equals(sort, model.sort) && + Objects.equals(parentId, model.parentId) && + Objects.equals(parentName, model.parentName) && + Objects.equals(projectId, model.projectId) && + Objects.equals(projectName, model.projectName) && + Objects.equals(sysType, model.sysType) && + Objects.equals(streamWay, model.streamWay) && + Objects.equals(hasChildren, model.hasChildren) && + Objects.equals(regionType, model.regionType) && + Objects.equals(updateTime, model.updateTime) && + Objects.equals(mediaServerId, model.mediaServerId) && + Objects.equals(backupMediaServerId, model.backupMediaServerId) && + Objects.equals(bindType, model.bindType) && + Objects.equals(children, model.children); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + + return Objects.hash(id, regionId, regionName, regionLevel, order, + sort, parentId, parentName, projectId, projectName, sysType, streamWay, hasChildren, + regionType, updateTime, mediaServerId, backupMediaServerId, bindType, + children); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/IRegionInfoService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/IRegionInfoService.java new file mode 100644 index 0000000..5dbe17b --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/IRegionInfoService.java @@ -0,0 +1,24 @@ +package com.nu.modules.tplink.region.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.region.entity.RegionInfo; +import com.nu.modules.tplink.region.model.RegionTreeModel; + +import java.util.List; + +/** + * @Description: 护理单元-物联管理-TPLINK区域信息 + * @Author: jeecg-boot + * @Date: 2025-01-22 + * @Version: V1.0 + */ +public interface IRegionInfoService extends IService { + Result sync(RegionInfo regionInfo); + void sync(String jsonResponse); + List findList(RegionInfo regionInfo); + IPage findPage(Page page, RegionInfo regionInfo); + List queryTreeListByPid(String parentId,String projectId); +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/impl/RegionInfoServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/impl/RegionInfoServiceImpl.java new file mode 100644 index 0000000..df1e103 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/region/service/impl/RegionInfoServiceImpl.java @@ -0,0 +1,146 @@ +package com.nu.modules.tplink.region.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import com.nu.modules.tplink.project.entity.ProjectInfo; +import com.nu.modules.tplink.project.mapper.ProjectInfoMapper; +import com.nu.modules.tplink.project.model.ProjectTreeModel; +import com.nu.modules.tplink.region.entity.RegionInfo; +import com.nu.modules.tplink.region.mapper.RegionInfoMapper; +import com.nu.modules.tplink.region.model.RegionTreeModel; +import com.nu.modules.tplink.region.service.IRegionInfoService; +import com.nu.modules.tplink.utils.TumsApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: 护理单元-物联管理-TPLINK区域信息 + * @Author: jeecg-boot + * @Date: 2025-02-20 + * @Version: V1.0 + */ +@Service +@Slf4j +public class RegionInfoServiceImpl extends ServiceImpl implements IRegionInfoService { + + @Autowired + private TumsApi tumsApi; + @Autowired + private ProjectInfoMapper projectInfoMapper; + + /** + * 同步区域信息 + * @return + */ + @Override + public Result sync(RegionInfo regionInfo){ + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append("\"projectId\"").append(":").append("\"").append(regionInfo.getProjectId()).append("\","); + sb.append("\"sysType\"").append(":3"); + sb.append("}"); + String jsonResponse = tumsApi.getRootRegions(sb.toString()); + JSONObject jsonObject = new JSONObject(jsonResponse); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + sync(jsonResponse); + return Result.OK("同步区域成功!"); + }else{ + return Result.error(jsonObject.getStr("msg")); + } + } + + /** + * 接口返回数据同步入库 + * @param jsonResponse + */ + @Override + public void sync(String jsonResponse){ + JSONObject jsonObject = new JSONObject(jsonResponse); + if(jsonObject.getInt("error_code").equals(0)){ + JSONArray list = jsonObject.getJSONArray("result"); + for(int i=0;i map = new HashMap<>(); + for (String key : voObject.keySet()) { + map.put(key, voObject.getStr(key)); + } + map.put("sort", map.get("order")); + String hasChildren = map.get("hasChildren"); + if(hasChildren.equals("0")){ + map.put("izLeaf", "1"); + }else{ + map.put("izLeaf", "0"); + } + RegionInfo entity = baseMapper.getByRegionId(map); + if(entity==null){ + //新增 + baseMapper.add(map); + }else{ + //修改 + map.put("id",String.valueOf(entity.getId())); + baseMapper.updateById(map); + } + String projectId = map.get("projectId"); + if(projectId!=null&&!("").equals(projectId)){ + Map projectMap = new HashMap<>(); + projectMap.put("projectId", map.get("projectId")); + projectMap.put("izLeaf", "0"); + projectInfoMapper.updateLeafByPId(projectMap); + } + } + } + } + + /** + * TPLINK项目信息列表查询 + * + * @param regionInfo + * @return + */ + @Override + public List findList(RegionInfo regionInfo){ + return baseMapper.findList(regionInfo); + } + + /** + * TPLINK项目信息分页列表查询 + * + * @param page + * @param regionInfo + * @return + */ + @Override + public IPage findPage(Page page,RegionInfo regionInfo){ + return baseMapper.findPage(page,regionInfo); + } + + /** + * 查询区域treeList + * + * @param parentId + * @return + */ + @Override + public List queryTreeListByPid(String parentId,String projectId){ + List records = new ArrayList<>(); + List list = baseMapper.queryTreeListByPid(parentId,projectId); + for (int i = 0; i < list.size(); i++) { + RegionInfo region = list.get(i); + RegionTreeModel treeModel = new RegionTreeModel(region); + records.add(treeModel); + } + return records; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TestUtil.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TestUtil.java new file mode 100644 index 0000000..5d1dece --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TestUtil.java @@ -0,0 +1,23 @@ +package com.nu.modules.tplink.utils; + +import org.jeecg.common.api.vo.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/iot/test") +public class TestUtil { + + @Autowired + private TumsApi tumsApi; + + @GetMapping(value = "/login") + public Result login() { + tumsApi.login(); + tumsApi.logout(); + return Result.OK(); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsApi.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsApi.java new file mode 100644 index 0000000..9e01a15 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsApi.java @@ -0,0 +1,368 @@ +package com.nu.modules.tplink.utils; + +import com.tplink.ignite.libs.developersdk.api.TumsClient; +import com.tplink.ignite.libs.developersdk.vo.ResultVO; +import lombok.extern.slf4j.Slf4j; +import com.nu.modules.tplink.enums.ApiEnum; +import org.springframework.stereotype.Component; +import javax.annotation.Resource; + +@Component +@Slf4j +public class TumsApi { + + @Resource + TumsConfig tumsConfig; + + TumsClient tumsClient; + + /** + * 创建tumsClient + * @return + */ + public TumsClient createTumsClient(){ + if(this.tumsClient==null){ + login(); + } + return this.tumsClient; + } + + /** + * 销毁tumsClient + */ + public void destroyTumsClient(){ + if(this.tumsClient!=null){ + logout(); + } + } + + /** + * 登录 + * @return + */ + public void login(){ + + TumsClient tc = new TumsClient(tumsConfig.getUsername(), tumsConfig.getPassword(), tumsConfig.getUrl()); + ResultVO loginResult = tc.login(); + // 判断是否登录成功 + if (loginResult.getErrorCode() != 0) { + log.error("login fail, fail message:[{}]", loginResult.getMsg()); + tumsClient = null; + } else { + log.info("login success"); + String cookie = tc.getCookie(); + String rsaKey = tc.getRsaKey(); + log.info("cookie",cookie); + log.info("rsaKey",rsaKey); + tumsClient = tc; + } + + } + + /** + * 注销 + */ + public void logout(){ + ResultVO logoutResult = tumsClient.logout(); + if (logoutResult.getErrorCode() != 0) { + log.error("logout fail, errorCode:{}", logoutResult.getErrorCode()); + } else { + log.info("logout success"); + tumsClient = null; + } + } + + /** + * 设置当前项目 + * @param jsonRequest + * @return + */ + public String setCurrentProject(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.SET_CURRENT_PROJECT.getValue()); +// log.info("setCurrentProject:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取所有项目信息 + * @param jsonRequest + * @return + */ + public String getAllProjectInfo(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.GET_ALL_PROJECT_INFO.getValue()); +// log.info("getAllProjectInfo:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取区域列表 + * @param jsonRequest + * @return + */ + public String getRootRegions(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.GET_ROOT_REGIONS.getValue()); + log.info("getAllProjectInfo:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取设备列表 + * @param jsonRequest + * @return + */ + public String getDeviceList(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.GET_DEVICE_LIST.getValue()); +// log.info("getDeviceList:{}",jsonResponse); + return jsonResponse; + } + + /** + * 修改设备信息 + * @param jsonRequest + * @return + */ + public String modifyDeviceDetails(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.MODIFY_DEVICE_DETAILS.getValue()); +// log.info("modifyDeviceDetails:{}",jsonResponse); + return jsonResponse; + } + + /** + * 重启设备 + * @param jsonRequest + * @return + */ + public String rebootDeviceList(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.REBOOT_DEVICE_LIST.getValue()); +// log.info("rebootDeviceList:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取告警列表 + * @param jsonRequest + * @return + */ + public String getAlarmLog(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.QUERY_ALARM_LOG.getValue()); +// log.info("getAlarmLog:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取ipc能力集 + * @param jsonRequest + * @return + */ + public String getIpcCapability(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_IPC_CAPABILITY.getValue()); +// log.info("getIpcCapability:{}",jsonResponse); + return jsonResponse; + } + + /** + * 设备配置信息 + * @param jsonRequest + * @return + */ + public String passthrough(String jsonRequest){ + log.info("passthrough:request:{}",jsonRequest); + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_PASSTHROUGH.getValue()); + log.info("passthrough:response:{}",jsonResponse); + return jsonResponse; + } + + /** + * 添加预览通道 + * @param jsonRequest + * @return + */ + public String addPreviewChn(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_ADD_PREVIEW_CHN.getValue()); +// log.info("addPreviewChn:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取预览通道的url + * @param jsonRequest + * @return + */ + public String getPreviewUrl(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_PREVIEW_URL.getValue()); +// log.info("getPreviewUrl:{}",jsonResponse); + return jsonResponse; + } + + /** + * 搜索存在回放录像的日期 + * @param jsonRequest + * @return + */ + public String searchYear(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_SEARCH_YEAR.getValue()); +// log.info("searchYear:{}",jsonResponse); + return jsonResponse; + } + + /** + * 搜索当天的录像数据 + * @param jsonRequest + * @return + */ + public String searchVideo(String jsonRequest){ + log.info("searchVideo:request:{}",jsonRequest); + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_SEARCH_VIDEO.getValue()); + log.info("searchVideo:response:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取指定监控点的存储设备列表 + * @param jsonRequest + * @return + */ + public String getStoragesById(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_STORAGES_BY_ID.getValue()); + log.info("getStoragesById:{}",jsonResponse); + return jsonResponse; + } + + /** + * 添加回放通道V2 + * @param jsonRequest + * @return + */ + public String addPlaybackChn(String jsonRequest){ + this.createTumsClient(); + log.info("addPlaybackChn:request:{}",jsonRequest); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_ADD_PLAYBACK_CHN.getValue()); + log.info("addPlaybackChn:response:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取回放通道的url + * @param jsonRequest + * @return + */ + public String getPlaybackUrl(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_PLAYBACK_URL.getValue()); + log.info("getPlaybackUrl:{}",jsonResponse); + return jsonResponse; + } + + /** + * 删除回放通道 + * @param jsonRequest + * @return + */ + public String deletePlaybackChn(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_DELETE_PLAYBACK_CHN.getValue()); + log.info("deletePlaybackChn:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取nvmp设备双向通信URL + * @param jsonRequest + * @return + */ + public String getMultitransUrl(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_MULTITRANS_URL.getValue()); + log.info("getMultitransUrl:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取录像配置 + * @param jsonRequest + * @return + */ + public String getRecordCfgs(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_RECORD_CFGS.getValue()); + log.info("getRecordCfgs:{}",jsonResponse); + return jsonResponse; + } + + /** + * 设置录像计划 + * @param jsonRequest + * @return + */ + public String setRecordCfgs(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_SET_RECORD_CFGS.getValue()); + log.info("setRecordCfgs:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取批量操作录像计划进度 + * @param jsonRequest + * @return + */ + public String getBatchProgress(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_BATCH_PROGRESS.getValue()); + log.info("getBatchProgress:{}",jsonResponse); + return jsonResponse; + } + + /** + * 回放视频转mp4上传 + * @param jsonRequest + * @return + */ + public String uploadToServer(String jsonRequest){ + this.createTumsClient(); + log.info("uploadToServer:request:{}",jsonRequest); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_UPLOAD_TO_SERVER.getValue()); + log.info("uploadToServer:response:{}",jsonResponse); + return jsonResponse; + } + + /** + * 停止转存MP4上传任务 + * @param jsonRequest + * @return + */ + public String stopUploadToServer(String jsonRequest){ + this.createTumsClient(); + log.info("stopUploadToServer:request:{}",jsonRequest); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_STOP_UPLOAD_TO_SERVER.getValue()); + log.info("stopUploadToServer:response:{}",jsonResponse); + return jsonResponse; + } + + /** + * 获取转存MP4上传任务进度 + * @param jsonRequest + * @return + */ + public String getUploadToServerProcess(String jsonRequest){ + this.createTumsClient(); + String jsonResponse = tumsClient.request(jsonRequest, ApiEnum.IPC_GET_UPLOAD_TO_SERVER_PROCESS.getValue()); + log.info("getUploadToServerProcess:{}",jsonResponse); + return jsonResponse; + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsConfig.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsConfig.java new file mode 100644 index 0000000..9f84279 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/utils/TumsConfig.java @@ -0,0 +1,29 @@ +package com.nu.modules.tplink.utils; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Data +public class TumsConfig { + + @Value("${tplink.tums.url}") + private String url; //获取图门系统地址 + @Value("${tplink.tums.username}") + private String username; // 获取图门系统用户 + @Value("${tplink.tums.password}") + private String password; //获取图门系统密码 + + @Value("${tplink.ftp.ip}") + private String ftpIp; //回放视频转FTP上传IP + @Value("${tplink.ftp.port}") + private String ftpPort; //回放视频转FTP上传端口 + @Value("${tplink.ftp.username}") + private String ftpUsername; //回放视频转FTP上传用户 + @Value("${tplink.ftp.password}") + private String ftpPassword; //回放视频转FTP上传密码 + @Value("${tplink.ftp.uploadpath}") + private String ftpUploadpath; //回放视频转FTP上传路径 + +} diff --git a/nursing-unit-system/nu-system-start/src/main/resources/application-dev.yml b/nursing-unit-system/nu-system-start/src/main/resources/application-dev.yml index 8ccc4c6..9215931 100644 --- a/nursing-unit-system/nu-system-start/src/main/resources/application-dev.yml +++ b/nursing-unit-system/nu-system-start/src/main/resources/application-dev.yml @@ -337,3 +337,15 @@ justauth: type: default prefix: 'demo::' timeout: 1h +#tplink登录信息 +tplink: + tums: + url: https://121.36.88.64:8888 + username: admin + password: Bl20230518 + ftp: + ip: 1.92.152.160 + port: 21 + username: administrator + password: Root@123.. + uploadpath: / \ No newline at end of file