From b139d93aa805817bc560d3466e4f77a5f3f5d4d4 Mon Sep 17 00:00:00 2001 From: yangjun <1173114630@qq.com> Date: Thu, 18 Dec 2025 09:46:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../camera/service/ICameraInfoService.java | 23 ++++ .../service/impl/CameraInfoServiceImpl.java | 122 +++++++++++++++++- nursing-unit-services/nu-services-biz/pom.xml | 6 + .../care/order/job/CareSubDownTplinkJob.java | 73 +++++++++++ .../service/impl/CarePadServiceImpl.java | 9 -- 5 files changed, 223 insertions(+), 10 deletions(-) create mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/job/CareSubDownTplinkJob.java 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 index f911f300..d88894d7 100644 --- 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 @@ -57,10 +57,33 @@ public interface ICameraInfoService extends IService { Result> getPlaybackUrlList(CameraInfo cameraInfo); Result deletePlaybackChn(CameraInfo cameraInfo); Result> getMultitransUrl(CameraInfo cameraInfo) throws Exception; + + /** + * 功能:tplink下载服务视频 + * + * @param cameraInfo 参数如下
+ * deviceIndex设备序号
+ * parentId父设备id
+ * fileName文件名称
+ * videoType回放录像类型。1代表定时录像,2代表移动侦测录像,3代表全选
+ * ftpUploadpath视频上传位置
+ * startTime开始时间
+ * endTime结束时间
+ * @return + */ Result uploadToServer(CameraInfo cameraInfo); Result stopUploadToServer(CameraInfo cameraInfo); Result getUploadToServerProcess(CameraInfo cameraInfo); Result motionCtrl(CameraInfo cameraInfo); void baoxiu(CameraInfo cameraInfo); + + /** + * 下载tplink自定义录像 + * @param nuId 护理单元id + * @param startTime 下载开始时间 + * @param endTime 下载结束时间 + * @return + */ + String zdyTplinkVideo(String nuId, String startTime, String endTime); } 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 index a83ba4f2..41b58851 100644 --- 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 @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; @@ -13,6 +14,7 @@ import com.nu.modules.tplink.camera.model.CameraTreeModel; import com.nu.modules.tplink.common.entity.TumsConfig; import com.nu.modules.tplink.common.mapper.TumsConfigMapper; import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.util.DateUtils; import com.nu.modules.tplink.camera.entity.CameraInfo; @@ -2697,6 +2699,9 @@ public class CameraInfoServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("nu_id",nuId); + List tplinkList = baseMapper.selectList(queryWrapper); + if(tplinkList.size() == 0){ + return "error"; + } + String fileName = nuId +"-"+DateUtils.formatDate(new Date(),"yyyyMMddHHmmss"); + CameraInfo tplinkInfo = tplinkList.get(0); + CameraInfo cameraInfo = new CameraInfo(); + cameraInfo.setDeviceIndex(tplinkInfo.getDeviceIndex()); + cameraInfo.setParentId(tplinkInfo.getParentId()); + cameraInfo.setFileName(fileName); + cameraInfo.setVideoType("1"); + cameraInfo.setFtpUploadpath("/upload/2025/12/tplinkVideo"); + cameraInfo.setStartTime(startTime); + cameraInfo.setEndTime(endTime); + try { + uploadToServerResult(cameraInfo); + return "success"; + } catch (Exception e) { + e.printStackTrace(); + return "error"; + } + } + + /** + * 回放视频转mp4上传 + * @param cameraInfo + * @return + */ + public String uploadToServerResult(CameraInfo cameraInfo){ + String ftpUsername = ""; + String ftpPassword = ""; + String ftpUploadpath = ""; + String ftpIp = ""; + String ftpPort = ""; + log.info("uploadToServerResult - cameraInfo:{}:",cameraInfo); + CameraInfo entity = baseMapper.getByDeviceId(cameraInfo); + if(entity.getFtpIp()!=null&&!entity.getFtpIp().equals("")){ + ftpIp = entity.getFtpIp(); + ftpPort = entity.getFtpPort(); + ftpUsername = entity.getFtpUsername(); + ftpPassword = entity.getFtpPassword(); + ftpUploadpath = entity.getFtpUploadpath(); + }else{ + TumsConfig tumsConfig = tumsConfigMapper.getByCode(); + ftpIp = tumsConfig.getFtpIp(); + ftpPort = tumsConfig.getFtpPort(); + ftpUsername = tumsConfig.getFtpUsername(); + ftpPassword = tumsConfig.getFtpPassword(); + ftpUploadpath = tumsConfig.getFtpUploadpath(); + } + if(StringUtils.isNotBlank(cameraInfo.getFtpUploadpath())){ + ftpUploadpath = cameraInfo.getFtpUploadpath(); + } + 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("0").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(ftpUsername).append("\","); + sb.append("\"password\"").append(":").append("\"").append(ftpPassword).append("\","); + sb.append("\"path\"").append(":").append("\"").append(ftpUploadpath).append("\","); + sb.append("\"ftpIp\"").append(":").append("\"").append(ftpIp).append("\","); + sb.append("\"ftpPort\"").append(":").append(ftpPort); + sb.append("}"); + sb.append("}"); + String res = tumsApi.uploadToServer(sb.toString()); + JSONObject jsonObject = new JSONObject(res); + String errorCode = jsonObject.getStr("error_code"); + if(errorCode.equals("0")){ + JSONObject result = jsonObject.getJSONObject("result"); + String taskId = result.getStr("taskId"); + cameraInfo.setTaskId(taskId); + return ftpUploadpath+fileName; + }else{ + String errorMsg = ""; + try{ + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + errorMsg = errorVo.getErrorMsg(); + }catch (Exception e){ + errorMsg = errorCode; + } + log.info("uploadToServerResult:{}-{}",errorCode,errorMsg); + return "error"; + } + } + @DS("devops") public void devopsBaoxiu(CameraInfo cameraInfo){ baseMapper.updateById(cameraInfo); diff --git a/nursing-unit-services/nu-services-biz/pom.xml b/nursing-unit-services/nu-services-biz/pom.xml index 9bec2321..c8a695b9 100644 --- a/nursing-unit-services/nu-services-biz/pom.xml +++ b/nursing-unit-services/nu-services-biz/pom.xml @@ -61,6 +61,12 @@ 2.0.0 compile + + com.nursingunit.boot + nu-iot-biz + 2.0.0 + compile + diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/job/CareSubDownTplinkJob.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/job/CareSubDownTplinkJob.java new file mode 100644 index 00000000..8c5d028b --- /dev/null +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/job/CareSubDownTplinkJob.java @@ -0,0 +1,73 @@ +package com.nu.modules.biz.care.order.job; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.nu.entity.CareOrdersSubEntity; +import com.nu.modules.biz.care.order.entity.CareOrdersSub; +import com.nu.modules.biz.care.order.service.ICareOrdersService; +import com.nu.modules.biz.care.order.service.ICareOrdersSubService; +import com.nu.modules.tplink.camera.service.ICameraInfoService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * 指令池批量生成工单 + */ +@Slf4j +public class CareSubDownTplinkJob implements Job { + + + @Autowired + private ICareOrdersSubService careOrdersSubService; + + @Autowired + private ICameraInfoService tplinkService; + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.error("OrdersJob:{}-{}", DateUtils.now(),"护理类指令池批量生成工单开始"); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.isNull("tplink_path"); + List careOrdersSubList = careOrdersSubService.list(queryWrapper); + for (CareOrdersSub careOrdersSubEntity : careOrdersSubList){ + try { + String serviceDuration = careOrdersSubEntity.getServiceDuration(); + if(!StringUtils.isBlank(serviceDuration)){ + Date beginTime = careOrdersSubEntity.getBeginTime(); + Date finishTime = careOrdersSubEntity.getFinishTime(); + long diffInMillis = Math.abs(finishTime.getTime() - beginTime.getTime()); + long diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diffInMillis); + long sj = Long.parseLong(serviceDuration); + if(diffMinutes>sj){ + finishTime = new Date(finishTime.getTime() + Math.abs(sj/2) * 60 * 1000); + } + String nuId = careOrdersSubEntity.getNuId(); + String startTime = DateUtils.formatDate(careOrdersSubEntity.getBeginTime(),"yyyy-MM-dd HH:mm:ss"); + String endTime = DateUtils.formatDate(finishTime,"yyyy-MM-dd HH:mm:ss"); + System.out.println("nuId:"+nuId); + System.out.println("startTime:"+startTime); + System.out.println("endTime:"+endTime); + String resultTplink = tplinkService.zdyTplinkVideo(nuId,startTime,endTime); + if(!StringUtils.equals("error",resultTplink)){ + careOrdersSubEntity.setTplinkPath(resultTplink); + careOrdersSubService.updateById(careOrdersSubEntity); + }else{ + careOrdersSubEntity.setTplinkPath("error"); + careOrdersSubService.updateById(careOrdersSubEntity); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + } +} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/service/impl/CarePadServiceImpl.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/service/impl/CarePadServiceImpl.java index e84a8c53..081ee8a2 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/service/impl/CarePadServiceImpl.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/care/order/service/impl/CarePadServiceImpl.java @@ -7,21 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nu.entity.CareOrdersEntity; import com.nu.entity.CareOrdersSubEntity; -import com.nu.entity.CgdSxdEntity; import com.nu.modules.biz.care.order.entity.CareOrders; import com.nu.modules.biz.care.order.entity.CareOrdersSub; import com.nu.modules.biz.care.order.mapper.CareOrdersMapper; import com.nu.modules.biz.care.order.mapper.CareOrdersSubMapper; -import com.nu.modules.biz.care.order.service.ICareOrdersService; -import com.nu.modules.biz.care.order.service.ICareOrdersSubService; import com.nu.modules.care.api.ICarePadApi; -import com.nu.modules.config.sendorderrule.entity.SendOrderRule; -import com.nu.modules.config.sendorderrule.entity.SendOrderRuleSub; -import com.nu.modules.config.sendorderrule.service.ISendOrderRuleService; -import com.nu.modules.config.sendorderrule.service.ISendOrderRuleSubService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -29,7 +21,6 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.*; -import java.util.stream.Collectors; /** * @Description: 服务指令工单主表