Commit f0bbbb7f authored by fangxinjiang's avatar fangxinjiang

Merge remote-tracking branch 'origin/MVP1.7.18' into MVP1.7.18

parents 5d9b622e cd63095b
...@@ -33,8 +33,9 @@ spec: # 资源规范字段 ...@@ -33,8 +33,9 @@ spec: # 资源规范字段
#dapr.io/sidecar-memory-limit: "800Mi" #Dapr sidecar可以使用的最大内存量。默认情况下未设置 请参阅 https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/ 的有效值。 #dapr.io/sidecar-memory-limit: "800Mi" #Dapr sidecar可以使用的最大内存量。默认情况下未设置 请参阅 https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/ 的有效值。
#dapr.io/sidecar-cpu-request: 1 #Dapr sidecar要求的 CPU 数量 #dapr.io/sidecar-cpu-request: 1 #Dapr sidecar要求的 CPU 数量
#dapr.io/sidecar-memory-request #Dapr sidecar 请求的内存数量 #dapr.io/sidecar-memory-request #Dapr sidecar 请求的内存数量
dapr.io/app-max-request-size: "600" # 明确指定应用请求大小
dapr.io/http-max-request-size: "600" #增加http和grpc服务器请求正文参数的最大大小,单位为MB,以处理大文件的上传。 默认值为 4 MB dapr.io/http-max-request-size: "600" #增加http和grpc服务器请求正文参数的最大大小,单位为MB,以处理大文件的上传。 默认值为 4 MB
dapr.io/http-read-buffer-size: "200" #Dapr has a default limit of 4KB for the http header read buffer size. When sending http headers that are bigger than the default 4KB, you can increase this value. Otherwise, you may encounter a Too big request header dapr.io/http-read-buffer-size: "4096" #Dapr has a default limit of 4KB for the http header read buffer size. When sending http headers that are bigger than the default 4KB, you can increase this value. Otherwise, you may encounter a Too big request header
dapr.io/sidecar-listen-addresses: "0.0.0.0" dapr.io/sidecar-listen-addresses: "0.0.0.0"
# 更多dapr配置请参考 https://www.bookstack.cn/read/dapr-1.5-zh/cc77b74e2cc2f4d4.md # 更多dapr配置请参考 https://www.bookstack.cn/read/dapr-1.5-zh/cc77b74e2cc2f4d4.md
......
...@@ -33,8 +33,9 @@ spec: # 资源规范字段 ...@@ -33,8 +33,9 @@ spec: # 资源规范字段
#dapr.io/sidecar-memory-limit: "800Mi" #Dapr sidecar可以使用的最大内存量。默认情况下未设置 请参阅 https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/ 的有效值。 #dapr.io/sidecar-memory-limit: "800Mi" #Dapr sidecar可以使用的最大内存量。默认情况下未设置 请参阅 https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/ 的有效值。
#dapr.io/sidecar-cpu-request: 1 #Dapr sidecar要求的 CPU 数量 #dapr.io/sidecar-cpu-request: 1 #Dapr sidecar要求的 CPU 数量
#dapr.io/sidecar-memory-request #Dapr sidecar 请求的内存数量 #dapr.io/sidecar-memory-request #Dapr sidecar 请求的内存数量
dapr.io/app-max-request-size: "600" # 明确指定应用请求大小
dapr.io/http-max-request-size: "600" #增加http和grpc服务器请求正文参数的最大大小,单位为MB,以处理大文件的上传。 默认值为 4 MB dapr.io/http-max-request-size: "600" #增加http和grpc服务器请求正文参数的最大大小,单位为MB,以处理大文件的上传。 默认值为 4 MB
dapr.io/http-read-buffer-size: "16" #Dapr has a default limit of 4KB for the http header read buffer size. When sending http headers that are bigger than the default 4KB, you can increase this value. Otherwise, you may encounter a Too big request header dapr.io/http-read-buffer-size: "4096" #Dapr has a default limit of 4KB for the http header read buffer size. When sending http headers that are bigger than the default 4KB, you can increase this value. Otherwise, you may encounter a Too big request header
#dapr.io/sidecar-listen-addresses: "0.0.0.0" 开通外部访问,仅限测试环境 #dapr.io/sidecar-listen-addresses: "0.0.0.0" 开通外部访问,仅限测试环境
# 更多dapr配置请参考 https://www.bookstack.cn/read/dapr-1.5-zh/cc77b74e2cc2f4d4.md # 更多dapr配置请参考 https://www.bookstack.cn/read/dapr-1.5-zh/cc77b74e2cc2f4d4.md
......
...@@ -136,25 +136,6 @@ public class TElectronicArchiveTaskController { ...@@ -136,25 +136,6 @@ public class TElectronicArchiveTaskController {
return R.ok(task); return R.ok(task);
} }
/**
* 手动触发异步处理(用于重试)
*
* @param taskId 任务ID
* @return R
*/
@Operation(summary = "手动触发异步处理", description = "手动触发异步处理任务(用于重试失败的任务)")
@PostMapping("/retryProcess/{taskId}")
public R<?> retryProcess(@PathVariable("taskId") String taskId) {
TElectronicArchiveTask task = tElectronicArchiveTaskService.getById(taskId);
if (task == null) {
return R.failed("任务不存在");
}
// 只有生成中或失败的任务才能重试
// 这里可以根据需要增加失败状态
return importService.asyncProcessUpload(taskId);
}
/** /**
* 单个新增人员附件 * 单个新增人员附件
* 前端先调用 /fileUpload/uploadArchiveFile 接口上传文件获取附件ID列表 * 前端先调用 /fileUpload/uploadArchiveFile 接口上传文件获取附件ID列表
......
...@@ -35,9 +35,10 @@ public interface ElectronicArchiveImportService { ...@@ -35,9 +35,10 @@ public interface ElectronicArchiveImportService {
* 第三步:异步处理上传 * 第三步:异步处理上传
* *
* @param taskId 任务ID * @param taskId 任务ID
* @return 处理结果 * @param userId 用户ID
* @param userName 用户名
*/ */
R<?> asyncProcessUpload(String taskId); void asyncProcessUpload(String taskId, String userId, String userName);
/** /**
* 生成任务编号 * 生成任务编号
......
...@@ -22,6 +22,21 @@ public interface FileUploadService { ...@@ -22,6 +22,21 @@ public interface FileUploadService {
R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException; R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException;
/**
* 上传文件并返回附件信息(支持传递用户ID,用于异步场景)
*
* @param file 文件
* @param filePath 文件路径
* @param type 类型
* @param domainId 域ID
* @param taskId 任务ID
* @param userId 用户ID
* @param userName 用户名
* @return 附件信息
* @throws IOException IO异常
*/
R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId, String userId, String userName) throws IOException;
R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType); R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType);
R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType, String taskId); R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType, String taskId);
......
...@@ -33,9 +33,11 @@ import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils; ...@@ -33,9 +33,11 @@ import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.constants.InsurancesConstants; import com.yifu.cloud.plus.v1.yifu.insurances.constants.InsurancesConstants;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.cache.support.SimpleValueWrapper; import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.context.annotation.Lazy;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -70,14 +72,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -70,14 +72,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
private final ArchivesDaprUtil archivesDaprUtil; private final ArchivesDaprUtil archivesDaprUtil;
private final CacheManager cacheManager; private final CacheManager cacheManager;
private final OSSUtil ossUtil; private final OSSUtil ossUtil;
private final SysConfigLimitMapper configLimitMapper;
/**
* 自注入代理对象,用于解决@Async注解在类内部调用时失效的问题
*
* @Lazy 延迟加载,避免循环依赖
*/
@Autowired
@Lazy
private ElectronicArchiveImportService self;
//初始化zip导入上限值 //初始化zip导入上限值
private int maxLimit = 1; private int maxLimit = 1;
private AtomicInteger atomicInteger = new AtomicInteger(0); private AtomicInteger atomicInteger = new AtomicInteger(0);
private final SysConfigLimitMapper configLimitMapper;
/** /**
* 第一步:导入Excel模板文件 * 第一步:导入Excel模板文件
...@@ -163,15 +173,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -163,15 +173,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
taskService.save(task); taskService.save(task);
// 保存任务表附件 // 保存任务表附件
saveTaskAttachment(task.getId(), fileName, inputStream, "task_file"+"/" + task.getId() + "_" + fileName); saveTaskAttachment(task.getId(), fileName, inputStream, "task_file" + "/" + task.getId() + "_" + fileName);
// 上传文件到阿里云OSS根目录 // 上传文件到阿里云OSS根目录
uploadFileToOSS("task_file"+"/" + task.getId() + "_" + fileName, fileBytes); uploadFileToOSS("task_file" + "/" + task.getId() + "_" + fileName, fileBytes);
// 建立任务和档案详情的关联关系 // 建立任务和档案详情的关联关系
createTaskArchiveRelations(task.getId(), successList); createTaskArchiveRelations(task.getId(), successList);
return R.ok(task.getId(),"全部校验通过"); return R.ok(task.getId(), "全部校验通过");
} catch (Exception e) { } catch (Exception e) {
log.error("导入Excel文件失败", e); log.error("导入Excel文件失败", e);
...@@ -188,7 +198,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -188,7 +198,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
TEmployeeInfo empInfo; TEmployeeInfo empInfo;
TSettleDomainSelectVo settleResult; TSettleDomainSelectVo settleResult;
R<TEmployeeInfo> empResult; R<TEmployeeInfo> empResult;
Map<String,String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
List<String> deptNoList = new ArrayList<>(); List<String> deptNoList = new ArrayList<>();
...@@ -210,7 +220,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -210,7 +220,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (Common.isNotNull(user) && isCheck) { if (Common.isNotNull(user) && isCheck) {
if (Common.isEmpty(deptNoList) || !deptNoList.contains(data.getDeptNo())) { if (Common.isEmpty(deptNoList) || !deptNoList.contains(data.getDeptNo())) {
ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex() ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex()
,InsurancesConstants.DEPT_NO_NOT_IN_USER_DEPT_LIST,data); , InsurancesConstants.DEPT_NO_NOT_IN_USER_DEPT_LIST, data);
errorMessageList.add(errorMessage); errorMessageList.add(errorMessage);
continue; continue;
} }
...@@ -219,7 +229,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -219,7 +229,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
String uniqueKey = data.getEmpIdcard() + "_" + data.getEmpName(); String uniqueKey = data.getEmpIdcard() + "_" + data.getEmpName();
if (null != map.get(uniqueKey)) { if (null != map.get(uniqueKey)) {
ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex() ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex()
,"第" + data.getRowIndex() + "行:姓名和身份证信息存在重复数据",data); , "第" + data.getRowIndex() + "行:姓名和身份证信息存在重复数据", data);
errorMessageList.add(errorMessage); errorMessageList.add(errorMessage);
continue; continue;
} else { } else {
...@@ -230,7 +240,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -230,7 +240,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
settleResult = archivesDaprUtil.selectDeptByNo(data.getDeptNo()); settleResult = archivesDaprUtil.selectDeptByNo(data.getDeptNo());
if (Common.isEmpty(settleResult) || Common.isEmpty(settleResult.getCustomerCode())) { if (Common.isEmpty(settleResult) || Common.isEmpty(settleResult.getCustomerCode())) {
ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex() ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex()
,"第" + data.getRowIndex() + "行:项目编码[" + data.getDeptNo() + "]信息不存在",data); , "第" + data.getRowIndex() + "行:项目编码[" + data.getDeptNo() + "]信息不存在", data);
errorMessageList.add(errorMessage); errorMessageList.add(errorMessage);
continue; continue;
} }
...@@ -242,7 +252,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -242,7 +252,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
empResult = archivesDaprUtil.getTEmployeeInfoByIdcardAndName(vo); empResult = archivesDaprUtil.getTEmployeeInfoByIdcardAndName(vo);
if (empResult == null || empResult.getData() == null) { if (empResult == null || empResult.getData() == null) {
ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex() ErrorMessage<ArchiveImportVO> errorMessage = new ErrorMessage<>(data.getRowIndex()
,"第" + data.getRowIndex() + "行:人员档案信息不存在",data); , "第" + data.getRowIndex() + "行:人员档案信息不存在", data);
errorMessageList.add(errorMessage); errorMessageList.add(errorMessage);
continue; continue;
} }
...@@ -289,7 +299,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -289,7 +299,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
/** /**
* 保存任务表附件 * 保存任务表附件
*/ */
private void saveTaskAttachment(String taskId, String fileName, InputStream inputStream,String filePath) { private void saveTaskAttachment(String taskId, String fileName, InputStream inputStream, String filePath) {
try { try {
TAttaInfo attaInfo = new TAttaInfo(); TAttaInfo attaInfo = new TAttaInfo();
attaInfo.setAttaName(fileName); attaInfo.setAttaName(fileName);
...@@ -328,22 +338,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -328,22 +338,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
/** /**
* 获取项目权限 * 获取项目权限
* *
* @author huych
* @param userId * @param userId
* @return {@link List< String>} * @return {@link List< String>}
* @author huych
*/ */
public List<String> getDeptNoList(String userId){ public List<String> getDeptNoList(String userId) {
List<String> deptList = new ArrayList<>(16); List<String> deptList = new ArrayList<>(16);
try{ try {
R<TSettleDomainListVo> settleDomainList = archivesDaprUtil.getSettleDomainIdsByUserId(userId); R<TSettleDomainListVo> settleDomainList = archivesDaprUtil.getSettleDomainIdsByUserId(userId);
if(Common.isNotNull(settleDomainList) && settleDomainList.getCode() == CommonConstants.SUCCESS){ if (Common.isNotNull(settleDomainList) && settleDomainList.getCode() == CommonConstants.SUCCESS) {
TSettleDomainListVo data = settleDomainList.getData(); TSettleDomainListVo data = settleDomainList.getData();
if (Optional.ofNullable(data).isPresent()){ if (Optional.ofNullable(data).isPresent()) {
deptList = data.getDeptNos(); deptList = data.getDeptNos();
} }
} }
}catch (Exception e){ } catch (Exception e) {
log.error("查询项目信息出错:"+e); log.error("查询项目信息出错:" + e);
} }
return deptList; return deptList;
} }
...@@ -420,7 +430,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -420,7 +430,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 3. 校验同时上传任务数 // 3. 校验同时上传任务数
maxLimit = configLimitMapper.getSysConfigLimitByKey("UPDOLOAD_MAX_LIMIT"); maxLimit = configLimitMapper.getSysConfigLimitByKey("UPDOLOAD_MAX_LIMIT");
if (atomicInteger.incrementAndGet() > maxLimit){ if (atomicInteger.incrementAndGet() > maxLimit) {
atomicInteger.decrementAndGet(); atomicInteger.decrementAndGet();
return R.failed("有其他客服正在上传中,请5分钟后重试"); return R.failed("有其他客服正在上传中,请5分钟后重试");
} }
...@@ -451,8 +461,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -451,8 +461,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
zipAtta.setAttaSrc(tempZipFile.getAbsolutePath()); // 临时存储文件路径 zipAtta.setAttaSrc(tempZipFile.getAbsolutePath()); // 临时存储文件路径
attaInfoService.save(zipAtta); attaInfoService.save(zipAtta);
// 调用异步处理 // 调用异步处理(通过self代理对象调用,使@Async生效)
asyncProcessUpload(taskId); // 传递用户ID和用户名,因为异步线程无法获取用户上下文
self.asyncProcessUpload(taskId, user.getId(), user.getNickname());
return R.ok("ZIP文件提交成功,正在处理中"); return R.ok("ZIP文件提交成功,正在处理中");
...@@ -472,10 +483,14 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -472,10 +483,14 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
/** /**
* 第三步:异步处理上传 * 第三步:异步处理上传
*
* @param taskId 任务ID
* @param userId 用户ID(用于上传反馈文件)
* @param userName 用户名(用于上传反馈文件)
*/ */
@Override @Override
@Async @Async
public R<?> asyncProcessUpload(String taskId) { public void asyncProcessUpload(String taskId, String userId, String userName) {
List<ArchiveFeedbackVO> feedbackList = new ArrayList<>(); List<ArchiveFeedbackVO> feedbackList = new ArrayList<>();
File tempDir = null; File tempDir = null;
...@@ -485,7 +500,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -485,7 +500,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 查询任务及关联的明细 // 查询任务及关联的明细
TElectronicArchiveTask task = taskService.getById(taskId); TElectronicArchiveTask task = taskService.getById(taskId);
if (task == null) { if (task == null) {
return R.failed("任务不存在"); log.error("任务不存在,任务ID:{}", taskId);
return;
} }
// 查询ZIP附件(从附件导入中获取) // 查询ZIP附件(从附件导入中获取)
...@@ -495,7 +511,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -495,7 +511,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (CollUtil.isEmpty(zipAttas)) { if (CollUtil.isEmpty(zipAttas)) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP附件不存在"); log.error("ZIP附件不存在,任务ID:{}", taskId);
return;
} }
TAttaInfo zipAtta = zipAttas.get(0); TAttaInfo zipAtta = zipAttas.get(0);
...@@ -503,13 +520,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -503,13 +520,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 从附件记录中获取ZIP文件路径 // 从附件记录中获取ZIP文件路径
if (StrUtil.isBlank(zipAtta.getAttaSrc())) { if (StrUtil.isBlank(zipAtta.getAttaSrc())) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件路径为空"); log.error("ZIP文件路径为空,任务ID:{}", taskId);
return;
} }
zipSourceFile = new File(zipAtta.getAttaSrc()); zipSourceFile = new File(zipAtta.getAttaSrc());
if (!zipSourceFile.exists()) { if (!zipSourceFile.exists()) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件不存在"); log.error("ZIP文件不存在,任务ID:{},文件路径:{}", taskId, zipAtta.getAttaSrc());
return;
} }
// 获取任务关联的明细 // 获取任务关联的明细
...@@ -518,7 +537,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -518,7 +537,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (CollUtil.isEmpty(relations)) { if (CollUtil.isEmpty(relations)) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("任务没有关联的明细数据"); log.error("任务没有关联的明细数据,任务ID:{}", taskId);
return;
} }
List<String> detailIds = relations.stream() List<String> detailIds = relations.stream()
...@@ -533,7 +553,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -533,7 +553,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
tempDir = new File(tempDirPath); tempDir = new File(tempDirPath);
if (!tempDir.exists() && !tempDir.mkdirs()) { if (!tempDir.exists() && !tempDir.mkdirs()) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("创建临时目录失败"); log.error("创建临时目录失败,任务ID:{},目录路径:{}", taskId, tempDirPath);
return;
} }
// 解压ZIP文件 // 解压ZIP文件
...@@ -542,7 +563,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -542,7 +563,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (!zipSourceFile.canRead()) { if (!zipSourceFile.canRead()) {
log.error("ZIP文件不可读,路径:{}", zipSourceFile.getAbsolutePath()); log.error("ZIP文件不可读,路径:{}", zipSourceFile.getAbsolutePath());
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件不可读"); return;
} }
// 使用指定字符集解压(支持中文文件名) // 使用指定字符集解压(支持中文文件名)
// Windows系统通常使用GBK编码,Linux使用UTF-8 // Windows系统通常使用GBK编码,Linux使用UTF-8
...@@ -556,7 +577,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -556,7 +577,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
log.error("解压ZIP文件失败,任务ID:{},ZIP路径:{},临时目录:{}", log.error("解压ZIP文件失败,任务ID:{},ZIP路径:{},临时目录:{}",
taskId, zipSourceFile.getAbsolutePath(), tempDirPath, e); taskId, zipSourceFile.getAbsolutePath(), tempDirPath, e);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("解压ZIP文件失败:" + e.getMessage() + ",请检查ZIP文件是否完整且格式正确"); return;
} }
// 获取ZIP包的根目录(第一级目录,身份证+姓名目录) // 获取ZIP包的根目录(第一级目录,身份证+姓名目录)
...@@ -600,7 +621,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -600,7 +621,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 遍历该人员的所有文件夹 // 遍历该人员的所有文件夹
for (File personDir : personDirs) { for (File personDir : personDirs) {
processPersonDirectoryWithResult(personDir, detail, materialTypes, failReasons, taskId); processPersonDirectoryWithResult(personDir, detail, materialTypes, failReasons, taskId, userId, userName);
} }
personMaterialTypesMap.put(uniqueKey, materialTypes); personMaterialTypesMap.put(uniqueKey, materialTypes);
...@@ -656,9 +677,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -656,9 +677,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
task.setStatus(ArchiveConstants.TASK_STATUS_GENERATED); task.setStatus(ArchiveConstants.TASK_STATUS_GENERATED);
taskService.updateById(task); taskService.updateById(task);
// 生成反馈表 // 生成反馈表(传递用户信息)
generateFeedbackExcel(task, feedbackList); generateFeedbackExcel(task, feedbackList, userId, userName);
return R.ok("处理完成"); log.info("异步任务处理完成,任务ID:{}", taskId);
} catch (Exception e) { } catch (Exception e) {
log.error("异步处理任务失败,任务ID:{}", taskId, e); log.error("异步处理任务失败,任务ID:{}", taskId, e);
...@@ -667,7 +688,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -667,7 +688,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (task != null) { if (task != null) {
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
} }
return R.failed("处理失败:" + e.getMessage());
} finally { } finally {
// 清理临时解压目录 // 清理临时解压目录
if (tempDir != null && tempDir.exists()) { if (tempDir != null && tempDir.exists()) {
...@@ -829,9 +849,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -829,9 +849,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
* @param materialTypes 成功处理的资料类型列表(输出参数) * @param materialTypes 成功处理的资料类型列表(输出参数)
* @param failReasons 失败原因列表(输出参数) * @param failReasons 失败原因列表(输出参数)
* @param taskId 任务ID * @param taskId 任务ID
* @param userId 用户ID
* @param userName 用户名
*/ */
private void processPersonDirectoryWithResult(File personDir, TElectronicArchiveDetail detail, private void processPersonDirectoryWithResult(File personDir, TElectronicArchiveDetail detail,
List<String> materialTypes, List<String> failReasons, String taskId) { List<String> materialTypes, List<String> failReasons, String taskId,
String userId, String userName) {
// 处理第三级目录(资料类型或直接是文件) // 处理第三级目录(资料类型或直接是文件)
File[] subFiles = personDir.listFiles(); File[] subFiles = personDir.listFiles();
if (subFiles == null || subFiles.length == 0) { if (subFiles == null || subFiles.length == 0) {
...@@ -868,7 +891,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -868,7 +891,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
} }
// 按资料类型分组处理目录下的所有文件 // 按资料类型分组处理目录下的所有文件
String result = processMaterialTypeDirectoryWithResult(subFile, detail, materialType, taskId); String result = processMaterialTypeDirectoryWithResult(subFile, detail, materialType, taskId, userId, userName);
if ("success".equals(result)) { if ("success".equals(result)) {
materialTypesSet.add(materialType); materialTypesSet.add(materialType);
} else { } else {
...@@ -882,7 +905,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -882,7 +905,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 统一处理所有直接文件(存量类型) // 统一处理所有直接文件(存量类型)
if (!stockFiles.isEmpty()) { if (!stockFiles.isEmpty()) {
String result = processMaterialTypeFilesWithResult(stockFiles, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, taskId); String result = processMaterialTypeFilesWithResult(stockFiles, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, taskId, userId, userName);
if ("success".equals(result)) { if ("success".equals(result)) {
materialTypesSet.add(ArchiveConstants.MATERIAL_TYPE_STOCK); materialTypesSet.add(ArchiveConstants.MATERIAL_TYPE_STOCK);
} else { } else {
...@@ -927,10 +950,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -927,10 +950,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
* @param detail 电子档案明细 * @param detail 电子档案明细
* @param materialType 资料类型 * @param materialType 资料类型
* @param taskId 任务ID * @param taskId 任务ID
* @param userId 用户ID
* @param userName 用户名
* @return "success" 表示成功,其他表示失败原因 * @return "success" 表示成功,其他表示失败原因
*/ */
private String processMaterialTypeDirectoryWithResult(File directory, TElectronicArchiveDetail detail, private String processMaterialTypeDirectoryWithResult(File directory, TElectronicArchiveDetail detail,
String materialType, String taskId) { String materialType, String taskId, String userId, String userName) {
// 收集该资料类型目录下的所有文件(递归收集子目录中的文件) // 收集该资料类型目录下的所有文件(递归收集子目录中的文件)
List<File> allFiles = new ArrayList<>(); List<File> allFiles = new ArrayList<>();
collectAllFiles(directory, allFiles); collectAllFiles(directory, allFiles);
...@@ -940,7 +965,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -940,7 +965,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
} }
// 统一处理该资料类型下的所有文件 // 统一处理该资料类型下的所有文件
return processMaterialTypeFilesWithResult(allFiles, detail, materialType, taskId); return processMaterialTypeFilesWithResult(allFiles, detail, materialType, taskId, userId, userName);
} }
/** /**
...@@ -1043,10 +1068,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1043,10 +1068,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
* @param detail 电子档案明细 * @param detail 电子档案明细
* @param materialType 资料类型 * @param materialType 资料类型
* @param taskId 任务ID * @param taskId 任务ID
* @param userId 用户ID
* @param userName 用户名
* @return "success" 表示成功,其他表示失败原因 * @return "success" 表示成功,其他表示失败原因
*/ */
private String processMaterialTypeFilesWithResult(List<File> files, TElectronicArchiveDetail detail, private String processMaterialTypeFilesWithResult(List<File> files, TElectronicArchiveDetail detail,
String materialType, String taskId) { String materialType, String taskId, String userId, String userName) {
// 第一步:验证所有文件格式 // 第一步:验证所有文件格式
for (File file : files) { for (File file : files) {
String fileName = file.getName(); String fileName = file.getName();
...@@ -1073,12 +1100,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1073,12 +1100,15 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
} }
// 上传文件到阿里云OSS,uploadFileReturnAtta会自动生成TAttaInfo记录 // 上传文件到阿里云OSS,uploadFileReturnAtta会自动生成TAttaInfo记录
// 传递用户信息,支持异步场景
R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta( R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta(
multipartFile, multipartFile,
ossDirectory, ossDirectory,
CommonConstants.FOUR_STRING, CommonConstants.FOUR_STRING,
detail.getId(), detail.getId(),
taskId taskId,
userId,
userName
); );
if (!R.isSuccess(uploadResult)) { if (!R.isSuccess(uploadResult)) {
...@@ -1186,9 +1216,16 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1186,9 +1216,16 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
/** /**
* 生成反馈表Excel * 生成反馈表Excel
*
* @param task 任务信息
* @param feedbackList 反馈列表
* @param userId 用户ID
* @param userName 用户名
*/ */
private void generateFeedbackExcel(TElectronicArchiveTask task, List<ArchiveFeedbackVO> feedbackList) { private void generateFeedbackExcel(TElectronicArchiveTask task, List<ArchiveFeedbackVO> feedbackList,
String userId, String userName) {
if (CollUtil.isEmpty(feedbackList)) { if (CollUtil.isEmpty(feedbackList)) {
log.warn("反馈列表为空,跳过生成反馈表,任务ID:{}", task.getId());
return; return;
} }
...@@ -1203,28 +1240,35 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1203,28 +1240,35 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
.sheet("处理结果反馈") .sheet("处理结果反馈")
.doWrite(feedbackList); .doWrite(feedbackList);
// 上传反馈表到OSS log.info("反馈表Excel文件生成成功,文件路径:{},记录数:{}", tempFilePath, feedbackList.size());
YifuUser user = SecurityUtils.getUser();
if (user != null) { // 上传反馈表到OSS(传递用户信息)
if (StrUtil.isNotBlank(userId)) {
R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta( R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta(
fileToMultipartFile(feedbackFile), fileToMultipartFile(feedbackFile),
"archive/feedback", "archive/feedback",
ArchiveConstants.ATTA_RELATION_TYPE_FEEDBACK, ArchiveConstants.ATTA_RELATION_TYPE_FEEDBACK,
task.getId() task.getId(),
null, // taskId为null
userId,
userName
); );
if (R.isSuccess(uploadResult)) { if (R.isSuccess(uploadResult)) {
log.info("反馈表生成成功"); log.info("反馈表上传成功,任务ID:{},附件ID:{}", task.getId(), uploadResult.getData().getId());
} else { } else {
log.error("反馈表上传失败"); log.error("反馈表上传失败,任务ID:{},失败原因:{}", task.getId(), uploadResult.getMsg());
} }
} else {
log.error("用户ID为空,无法上传反馈表,任务ID:{}", task.getId());
} }
// 删除临时文件 // 删除临时文件
FileUtil.del(feedbackFile); FileUtil.del(feedbackFile);
log.info("临时反馈表文件已删除:{}", tempFilePath);
} catch (Exception e) { } catch (Exception e) {
log.error("生成反馈表失败:", e); log.error("生成反馈表失败,任务ID:{},异常信息:", task.getId(), e);
} }
} }
......
package com.yifu.cloud.plus.v1.batch.service.impl; package com.yifu.cloud.plus.v1.batch.service.impl;
import cn.hutool.core.util.StrUtil;
import com.yifu.cloud.plus.v1.batch.entity.TAttaInfo; import com.yifu.cloud.plus.v1.batch.entity.TAttaInfo;
import com.yifu.cloud.plus.v1.batch.mapper.SysConfigLimitMapper; import com.yifu.cloud.plus.v1.batch.mapper.SysConfigLimitMapper;
import com.yifu.cloud.plus.v1.batch.service.FileUploadService; import com.yifu.cloud.plus.v1.batch.service.FileUploadService;
...@@ -14,17 +15,12 @@ import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser; ...@@ -14,17 +15,12 @@ import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils; import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@Service @Service
...@@ -49,6 +45,18 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -49,6 +45,18 @@ public class FileUploadServiceImpl implements FileUploadService {
@Override @Override
public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException { public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException {
// 从当前上下文获取用户信息
YifuUser user = SecurityUtils.getUser();
if (user != null) {
return uploadFileReturnAtta(file, filePath, type, domainId, taskId, user.getId(), user.getNickname());
} else {
return uploadFileReturnAtta(file, filePath, type, domainId, taskId, null, null);
}
}
@Override
public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId,
String taskId, String userId, String userName) throws IOException {
if (null == file) { if (null == file) {
return R.failed("文件删除异常,请重新上传!"); return R.failed("文件删除异常,请重新上传!");
} }
...@@ -98,12 +106,23 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -98,12 +106,23 @@ public class FileUploadServiceImpl implements FileUploadService {
attaInfo.setDomainId(domainId); attaInfo.setDomainId(domainId);
attaInfo.setTaskId(taskId); attaInfo.setTaskId(taskId);
Set<String> dbAuthsSet = new HashSet<>(); // 优先使用传入的用户信息(支持异步场景)
Collection<? extends GrantedAuthority> authorities = AuthorityUtils if (Common.isNotNull(userId) && StrUtil.isNotBlank(userId)) {
.createAuthorityList(dbAuthsSet.toArray(new String[0])); attaInfo.setCreateBy(userId);
attaInfo.setCreateName(userName);
} else {
// 从上下文获取(同步场景)
try {
YifuUser user = SecurityUtils.getUser(); YifuUser user = SecurityUtils.getUser();
if (user != null) {
attaInfo.setCreateBy(user.getId()); attaInfo.setCreateBy(user.getId());
attaInfo.setCreateName(user.getNickname()); attaInfo.setCreateName(user.getNickname());
}
} catch (Exception e) {
log.warn("获取用户上下文失败,附件创建人将为空", e);
}
}
attaInfo = tAttaInfoService.add(attaInfo); attaInfo = tAttaInfoService.add(attaInfo);
} catch (Exception e) { } catch (Exception e) {
log.error("OSS文件上传异常:" + e.getMessage()); log.error("OSS文件上传异常:" + e.getMessage());
......
...@@ -229,10 +229,13 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -229,10 +229,13 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
} }
try { try {
//重复数据检测
Map<String,String> map = new HashMap<>();
// 1. 校验请求并查询档案信息 // 1. 校验请求并查询档案信息
for (ArchiveBatchDownloadRequestVO request : requestList) { for (ArchiveBatchDownloadRequestVO request : requestList) {
try { try {
validateAndPrepareDownload(request, downloadMap, feedbackList, isCheck, deptNoList); validateAndPrepareDownload(request, downloadMap, feedbackList, isCheck, deptNoList, map);
} catch (Exception e) { } catch (Exception e) {
log.error("处理下载请求失败,姓名:{},身份证:{},项目编码:{}", log.error("处理下载请求失败,姓名:{},身份证:{},项目编码:{}",
request.getEmpName(), request.getEmpIdcard(), request.getDeptNo(), e); request.getEmpName(), request.getEmpIdcard(), request.getDeptNo(), e);
...@@ -345,7 +348,8 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -345,7 +348,8 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
Map<String, ArchiveDownloadInfo> downloadMap, Map<String, ArchiveDownloadInfo> downloadMap,
List<ArchiveDownloadFeedbackVO> feedbackList, List<ArchiveDownloadFeedbackVO> feedbackList,
boolean isCheck, boolean isCheck,
List<String> deptNoList) { List<String> deptNoList,
Map<String,String> map) {
// 1. 根据姓名、身份证、项目编码、项目名称查询电子档案明细 // 1. 根据姓名、身份证、项目编码、项目名称查询电子档案明细
LambdaQueryWrapper<TElectronicArchiveDetail> wrapper = Wrappers.<TElectronicArchiveDetail>lambdaQuery() LambdaQueryWrapper<TElectronicArchiveDetail> wrapper = Wrappers.<TElectronicArchiveDetail>lambdaQuery()
...@@ -362,6 +366,24 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -362,6 +366,24 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 查询档案明细 // 查询档案明细
TElectronicArchiveDetail detail = baseMapper.selectOne(wrapper); TElectronicArchiveDetail detail = baseMapper.selectOne(wrapper);
StringBuilder s = new StringBuilder();
s.append(request.getEmpIdcard());
s.append("_");
s.append(request.getDeptNo());
s.append("_");
s.append(request.getDeptName());
s.append("_");
s.append(request.getEmpName());
s.append("_");
s.append(request.getMaterialType());
if (null != map.get(s.toString())) {
feedbackList.add(createFeedbackVO(request, "存在重复的导出人员信息",detail));
return;
}else {
map.put(s.toString(), "1");
}
//项目权限校验 //项目权限校验
if (isCheck && !deptNoList.contains(request.getDeptNo())) { if (isCheck && !deptNoList.contains(request.getDeptNo())) {
feedbackList.add(createFeedbackVO(request, "没有该项目的权限",detail)); feedbackList.add(createFeedbackVO(request, "没有该项目的权限",detail));
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveDetail;
import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveTask; import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveTask;
import com.yifu.cloud.plus.v1.batch.entity.TTaskArchiveRelation; import com.yifu.cloud.plus.v1.batch.entity.TTaskArchiveRelation;
import com.yifu.cloud.plus.v1.batch.mapper.TElectronicArchiveDetailMapper; import com.yifu.cloud.plus.v1.batch.mapper.TElectronicArchiveDetailMapper;
...@@ -67,7 +68,9 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr ...@@ -67,7 +68,9 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
//删除关联关系表 //删除关联关系表
relationService.removeById(relation.getId()); relationService.removeById(relation.getId());
//删除电子档案明细表 //删除电子档案明细表
detailMapper.deleteById(relation.getArchiveDetailId()); detailMapper.delete(Wrappers.<TElectronicArchiveDetail>query().lambda()
.eq(TElectronicArchiveDetail::getStatus,CommonConstants.ZERO_STRING)
.eq(TElectronicArchiveDetail::getId,relation.getArchiveDetailId()));
} }
} }
return R.ok(); return R.ok();
......
...@@ -39,7 +39,7 @@ public interface TInsurancePolicyMapper extends BaseMapper<TInsurancePolicy> { ...@@ -39,7 +39,7 @@ public interface TInsurancePolicyMapper extends BaseMapper<TInsurancePolicy> {
*/ */
List<TInsurancePolicy> getInsurancePolicyList(@Param("param") InsurancePolicyListParam param); List<TInsurancePolicy> getInsurancePolicyList(@Param("param") InsurancePolicyListParam param);
Page<PolicyListVo> policyPageToAutoSelect(Page page,@Param("param") InsuredParam param); IPage<PolicyListVo> policyPageToAutoSelect(Page page,@Param("param") InsuredParam param);
} }
......
...@@ -75,5 +75,5 @@ public interface TInsurancePolicyService extends IService<TInsurancePolicy> { ...@@ -75,5 +75,5 @@ public interface TInsurancePolicyService extends IService<TInsurancePolicy> {
R<List<ErrorMessage>> importInsurancePolicy(InputStream inputStream); R<List<ErrorMessage>> importInsurancePolicy(InputStream inputStream);
Page<PolicyListVo> policyPageToAutoSelect(Page<PolicyListVo> page, InsuredParam param, String mId); IPage<PolicyListVo> policyPageToAutoSelect(Page<PolicyListVo> page, InsuredParam param, String mId);
} }
...@@ -430,7 +430,7 @@ public class TInsurancePolicyServiceImpl extends ServiceImpl<TInsurancePolicyMap ...@@ -430,7 +430,7 @@ public class TInsurancePolicyServiceImpl extends ServiceImpl<TInsurancePolicyMap
@Override @Override
public Page<PolicyListVo> policyPageToAutoSelect(Page<PolicyListVo> page, InsuredParam param, String mId) { public IPage<PolicyListVo> policyPageToAutoSelect(Page<PolicyListVo> page, InsuredParam param, String mId) {
// 查保单未过期的数据 // 查保单未过期的数据
String today = LocalDateUtil.getDateSrt(LocalDate.now()); String today = LocalDateUtil.getDateSrt(LocalDate.now());
param.setPolicyEnd(today); param.setPolicyEnd(today);
......
...@@ -1295,7 +1295,7 @@ ...@@ -1295,7 +1295,7 @@
<!-- 派增(0待审核、1待办理、3办理成功、4办理失败9 审核不通过)、派减(5待审核 6待办理 7 办理成功 8 办理失败 ) --> <!-- 派增(0待审核、1待办理、3办理成功、4办理失败9 审核不通过)、派减(5待审核 6待办理 7 办理成功 8 办理失败 ) -->
and a.fund_status in ('0', '1', '3', '5', '6', '8') and a.fund_status in ('0', '1', '3', '5', '6', '8')
<if test="type != null and type == '1'"> <if test="type != null and type = '1'">
and d.create_name not like '自动化%' and d.create_name not like '自动化%'
</if> </if>
</select> </select>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment