Browse Source

add
新增阿里云回调信息

18339543638 5 months ago
parent
commit
f978806773

+ 3 - 1
tr-modules-api/tr-module-system-api/src/main/java/cn/tr/module/api/sys/storage/SysStorageApi.java

@@ -1,5 +1,7 @@
 package cn.tr.module.api.sys.storage;
 
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
+
 import java.util.Collection;
 import java.util.Map;
 
@@ -57,7 +59,7 @@ public interface SysStorageApi {
      * @param filename
      * @return
      */
-    String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception;
+    InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception;
 
     Map<String, Object> selectConfig();
 

+ 0 - 4
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/controller/AliOssController.java

@@ -4,7 +4,6 @@ import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.URLUtil;
 import cn.hutool.json.JSONUtil;
-import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.module.airway.dto.AliOSSInitiateMultipartUploadDTO;
 import cn.tr.module.airway.dto.OssCallbackDTO;
@@ -22,9 +21,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.security.KeyFactory;
 import java.security.PublicKey;
 import java.security.spec.X509EncodedKeySpec;

+ 3 - 0
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/po/BizDevicePO.java

@@ -57,4 +57,7 @@ public class BizDevicePO extends TenantPO {
     @ApiModelProperty(value = "备注", position = 9)
     private String remark;
 
+    @ApiModelProperty("影像数量")
+    private Integer count;
+
 }

+ 3 - 0
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/po/BizVideoPO.java

@@ -66,4 +66,7 @@ public class BizVideoPO extends TenantPO {
     private String uploadId;
 
     private String storagePathName;
+
+    @ApiModelProperty("封面图片")
+    private String coverImage;
 }

+ 2 - 0
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/repository/BizDeviceRepository.java

@@ -20,4 +20,6 @@ import java.util.List;
 @Mapper
 public interface BizDeviceRepository extends BaseMapper<BizDevicePO> {
     List<BizDeviceVO> stdSelectBizDeviceList(@Param("query") BizDeviceQueryDTO query);
+
+    void updateDeviceCount(@Param("deviceCode") String deviceCode);
 }

+ 1 - 0
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/service/impl/BizDeviceServiceImpl.java

@@ -134,6 +134,7 @@ public class BizDeviceServiceImpl implements IBizDeviceService {
         }
         ValidationUtils.validate(parseBean, Cipher.class);
         BizDevicePO device = BizDeviceMapper.INSTANCE.convertPO(parseBean);
+        device.setCount(0);
         device.setTenantId(tenant.getTenantId());
         BizDevicePO exist = baseRepository.selectOne(new LambdaQueryWrapper<BizDevicePO>()
                 .eq(BizDevicePO::getDeviceCode, device.getDeviceCode())

+ 12 - 5
tr-modules/tr-module-airway/src/main/java/cn/tr/module/airway/service/impl/BizVideoServiceImpl.java

@@ -4,15 +4,16 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.tr.core.exception.TRExcCode;
-import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.core.utils.ValidationUtils;
 import cn.tr.module.airway.annotation.Cipher;
 import cn.tr.module.airway.controller.vo.BizVideoVO;
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
 import cn.tr.module.airway.dto.AliOSSInitiateMultipartUploadDTO;
 import cn.tr.module.airway.dto.OssCallbackDTO;
 import cn.tr.module.airway.enums.VideoStatus;
 import cn.tr.core.utils.AESUtil;
+import cn.tr.module.airway.repository.BizDeviceRepository;
 import cn.tr.module.airway.utils.ByteFormatUtils;
 import cn.tr.module.api.sys.storage.SysStorageApi;
 import cn.tr.module.api.sys.tenant.SysTenantApi;
@@ -51,6 +52,9 @@ public class BizVideoServiceImpl implements IBizVideoService {
     @Autowired
     private SysStorageApi storageApi;
 
+    @Autowired
+    private BizDeviceRepository deviceRepository;
+
     @Override
     public List<BizVideoVO> stdSelectBizVideoList(BizVideoQueryDTO query) {
         return baseRepository.stdSelectBizVideoList(query);
@@ -152,25 +156,26 @@ public class BizVideoServiceImpl implements IBizVideoService {
         videoPo = BizVideoMapper.INSTANCE.convertPO(parseBean);
         videoPo.setTenantId(tenant.getTenantId());
         String storagePathName=source.getHospitalCode()+"/"+parseBean.getDeviceCode()+"/"+parseBean.getFileName();
-
-        String uploadId = storageApi.generationInitiateMultipartUploadAesEncrypt(storagePathName,password);
+        InitiateMultipartUploadBO uploadResult = storageApi.generationInitiateMultipartUploadAesEncrypt(storagePathName,password);
         videoPo.setFileName(parseBean.getFileName());
         videoPo.setStoragePathName(storagePathName);
-        videoPo.setUploadId(uploadId);
+        videoPo.setUploadId(uploadResult.getAbsolutePath());
         videoPo.setSuffix(FileUtil.getSuffix(parseBean.getFileName()));
+        videoPo.setAbsolutePath(uploadResult.getAbsolutePath());
         videoPo.setStartTime(new Date());
         videoPo.setStatus(VideoStatus.PENDING);
         baseRepository.insert(videoPo);
         String result = JsonUtils.toJsonString(
                 MapUtil.builder()
                         .put("callBackUrl", "https://airway.tuoren.com/api/ali/oss/callback")
-                        .put("uploadId", uploadId)
+                        .put("uploadId", uploadResult.getUploadId())
                         .build()
         );
         return AESUtil.encryptData(result, password.getBytes());
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void handleFileUploadCompletion(OssCallbackDTO callBack) {
         BizVideoPO video = baseRepository.selectOne(new LambdaQueryWrapper<BizVideoPO>()
                 .eq(BizVideoPO::getUploadId, callBack.getUploadId())
@@ -180,6 +185,8 @@ public class BizVideoServiceImpl implements IBizVideoService {
         }
         video.setEndTime(new Date());
         video.setStatus(VideoStatus.FINISHED);
+        video.setCoverImage(video.getAbsolutePath()+"?x-oss-process=video/snapshot,t_1000,f_png,w_720,h_1280,m_fast,ar_auto");
         baseRepository.updateById(video);
+        deviceRepository.updateDeviceCount(callBack.getDeviceCode());
     }
 }

+ 0 - 45
tr-modules/tr-module-airway/src/main/resources/mapper/airway/BizAirwayMapper.xml

@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.tr.module.airway.repository.BizDeviceRepository">
-
-    <resultMap id="stdResult" type="cn.tr.module.airway.controller.vo.BizDeviceVO">
-        <result property="id" column="id"/>
-        <result property="deviceCode" column="device_code"/>
-        <result property="alias" column="alias"/>
-        <result property="androidVersion" column="android_version"/>
-        <result property="deviceType" column="device_type"/>
-        <result property="airwayVersion" column="airway_version"/>
-        <result property="remark" column="remark"/>
-        <result property="count" column="count"/>
-        <result property="createTime" column="create_time"/>
-        <result property="hospitalName" column="hospital_name"/>
-        <result property="hospitalId" column="hospital_id"/>
-    </resultMap>
-
-    <select id="stdSelectBizDeviceList" resultMap="stdResult">
-        select
-        bd.id as id,
-        bd.device_code as device_code,
-        bd.alias as alias,
-        bd.android_version as android_version,
-        bd.device_type as device_type,
-        bd.airway_version as airway_version,
-        bd.remark as remark,
-        bd.count as count,
-        bd.create_time as create_time,
-        st.name as hospital_name,
-        st.id as hospital_id
-        from biz_device as bd
-        LEFT JOIN sys_tenant as st on bd.tenant_id=st.id
-        <where>
-            <if test="query.hospitalId != null and query.hospitalId != ''">
-                and bd.tenant_id = #{query.hospitalId}
-            </if>
-            <if test="query.blurry != null and query.blurry != ''">
-                and (bd.alias like concat('%',#{query.blurry},'%') or bd.device_code like concat('%',#{query.blurry},'%'))
-            </if>
-        </where>
-    </select>
-</mapper>

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/provider/SysStorageApiProvider.java

@@ -3,6 +3,7 @@ package cn.tr.module.sys.storage.provider;
 import cn.tr.module.api.sys.storage.StoragePojo;
 import cn.tr.module.api.sys.storage.SysStorageApi;
 import cn.tr.module.sys.storage.service.IStorageFileService;
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
@@ -54,7 +55,7 @@ public class SysStorageApiProvider implements SysStorageApi {
     }
 
     @Override
-    public String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception {
+    public InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception {
         return storageFileService.generationInitiateMultipartUploadAesEncrypt(filename,password);
     }
 

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/IStorageFileService.java

@@ -3,6 +3,7 @@ package cn.tr.module.sys.storage.service;
 
 import cn.tr.module.api.sys.storage.StoragePojo;
 import cn.tr.module.sys.storage.dto.SysStorageRecordDTO;
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
 
 import java.util.*;
 
@@ -70,7 +71,7 @@ public interface IStorageFileService {
 
     String generationInitiateMultipartUpload(String filename);
 
-    String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception;
+    InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception;
 
     Map<String, Object> selectConfig();
 }

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/StorageFileServiceImpl.java

@@ -18,6 +18,7 @@ import cn.tr.module.sys.storage.properties.TrStorageProperties;
 import cn.tr.module.sys.storage.service.IStorageFileService;
 import cn.tr.module.sys.storage.service.ISysStorageConfigService;
 import cn.tr.module.sys.storage.service.ISysStorageRecordService;
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
 import cn.tr.plugin.file.config.FileClient;
 import cn.tr.plugin.file.config.FileClientConfig;
 import cn.tr.plugin.file.config.FileClientFactory;
@@ -199,7 +200,7 @@ public class StorageFileServiceImpl implements IStorageFileService {
     }
 
     @Override
-    public String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception {
+    public InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception {
         String configId=defaultConfig.getId();
         FileClient fileClient = getClient(configId);
         return fileClient.generationInitiateMultipartUploadAesEncrypt(filename,password);

+ 3 - 1
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/FileClient.java

@@ -1,6 +1,8 @@
 package cn.tr.plugin.file.config;
 
 
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
+
 /**
  * @ClassName : FileClient
  * @Description : 文件操作客户端
@@ -64,7 +66,7 @@ public interface FileClient {
         throw new UnsupportedOperationException("当前存储方式不支持该操作");
     };
 
-    default String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception {
+    default InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception {
         throw new UnsupportedOperationException("当前存储方式不支持该操作");
     };
 }

+ 10 - 6
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/ali/AliFileClient.java

@@ -4,10 +4,9 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.map.MapUtil;
-import cn.tr.core.utils.AESUtil;
-import cn.tr.core.utils.JsonUtils;
+import cn.hutool.http.HttpUtil;
 import cn.tr.core.utils.MediaTypeUtils;
+import cn.tr.core.pojo.InitiateMultipartUploadBO;
 import cn.tr.plugin.file.config.AbstractFileClient;
 import cn.tr.plugin.file.config.FileContent;
 import com.aliyun.oss.HttpMethod;
@@ -19,9 +18,9 @@ import lombok.extern.slf4j.Slf4j;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.URL;
+import java.nio.charset.Charset;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Map;
 
 /**
  * @ClassName : AliFileClient
@@ -120,7 +119,7 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
     }
 
     @Override
-    public String generationInitiateMultipartUploadAesEncrypt(String filename,String password) throws Exception {
+    public InitiateMultipartUploadBO generationInitiateMultipartUploadAesEncrypt(String filename, String password) throws Exception {
         String bizPath=parseBizPath(filename);
         // 使用FileClient获取实际的OSS客户端和相关配置
         // 构造请求对象
@@ -129,6 +128,11 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
         InitiateMultipartUploadResult uploadResult = ossClient.initiateMultipartUpload(request);
         // 构造返回值
 
-        return uploadResult.getUploadId();
+        return  InitiateMultipartUploadBO.builder()
+                .uploadId(uploadResult.getUploadId())
+                .absolutePath(
+                        HttpUtil.encodeParams("https://"+getConfig().getAliBucketName()+"."+getConfig().getAliEndpoint()+"/"+bizPath, Charset.defaultCharset())
+                )
+                .build();
     }
 }