|
@@ -1,10 +1,13 @@
|
|
|
package com.fjhx.file.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
import cn.hutool.core.io.IoUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.file.entity.*;
|
|
|
import com.fjhx.file.mapper.FileInfoMapper;
|
|
@@ -12,12 +15,17 @@ import com.fjhx.file.service.FileInfoService;
|
|
|
import com.obs.services.ObsClient;
|
|
|
import com.obs.services.model.PostSignatureRequest;
|
|
|
import com.obs.services.model.PostSignatureResponse;
|
|
|
+import com.ruoyi.common.constant.DatasourceConstant;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -126,6 +134,81 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * !!!必须加上Transactional 更改事务传播行为,否则数据源将被缓存,造成数据源切换失败
|
|
|
+ *
|
|
|
+ * @param obsFileList 文件列表
|
|
|
+ * @param businessId 业务id
|
|
|
+ * @param businessType 业务文件类型
|
|
|
+ */
|
|
|
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
|
|
|
+ @DS(DatasourceConstant.SLAVE_NAME)
|
|
|
+ @Override
|
|
|
+ public void saveFile(List<ObsFile> obsFileList, Long businessId, Integer businessType) {
|
|
|
+ // 切换到从库
|
|
|
+ if (obsFileList.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<FileInfo> fileInfoList = BeanUtil.copyToList(obsFileList, FileInfo.class);
|
|
|
+ for (FileInfo fileInfo : fileInfoList) {
|
|
|
+ fileInfo.setBusinessId(businessId);
|
|
|
+ fileInfo.setBusinessType(businessType);
|
|
|
+ }
|
|
|
+ this.updateBatchById(fileInfoList);
|
|
|
+ DynamicDataSourceContextHolder.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * !!!必须加上Transactional 更改事务传播行为,否则数据源将被缓存,造成数据源切换失败
|
|
|
+ *
|
|
|
+ * @param obsFileList 文件列表
|
|
|
+ * @param businessId 业务id
|
|
|
+ * @param businessType 业务文件类型
|
|
|
+ */
|
|
|
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
|
|
|
+ @DS(DatasourceConstant.SLAVE_NAME)
|
|
|
+ @Override
|
|
|
+ public void editFile(List<ObsFile> obsFileList, Long businessId, Integer businessType) {
|
|
|
+ if (obsFileList.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除不包含在此列表的业务id文件
|
|
|
+ List<Long> obsFileId = obsFileList.stream().map(ObsFile::getId).collect(Collectors.toList());
|
|
|
+ this.remove(q -> q.notIn(BaseIdPo::getId, obsFileId).eq(FileInfo::getBusinessId, businessId));
|
|
|
+
|
|
|
+ // 更新在此列表的文件
|
|
|
+ saveFile(obsFileList, businessId, businessType);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * !!!必须加上Transactional 更改事务传播行为,否则数据源将被缓存,造成数据源切换失败
|
|
|
+ *
|
|
|
+ * @param businessId 业务id
|
|
|
+ * @param businessType 业务文件类型
|
|
|
+ */
|
|
|
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
|
|
|
+ @DS(DatasourceConstant.SLAVE_NAME)
|
|
|
+ @Override
|
|
|
+ public void removeFile(Long businessId, Integer businessType) {
|
|
|
+ this.remove(q -> q
|
|
|
+ .eq(FileInfo::getBusinessId, businessId)
|
|
|
+ .eq(FileInfo::getBusinessType, businessType));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * !!!必须加上Transactional 更改事务传播行为,否则数据源将被缓存,造成数据源切换失败
|
|
|
+ *
|
|
|
+ * @param businessId 业务id
|
|
|
+ */
|
|
|
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
|
|
|
+ @DS(DatasourceConstant.SLAVE_NAME)
|
|
|
+ @Override
|
|
|
+ public void removeFile(Long businessId) {
|
|
|
+ this.remove(q -> q.eq(FileInfo::getBusinessId, businessId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取oss链接客户端
|
|
|
*/
|
|
|
private ObsClient getObsClient() {
|