病例交流增加了列表中的图片和视频预览
This commit is contained in:
parent
0e6d48284c
commit
b05be13e5c
@ -104,6 +104,21 @@ public class CaseExchangeController {
|
||||
);
|
||||
|
||||
for (CaseExchangeDto dto : resultPage.getRecords()) {
|
||||
// 内容
|
||||
dto.setExchangeContent("");
|
||||
dto.setExchangeSummary("");
|
||||
|
||||
// 处理预览视频
|
||||
dto.setExchangeContentVideoString(dto.getExchangeContentVideoString());
|
||||
|
||||
// 处理预览图片
|
||||
if (dto.getExchangeContentVideo() == null){
|
||||
dto.setExchangeContentImageString(dto.getExchangeContentImageString());
|
||||
}
|
||||
|
||||
dto.setExchangeContentImageString("");
|
||||
dto.setExchangeContentVideoString("");
|
||||
|
||||
// 查找用户所属医院
|
||||
if (userId != null){
|
||||
if (!userId.equals(dto.getUserId())){
|
||||
|
||||
@ -6,10 +6,13 @@ import com.example.caseData.dto.caseExchangeLabel.CaseExchangeLabelDto;
|
||||
import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto;
|
||||
import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto;
|
||||
import com.example.caseData.model.CaseExchangeModel;
|
||||
import com.example.caseData.utils.Replace;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -76,6 +79,30 @@ public class CaseExchangeDto {
|
||||
@JsonProperty("exchange_summary")
|
||||
private String exchangeSummary;
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_image_string")
|
||||
private String exchangeContentImageString;
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_image")
|
||||
private List<String> exchangeContentImage = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_video_string")
|
||||
private String exchangeContentVideoString;
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_video")
|
||||
private List<String> exchangeContentVideo = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ -124,18 +151,6 @@ public class CaseExchangeDto {
|
||||
@JsonProperty("label")
|
||||
private List<CaseExchangeLabelDto> label;
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_images")
|
||||
private List<String> exchangeContentImages;
|
||||
|
||||
/**
|
||||
* 预览图片
|
||||
*/
|
||||
@JsonProperty("exchange_content_video")
|
||||
private List<String> exchangeContentVideo;
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
@ -201,5 +216,22 @@ public class CaseExchangeDto {
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
|
||||
public void setExchangeContentImageString(String str) {
|
||||
this.exchangeContentImageString = str;
|
||||
if (str != null && !str.isEmpty()) {
|
||||
this.exchangeContentImage = Arrays.stream(str.split(","))
|
||||
.map(Replace::addOssDomain)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
public void setExchangeContentVideoString(String str) {
|
||||
this.exchangeContentVideoString = str;
|
||||
if (str != null && !str.isEmpty()) {
|
||||
this.exchangeContentVideo = Arrays.stream(str.split(","))
|
||||
.map(Replace::addOssDomain)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,6 +79,18 @@ public class CaseExchangeModel {
|
||||
@TableField("exchange_summary")
|
||||
private String exchangeSummary;
|
||||
|
||||
/**
|
||||
* 预览图片(逗号分隔)
|
||||
*/
|
||||
@TableField("exchange_content_image")
|
||||
private String exchangeContentImage;
|
||||
|
||||
/**
|
||||
* 预览视频(逗号分隔)
|
||||
*/
|
||||
@TableField("exchange_content_video")
|
||||
private String exchangeContentVideo;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@ -6,6 +6,8 @@ import com.example.caseData.exception.BusinessException;
|
||||
import com.example.caseData.model.*;
|
||||
import com.example.caseData.request.caseExchangeRequest.addCaseExchange;
|
||||
import com.example.caseData.request.caseExchangeRequest.addCaseExchangeComment;
|
||||
import com.example.caseData.utils.JwtUtil;
|
||||
import com.example.caseData.utils.RegularUtil;
|
||||
import com.example.caseData.utils.Replace;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -50,6 +52,9 @@ public class CaseExchangeService {
|
||||
@Resource
|
||||
private UserDao userDao;
|
||||
|
||||
@Resource
|
||||
private RegularUtil regularUtil;
|
||||
|
||||
/**
|
||||
* 新增-病例交流
|
||||
* @param userId 用户id
|
||||
@ -105,6 +110,21 @@ public class CaseExchangeService {
|
||||
}
|
||||
}
|
||||
|
||||
// 匹配预览视频
|
||||
List<String> videoUrls = regularUtil.extractOssVideosUrls(r.getExchangeContent());
|
||||
videoUrls.replaceAll(Replace::removeOssDomain);
|
||||
String exchangeContentVideo = String.join(",", videoUrls);
|
||||
|
||||
String exchangeContentImage = "";
|
||||
if (exchangeContentVideo.isEmpty()){
|
||||
// 匹配预览图片
|
||||
List<String> imageUrls = regularUtil.extractOssImageUrls(r.getExchangeContent());
|
||||
imageUrls.replaceAll(Replace::removeOssDomain);
|
||||
exchangeContentImage = String.join(",", imageUrls);
|
||||
}else{
|
||||
exchangeContentImage = "";
|
||||
}
|
||||
|
||||
// 新增病例交流
|
||||
CaseExchangeModel caseExchangeData = new CaseExchangeModel();
|
||||
caseExchangeData.setUserId(Long.valueOf(userId));
|
||||
@ -113,6 +133,8 @@ public class CaseExchangeService {
|
||||
caseExchangeData.setPushDate(LocalDateTime.now());
|
||||
caseExchangeData.setExchangeContent(r.getExchangeContent());
|
||||
caseExchangeData.setExchangeSummary(r.getExchangeSummary());
|
||||
caseExchangeData.setExchangeContentVideo(exchangeContentVideo);
|
||||
caseExchangeData.setExchangeContentImage(exchangeContentImage);
|
||||
int res = caseExchangeDao.insert(caseExchangeData);
|
||||
if (res <= 0){
|
||||
throw new BusinessException("操作失败");
|
||||
|
||||
86
src/main/java/com/example/caseData/utils/RegularUtil.java
Normal file
86
src/main/java/com/example/caseData/utils/RegularUtil.java
Normal file
@ -0,0 +1,86 @@
|
||||
package com.example.caseData.utils;
|
||||
|
||||
import com.example.caseData.config.EnvConfig;
|
||||
import com.example.caseData.config.JwtConfig;
|
||||
import com.example.caseData.config.OssConfig;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 正则类
|
||||
*/
|
||||
@Component
|
||||
public class RegularUtil {
|
||||
private static OssConfig ossConfig;
|
||||
private static EnvConfig envConfig;
|
||||
|
||||
public RegularUtil(
|
||||
OssConfig ossConfig,
|
||||
EnvConfig envConfig
|
||||
){
|
||||
RegularUtil.ossConfig = ossConfig;
|
||||
RegularUtil.envConfig = envConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取 HTML 中的 OSS 图片链接(支持 jpg/png/jpeg)
|
||||
*
|
||||
* @param html HTML 字符串
|
||||
* @return 图片链接列表
|
||||
*/
|
||||
public List<String> extractOssImageUrls(String html) {
|
||||
List<String> imageUrls = new ArrayList<>();
|
||||
if (html == null || html.isEmpty()) {
|
||||
return imageUrls;
|
||||
}
|
||||
|
||||
String domain = ossConfig.getCustomDomainName();
|
||||
// 转义点号,避免正则误匹配
|
||||
String escapedDomain = Pattern.quote(domain); // 更安全地处理 https:// 域名部分
|
||||
|
||||
String env = envConfig.getActive();
|
||||
String regex = escapedDomain + "/" + env + "/static/images/exchange/[a-zA-Z0-9_\\-/.]+\\.(jpg|jpeg|png)";
|
||||
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
|
||||
|
||||
Matcher matcher = pattern.matcher(html);
|
||||
while (matcher.find()) {
|
||||
imageUrls.add(matcher.group());
|
||||
}
|
||||
|
||||
return imageUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取 HTML 中的 OSS 视频链接(支持 mp4/webm/ogg)
|
||||
*
|
||||
* @param html HTML 字符串
|
||||
* @return 视频链接列表
|
||||
*/
|
||||
public List<String> extractOssVideosUrls(String html) {
|
||||
List<String> imageUrls = new ArrayList<>();
|
||||
if (html == null || html.isEmpty()) {
|
||||
return imageUrls;
|
||||
}
|
||||
|
||||
String domain = ossConfig.getCustomDomainName();
|
||||
// 转义点号,避免正则误匹配
|
||||
String escapedDomain = Pattern.quote(domain); // 更安全地处理 https:// 域名部分
|
||||
|
||||
String env = envConfig.getActive();
|
||||
String regex = escapedDomain + "/" + env + "/static/video/exchange/[a-zA-Z0-9_\\-/.]+\\.(mp4|webm|ogg)";
|
||||
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
|
||||
|
||||
Matcher matcher = pattern.matcher(html);
|
||||
while (matcher.find()) {
|
||||
imageUrls.add(matcher.group());
|
||||
}
|
||||
|
||||
return imageUrls;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,9 +1,30 @@
|
||||
<?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="com.example.caseData.dao.CaseExchangeDao">
|
||||
<select id="getCaseExchangeSearchPage" resultType="com.example.caseData.dto.caseExchange.CaseExchangeDto">
|
||||
<resultMap id="caseExchangeDtoMap" type="com.example.caseData.dto.caseExchange.CaseExchangeDto">
|
||||
<result property="exchangeContentImageString" column="exchange_content_image_string"/>
|
||||
<result property="exchangeContentVideoString" column="exchange_content_video_string"/>
|
||||
<!-- 其他字段可以不写,靠自动映射 -->
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="getCaseExchangeSearchPage" resultMap="caseExchangeDtoMap">
|
||||
SELECT
|
||||
a.*,
|
||||
a.exchange_id,
|
||||
a.user_id,
|
||||
a.exchange_title,
|
||||
a.exchange_status,
|
||||
a.is_selected,
|
||||
a.read_num,
|
||||
a.collect_num,
|
||||
a.comment_num,
|
||||
a.push_date,
|
||||
a.exchange_content,
|
||||
a.exchange_summary,
|
||||
a.exchange_content_image as exchange_content_image_string,
|
||||
a.exchange_content_video as exchange_content_video_string,
|
||||
a.created_at,
|
||||
a.updated_at,
|
||||
c.user_name,
|
||||
c.avatar,
|
||||
c.hospital_id
|
||||
@ -37,9 +58,23 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="getCaseExchangeSearchList" resultType="com.example.caseData.dto.caseExchange.CaseExchangeDto">
|
||||
<select id="getCaseExchangeSearchList" resultMap="caseExchangeDtoMap">
|
||||
SELECT
|
||||
a.*,
|
||||
a.exchange_id,
|
||||
a.user_id,
|
||||
a.exchange_title,
|
||||
a.exchange_status,
|
||||
a.is_selected,
|
||||
a.read_num,
|
||||
a.collect_num,
|
||||
a.comment_num,
|
||||
a.push_date,
|
||||
a.exchange_content,
|
||||
a.exchange_summary,
|
||||
a.exchange_content_image as exchange_content_image_string,
|
||||
a.exchange_content_video as exchange_content_video_string,
|
||||
a.created_at,
|
||||
a.updated_at,
|
||||
c.user_name,
|
||||
c.avatar,
|
||||
c.hospital_id
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user