From 8e56d6fc1d83935948dc382f7a323fba72c9de75 Mon Sep 17 00:00:00 2001 From: "1378012178@qq.com" <1378012178@qq.com> Date: Wed, 13 May 2026 10:18:05 +0800 Subject: [PATCH] =?UTF-8?q?tplink=E5=88=87=E7=89=87=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../directiveorder/api/ServiceOrderApi.java | 2 +- .../src/main/java/com/nu/dto/TplinkMQDto.java | 17 ++ .../java/com/nu/dto/TplinkUploadLogMQDto.java | 92 +++++++ .../com/nu/entity/DirectiveOrderEntity.java | 27 -- .../nu/entity/DirectiveOrderInfoEntity.java | 2 - .../nu/entity/EmployeesSalaryInfoEntity.java | 2 - .../com/nu/entity/TplinkUploadLogEntity.java | 93 +++++++ .../main/java/com/nu/utils/CosFileUtil.java | 220 ---------------- .../mapper/xml/BizEmployeesInfoMapper.xml | 4 +- .../salary/entity/EmployeesSalaryInfo.java | 4 - .../camerainfo/api/ICameraInfoApi.java | 2 + .../uploadlog/ITplinkUploadLogApi.java | 13 + .../camera/mapper/CameraInfoMapper.java | 3 + .../camera/mapper/xml/CameraInfoMapper.xml | 170 +++++++------ .../camera/service/ICameraInfoJobService.java | 9 - .../impl/CameraInfoJobServiceImpl.java | 237 ------------------ .../service/impl/CameraInfoServiceImpl.java | 5 + .../controller/TplinkUploadLogController.java | 180 +++++++++++++ .../uploadlog/entity/TplinkUploadLog.java | 141 +++++++++++ .../mapper/TplinkUploadLogMapper.java | 17 ++ .../mapper/xml/TplinkUploadLogMapper.xml | 5 + .../service/ITplinkUploadLogService.java | 14 ++ .../impl/TplinkUploadLogServiceImpl.java | 61 +++++ .../com/nu/modules/tplink/utils/TumsApi.java | 4 +- .../TplinkUploadMQExceptionHandler.java | 28 +++ .../listener/DynamicQueueNameProvider.java | 29 +++ .../listener/TplinkUploadMQListener.java | 40 +++ .../appraisal/entity/DirectiveAppraisal.java | 23 -- .../biz/order/entity/DirectiveOrder.java | 25 +- .../order/job/DirectiveOrderEndTplinkJob.java | 189 -------------- .../biz/order/job/TplinkUploadJob.java | 167 ++++++++++++ .../job/TplinkUploadProcessQueryJob.java | 108 ++++++++ .../order/mapper/DirectiveOrderMapper.java | 14 +- .../order/mapper/xml/DirectiveOrderMapper.xml | 59 +---- .../service/IDirectiveOrderJobService.java | 24 -- .../order/service/IDirectiveOrderService.java | 2 + .../impl/DirectiveOrderJobServiceImpl.java | 32 --- .../impl/DirectiveOrderPadServiceImpl.java | 4 + .../impl/DirectiveOrderServiceImpl.java | 16 ++ .../plan/care/job/DirectiveEndOrderJob.java | 29 +-- .../mapper/xml/CareDirectivePlanMapper.xml | 1 - 41 files changed, 1149 insertions(+), 965 deletions(-) create mode 100644 nursing-unit-common/src/main/java/com/nu/dto/TplinkMQDto.java create mode 100644 nursing-unit-common/src/main/java/com/nu/dto/TplinkUploadLogMQDto.java create mode 100644 nursing-unit-common/src/main/java/com/nu/entity/TplinkUploadLogEntity.java delete mode 100644 nursing-unit-common/src/main/java/com/nu/utils/CosFileUtil.java create mode 100644 nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/uploadlog/ITplinkUploadLogApi.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/controller/TplinkUploadLogController.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/entity/TplinkUploadLog.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/TplinkUploadLogMapper.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/xml/TplinkUploadLogMapper.xml create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/ITplinkUploadLogService.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/impl/TplinkUploadLogServiceImpl.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/exceptionhandler/TplinkUploadMQExceptionHandler.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/DynamicQueueNameProvider.java create mode 100644 nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/TplinkUploadMQListener.java delete mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/DirectiveOrderEndTplinkJob.java create mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadJob.java create mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadProcessQueryJob.java delete mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderJobService.java delete mode 100644 nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderJobServiceImpl.java diff --git a/nursing-unit-api/src/main/java/com/nu/modules/pad/directiveorder/api/ServiceOrderApi.java b/nursing-unit-api/src/main/java/com/nu/modules/pad/directiveorder/api/ServiceOrderApi.java index fcbd06bf..5ed2ed9d 100644 --- a/nursing-unit-api/src/main/java/com/nu/modules/pad/directiveorder/api/ServiceOrderApi.java +++ b/nursing-unit-api/src/main/java/com/nu/modules/pad/directiveorder/api/ServiceOrderApi.java @@ -50,7 +50,7 @@ public class ServiceOrderApi { @ApiOperation(value = "服务指令工单-开始服务", notes = "服务指令工单-开始服务") @AutoLog(value = "服务指令工单-开始服务", clientType = "app", operateType = 2) - @PostMapping(value = "/startOrder") + @PostMapping(value = "/startorder") public Result startOrder(@RequestBody DirectiveOrderEntity directiveOrderEntity) { Map result = directiveOrderApi.startOrder(directiveOrderEntity); return Result.OK(result); diff --git a/nursing-unit-common/src/main/java/com/nu/dto/TplinkMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/TplinkMQDto.java new file mode 100644 index 00000000..ecac753b --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/dto/TplinkMQDto.java @@ -0,0 +1,17 @@ +package com.nu.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description: tplink任务mq + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +@Data +public class TplinkMQDto implements Serializable { + private List taskList; +} diff --git a/nursing-unit-common/src/main/java/com/nu/dto/TplinkUploadLogMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/TplinkUploadLogMQDto.java new file mode 100644 index 00000000..1e7e597c --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/dto/TplinkUploadLogMQDto.java @@ -0,0 +1,92 @@ +package com.nu.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +@Data +public class TplinkUploadLogMQDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 设备标识 + */ + private String sn; + /** + * 开始时间 + */ + private Date startTime; + /** + * 结束时间 + */ + private Date endTime; + /** + * tplink网络地址 + */ + private String tplinkPath; + /** + * tplink视频大小 + */ + private String mp4Len; + /** + * tplink切片crc64 + */ + private String tplinkCrc64; + /** + * tplink监控视频上传任务ID + */ + private String tplinkTaskId; + /** + * tplink上传入参 + */ + private String tplinkParams; + /** + * tplink切片处理次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) + */ + private Integer tplinkDownCount; + /** + * tplink录像机切片任务状态 0处理中 1失败 2成功 + */ + private String tplinkTaskStatus; + /** + * tplink录像机切片任务失败原因 + */ + private String tplinkTaskErrorMsg; + /** + * 切片完成后通过ftp上传的状态 0上传中 1失败 2成功 + */ + private String uploadStatus; + /** + * 切片完成后通过ftp上传失败原因 + */ + private String uploadErrorMsg; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + /** + * 机构编码 + */ + private String orgCode; +} diff --git a/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderEntity.java b/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderEntity.java index 32bdc1d9..b5a89f5b 100644 --- a/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderEntity.java +++ b/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderEntity.java @@ -244,33 +244,6 @@ public class DirectiveOrderEntity implements Serializable { * 工单执行状态(0待执行、1服务中、2正常完成、3超时完成 4未执行) */ private String orderStatus; - /** - * tplink网络地址(多个,逗号分隔) - */ - private String tplinkPath; - /** - * tplink监控视频上传任务ID - */ - private String tplinkTaskId; - /** - * tplink监控视频上传进度(千分制) - */ - private String tplinkrocess; - /** - * tplink切片crc64 - */ - private String tplinkCrc64; - /** - * tplink切片下载次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) - */ - private String tplinkDownCount; - /** - * COS上传状态 null未上传过 1上传中 2成功 3失败 - */ - private String cosStatus; - private String tplinkLen; - private String cosLen; - private String tplinkParams; /** * 接单上限 diff --git a/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderInfoEntity.java b/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderInfoEntity.java index 339dd6c6..b98f0b14 100644 --- a/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderInfoEntity.java +++ b/nursing-unit-common/src/main/java/com/nu/entity/DirectiveOrderInfoEntity.java @@ -119,8 +119,6 @@ public class DirectiveOrderInfoEntity implements Serializable { private Date updateTime; /**是否删除 0未删除 1删除*/ private String delFlag; - /**tplink下载地址*/ - private String tplinkPath; /**手动拍照*/ private String manuallyPicPath; /**手动录制*/ diff --git a/nursing-unit-common/src/main/java/com/nu/entity/EmployeesSalaryInfoEntity.java b/nursing-unit-common/src/main/java/com/nu/entity/EmployeesSalaryInfoEntity.java index 6f29f2ca..cb39d64f 100644 --- a/nursing-unit-common/src/main/java/com/nu/entity/EmployeesSalaryInfoEntity.java +++ b/nursing-unit-common/src/main/java/com/nu/entity/EmployeesSalaryInfoEntity.java @@ -120,8 +120,6 @@ public class EmployeesSalaryInfoEntity implements Serializable { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; - /**tplink下载地址*/ - private String tplinkPath; /**手动拍照*/ private String manuallyPicPath; /**手动录制*/ diff --git a/nursing-unit-common/src/main/java/com/nu/entity/TplinkUploadLogEntity.java b/nursing-unit-common/src/main/java/com/nu/entity/TplinkUploadLogEntity.java new file mode 100644 index 00000000..5098dcf9 --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/entity/TplinkUploadLogEntity.java @@ -0,0 +1,93 @@ +package com.nu.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +@Data +public class TplinkUploadLogEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 设备标识 + */ + private String sn; + /** + * 开始时间 + */ + private Date startTime; + /** + * 结束时间 + */ + private Date endTime; + /** + * tplink网络地址 + */ + private String tplinkPath; + /** + * tplink视频大小 + */ + private String mp4Len; + /** + * tplink切片crc64 + */ + private String tplinkCrc64; + /** + * tplink监控视频上传任务ID + */ + private String tplinkTaskId; + /** + * tplink上传入参 + */ + private String tplinkParams; + /** + * tplink切片处理次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) + */ + private Integer tplinkDownCount; + /** + * tplink录像机切片任务状态 0处理中 1失败 2成功 + */ + private String tplinkTaskStatus; + /** + * tplink录像机切片任务失败原因 + */ + private String tplinkTaskErrorMsg; + /** + * 切片完成后通过ftp上传的状态 0上传中 1失败 2成功 + */ + private String uploadStatus; + /** + * 切片完成后通过ftp上传失败原因 + */ + private String uploadErrorMsg; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 机构编码 + */ + private String orgCode; +} diff --git a/nursing-unit-common/src/main/java/com/nu/utils/CosFileUtil.java b/nursing-unit-common/src/main/java/com/nu/utils/CosFileUtil.java deleted file mode 100644 index 9d161489..00000000 --- a/nursing-unit-common/src/main/java/com/nu/utils/CosFileUtil.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.nu.utils; - -import com.nu.entity.CosFileInfoEntity; -import com.qcloud.cos.COSClient; -import com.qcloud.cos.exception.CosClientException; -import com.qcloud.cos.exception.CosServiceException; -import com.qcloud.cos.model.ObjectMetadata; -import com.tencentcloudapi.cdn.v20180606.CdnClient; -import com.tencentcloudapi.cdn.v20180606.models.PushUrlsCacheRequest; -import com.tencentcloudapi.cdn.v20180606.models.PushUrlsCacheResponse; -import com.tencentcloudapi.common.Credential; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -/** - * COS文件操作工具类 - * 功能:查询文件上传状态、获取MD5、获取文件信息 - */ -@Component -public class CosFileUtil { - - private static final Logger log = LoggerFactory.getLogger(CosFileUtil.class); - - @Autowired - private COSClient cosClient; - - @Value("${tencent.cos.bucketName}") - private String bucketName; - - @Value("${tencent.cdn.secretId}") - private String cdnSecretId; - - @Value("${tencent.cdn.secretKey}") - private String cdnSecretKey; - - @Value("${tencent.cdn.domain}") - private String cdnDomain; - - /** - * 查询文件上传状态和MD5 - *

- * 返回值说明: - * - success: true=查询COS接口成功,false=查询失败(网络/权限/系统问题) - * - exists: true=文件已存在(已上传完成),false=文件不存在(未上传或上传中) - *

- * 使用示例: - * CosFileInfoEntity result = cosFileUtil.checkFileStatus("video/2024/01/15/10.mp4"); - * if (result.isSuccess() && result.isExists()) { - * // 文件已上传完成 - * System.out.println("上传成功,MD5:" + result.getMd5()); - * } else if (result.isSuccess() && !result.isExists()) { - * // 查询成功但文件不存在(还没传完或没开始传) - * System.out.println("文件未就绪"); - * } else { - * // 查询COS接口失败 - * System.out.println("查询失败:" + result.getErrorMsg()); - * } - * - * @param fileKey 文件路径(如:video/2024/01/15/10.mp4) - * @return 文件信息实体 - */ - public CosFileInfoEntity checkFileStatus(String fileKey) { - CosFileInfoEntity entity = new CosFileInfoEntity(); - entity.setFileKey(fileKey); - - try { - // 获取文件元数据(HEAD请求,不下载内容) - ObjectMetadata metadata = cosClient.getObjectMetadata(bucketName, fileKey); - - // 文件存在(已上传完成) - entity.setExists(true); - entity.setSuccess(true); - entity.setFileSize(metadata.getContentLength()); - entity.setLastModified(metadata.getLastModified()); - entity.setCrc64(metadata.getCrc64Ecma());//crc64 跟md5一样作用 - - log.info("查询文件成功:fileKey={}, exists=true, crc64={}, size={}", - fileKey, entity.getCrc64(), entity.getFileSize()); - - } catch (CosServiceException e) { - if (e.getStatusCode() == 404) { - // 文件不存在(还未上传完成) - entity.setExists(false); - entity.setSuccess(true); - log.info("文件不存在:fileKey={}", fileKey); - } else { - // 其他COS错误 - entity.setSuccess(false); - entity.setExists(false); - entity.setErrorMsg("COS错误码:" + e.getErrorCode() + ",错误信息:" + e.getErrorMessage()); - log.error("查询文件状态COS异常:fileKey={}, errorCode={}, errorMsg={}", - fileKey, e.getErrorCode(), e.getErrorMessage()); - } - } catch (CosClientException e) { - // 客户端异常(网络、超时等) - entity.setSuccess(false); - entity.setExists(false); - entity.setErrorMsg("客户端异常:" + e.getMessage()); - log.error("查询文件状态客户端异常:fileKey={}, msg={}", fileKey, e.getMessage()); - } catch (Exception e) { - entity.setSuccess(false); - entity.setExists(false); - entity.setErrorMsg("系统异常:" + e.getMessage()); - log.error("查询文件状态系统异常:fileKey={}", fileKey, e); - } - - return entity; - } - - /** - * 只获取Crc64 - * - * @param fileKey 文件路径 - * @return MD5值,文件不存在或获取失败返回null - */ - public String getCrc64(String fileKey) { - CosFileInfoEntity entity = checkFileStatus(fileKey); - if (entity.isSuccess() && entity.isExists() && entity.getCrc64() != null) { - return entity.getCrc64(); - } - return null; - } - - /** - * 判断文件是否已上传完成 - * - * @param fileKey 文件路径 - * @return true=已上传,false=未上传或查询失败 - */ - public boolean isUploadSuccess(String fileKey) { - CosFileInfoEntity entity = checkFileStatus(fileKey); - return entity.isSuccess() && entity.isExists(); - } - - /** - * 批量预热CDN - * - * @param fileKeys 文件路径列表 - */ - public void batchPreloadCdn(List fileKeys) { - if (fileKeys == null || fileKeys.isEmpty()) { - log.info("文件列表为空,跳过CDN预热"); - return; - } - - // 1. 转成完整URL - List urls = new ArrayList<>(); - for (String key : fileKeys) { - urls.add(cdnDomain + key); - } - - // 2. 分批,每批最多500条 - int batchSize = 500; - int totalBatches = (urls.size() + batchSize - 1) / batchSize; - - for (int i = 0; i < urls.size(); i += batchSize) { - int end = Math.min(i + batchSize, urls.size()); - List batch = urls.subList(i, end); - int batchNum = i / batchSize + 1; - - try { - // 3. 调用CDN预热API - Credential cred = new Credential(cdnSecretId, cdnSecretKey); - CdnClient client = new CdnClient(cred, ""); - - PushUrlsCacheRequest req = new PushUrlsCacheRequest(); - req.setUrls(batch.toArray(new String[0])); - req.setUrlEncode(true);//解决中文路径问题 - - PushUrlsCacheResponse resp = client.PushUrlsCache(req); - log.info("CDN预热批次 {}/{} 成功,数量={}, taskId={}", - batchNum, totalBatches, batch.size(), resp.getTaskId()); - - } catch (Exception e) { - log.error("CDN预热批次 {}/{} 失败,数量={}", batchNum, totalBatches, batch.size(), e); - } - - // 4. 批次间隔100ms(除了最后一批) - if (end < urls.size()) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.warn("CDN预热被中断"); - break; - } - } - } - } - - /** - * 删除文件(支持单个或多个) - * - * @param files 文件路径列表 - */ - public void deleteFiles(List files) { - if (files == null || files.isEmpty()) { - return; - } - - for (String fileKey : files) { - if (fileKey == null || fileKey.trim().isEmpty()) { - continue; - } - try { - cosClient.deleteObject(bucketName, fileKey); - log.info("文件删除成功:{}", fileKey); - } catch (Exception e) { - log.error("文件删除失败:{}", fileKey, e); - } - } - } -} diff --git a/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/employeesInfo/mapper/xml/BizEmployeesInfoMapper.xml b/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/employeesInfo/mapper/xml/BizEmployeesInfoMapper.xml index 90fdcef6..b475af76 100644 --- a/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/employeesInfo/mapper/xml/BizEmployeesInfoMapper.xml +++ b/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/employeesInfo/mapper/xml/BizEmployeesInfoMapper.xml @@ -8,7 +8,9 @@ diff --git a/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/salary/entity/EmployeesSalaryInfo.java b/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/salary/entity/EmployeesSalaryInfo.java index 20671665..f1f7f27f 100644 --- a/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/salary/entity/EmployeesSalaryInfo.java +++ b/nursing-unit-employee/nu-employee-biz/src/main/java/com/nu/modules/salary/entity/EmployeesSalaryInfo.java @@ -215,10 +215,6 @@ public class EmployeesSalaryInfo implements Serializable { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新日期") private java.util.Date updateTime; - /**tplink下载地址*/ - @Excel(name = "tplink下载地址", width = 15) - @ApiModelProperty(value = "tplink下载地址") - private java.lang.String tplinkPath; /**手动拍照*/ @Excel(name = "手动拍照", width = 15) @ApiModelProperty(value = "手动拍照") diff --git a/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/camerainfo/api/ICameraInfoApi.java b/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/camerainfo/api/ICameraInfoApi.java index e49d9a06..92876e50 100644 --- a/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/camerainfo/api/ICameraInfoApi.java +++ b/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/camerainfo/api/ICameraInfoApi.java @@ -9,4 +9,6 @@ import java.util.List; public interface ICameraInfoApi { public List getCameraInfoList(CameraInfoEntity cameraInfoEntity); + + CameraInfoEntity getSnByNuID(String nuId); } diff --git a/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/uploadlog/ITplinkUploadLogApi.java b/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/uploadlog/ITplinkUploadLogApi.java new file mode 100644 index 00000000..99dd0e38 --- /dev/null +++ b/nursing-unit-iot/nu-iot-api/nu-iot-local-api/src/main/java/com/nu/modules/uploadlog/ITplinkUploadLogApi.java @@ -0,0 +1,13 @@ +package com.nu.modules.uploadlog; + +import com.nu.entity.TplinkUploadLogEntity; + +import java.util.List; + +public interface ITplinkUploadLogApi { + int saveData(TplinkUploadLogEntity tplinkUploadLogEntity); + + List queryProcessingTask(); + + int updateDataById(TplinkUploadLogEntity task); +} 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 index 59d9c49b..5a3a8da5 100644 --- 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 @@ -2,6 +2,7 @@ package com.nu.modules.tplink.camera.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nu.entity.CameraInfoEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.nu.modules.tplink.camera.entity.CameraInfo; @@ -24,4 +25,6 @@ public interface CameraInfoMapper extends BaseMapper { CameraInfo getByDeviceId(CameraInfo cameraInfo); void updateDeviceStatusByDevId(CameraInfo cameraInfo); IPage previewList(Page page, @Param("params") CameraInfo cameraInfo); + + CameraInfoEntity getSnByNuID(@Param("nuId") String nuId); } 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 index 6607893a..6cea4a0b 100644 --- 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 @@ -2,7 +2,8 @@ - select a.id, a.device_index as deviceIndex, device_name as deviceName, @@ -54,7 +55,8 @@ - select a.id, a.device_index as deviceIndex, device_name as deviceName, @@ -89,31 +91,32 @@ - select a.id, - a.device_index as deviceIndex, - b.device_name as deviceName, - b.device_type as deviceType, - a.device_status as deviceStatus, - b.device_model as deviceModel, - a.ip as ip, - a.mac as mac, - a.region_id as regionId, - a.region_name as regionName, - a.parent_id as parentId, - a.parent_device_name as parentDeviceName, - a.project_id as projectId, - a.project_name as projectName, - a.firmware_ver as firmwareVer, - a.hardware_ver as hardwareVer, - a.manager_auth_type as managerAuthType, - a.msg_auth_type as msgAuthType, - a.sip_code as sipCode, - a.location_name as locationName, - a.system_type as systemType, - a.protocol as protocol, - b.nu_id as nuId, - a.channel + a.device_index as deviceIndex, + b.device_name as deviceName, + b.device_type as deviceType, + a.device_status as deviceStatus, + b.device_model as deviceModel, + a.ip as ip, + a.mac as mac, + a.region_id as regionId, + a.region_name as regionName, + a.parent_id as parentId, + a.parent_device_name as parentDeviceName, + a.project_id as projectId, + a.project_name as projectName, + a.firmware_ver as firmwareVer, + a.hardware_ver as hardwareVer, + a.manager_auth_type as managerAuthType, + a.msg_auth_type as msgAuthType, + a.sip_code as sipCode, + a.location_name as locationName, + a.system_type as systemType, + a.protocol as protocol, + b.nu_id as nuId, + a.channel from nu_iot_tplink_camera a inner join nu_iot_device_preview b on a.mac = b.sn where b.device_status != '损坏' @@ -122,29 +125,30 @@ - select a.id, - device_index as deviceIndex, - device_name as deviceName, - device_type as deviceType, - device_status as deviceStatus, - device_model as deviceModel, - ip as ip, - mac as mac, - region_id as regionId, - region_name as regionName, - parent_id as parentId, + device_index as deviceIndex, + device_name as deviceName, + device_type as deviceType, + device_status as deviceStatus, + device_model as deviceModel, + ip as ip, + mac as mac, + region_id as regionId, + region_name as regionName, + parent_id as parentId, parent_device_name as parentDeviceName, - project_id as projectId, - project_name as projectName, - firmware_ver as firmwareVer, - hardware_ver as hardwareVer, - manager_auth_type as managerAuthType, - msg_auth_type as msgAuthType, - sip_code as sipCode, - location_name as locationName, - system_type as systemType, - protocol as protocol, + project_id as projectId, + project_name as projectName, + firmware_ver as firmwareVer, + hardware_ver as hardwareVer, + manager_auth_type as managerAuthType, + msg_auth_type as msgAuthType, + sip_code as sipCode, + location_name as locationName, + system_type as systemType, + protocol as protocol, a.channel from nu_iot_tplink_camera a where device_index = #{deviceIndex} @@ -159,43 +163,44 @@ where device_index = #{deviceIndex} - select - a.id, - a.nu_id, - c.nu_name, - a.device_name, - a.device_type, - a.device_model, - a.factory, - a.sn, - a.create_time, - a.update_time, - a.remarks, - t.online_status as deviceStatus, - t.device_index + a.id, + a.nu_id, + c.nu_name, + a.device_name, + a.device_type, + a.device_model, + a.factory, + a.sn, + a.create_time, + a.update_time, + a.remarks, + t.online_status as deviceStatus, + t.device_index from nu_iot_device_preview a left join nu_base_info c on a.nu_id = c.nu_id inner join ( - select mac as sn, - ( case device_status when '0' then '离线' when '1' then '在线' end ) as online_status, - device_index - from nu_iot_tplink_camera - union all - select sn, - ( case relay_state when '0' then '离线' else '在线' end ) as online_status, - '' as device_index - from nu_iot_ds_electricity_meter - union all - select cid as sn, - ( case relay_state when '0' then '离线' else '在线' end ) as online_status, - '' as device_index - from nu_iot_tq_water_meter - union all - select sn, - ( case status when '0' then '在线' else '离线' end ) as online_status, - '' as device_index - from nu_iot_yiweilian_humid_device + select mac as sn, + ( case device_status when '0' then '离线' when '1' then '在线' end ) as online_status, + device_index + from nu_iot_tplink_camera + union all + select sn, + ( case relay_state when '0' then '离线' else '在线' end ) as online_status, + '' as device_index + from nu_iot_ds_electricity_meter + union all + select cid as sn, + ( case relay_state when '0' then '离线' else '在线' end ) as online_status, + '' as device_index + from nu_iot_tq_water_meter + union all + select sn, + ( case status when '0' then '在线' else '离线' end ) as online_status, + '' as device_index + from nu_iot_yiweilian_humid_device ) t on a.sn = t.sn where a.sn is not null and ifnull(a.device_status,'') != '损坏' @@ -213,6 +218,11 @@ order by a.device_type,a.device_model,a.sn + diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoJobService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoJobService.java index a9bf195b..2172b17b 100644 --- a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoJobService.java +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/ICameraInfoJobService.java @@ -22,13 +22,4 @@ public interface ICameraInfoJobService extends IService { Map getUploadToServerProcess(String taskId); - Map getUploadToServerProcessAsync(String taskId); - - /** - * 下载tplink自定义录像 - * - * @return - */ - Map zdyTplinkVideo(DirectiveOrderEntity orderEntity, String orgCode); - } diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoJobServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoJobServiceImpl.java index 15cd8e01..5f8bad23 100644 --- a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoJobServiceImpl.java +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/camera/service/impl/CameraInfoJobServiceImpl.java @@ -1,32 +1,18 @@ package com.nu.modules.tplink.camera.service.impl; -import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Maps; -import com.nu.entity.DirectiveOrderEntity; import com.nu.modules.tplink.camera.entity.CameraInfo; import com.nu.modules.tplink.camera.mapper.CameraInfoMapper; import com.nu.modules.tplink.camera.service.ICameraInfoJobService; import com.nu.modules.tplink.common.entity.ErrorCode; -import com.nu.modules.tplink.common.entity.TumsConfig; -import com.nu.modules.tplink.common.mapper.TumsConfigMapper; import com.nu.modules.tplink.common.service.IErrorCodeService; import com.nu.modules.tplink.utils.TumsApi; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.jeecg.common.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import java.io.File; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; import java.util.Map; /** @@ -43,12 +29,6 @@ public class CameraInfoJobServiceImpl extends ServiceImpl getUploadToServerProcessAsync(String taskId) { - Map resultMap = Maps.newHashMap(); - StringBuffer sb = new StringBuffer(); - sb.append("{"); - sb.append("\"taskId\"").append(":").append("\"").append(taskId).append("\""); - sb.append("}"); - String res = tumsApi.getUploadToServerProcess(sb.toString()); - JSONObject jsonObject = new JSONObject(res); - String errorCode = jsonObject.getStr("error_code"); - if (errorCode.equals("0")) { - JSONObject result = jsonObject.getJSONObject("result"); - String process = result.getStr("process"); - resultMap.put("result", "success"); - resultMap.put("process", process); - resultMap.put("url", result.getStr("url")); - return resultMap; - } else { - String errMsg = jsonObject.getStr("msg"); - if (errMsg == null || errMsg.equals("")) { - try { - ErrorCode errorVo = errorCodeService.getByCode(errorCode); - errMsg = errorVo.getErrorMsg(); - } catch (Exception e) { - errMsg = errorCode; - } - } - log.info("getUploadToServerProcess:{}-{}", errorCode, errMsg); - resultMap.put("result", "error"); - resultMap.put("errorCode", errorCode); - resultMap.put("errMsg", errMsg); - return resultMap; - } - } - - /** - * 下载tplink自定义录像 - * - * @return - */ - @Override - public Map zdyTplinkVideo(DirectiveOrderEntity orderEntity, String orgCode) { - String nuId = orderEntity.getNuId(); - String startTime = DateUtils.formatDate(orderEntity.getEmpStartTime(), "yyyy-MM-dd HH:mm:ss"); - String endTime = DateUtils.formatDate(orderEntity.getEmpEndTime(), "yyyy-MM-dd HH:mm:ss"); - - Map result = Maps.newHashMap(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("nu_id", nuId); - List tplinkList = baseMapper.selectList(queryWrapper); - if (tplinkList.size() == 0) { - result.put("result", "error"); - return result; - } - String fileName = nuId + "-" + DateUtils.formatDate(new Date(), "yyyyMMddHHmmss" + "-" + orderEntity.getId()); - String year = DateUtils.formatDate(new Date(), "yyyy"); - String month = DateUtils.formatDate(new Date(), "MM"); - String day = DateUtils.formatDate(new Date(), "dd"); - 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("/tplinkVideo/fwzl" + "/" + orgCode - + "/" + year + "/" + month + "/" + day - + "/" + orderEntity.getInstructionName() + "/" + orderEntity.getCategoryName() - + "/" + orderEntity.getTypeName() + "/" + orderEntity.getDirectiveName()); - cameraInfo.setStartTime(startTime); - cameraInfo.setEndTime(endTime); - try { - result = uploadToServerResult(cameraInfo); -// result.put("") - return result; - } catch (Exception e) { - e.printStackTrace(); - result.put("result", "error"); - return result; - } - } - - /** - * 回放视频转mp4上传 - * - * @param cameraInfo - * @return - */ - public Map uploadToServerResult(CameraInfo cameraInfo) throws ParseException { - 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(); - } - //文件夹不存在就创建 上传到COS不需要管这个问题了 - mkdirsFolder(ftpUploadpath); - 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("\","); - } - // 使用 SimpleDateFormat 解析 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = sdf.parse(cameraInfo.getStartTime()); - Date date2 = sdf.parse(cameraInfo.getEndTime()); - long startTime = date.getTime() / 1000 - 1; - long endTime = date2.getTime() / 1000 + 1; -// long startTime = 1765993096; -// long endTime = 1765993156; - sb.append("\"startTime\"").append(":").append(startTime).append(","); - sb.append("\"endTime\"").append(":").append(endTime).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("}"); - System.out.println("------------------" + sb.toString()); - String res = tumsApi.uploadToServer(sb.toString()); - JSONObject jsonObject = new JSONObject(res); - String errorCode = jsonObject.getStr("error_code"); - Map resultMap = Maps.newHashMap(); - resultMap.put("tplinkParams", sb.toString()); - if (errorCode.equals("0")) { - JSONObject result = jsonObject.getJSONObject("result"); - String taskId = result.getStr("taskId"); - cameraInfo.setTaskId(taskId); -// getUploadToServerProcess(cameraInfo); - resultMap.put("result", "success"); - resultMap.put("taskId", taskId); - resultMap.put("fileName", ftpUploadpath + "/" + fileName + ".mp4"); - return resultMap; - } else { - String errorMsg = ""; - try { - ErrorCode errorVo = errorCodeService.getByCode(errorCode); - errorMsg = errorVo.getErrorMsg(); - } catch (Exception e) { - errorMsg = errorCode; - } - log.info("uploadToServerResult:{}-{}", errorCode, errorMsg); - resultMap.put("result", "error"); - resultMap.put("errorCode", errorCode); - resultMap.put("errorMsg", errorMsg); - return resultMap; - } - } - - public String mkdirsFolder(String folderPath) { - // 创建File对象 - File folder = new File(folderPath); - String ctxPath = uploadpath; - String fileName = null; - File file = new File(ctxPath + File.separator + File.separator); - if (!file.exists()) { - file.mkdirs();// 创建文件根目录 - } // 判断文件夹是否存在 - if (!folder.exists()) { - System.out.println("文件夹不存在,开始创建..."); - - // 创建文件夹(包括所有不存在的父文件夹) - boolean created = folder.mkdirs(); - - if (created) { - System.out.println("文件夹创建成功:" + folderPath); - } else { - System.out.println("文件夹创建失败:" + folderPath); - } - } else { - System.out.println("文件夹已存在:" + folderPath); - - // 还可以判断是否是文件夹而不是文件 - if (folder.isDirectory()) { - System.out.println("这是一个文件夹"); - } else { - System.out.println("这不是一个文件夹,而是文件"); - } - } - return "success"; - } - - } 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 98b4ed29..ee5791b7 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 @@ -439,6 +439,11 @@ public class CameraInfoServiceImpl extends ServiceImpl previewList(Page page, CameraInfo cameraInfo) { return baseMapper.previewList(page, cameraInfo); diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/controller/TplinkUploadLogController.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/controller/TplinkUploadLogController.java new file mode 100644 index 00000000..dc8f3098 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/controller/TplinkUploadLogController.java @@ -0,0 +1,180 @@ +package com.nu.modules.tplink.uploadlog.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.nu.modules.tplink.uploadlog.entity.TplinkUploadLog; +import com.nu.modules.tplink.uploadlog.service.ITplinkUploadLogService; + +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 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: 2026-05-09 + * @Version: V1.0 + */ +@Api(tags="tplink切片上传日志") +@RestController +@RequestMapping("/tplink/uploadlog/tplinkUploadLog") +@Slf4j +public class TplinkUploadLogController extends JeecgController { + @Autowired + private ITplinkUploadLogService tplinkUploadLogService; + + /** + * 分页列表查询 + * + * @param tplinkUploadLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "tplink切片上传日志-分页列表查询") + @ApiOperation(value="tplink切片上传日志-分页列表查询", notes="tplink切片上传日志-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(TplinkUploadLog tplinkUploadLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(tplinkUploadLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = tplinkUploadLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param tplinkUploadLog + * @return + */ + @AutoLog(value = "tplink切片上传日志-添加") + @ApiOperation(value="tplink切片上传日志-添加", notes="tplink切片上传日志-添加") + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody TplinkUploadLog tplinkUploadLog) { + tplinkUploadLogService.save(tplinkUploadLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param tplinkUploadLog + * @return + */ + @AutoLog(value = "tplink切片上传日志-编辑") + @ApiOperation(value="tplink切片上传日志-编辑", notes="tplink切片上传日志-编辑") + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody TplinkUploadLog tplinkUploadLog) { + tplinkUploadLogService.updateById(tplinkUploadLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "tplink切片上传日志-通过id删除") + @ApiOperation(value="tplink切片上传日志-通过id删除", notes="tplink切片上传日志-通过id删除") + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + tplinkUploadLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "tplink切片上传日志-批量删除") + @ApiOperation(value="tplink切片上传日志-批量删除", notes="tplink切片上传日志-批量删除") + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.tplinkUploadLogService.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) { + TplinkUploadLog tplinkUploadLog = tplinkUploadLogService.getById(id); + if(tplinkUploadLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(tplinkUploadLog); + } + + /** + * 导出excel + * + * @param request + * @param tplinkUploadLog + */ + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, TplinkUploadLog tplinkUploadLog) { + return super.exportXls(request, tplinkUploadLog, TplinkUploadLog.class, "tplink切片上传日志"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("tplink.uploadlog:nu_iot_tplink_upload_log:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, TplinkUploadLog.class); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/entity/TplinkUploadLog.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/entity/TplinkUploadLog.java new file mode 100644 index 00000000..a79006e7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/entity/TplinkUploadLog.java @@ -0,0 +1,141 @@ +package com.nu.modules.tplink.uploadlog.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +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 org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.Column; +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +@Data +@TableName("nu_iot_tplink_upload_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "nu_iot_tplink_upload_log对象", description = "tplink切片上传日志") +public class TplinkUploadLog implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "ID") + private java.lang.String id; + /** + * 设备标识 + */ + @Excel(name = "设备标识", width = 15) + @ApiModelProperty(value = "设备标识") + private java.lang.String sn; + /** + * 开始时间 + */ + @Excel(name = "开始日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "开始日期") + private Date startTime; + /** + * 结束时间 + */ + @Excel(name = "结束日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "结束日期") + private Date endTime; + /** + * tplink网络地址 + */ + @Excel(name = "tplink网络地址", width = 15) + @ApiModelProperty(value = "tplink网络地址") + private java.lang.String tplinkPath; + /** + * tplink视频大小 + */ + @Excel(name = "tplink视频大小", width = 15) + @ApiModelProperty(value = "tplink视频大小") + private java.lang.String mp4Len; + /** + * tplink切片crc64 + */ + @Excel(name = "tplink切片crc64", width = 15) + @ApiModelProperty(value = "tplink切片crc64") + private java.lang.String tplinkCrc64; + /** + * tplink监控视频上传任务ID + */ + @Excel(name = "tplink监控视频上传任务ID", width = 15) + @ApiModelProperty(value = "tplink监控视频上传任务ID") + @TableField(updateStrategy = FieldStrategy.IGNORED) + @Column(nullable = true, updatable = true) + private java.lang.String tplinkTaskId; + /** + * tplink上传入参 + */ + @Excel(name = "tplink上传入参", width = 15) + @ApiModelProperty(value = "tplink上传入参") + private java.lang.String tplinkParams; + /** + * tplink切片下载次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) + */ + @Excel(name = "tplink切片处理次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败)", width = 15) + @ApiModelProperty(value = "tplink切片处理次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败)") + private java.lang.Integer tplinkDownCount; + /** + * tplink录像机切片任务状态 0处理中 1失败 2成功 + */ + @Excel(name = "tplink录像机切片任务状态 0处理中 1失败 2成功", width = 15) + @ApiModelProperty(value = "tplink录像机切片任务状态 0处理中 1失败 2成功") + private java.lang.String tplinkTaskStatus; + /** + * tplink录像机切片任务失败原因 + */ + @Excel(name = "tplink录像机切片任务失败原因", width = 15) + @ApiModelProperty(value = "tplink录像机切片任务失败原因") + private java.lang.String tplinkTaskErrorMsg; + /** + * 切片完成后通过ftp上传的状态 0上传中 1失败 2成功 + */ + @Excel(name = "切片完成后通过ftp上传的状态 0上传中 1失败 2成功", width = 15) + @ApiModelProperty(value = "切片完成后通过ftp上传的状态 0上传中 1失败 2成功") + private java.lang.String uploadStatus; + /** + * 切片完成后通过ftp上传失败原因 + */ + @Excel(name = "切片完成后通过ftp上传失败原因", width = 15) + @ApiModelProperty(value = "切片完成后通过ftp上传失败原因") + private java.lang.String uploadErrorMsg; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /** + * 机构编码 + */ + @Excel(name = "机构编码", width = 15) + @ApiModelProperty(value = "机构编码") + private String orgCode; +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/TplinkUploadLogMapper.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/TplinkUploadLogMapper.java new file mode 100644 index 00000000..5f3d0d3b --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/TplinkUploadLogMapper.java @@ -0,0 +1,17 @@ +package com.nu.modules.tplink.uploadlog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.nu.modules.tplink.uploadlog.entity.TplinkUploadLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +public interface TplinkUploadLogMapper extends BaseMapper { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/xml/TplinkUploadLogMapper.xml b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/xml/TplinkUploadLogMapper.xml new file mode 100644 index 00000000..afbc64d7 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/mapper/xml/TplinkUploadLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/ITplinkUploadLogService.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/ITplinkUploadLogService.java new file mode 100644 index 00000000..3ba5fc6c --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/ITplinkUploadLogService.java @@ -0,0 +1,14 @@ +package com.nu.modules.tplink.uploadlog.service; + +import com.nu.modules.tplink.uploadlog.entity.TplinkUploadLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +public interface ITplinkUploadLogService extends IService { + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/impl/TplinkUploadLogServiceImpl.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/impl/TplinkUploadLogServiceImpl.java new file mode 100644 index 00000000..3e34af57 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/modules/tplink/uploadlog/service/impl/TplinkUploadLogServiceImpl.java @@ -0,0 +1,61 @@ +package com.nu.modules.tplink.uploadlog.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.nu.entity.TplinkUploadLogEntity; +import com.nu.modules.sysconfig.ISysConfigApi; +import com.nu.modules.tplink.uploadlog.entity.TplinkUploadLog; +import com.nu.modules.tplink.uploadlog.mapper.TplinkUploadLogMapper; +import com.nu.modules.tplink.uploadlog.service.ITplinkUploadLogService; +import com.nu.modules.uploadlog.ITplinkUploadLogApi; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.List; + +/** + * @Description: tplink切片上传日志 + * @Author: jeecg-boot + * @Date: 2026-05-09 + * @Version: V1.0 + */ +@Service +public class TplinkUploadLogServiceImpl extends ServiceImpl implements ITplinkUploadLogService, ITplinkUploadLogApi { + + @Autowired + private ISysConfigApi sysConfigApi; + + @Override + public int saveData(TplinkUploadLogEntity tplinkUploadLogEntity) { + TplinkUploadLog saveData = new TplinkUploadLog(); + BeanUtils.copyProperties(tplinkUploadLogEntity, saveData); + return baseMapper.insert(saveData); + } + + @Override + public List queryProcessingTask() { + //如果未配置,最多重试3次 + Integer tplinkMaxRetries = 3; + JSONObject opeOpenUrl = sysConfigApi.getByKey("tplink_max_retries"); + try { + tplinkMaxRetries = opeOpenUrl.getInteger("configValue"); + } catch (Exception e) { + e.printStackTrace(); + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.isNotNull("tplink_task_id"); + return BeanUtil.copyToList(baseMapper.selectList(qw), TplinkUploadLogEntity.class); + } + + @Override + public int updateDataById(TplinkUploadLogEntity task) { + TplinkUploadLog updateData = new TplinkUploadLog(); + BeanUtils.copyProperties(task, updateData); + return baseMapper.updateById(updateData); + } +} 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 index 34cf3ba6..1f8433ab 100644 --- 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 @@ -40,9 +40,9 @@ public class TumsApi { * @return */ public TumsClient createTumsClient(){ -// if(this.tumsClient==null){ + if(this.tumsClient==null){ login(); -// } + } return this.tumsClient; } diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/exceptionhandler/TplinkUploadMQExceptionHandler.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/exceptionhandler/TplinkUploadMQExceptionHandler.java new file mode 100644 index 00000000..1208e1a5 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/exceptionhandler/TplinkUploadMQExceptionHandler.java @@ -0,0 +1,28 @@ +package com.nu.mq.tplinkupload.exceptionhandler; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.listener.api.RabbitListenerErrorHandler; +import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException; +import org.springframework.stereotype.Component; + +@Slf4j +@Component("tplinkUploadMQErrorHandler") +public class TplinkUploadMQExceptionHandler implements RabbitListenerErrorHandler { + + @Override + public Object handleError(Message message, org.springframework.messaging.Message message1, ListenerExecutionFailedException e) { + log.error("MQ消息处理失败 | 消息体: {} | 异常原因: {}", new String(message.getBody()), e.getCause().getMessage()); + + // 根据异常类型选择处理策略 +// if (isRetryable(e)) { +// // 可重试异常:抛出异常触发重试 +// throw e; +// } else { + // 不可恢复异常:拒绝消息且不重新入队 + throw new AmqpRejectAndDontRequeueException("消息处理失败且禁止重试", e); +// } + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/DynamicQueueNameProvider.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/DynamicQueueNameProvider.java new file mode 100644 index 00000000..ce643013 --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/DynamicQueueNameProvider.java @@ -0,0 +1,29 @@ +package com.nu.mq.tplinkupload.listener; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.jeecg.common.system.api.ISysBaseAPI; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component("tplinkUploadAsyncDQNP") +public class DynamicQueueNameProvider { + + @Autowired + private ISysBaseAPI sysBaseAPI; + + public String getTplinkUploadProcessQueueName() { + JSONObject deptInfo = sysBaseAPI.getDeptInfo(); + String orgCode = deptInfo.getString("code"); + if (StringUtils.isNotBlank(orgCode)) { + return orgCode + ".tplink.uploadtask.result"; + } else { + return ""; + } + } + + public String getTplinkUploadProcessKeyName() { + return getTplinkUploadProcessQueueName(); + } + +} diff --git a/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/TplinkUploadMQListener.java b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/TplinkUploadMQListener.java new file mode 100644 index 00000000..0a2fe94a --- /dev/null +++ b/nursing-unit-iot/nu-iot-biz/src/main/java/com/nu/mq/tplinkupload/listener/TplinkUploadMQListener.java @@ -0,0 +1,40 @@ +package com.nu.mq.tplinkupload.listener; + +import cn.hutool.core.bean.BeanUtil; +import com.nu.dto.IotHumidDeviceMQDto; +import com.nu.dto.TplinkMQDto; +import com.nu.modules.tplink.uploadlog.entity.TplinkUploadLog; +import com.nu.modules.tplink.uploadlog.service.ITplinkUploadLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + + +@Slf4j +@Component +public class TplinkUploadMQListener { + + @Autowired + private ITplinkUploadLogService tplinkUploadLogService; + + @RabbitListener( + bindings = @QueueBinding( + value = @Queue(name = "#{tplinkUploadAsyncDQNP.getTplinkUploadProcessQueueName()}"), + exchange = @Exchange(name = "hldy.mediaserv.tplink.uploadtask", type = ExchangeTypes.DIRECT), + key = "#{tplinkUploadAsyncDQNP.getTplinkUploadProcessKeyName()}" + ), + errorHandler = "tplinkUploadMQErrorHandler" + ) + public void handleMessage_unify(TplinkMQDto dto) { + List updateList = BeanUtil.copyToList(dto.getTaskList(), TplinkUploadLog.class); + tplinkUploadLogService.updateBatchById(updateList); + } + +} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/appraisal/entity/DirectiveAppraisal.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/appraisal/entity/DirectiveAppraisal.java index 8679d21a..7ed57737 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/appraisal/entity/DirectiveAppraisal.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/appraisal/entity/DirectiveAppraisal.java @@ -198,10 +198,6 @@ public class DirectiveAppraisal implements Serializable { * 是否多个 Y是(指令集) N否 */ private String izMulti; - /** - * tplink网络地址(多个,逗号分隔) - */ - private String tplinkPath; /** * 手动拍照网络地址(多个,逗号分隔) */ @@ -210,25 +206,6 @@ public class DirectiveAppraisal implements Serializable { * 手动录制网络地址(多个,逗号分隔) */ private String manuallyMp4Path; - /** - * tplink监控视频上传任务ID - */ - private String tplinkTaskId; - /** - * tplink切片crc64 - */ - private String tplinkCrc64; - /** - * tplink切片下载次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) - */ - private String tplinkDownCount; - /** - * COS上传状态 null未上传过 1上传中 2成功 3失败 - */ - private String cosStatus; - private String tplinkLen; - private String cosLen; - private String tplinkParams; /** * 指令类型ID diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/entity/DirectiveOrder.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/entity/DirectiveOrder.java index 4f7e9546..87418cc3 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/entity/DirectiveOrder.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/entity/DirectiveOrder.java @@ -195,10 +195,6 @@ public class DirectiveOrder implements Serializable { * 是否多个 Y是(指令集) N否 */ private String izMulti; - /** - * tplink网络地址(多个,逗号分隔) - */ - private String tplinkPath; /** * 手动拍照网络地址(多个,逗号分隔) */ @@ -208,26 +204,9 @@ public class DirectiveOrder implements Serializable { */ private String manuallyMp4Path; /** - * tplink监控视频上传任务ID + * 设备标识 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @Column(nullable = true, updatable = true) - private String tplinkTaskId; - /** - * tplink切片crc64 - */ - private String tplinkCrc64; - /** - * tplink切片下载次数(次数到达乏值 - 系统参数 且没有 order_end_time 代表彻底失败) - */ - private String tplinkDownCount; - /** - * COS上传状态 null未上传过 1上传中 2成功 3失败 - */ - private String cosStatus; - private String tplinkLen; - private String cosLen; - private String tplinkParams; + private String tplinkSn; /** * 指令类型ID diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/DirectiveOrderEndTplinkJob.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/DirectiveOrderEndTplinkJob.java deleted file mode 100644 index 78fd034b..00000000 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/DirectiveOrderEndTplinkJob.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.nu.modules.biz.order.job; - -import com.alibaba.fastjson.JSONObject; -import com.nu.entity.DirectiveOrderEntity; -import com.nu.modules.biz.order.entity.DirectiveOrder; -import com.nu.modules.biz.order.service.IDirectiveOrderJobService; -import com.nu.modules.sysconfig.ISysConfigApi; -import com.nu.modules.tplink.camera.service.ICameraInfoJobService; -import com.nu.utils.CosFileUtil; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.jeecg.common.system.api.ISysBaseAPI; -import org.jeecg.common.util.DateUtils; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * 指令工单结束后,tplink上传相关处理 - */ -@Slf4j -public class DirectiveOrderEndTplinkJob implements Job { - - - @Autowired - private IDirectiveOrderJobService directiveOrderService; - @Autowired - private ICameraInfoJobService tplinkService; - @Autowired - private ISysConfigApi sysConfigApi; - @Autowired - private ISysBaseAPI sysBaseAPI; - @Autowired - private CosFileUtil cosFileUtil; - - /** - * COS上传进度查询 + tplink上传任务 - *

- * tplink上传任务 需要依赖 COS进度查询结果 所以先执行查询任务 再执行 上传任务 - * - * @param jobExecutionContext - * @throws JobExecutionException - */ - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - log.info("OrdersJob:{}-{}", DateUtils.now(), "服务指令结束工单tplink处理定时任务"); - - JSONObject obj = sysConfigApi.getByKey("enabled_cdn"); - String cdnEnabledStr = obj.getString("configValue"); - boolean cdnEnabled = "Y".equals(cdnEnabledStr); - - //机构编码 - JSONObject deptInfo = sysBaseAPI.getDeptInfo(); - String orgCode = deptInfo.getString("code"); - - //任务一:根据taskId查询tplink进度 - { - List directiveOrderList = directiveOrderService.getUploadingTplink(); - directiveOrderList.forEach(order -> { - try { - Map result = tplinkService.getUploadToServerProcess(order.getTplinkTaskId()); - System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); - System.out.println(result.toString()); - System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); - - if("success".equals(result.get("result")) ){ - if("1000".equals(result.get("process"))){ - order.setTplinkParams("成功"); - order.setOrderEndTime(new Date()); - order.setTplinkTaskId(null); - directiveOrderService.updateById(order); - } - }else{ - order.setTplinkParams(result.toString()); - order.setOrderEndTime(new Date()); - order.setTplinkTaskId(null); - directiveOrderService.updateById(order); - } - } catch (Exception e) { - e.printStackTrace(); - } - }); - } -// //任务一:COS上传进度查询 -// { -// //已完成的视频 -// List finishPathList = Lists.newArrayList(); -// //查询上传中的进度 cos_status = 1的 -// List directiveOrderList = directiveOrderService.getUploadingTplink(); -// directiveOrderList.forEach(order -> { -// try { -// CosFileInfoEntity cosResult = cosFileUtil.checkFileStatus(order.getTplinkPath()); -// if (cosResult.isExists()) { -// //上传完了 -// order.setCosStatus("2");//上传成功 -// order.setOrderEndTime(new Date());//工单结束时间 -// order.setTplinkCrc64(cosResult.getCrc64());//视频切片crc64 -// order.setCosLen(cosResult.getFileSize() + ""); -// //记录需要进行CDN预热的文件 -// finishPathList.add(order.getTplinkPath()); -// } else if (cosResult.isSuccess()) { -// //传输中 -// order.setCosStatus("1");//上传中 -// } else { -// //失败了 -// order.setCosStatus("3");//上传失败 -// } -// //更新工单数据 -// directiveOrderService.updateById(order); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// }); -// //本轮所有文件都查询完结果之后 -// try { -// if (cdnEnabled && !CollectionUtils.isEmpty(finishPathList)) { -// //CDN预热 -// cosFileUtil.batchPreloadCdn(finishPathList); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - - - //任务二:处理tplink上传 - { - //如果未配置,最多重试3次 - Integer tplinkMaxRetries = 3; - JSONObject opeOpenUrl = sysConfigApi.getByKey("tplink_max_retries"); - try { - tplinkMaxRetries = opeOpenUrl.getInteger("configValue"); - } catch (Exception e) { - e.printStackTrace(); - } - - //获取需要处理的工单数据 员工已结束服务 但工单未结束 - List directiveOrderList = directiveOrderService.getNeedProcessTpLinkList(tplinkMaxRetries); - - for (DirectiveOrder directiveOrder : directiveOrderList) { - try { - String nuId = directiveOrder.getNuId(); - String startTime = DateUtils.formatDate(directiveOrder.getEmpStartTime(), "yyyy-MM-dd HH:mm:ss"); - String endTime = DateUtils.formatDate(directiveOrder.getEmpEndTime(), "yyyy-MM-dd HH:mm:ss"); - log.info("nuId:{}", nuId); - log.info("startTime:{}", startTime); - log.info("endTime:{}", endTime); - DirectiveOrderEntity orderEntity = new DirectiveOrderEntity(); - BeanUtils.copyProperties(directiveOrder, orderEntity); - Map resultTplink = tplinkService.zdyTplinkVideo(orderEntity, orgCode); - directiveOrder.setTplinkParams((String) resultTplink.get("tplinkParams")); - String tplinkDownCount = directiveOrder.getTplinkDownCount(); - //设置处理次数 - if (StringUtils.isBlank(tplinkDownCount)) { - directiveOrder.setTplinkDownCount("1"); - } else { - directiveOrder.setTplinkDownCount((Integer.parseInt(tplinkDownCount) + 1) + ""); - } - if (!StringUtils.equals("error", (String) resultTplink.get("result"))) { - //成功调用tplink API 开始上传tplink切片 至 目标服务器 - String taskId = (String) resultTplink.get("taskId"); - String fileName = (String) resultTplink.get("fileName"); - directiveOrder.setTplinkTaskId(taskId); - directiveOrder.setTplinkPath(fileName);//cos路径 - directiveOrder.setCosStatus("1");//上传中 - } else { - System.out.println("==============================================="); - System.out.println((String) resultTplink.get("errorCode")); - System.out.println((String) resultTplink.get("errorMsg")); - System.out.println("==============================================="); - } - directiveOrderService.updateById(directiveOrder); - - if (directiveOrderList.indexOf(directiveOrder) < directiveOrderList.size() - 1) { - Thread.sleep(10000); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - -} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadJob.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadJob.java new file mode 100644 index 00000000..b3ca1b42 --- /dev/null +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadJob.java @@ -0,0 +1,167 @@ +package com.nu.modules.biz.order.job; + +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import com.nu.entity.TplinkUploadLogEntity; +import com.nu.modules.biz.order.mapper.DirectiveOrderMapper; +import com.nu.modules.tplink.camera.entity.CameraInfo; +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.uploadlog.ITplinkUploadLogApi; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.system.api.ISysBaseAPI; +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.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.List; + +/** + * tplink切片上传定时任务 + */ +@Slf4j +public class TplinkUploadJob implements Job { + + @Autowired + private DirectiveOrderMapper directiveOrderMapper; + @Autowired + private ITplinkUploadLogApi tplinkUploadLogApi; + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + private TumsApi tumsApi; + @Autowired + private IErrorCodeService errorCodeService; + + /** + * 处理前一小时的切片并上传 + * + * @param jobExecutionContext + * @throws JobExecutionException + */ + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.info("tplink切片上传定时任务,执行时间:{}", DateUtils.now()); + //拿到前一小时的开始和结束时间 +// LocalDateTime lastHour = LocalDateTime.now().minusHours(1); + //todo 把这里改一下 + LocalDateTime lastHour = LocalDateTime.now().minusDays(2); + //开始时间 + ZonedDateTime startTimeZone = lastHour.withMinute(0).withSecond(0).withNano(0) + .atZone(ZoneId.of("Asia/Shanghai")); + Date startTime = Date.from(startTimeZone.toInstant()); + long startMillis = startTimeZone.toInstant().toEpochMilli(); + + //结束时间 + //todo 把这里改一下 + ZonedDateTime endTimeZone = lastHour.withMinute(1).withSecond(59).withNano(0) + .atZone(ZoneId.of("Asia/Shanghai")); + Date endTime = Date.from(endTimeZone.toInstant()); + long endMillis = endTimeZone.toInstant().toEpochMilli(); + + //获取机构信息 + JSONObject deptInfo = sysBaseAPI.getDeptInfo(); + String orgCode = deptInfo.getString("code"); + + //查询需要处理任务的摄像头 + List tplinkList = directiveOrderMapper.getTplinkInfo(); + + for (int i = 0; i < tplinkList.size(); i++) { + String id = IdUtil.simpleUUID(); + + CameraInfo cameraInfo = tplinkList.get(i); + TplinkUploadLogEntity tplinkUploadLogEntity = new TplinkUploadLogEntity(); + tplinkUploadLogEntity.setId(id); + tplinkUploadLogEntity.setOrgCode(orgCode); + tplinkUploadLogEntity.setSn(cameraInfo.getMac()); + tplinkUploadLogEntity.setStartTime(startTime); + tplinkUploadLogEntity.setEndTime(endTime); + tplinkUploadLogEntity.setTplinkDownCount(1); + + try { + String year = DateUtils.formatDate(new Date(), "yyyy"); + String month = DateUtils.formatDate(new Date(), "MM"); + String day = DateUtils.formatDate(new Date(), "dd"); + String fileName = orgCode + + "_" + DateUtils.formatDate(new Date(), "yyyyMMdd") + + "_" + (cameraInfo.getNuId() != null ? cameraInfo.getNuId() + "_" : "") + + cameraInfo.getMac() + "_" + DateUtils.formatDate(new Date(), "HHmmss"); + String deviceIndex = cameraInfo.getDeviceIndex(); + String parentId = cameraInfo.getParentId(); + String ftpIp = cameraInfo.getFtpIp(); + String ftpPort = cameraInfo.getFtpPort(); + String ftpUsername = cameraInfo.getFtpUsername(); + String ftpPassword = cameraInfo.getFtpPassword(); + String ftpUploadpath = "/" + orgCode + "/" + year + "/" + month + "/" + day + + "/" + (cameraInfo.getNuId() != null ? cameraInfo.getNuId() + "/" : "") + + cameraInfo.getMac(); + + StringBuffer sb = new StringBuffer(); + //拼接tplink需要的入参 + { + 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("1").append(","); + sb.append("\"storageType\"").append(":").append("0").append(","); + sb.append("\"fileName\"").append(":").append("\"").append(fileName).append("\","); + sb.append("\"startTime\"").append(":").append(startMillis / 1000).append(","); + sb.append("\"endTime\"").append(":").append(endMillis / 1000).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("}"); + System.out.println("------------------" + sb); + } + tplinkUploadLogEntity.setTplinkParams(sb.toString()); + //调用tplink上传api 并记录调用结果 + { + String res = tumsApi.uploadToServer(sb.toString()); + cn.hutool.json.JSONObject jsonObject = new cn.hutool.json.JSONObject(res); + String errorCode = jsonObject.getStr("error_code"); + if (errorCode.equals("0")) { + cn.hutool.json.JSONObject result = jsonObject.getJSONObject("result"); + tplinkUploadLogEntity.setTplinkTaskStatus("0"); + tplinkUploadLogEntity.setTplinkTaskId(result.getStr("taskId")); + tplinkUploadLogEntity.setTplinkPath(ftpUploadpath + "/" + fileName); + } else { + String errorMsg = ""; + try { + ErrorCode errorVo = errorCodeService.getByCode(errorCode); + errorMsg = errorVo.getErrorMsg(); + } catch (Exception e) { + errorMsg = errorCode; + } + tplinkUploadLogEntity.setTplinkTaskStatus("1"); + tplinkUploadLogEntity.setTplinkTaskErrorMsg("【第一次失败原因:调用tplink上传任务失败 - " + errorMsg + "】"); + } + } + + } catch (Exception e) { + e.printStackTrace(); + //记录一次上传失败 + tplinkUploadLogEntity.setTplinkTaskStatus("1"); + tplinkUploadLogEntity.setTplinkTaskErrorMsg("【第一次失败原因:上传定时任务执行代码逻辑报错 - " + e.getMessage() + "】"); + } + tplinkUploadLogApi.saveData(tplinkUploadLogEntity); + } + + } + +} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadProcessQueryJob.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadProcessQueryJob.java new file mode 100644 index 00000000..64224005 --- /dev/null +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/job/TplinkUploadProcessQueryJob.java @@ -0,0 +1,108 @@ +package com.nu.modules.biz.order.job; + +import cn.hutool.core.bean.BeanUtil; +import com.nu.dto.TplinkMQDto; +import com.nu.dto.TplinkUploadLogMQDto; +import com.nu.entity.TplinkUploadLogEntity; +import com.nu.modules.tplink.camera.service.ICameraInfoJobService; +import com.nu.modules.uploadlog.ITplinkUploadLogApi; +import com.nu.utils.RabbitMQUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang.StringUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; + +/** + * tplink上传任务进度查询 + */ +@Slf4j +public class TplinkUploadProcessQueryJob implements Job { + + @Autowired + private ICameraInfoJobService tplinkService; + @Autowired + private ITplinkUploadLogApi tplinkUploadLogApi; + @Autowired + private RabbitMQUtil rabbitMQUtil; + + /** + * tplink上传任务进度查询 + * + * @param jobExecutionContext + * @throws JobExecutionException + */ + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + List list = tplinkUploadLogApi.queryProcessingTask(); + //tplink已经处理完成的集合 + List finishList = Lists.newArrayList(); + + if (!CollectionUtils.isEmpty(list)) { + for (int i = 0; i < list.size(); i++) { + TplinkUploadLogEntity task = list.get(i); + + Map result = tplinkService.getUploadToServerProcess(task.getTplinkTaskId()); + System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + System.out.println(result.toString()); + System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); + + if ("success".equals(result.get("result"))) { + if ("1000".equals(result.get("process"))) { + String url_ = (String) result.get("url"); + try { + URL url = new URL(url_); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + int code = conn.getResponseCode(); + if (code == 200) { + long length = conn.getContentLengthLong(); + if (length != -1) { + task.setMp4Len(length + ""); + } + } + conn.disconnect(); + } catch (IOException e) { + log.info("tplink上传任务{}成功后,通过url获取文件大小失败,报错:{}", task.getTplinkTaskId(), e.getMessage()); + } + task.setTplinkTaskId(null); + task.setTplinkTaskStatus("2"); + tplinkUploadLogApi.updateDataById(task); + + //通知资源服务器中服务 查询资源文件上传状态 + finishList.add(task); + } + } else { + task.setTplinkTaskId(null); + task.setTplinkTaskStatus("1"); + if (StringUtils.isNotBlank(task.getTplinkTaskErrorMsg())) { + task.setTplinkTaskErrorMsg(task.getTplinkTaskErrorMsg() + "【第" + task.getTplinkDownCount() + "次失败原因:tplink任务查询返回失败错误码 - " + result.get("errMsg") + "】"); + } else { + task.setTplinkTaskErrorMsg("【第" + task.getTplinkDownCount() + "次失败原因:tplink任务查询返回失败错误码 - " + result.get("errMsg") + "】"); + } + tplinkUploadLogApi.updateDataById(task); + } + + } + } + + //向资源服务器发送任务 + if (!CollectionUtils.isEmpty(finishList)) { + TplinkMQDto mqDto = new TplinkMQDto(); + mqDto.setTaskList(BeanUtil.copyToList(finishList, TplinkUploadLogMQDto.class)); + rabbitMQUtil.sendToExchange("hldy.mediaserv.tplink", "hldy.mediaserv.tplink.uploadtask", mqDto); + } + } + +} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/DirectiveOrderMapper.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/DirectiveOrderMapper.java index 77a53c24..045ae2e9 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/DirectiveOrderMapper.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/DirectiveOrderMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nu.entity.CareDirectiveEntity; import com.nu.entity.DirectiveOrderEntity; import com.nu.modules.biz.order.entity.DirectiveOrder; +import com.nu.modules.tplink.camera.entity.CameraInfo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -32,18 +33,9 @@ public interface DirectiveOrderMapper extends BaseMapper { DirectiveOrderEntity queryOrderNeedBaseInfo(@Param("dto") DirectiveOrderEntity entity); - List getNeedProcessTpLinkList(@Param("tplinkMaxRetries") Integer tplinkMaxRetries); - - List getUploadingTplink(); - - List getTplinkProcessing(); - - int taskSuccess(@Param("dto") DirectiveOrder order); - - int taskFaild(@Param("tplinkTaskId") String tplinkTaskId); - - int updateEmpEndTimeByJob(); List queryOrderInfoList(@Param("dto") DirectiveOrderEntity queryWrapper); + + List getTplinkInfo(); } diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/xml/DirectiveOrderMapper.xml b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/xml/DirectiveOrderMapper.xml index c90a7f27..c7cfb86a 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/xml/DirectiveOrderMapper.xml +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/mapper/xml/DirectiveOrderMapper.xml @@ -96,33 +96,20 @@ - - - update nu_biz_directive_order - set tplink_task_id = null, - tplink_len = #{dto.tplinkLen} - where tplink_task_id = #{dto.tplinkTaskId} - - - update nu_biz_directive_order - set tplink_task_id = null, - cos_status = '3', - tplink_path = null - where tplink_task_id = #{tplinkTaskId} - UPDATE nu_biz_directive_order SET emp_end_time = DATE_FORMAT(emp_start_time, '%Y-%m-%d 23:59:59'), + order_end_time = DATE_FORMAT(emp_start_time, '%Y-%m-%d 23:59:59'), order_status = '3' WHERE emp_start_time IS NOT NULL AND emp_end_time IS NULL - AND DATE(emp_start_time) = CURDATE() + AND DATE (emp_start_time) = CURDATE() @@ -189,7 +176,7 @@ o.iz_timeout, o.opt_ids, o.opt_names, - mainStatus.item_text as optTypeName + mainStatus.item_text as optTypeName FROM nu_biz_directive_order o LEFT JOIN sys_dict dict ON dict.dict_code = 'directive_order_opt_type' LEFT JOIN sys_dict_item mainStatus @@ -294,12 +281,8 @@ t.update_time, t.del_flag, t.iz_multi, - t.tplink_path, t.manually_pic_path, t.manually_mp4_path, - t.tplink_task_id, - t.tplink_crc64, - t.tplink_down_count, CASE WHEN t.emp_start_time IS NULL THEN 'N' ELSE 'Y' END AS iz_start, CASE WHEN t.emp_end_time IS NULL THEN 'N' ELSE 'Y' END AS iz_finish, dire.preview_file, @@ -380,12 +363,8 @@ t.update_time, t.del_flag, t.iz_multi, - t.tplink_path, t.manually_pic_path, t.manually_mp4_path, - t.tplink_task_id, - t.tplink_crc64, - t.tplink_down_count, dire.preview_file, dire.service_content, dire.mp3_file, @@ -453,31 +432,6 @@ LEFT JOIN nu_biz_elder_info elder ON elder.id = base.elder_id WHERE base.nu_id = #{dto.nuId} - - - - + + diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderJobService.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderJobService.java deleted file mode 100644 index f7649f08..00000000 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderJobService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.nu.modules.biz.order.service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.IService; -import com.nu.modules.biz.order.entity.DirectiveOrder; -import org.apache.ibatis.annotations.Param; -import org.jeecg.common.api.vo.Result; - -import java.util.List; -import java.util.Map; - -/** - * @Description: 服务指令工单主表 - * @Author: caolei - * @Date: 2025-11-18 - * @Version: V1.0 - */ -public interface IDirectiveOrderJobService extends IService { - - List getNeedProcessTpLinkList(Integer tplinkMaxRetries); - - List getUploadingTplink(); - -} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderService.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderService.java index b3906506..dbe41cc8 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderService.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/IDirectiveOrderService.java @@ -17,4 +17,6 @@ public interface IDirectiveOrderService extends IService { String getEmployeeName(String employeeId); void updateEmpEndTimeByJob(); + + void upOrderSn(DirectiveOrder directiveOrder); } diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderJobServiceImpl.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderJobServiceImpl.java deleted file mode 100644 index 52780367..00000000 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderJobServiceImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.nu.modules.biz.order.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.nu.modules.biz.order.entity.DirectiveOrder; -import com.nu.modules.biz.order.mapper.DirectiveOrderMapper; -import com.nu.modules.biz.order.service.IDirectiveOrderJobService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @Description: 服务指令工单主表 - * @Author: caolei - * @Date: 2025-11-18 - * @Version: V1.0 - */ -@Service -@Slf4j -public class DirectiveOrderJobServiceImpl extends ServiceImpl implements IDirectiveOrderJobService { - - @Override - public List getNeedProcessTpLinkList(Integer tplinkMaxRetries) { - return baseMapper.getNeedProcessTpLinkList(tplinkMaxRetries); - } - - @Override - public List getUploadingTplink() { - return baseMapper.getUploadingTplink(); - } - -} diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderPadServiceImpl.java b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderPadServiceImpl.java index 9b20770c..a4addb19 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderPadServiceImpl.java +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/order/service/impl/DirectiveOrderPadServiceImpl.java @@ -249,6 +249,9 @@ public class DirectiveOrderPadServiceImpl extends ServiceImpl implements IDirectiveOrderService { + @Autowired + private ICameraInfoApi cameraInfoApi; /** * 获取员工姓名 @@ -40,4 +46,14 @@ public class DirectiveOrderServiceImpl extends ServiceImpl uw = new UpdateWrapper<>(); -// uw.apply("DATE(serv_start_time) = CURDATE()"); -// uw.isNotNull("emp_start_time"); -// uw.isNull("emp_end_time"); -// directiveOrderService.update(upData,uw); - - //条件是工单已开始未结束 且 员工开始时间是今天 存在问题: - // 1)任务设置在每天23:59:50 如果当天由于系统原因比如重启后才补发定时任务 则缺少了一天的定时任务 - // 2)如果员工在23:59:50~23:59:59 点击开始 则结束时间无法被定时任务执行到 - // 3)解决办法:条件只要已开始未结束(那以后就不能有让历史工单的结束时间需要保持空的需求了 - 定时会自动赋值 一旦出错这种数据因为没有日志就只能用数据库备份比对解决) directiveOrderService.updateEmpEndTimeByJob(); } diff --git a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/plan/care/mapper/xml/CareDirectivePlanMapper.xml b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/plan/care/mapper/xml/CareDirectivePlanMapper.xml index b288dd3a..b01015d4 100644 --- a/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/plan/care/mapper/xml/CareDirectivePlanMapper.xml +++ b/nursing-unit-services/nu-services-biz/src/main/java/com/nu/modules/biz/plan/care/mapper/xml/CareDirectivePlanMapper.xml @@ -112,7 +112,6 @@ -