提交 b87c127c 作者: duanxincheng

纪要生成服务优化

父级 8a23a94c
......@@ -122,6 +122,11 @@
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.7.0</version> <!-- 与你的 Spring Boot 版本保持一致 -->
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
......@@ -313,6 +318,24 @@
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
<exclusions>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
......
......@@ -7,6 +7,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
@MapperScan("com.cmeeting.mapper.primary")
public class TencentMeetingCallbackApplication {
public static void main(String[] args) {
SpringApplication.run(TencentMeetingCallbackApplication.class, args);
......
package com.cmeeting.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
// 主数据源配置
@Configuration
@MapperScan(basePackages = "com.cmeeting.mapper.primary", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));
return bean.getObject();
}
@Primary
@Bean(name = "masterSqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
\ No newline at end of file
package com.cmeeting.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(
basePackages = "com.cmeeting.mapper.primary", // 主数据源的 Mapper 包路径
sqlSessionFactoryRef = "primarySqlSessionFactory"
)
public class PrimaryDataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary") // 绑定主数据源配置
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 可额外配置 MyBatis 的 mapperLocations、typeAliases 等
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/primary/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "primaryTransactionManager")
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
\ No newline at end of file
package com.cmeeting.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(
basePackages = "com.cmeeting.mapper.secondary", // 次数据源的 Mapper 包路径
sqlSessionFactoryRef = "secondarySqlSessionFactory"
)
public class SecondaryDataSourceConfig {
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary") // 绑定次数据源配置
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 可额外配置 MyBatis 的 mapperLocations、typeAliases 等
// 指定次数据源的 XML 映射文件路径
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/secondary/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
\ No newline at end of file
package com.cmeeting.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
// 从数据源配置
@Configuration
@MapperScan(basePackages = "com.cmeeting.mapper.secondary", sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));
return bean.getObject();
}
@Bean(name = "slaveSqlSessionTemplate")
public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
......@@ -25,7 +25,7 @@ public class TencentMeetingController {
}
@GetMapping("/getMeetingFiles")
public void getMeetingFiles(TencentMeetingVO.TencentMeetingRequest requestVO){
tecentMeetingService.getMeetingFiles(requestVO);
public void getMeetingFiles(){
tecentMeetingService.getMeetingFiles();
}
}
......@@ -2,6 +2,7 @@ package com.cmeeting.email;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.activation.DataHandler;
import javax.activation.DataSource;
......@@ -13,12 +14,13 @@ import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Service
public class EmailSender {
@Value("${email.sender}")
private String SENDER;
@Value("${email.sender.pwd}")
@Value("${email.sender-pwd}")
private String EMAIL_PWD;
@Value("${email.smtp.host}")
@Value("${email.smtp-host}")
private String SMTP_HOST;
private static final Integer MAX_RETRY = 3;
......@@ -30,10 +32,10 @@ public class EmailSender {
* @param recordFileId 转录文件ID
* @return
*/
public boolean sendEmailWithAttachment(String toEmail, String subject, String attachmentPath, String recordFileId) {
public boolean sendEmailWithAttachment(String toEmail, String subject, String attachmentPath, String recordFileId) throws Exception {
// 邮件服务器配置
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.office365.com");
props.put("mail.smtp.host", SMTP_HOST);
props.put("mail.smtp.auth", "true");
// props.put("mail.smtp.port", "465");
......@@ -50,7 +52,8 @@ public class EmailSender {
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("cmeeting_assistant@cimc.com", "scyou@xih45g6@xih4");
// return new PasswordAuthentication("cmeeting_assistant@cimc.com", "scyou@xih45g6@xih4");
return new PasswordAuthentication(SENDER, EMAIL_PWD);
}
});
String body = "您好:\n" +
......@@ -58,12 +61,12 @@ public class EmailSender {
" 附件为您本次会议的会议纪要,烦请下载查看";
AtomicInteger retryCount = new AtomicInteger(0);
try {
boolean isSent = false;
while (retryCount.intValue() < MAX_RETRY && !isSent){
try {
// 创建邮件消息
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("cmeeting_assistant@cimc.com"));
message.setFrom(new InternetAddress(SENDER));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toEmail));
message.setSubject(subject);
......@@ -94,7 +97,6 @@ public class EmailSender {
Transport.send(message);
log.error("邮件已成功发送: recordFileId->{}", recordFileId);
isSent = true;
}
} catch (MessagingException e) {
//todo 邮件失败记录
// 异常处理
......@@ -112,6 +114,7 @@ public class EmailSender {
}
return false;
}
}
return true;
}
}
\ No newline at end of file
......@@ -90,18 +90,7 @@ public class CmeetingJob {
logger.info("结束时间: " + now.format(formatter) + " | Unix 时间戳: " + nowTimestamp);
logger.info("----------------------------------");
// dojob(beforeDayTimestamp, nowTimestamp);
AtomicInteger currentPage = new AtomicInteger(1);
TencentMeetingVO.TencentMeetingRequest request = TencentMeetingVO.TencentMeetingRequest.builder()
.page(1)
.pageSize(10)
.startTime(beforeDayTimestamp)
.endTime(nowTimestamp)
.operatorId(tencentAdminUserId)
.operatorIdType(1)
.build();
List<TencentMeetingVO.RecordFile> meetingFiles = tecentMeetingService.getMeetingFiles(request);
List<TencentMeetingVO.RecordFile> meetingFiles = tecentMeetingService.getMeetingFiles();
if (meetingFiles == null || meetingFiles.isEmpty()) {
......
package com.cmeeting.mapper.primary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.pojo.MeetingInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> {
void batchInsert(@Param("meetingSaveList")List<MeetingInfo> meetingSaveList);
List<String> getAllMeetingIds();
}
\ No newline at end of file
package com.cmeeting.pojo;
import java.util.Objects;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 会议信息实体类
*/
public class MeetingInfo {
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("cmt_meeting_info")
public class MeetingInfo implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 会议主题
*/
......@@ -17,158 +36,59 @@ public class MeetingInfo {
private String meetingId;
/**
* 子会议ID
*/
private String subMeetingId;
/**
* 会议号码
*/
private String meetingCode;
/**
* 用户ID
* 主持人
*/
private String userId;
private String hostId;
/**
* 用户昵称
* 参会人员名单
*/
private String nickName;
private String participantUserIds;
/**
* 会议开始时间(时间戳)
*/
private Long startTime;
private LocalDateTime startTime;
/**
* 会议结束时间(时间戳)
*/
private Long endTime;
private LocalDateTime endTime;
/**
* 参会人数
* 是否生成会议纪要完成
*/
private Integer participantsNum;
private Boolean isGenerated;
/**
* 会议总时长(秒)
* 推送邮件许可 为false不推送
*/
private Integer meetingDuration;
private Boolean emailPushAccess;
/**
* 用户参会时长(秒)
* 是否推送邮件完成
*/
private Integer userMeetingDuration;
// 构造方法
public MeetingInfo() {
}
// Getter 和 Setter 方法
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMeetingId() {
return meetingId;
}
public void setMeetingId(String meetingId) {
this.meetingId = meetingId;
}
public String getMeetingCode() {
return meetingCode;
}
public void setMeetingCode(String meetingCode) {
this.meetingCode = meetingCode;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Long getStartTime() {
return startTime;
}
public void setStartTime(Long startTime) {
this.startTime = startTime;
}
public Long getEndTime() {
return endTime;
}
public void setEndTime(Long endTime) {
this.endTime = endTime;
}
public Integer getParticipantsNum() {
return participantsNum;
}
public void setParticipantsNum(Integer participantsNum) {
this.participantsNum = participantsNum;
}
public Integer getMeetingDuration() {
return meetingDuration;
}
public void setMeetingDuration(Integer meetingDuration) {
this.meetingDuration = meetingDuration;
}
public Integer getUserMeetingDuration() {
return userMeetingDuration;
}
public void setUserMeetingDuration(Integer userMeetingDuration) {
this.userMeetingDuration = userMeetingDuration;
}
// toString 方法
@Override
public String toString() {
return "MeetingInfo{" +
"subject='" + subject + '\'' +
", meetingId='" + meetingId + '\'' +
", meetingCode='" + meetingCode + '\'' +
", userId='" + userId + '\'' +
", nickName='" + nickName + '\'' +
", startTime=" + startTime +
", endTime=" + endTime +
", participantsNum=" + participantsNum +
", meetingDuration=" + meetingDuration +
", userMeetingDuration=" + userMeetingDuration +
'}';
}
private Boolean isPushed;
/**
* 同步时间
*/
private LocalDateTime syncTime;
// equals 和 hashCode 方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MeetingInfo that = (MeetingInfo) o;
return Objects.equals(meetingId, that.meetingId);
}
/**
* 转录文本
*/
private String recordContent;
@Override
public int hashCode() {
return Objects.hash(meetingId);
}
/**
* 纪要xml
*/
private String recordXml;
}
\ No newline at end of file
package com.cmeeting.service;
import com.cmeeting.email.EmailSender;
import com.cmeeting.job.FileProcessTask;
import com.cmeeting.mapper.primary.MeetingInfoMapper;
import com.cmeeting.util.MinioUtils;
import com.cmeeting.vo.TencentMeetingVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -8,6 +11,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
......@@ -33,6 +37,12 @@ public class FileProcessProducer {
private String tencentSecretKey;
@Value(value = "${tencent.admin.userId}")
private String tencentAdminUserId;
@Resource
private MeetingInfoMapper meetingInfoMapper;
@Resource
private MinioUtils minioUtils;
@Resource
private EmailSender emailSender;
// 批量提交任务
public void submitBatchTasks(List<TencentMeetingVO.RecordFile> recordFiles, String baseSavePath) {
......@@ -50,7 +60,10 @@ public class FileProcessProducer {
tencentSdkId,
tencentSecretId,
tencentSecretKey,
tencentAdminUserId
tencentAdminUserId,
meetingInfoMapper,
minioUtils,
emailSender
);
// 提交任务到线程池
......
package com.cmeeting.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.pojo.MeetingInfo;
public interface MeetingInfoService extends IService<MeetingInfo> {
}
......@@ -11,6 +11,6 @@ public interface TecentMeetingService extends IService<TencentMeetingUser> {
void doUsers();
List<TencentMeetingVO.RecordFile> getMeetingFiles(TencentMeetingVO.TencentMeetingRequest requestVO);
List<TencentMeetingVO.RecordFile> getMeetingFiles();
}
package com.cmeeting.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.mapper.primary.MeetingInfoMapper;
import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.service.MeetingInfoService;
import org.springframework.stereotype.Service;
@Service
public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, MeetingInfo> implements MeetingInfoService {
}
package com.cmeeting.util;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@Component
public class MinioUtils {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.bucketName}")
private String bucketName;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
private MinioClient minioClient;
public synchronized MinioClient getMinioClient() {
try {
if(minioClient == null){
minioClient = new MinioClient(endpoint, accessKey, secretKey);
}
return minioClient;
}catch (Exception e){
throw new RuntimeException(e);
}
}
public InputStream getFile(MinioClient minioClient, String fileName){
try{
InputStream inputStream = minioClient.getObject(bucketName, fileName);
return inputStream;
}catch (Exception e){
throw new RuntimeException(e);
}
}
public void upload(String path,InputStream inputStream) throws Exception{
getMinioClient().putObject(bucketName, path, inputStream, "application/octet-stream" );
}
public void upload(String path,byte[] bytes) {
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes)) {
// 自动管理流的生命周期,无需手动close
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
upload(path,inputStream);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public Boolean isFileExist(MinioClient minioClient, String fileName){
boolean found = false;
try{
InputStream inputStream = minioClient.getObject(bucketName, fileName);
found= true;
return found;
}catch (Exception e){
found=false;
return false;
}
}
}
server.port=8080
# ????????
tencent.meeting.token=QQZNb7xWQB47MpZF4C2DFAkv8
tencent.meeting.aesKey=agy6ALUePp34lljWz1uIQWa7yQq3dgxxQNmfaN9GROm
# application.yml
# spring.datasource.url=jdbc:mysql://192.168.10.155:3306/cmeeting?useSSL=false&characterEncoding=utf8
# spring.datasource.username=root
# spring.datasource.password=qizhi123
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# ?????primary?
spring.datasource.primary.jdbc-url=jdbc:mysql://192.168.10.155:3306/robot-standard-enterprise-aigc?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.primary.username=root
spring.datasource.primary.password=qizhi123
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
# ?????secondary?
spring.datasource.secondary.jdbc-url=jdbc:mysql://192.168.10.155:3306/user-admin?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.secondary.username=root
spring.datasource.secondary.password=qizhi123
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
# MyBatis ??
# mybatis.mapper-locations=classpath:mapper/primary/*.xml
mybatis.type-aliases-package=com.cmeeting.pojo\
# ??????
mybatis.configuration.map-underscore-to-camel-case: true
logging.level.com.zaxxer.hikari=INFO
# tencent meeting
# local
tencent.appId=211153201
tencent.sdkId=28370276340
tencent.secretId=BKOMDZVbvh0iT7k6UHsSizAWBCOVDtT6
tencent.secretKey=3Y1j0mzNp7KChKFJGyaEnZHLobFoAQ8eLwfaMx8nLbtXAerO
#tencent.admin.userId=woaJARCQAAJU1EsO73Ww5rn8YHMW6iYA
tencent.admin.userId=woaJARCQAAhkyWGuf8n9InhZsxQstjjA
# prod
#tencent.appId=210468336
#tencent.sdkId=28790143843
#tencent.secretId=0ks7u8cgQ8DGVtlYZeRA9TxZCjvUT3oL
#tencent.secretKey=gQU09rkJjiQfiGcUYdhiKq5Ol6LebXg4w7F7Ol0rwvvdv3Xy
#tencent.admin.userId=woaJARCQAAftcvU6GGoOn66rdSZ4IrOA
email.sender=cmeeting_assistant@cimc.com
email.sender.pwd=scyou@xih45g6@xih4
email.smtp.host=smtp.office365.com
server:
port: 8080
# ????????
# application.yml
# spring.datasource.url=jdbc:mysql://192.168.10.155:3306/cmeeting?useSSL=false&characterEncoding=utf8
# spring.datasource.username=root
# spring.datasource.password=qizhi123
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# ?????primary?
#spring.datasource.primary.jdbc-url=jdbc:mysql://192.168.10.154:3307/aigc-zhongji-test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
##spring.datasource.primary.username=root
##spring.datasource.primary.password=123456
##spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
##
### ?????secondary?
##spring.datasource.secondary.jdbc-url=jdbc:mysql://192.168.10.154:3307/useradmin-zhongji-test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
##spring.datasource.secondary.username=root
##spring.datasource.secondary.password=123456
##spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
spring:
datasource:
# 主数据源
master:
jdbc-url: jdbc:mysql://192.168.10.154:3307/aigc-zhongji-test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 从数据源
slave:
jdbc-url: jdbc:mysql://192.168.10.154:3307/useradmin-zhongji-test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# MyBatis ??
# mybatis.mapper-locations=classpath:mapper/primary/*.xml
mybatis.type-aliases-package: com.cmeeting.pojo\
# ??????
mybatis:
configuration:
map-underscore-to-camel-case: true
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
configuration:
map-underscore-to-camel-case: true
# 也建议开启
global-config:
db-config:
column-underline: true
#logging:
# level:
# com:
# zaxxer:
# hikari: INFO
############################################################## minIO
MINIO_ADDRESS: http://192.168.10.154:9000
MINIO_BUCKET: zhongji
MINIO_USERNAME: minio
MINIO_PASSWORD: minio123
#Minio服务所在地址
minio.endpoint: ${MINIO_ADDRESS}
#存储桶名称
minio.bucketName: ${MINIO_BUCKET}
#访问的key
minio.accessKey: ${MINIO_USERNAME}
#访问的秘钥
minio.secretKey: ${MINIO_PASSWORD}
############################################################## minIO
############################################################## tencent meeting
# local
#tencent.appId=211153201
#tencent.sdkId=28370276340
#tencent.secretId=BKOMDZVbvh0iT7k6UHsSizAWBCOVDtT6
#tencent.secretKey=3Y1j0mzNp7KChKFJGyaEnZHLobFoAQ8eLwfaMx8nLbtXAerO
#tencent.admin.userId=woaJARCQAAJU1EsO73Ww5rn8YHMW6iYA
#tencent.admin.userId=woaJARCQAAhkyWGuf8n9InhZsxQstjjA
# prod
tencent:
appId: 210468336
sdkId: 28790143843
secretId: 0ks7u8cgQ8DGVtlYZeRA9TxZCjvUT3oL
secretKey: gQU09rkJjiQfiGcUYdhiKq5Ol6LebXg4w7F7Ol0rwvvdv3Xy
admin.userId: woaJARCQAAftcvU6GGoOn66rdSZ4IrOA
meeting:
token: QQZNb7xWQB47MpZF4C2DFAkv8
aesKey: agy6ALUePp34lljWz1uIQWa7yQq3dgxxQNmfaN9GROm
email:
sender: cmeeting_assistant@cimc.com
sender-pwd: scyou@xih45g6@xih4
smtp-host: smtp.office365.com
############################################################## tencent meeting
logging:
level:
com.cmeeting.mapper.primary: TRACE
com.cmeeting.mapper.secondary: TRACE
root: DEBUG
\ No newline at end of file
<?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.cmeeting.mapper.primary.MeetingInfoMapper">
<insert id="batchInsert" parameterType="list">
INSERT IGNORE INTO cmt_meeting_info (subject, meeting_id, meeting_code, host_id, participant_user_ids, start_time,
end_time, is_generated, email_push_access, is_pushed, sync_time, sub_meeting_id, record_content, record_xml)
VALUES
<foreach collection="meetingSaveList" item="meeting" separator=",">
(
#{meeting.subject},
#{meeting.meetingId},
#{meeting.meetingCode},
#{meeting.hostId},
#{meeting.participantUserIds},
#{meeting.startTime},
#{meeting.endTime},
#{meeting.isGenerated},
#{meeting.emailPushAccess},
#{meeting.isPushed},
#{meeting.syncTime},
#{meeting.subMeetingId},
#{meeting.recordContent},
#{meeting.recordXml}
)
</foreach>
</insert>
<select id="getAllMeetingIds" resultType="java.lang.String">
select meeting_id from cmt_meeting_info
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论