diff --git a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/MsxfContractBatchTasklet.java b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/MsxfContractBatchTasklet.java
index 2e5abac..d8af482 100644
--- a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/MsxfContractBatchTasklet.java
+++ b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/MsxfContractBatchTasklet.java
@@ -3,6 +3,7 @@ package com.zkj.loan.batch.tasklet;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zkj.loan.common.internet.mapper.sys.SysMqRecordMapper;
import com.zkj.loan.common.internet.model.sys.SysMqRecord;
+import com.zkj.loan.common.internet.service.sys.impl.SysMqRecordServiceImpl;
import com.zkj.loan.common.internet.utils.DateUtil;
import com.zkj.rcs.scheduler.model.JobReqEntity;
import lombok.extern.slf4j.Slf4j;
@@ -23,6 +24,8 @@ public abstract class MsxfContractBatchTasklet extends AbstractBatchTasklet {
@Resource
private SysMqRecordMapper sysMqRecordMapper;
+ @Resource
+ private SysMqRecordServiceImpl sysMqRecordService;
public String getDate(JobReqEntity jobReqEntity) {
return (String) jobReqEntity.getJobParameter().get("tranDate");
@@ -83,6 +86,14 @@ public abstract class MsxfContractBatchTasklet extends AbstractBatchTasklet {
log.info("任务耗时:{} 毫秒", end - start);
}
+ public boolean updateSysMqRecordStatus(SysMqRecord recordsToUpdate) {
+ long start = System.currentTimeMillis();
+ boolean b = sysMqRecordService.updateById(recordsToUpdate);
+ long end = System.currentTimeMillis();
+ log.info("bizNo: {} 更新 sys_mq_record 状态,更新状态:{},任务耗时:{} 毫秒", recordsToUpdate.getBizNo(), b, end - start);
+ return b;
+ }
+
public String getFileType(JobReqEntity jobReqEntity) {
return (String) jobReqEntity.getJobParameter().get("fileType");
}
diff --git a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractDownloadTasklet.java b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractDownloadTasklet.java
index c0c7668..4d223e8 100644
--- a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractDownloadTasklet.java
+++ b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractDownloadTasklet.java
@@ -13,26 +13,37 @@ import com.zkj.loan.batch.util.JsonUtil;
import com.zkj.loan.common.internet.feign.MsxfSftpClient;
import com.zkj.loan.common.internet.feign.pojo.MsxfSftpRespVO;
import com.zkj.loan.common.internet.mapper.sys.SysMqRecordMapper;
+import com.zkj.loan.common.internet.model.fac.LoanDuebill;
+import com.zkj.loan.common.internet.model.pay.PayUseCreditExt;
import com.zkj.loan.common.internet.model.sys.SysMqRecord;
+import com.zkj.loan.common.internet.service.contract.entity.ContractConst;
import com.zkj.loan.common.internet.service.tranfer.FileTransferService;
import com.zkj.loan.common.internet.utils.DateUtil;
import com.zkj.loan.common.internet.utils.ZipUtils;
import com.zkj.open.api.client.feign.api.Result;
+import com.zkj.rcs.common.core.util.seq.IdGenerator;
import com.zkj.rcs.scheduler.model.JobReqEntity;
import com.zkj.rcs.scheduler.model.JobRespEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.File;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
+import java.util.stream.Collectors;
import static com.zkj.loan.batch.constants.JobStatusCode.*;
import static com.zkj.loan.common.internet.constant.BusinessConstant.SUCCESS_00000;
+import static com.zkj.loan.common.internet.service.contract.entity.ContractConst.BIZ_TYPE_FILE_DOWNLOAD;
/**
* 功能描述:
@@ -54,7 +65,8 @@ public class MsxfContractDownloadTasklet extends MsxfContractBatchTasklet {
private MsxfSftpClient msxfSftpClient;
@Resource
private SysMqRecordMapper sysMqRecordMapper;
-
+ @Resource
+ private IdGenerator idGenerator;
private final static String MSG = "批量下载合同文件【msxfContractDownloadTasklet】";
private static final Semaphore SEMAPHORE = new Semaphore(10);
private static final List RETRY_LIST = new ArrayList<>();
@@ -116,48 +128,180 @@ public class MsxfContractDownloadTasklet extends MsxfContractBatchTasklet {
private void download(JSONObject jsonParams, List fileNames, Boolean first) {
// 创建一个固定大小的线程池
int size = CollUtil.size(fileNames);
- ExecutorService executor = Executors.newFixedThreadPool(size);
+ //ExecutorService executor = Executors.newFixedThreadPool(size);
+ List recordList = new ArrayList<>();
+ String bizDate = jsonParams.getStr("bizDate");
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.lambda().eq(SysMqRecord::getBizDate,bizDate);
+ queryWrapper.lambda().eq(SysMqRecord::getBizType,ContractConst.BIZ_TYPE_FILE_DOWNLOAD);
+ List list = sysMqRecordMapper.selectList(queryWrapper);
+ Map map = list.stream().collect(Collectors.toMap
+ (SysMqRecord::getBizNo, SysMqRecord -> SysMqRecord, (a1, a2) -> a1));
// 最多10个任务执行
for (int i = 0; i < size; i++) {
String filename = CollUtil.get(fileNames, i);
- executor.submit(() -> {
- try {
- SEMAPHORE.acquire();
- log.info("开始下载文件 {} ...", filename);
+ try {
+ log.info("开始下载文件 {} ...", filename);
- jsonParams.set("filename", filename);
- Result result = msxfSftpClient.contDownload(jsonParams);
- if (!SUCCESS_00000.equals(result.getCode())) {
- throw new RuntimeException("SFTP下载接口调用失败 code:" + result.getCode());
- }
- MsxfSftpRespVO msxfSftpRespVO = BeanUtil.toBean(result.getData(), MsxfSftpRespVO.class);
- String saveFilePath = msxfSftpRespVO.getFilePatchName();
- String zipLocalPath = saveFilePath + filename;
- File file = FileUtil.writeBytes(msxfSftpRespVO.getFileContent(), zipLocalPath);
- if (!file.exists()) {
- throw new RuntimeException("SFTP文件下载失败,file is not exists");
- }
- log.info("文件 {} 下载完毕...", filename);
- // 解压缩文件
- String unzipFilePath = saveFilePath + StrUtil.removeSuffix(filename, ".zip") + File.separator;
- ZipUtils.unzip(zipLocalPath, unzipFilePath);
- log.info("文件 {} 解压完毕...", filename);
-
- } catch (Exception e) {
- // 判断是否为首次下载,如果不是则不再尝试
- if (first) {
- RETRY_LIST.add(filename);
- } else {
- ERROR_LIST.add(filename);
- }
- log.error("{} 文件 {} 下载失败 ==> {}", MSG, filename, e.getMessage());
- } finally {
- SEMAPHORE.release();
+ jsonParams.set("filename", filename);
+ Result result = msxfSftpClient.contDownload(jsonParams);
+ if (!SUCCESS_00000.equals(result.getCode())) {
+ throw new RuntimeException("SFTP下载接口调用失败 code:" + result.getCode());
}
- });
+ MsxfSftpRespVO msxfSftpRespVO = BeanUtil.toBean(result.getData(), MsxfSftpRespVO.class);
+ String saveFilePath = msxfSftpRespVO.getFilePatchName();
+ String zipLocalPath = saveFilePath + filename;
+ File file = FileUtil.writeBytes(msxfSftpRespVO.getFileContent(), zipLocalPath);
+ if (!file.exists()) {
+ throw new RuntimeException("SFTP文件下载失败,file is not exists");
+ }
+ log.info("文件 {} 下载完毕...", filename);
+ // 解压缩文件
+ String unzipFilePath = saveFilePath + StrUtil.removeSuffix(filename, ".zip") + File.separator;
+ ZipUtils.unzip(zipLocalPath, unzipFilePath);
+ log.info("文件 {} 解压完毕...", filename);
+
+ // 创建 File 对象
+ File directory = new File(unzipFilePath);
+ String bizNo = StrUtil.removeSuffix(filename, ".zip");
+ // 检查路径是否存在并且是一个目录
+ if (directory.exists() && directory.isDirectory()) {
+ // 获取目录下的文件列表
+ File[] files = directory.listFiles();
+ // 遍历文件列表
+ if (files != null) {
+ for (File fil : files) {
+ SysMqRecord mqRecord = map.get(bizNo);
+ if (Objects.nonNull(mqRecord)){
+ continue;
+ }
+ addrecordList(recordList,fil,bizNo,bizDate);
+
+ }
+ }
+ } else {
+ System.out.println("指定的路径不是一个有效的目录。");
+ }
+ } catch (Exception e) {
+ // 判断是否为首次下载,如果不是则不再尝试
+ if (first) {
+ RETRY_LIST.add(filename);
+ } else {
+ ERROR_LIST.add(filename);
+ }
+ log.error("{} 文件 {} 下载失败 ==> {}", MSG, filename, e.getMessage());
+ } finally {
+ SEMAPHORE.release();
+ }
+
+ }
+ if (!CollectionUtils.isEmpty(recordList)) {
+ sysMqRecordMapper.insertBatch(recordList);
+ }
+ }
+
+ private void addrecordList(List recordList,File fil,String bizNo,String bizDate) {
+ if (fil.getName().contains(ContractConst.CONTRACT_POLICY)){
+ SysMqRecord mqRecordDown = new SysMqRecord();
+ mqRecordDown.setId(idGenerator.nextIdStr());
+ mqRecordDown.setBizType(ContractConst.BIZ_TYPE_FILE_DOWNLOAD);
+ mqRecordDown.setBizFileType(ContractConst.CONTRACT_POLICY);
+ mqRecordDown.setBizNo(bizNo);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("appNo",bizNo);
+ jsonObject.put("filePath",fil.getAbsolutePath());
+ mqRecordDown.setData(jsonObject.toString());
+ mqRecordDown.setStatus(SysMqRecord.Status.DONE.getStatus());
+ mqRecordDown.setBizDate(bizDate);
+ recordList.add(mqRecordDown);
+ SysMqRecord mqRecordSign = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordSign);
+ mqRecordSign.setId(idGenerator.nextIdStr());
+ mqRecordSign.setBizType(ContractConst.BIZ_TYPE_FILE_SIGN);
+ mqRecordSign.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordSign);
+ SysMqRecord mqRecordBack = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordBack);
+ mqRecordBack.setId(idGenerator.nextIdStr());
+ mqRecordBack.setBizType(ContractConst.BIZ_TYPE_FILE_BACK);
+ mqRecordBack.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordBack);
+ } else if (fil.getName().contains("entrust")){
+ SysMqRecord mqRecordDown = new SysMqRecord();
+ mqRecordDown.setId(idGenerator.nextIdStr());
+ mqRecordDown.setBizType(ContractConst.BIZ_TYPE_FILE_DOWNLOAD);
+ mqRecordDown.setBizFileType(ContractConst.CONTRACT_PROXY);
+ mqRecordDown.setBizNo(bizNo);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("appNo",bizNo);
+ jsonObject.put("filePath",fil.getAbsolutePath());
+ mqRecordDown.setData(jsonObject.toString());
+ mqRecordDown.setStatus(SysMqRecord.Status.DONE.getStatus());
+ mqRecordDown.setBizDate(bizDate);
+ recordList.add(mqRecordDown);
+ SysMqRecord mqRecordSign = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordSign);
+ mqRecordSign.setId(idGenerator.nextIdStr());
+ mqRecordSign.setBizType(ContractConst.BIZ_TYPE_FILE_SIGN);
+ mqRecordSign.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordSign);
+ SysMqRecord mqRecordBack = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordBack);
+ mqRecordBack.setId(idGenerator.nextIdStr());
+ mqRecordBack.setBizType(ContractConst.BIZ_TYPE_FILE_BACK);
+ mqRecordBack.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordBack);
+ } else if (fil.getName().contains(ContractConst.CONTRACT_FINANCING)) {
+ SysMqRecord mqRecordDown = new SysMqRecord();
+ mqRecordDown.setId(idGenerator.nextIdStr());
+ mqRecordDown.setBizType(ContractConst.BIZ_TYPE_FILE_DOWNLOAD);
+ mqRecordDown.setBizFileType(ContractConst.CONTRACT_FINANCING);
+ mqRecordDown.setBizNo(bizNo);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("appNo",bizNo);
+ jsonObject.put("filePath",fil.getAbsolutePath());
+ mqRecordDown.setData(jsonObject.toString());
+ mqRecordDown.setStatus(SysMqRecord.Status.DONE.getStatus());
+ mqRecordDown.setBizDate(bizDate);
+ recordList.add(mqRecordDown);
+ SysMqRecord mqRecordSign = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordSign);
+ mqRecordSign.setId(idGenerator.nextIdStr());
+ mqRecordSign.setBizType(ContractConst.BIZ_TYPE_FILE_SIGN);
+ mqRecordSign.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordSign);
+ SysMqRecord mqRecordBack = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordBack);
+ mqRecordBack.setId(idGenerator.nextIdStr());
+ mqRecordBack.setBizType(ContractConst.BIZ_TYPE_FILE_BACK);
+ mqRecordBack.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordBack);
+ } else if (fil.getName().contains(ContractConst.INSTALLMENT_GUARANTEE)) {
+ SysMqRecord mqRecordDown = new SysMqRecord();
+ mqRecordDown.setId(idGenerator.nextIdStr());
+ mqRecordDown.setBizType(ContractConst.BIZ_TYPE_FILE_DOWNLOAD);
+ mqRecordDown.setBizFileType(ContractConst.INSTALLMENT_GUARANTEE);
+ mqRecordDown.setBizNo(bizNo);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("appNo",bizNo);
+ jsonObject.put("filePath",fil.getAbsolutePath());
+ mqRecordDown.setData(jsonObject.toString());
+ mqRecordDown.setStatus(SysMqRecord.Status.DONE.getStatus());
+ mqRecordDown.setBizDate(bizDate);
+ recordList.add(mqRecordDown);
+ SysMqRecord mqRecordSign = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordSign);
+ mqRecordSign.setId(idGenerator.nextIdStr());
+ mqRecordSign.setBizType(ContractConst.BIZ_TYPE_FILE_SIGN);
+ mqRecordSign.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordSign);
+ SysMqRecord mqRecordBack = new SysMqRecord();
+ BeanUtil.copyProperties(mqRecordDown,mqRecordBack);
+ mqRecordBack.setId(idGenerator.nextIdStr());
+ mqRecordBack.setBizType(ContractConst.BIZ_TYPE_FILE_BACK);
+ mqRecordBack.setStatus(SysMqRecord.Status.DOING.getStatus());
+ recordList.add(mqRecordBack);
}
- // 关闭线程池
- executor.shutdown();
}
private JSONObject populateParams(JobReqEntity jobReqEntity) {
@@ -185,6 +329,7 @@ public class MsxfContractDownloadTasklet extends MsxfContractBatchTasklet {
jsonParams.set("saveFilePath", saveFilePath);
jsonParams.set("downloadPath", downloadPath);
jsonParams.set("uuid", uuid);
+ jsonParams.set("bizDate",formattedDate);
String bizType = getEventType(jobReqEntity);
Integer status = getStatus(jobReqEntity);
diff --git a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractToSFTPTasklet.java b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractToSFTPTasklet.java
index 5da15f0..b49b492 100644
--- a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractToSFTPTasklet.java
+++ b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxf/MsxfContractToSFTPTasklet.java
@@ -1,28 +1,43 @@
package com.zkj.loan.batch.tasklet.msxf;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zkj.loan.batch.tasklet.MsxfContractBatchTasklet;
+import com.zkj.loan.common.internet.feign.MsxfSftpClient;
+import com.zkj.loan.common.internet.feign.pojo.MsxfSftpReqVO;
+import com.zkj.loan.common.internet.feign.pojo.MsxfSftpRespVO;
import com.zkj.loan.common.internet.mapper.sys.SysMqRecordMapper;
import com.zkj.loan.common.internet.model.sys.SysMqRecord;
+import com.zkj.loan.common.internet.service.contract.entity.ContractConst;
import com.zkj.loan.common.internet.service.sub.msxf.domain.pojo.LmtSignRecordVO;
import com.zkj.loan.common.internet.service.tranfer.FileTransferService;
import com.zkj.loan.common.internet.utils.BatchFileUtil;
import com.zkj.loan.common.internet.utils.DateUtil;
+import com.zkj.open.api.client.feign.api.Result;
import com.zkj.rcs.common.core.util.ftp.SFTPUtil;
import com.zkj.rcs.scheduler.model.JobReqEntity;
import com.zkj.rcs.scheduler.model.JobRespEntity;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
-import java.util.List;
+import java.time.LocalDate;
+import java.util.*;
import java.util.stream.Collectors;
import static com.zkj.loan.batch.constants.JobStatusCode.*;
+import static com.zkj.loan.common.internet.constant.BusinessConstant.SUCCESS_00000;
import static com.zkj.loan.common.internet.service.sub.msxf.domain.enums.EventType.FILE_BACK;
/**
@@ -46,40 +61,97 @@ public class MsxfContractToSFTPTasklet extends MsxfContractBatchTasklet {
@Resource
private FileTransferService fileTransferService;
+ @Resource
+ private MsxfSftpClient msxfSftpClient;
+
+ @Value("${msxf.file.transfer.sleep.enabled:true}")
+ private boolean sleepEnabled;
+
+ private final static String MSG = "回传签章合同给马上消费【msxfContractToSFTPTasklet】";
@Override
public void runJob(JobReqEntity jobReqEntity, JobRespEntity jobRespEntity) throws Exception {
log.info("批量【msxfContractToSFTPTasklet】入参:[{}]", jobReqEntity);
String date = getDate(jobReqEntity);
- String coopNo = getCoopNo(jobReqEntity);
- String prdCode = getPrdCode(jobReqEntity);
- String fileType = getFileType(jobReqEntity);
- //事件类型 参考EventType.java 枚举
- String eventType = getEventType(jobReqEntity);
+ String bizDate = StringUtils.isEmpty(date) ? LocalDate.now().toString() : date;
+ String formatDate = getYesDateFormats(bizDate);
//状态枚举 参考SysMqRecord.java ,Status枚举
Integer status = getStatus(jobReqEntity);
+ String eventType = getEventType(jobReqEntity);
+ // 使用逗号分割字符串
+ String[] array = eventType.split(",");
+ // 将数组转换为 List
+ List list = Arrays.asList(array);
+ QueryWrapper queryBack = new QueryWrapper<>();
+ queryBack.lambda().eq(SysMqRecord::getBizDate,formatDate)
+ .in(SysMqRecord::getBizFileType, list)
+ .in(SysMqRecord::getBizType, ContractConst.BIZ_TYPE_FILE_BACK)
+ .ne(SysMqRecord::getStatus, "2");
+ List backFail = sysMqRecordMapper.selectList(queryBack);
+
+ QueryWrapper querySign = new QueryWrapper<>();
+ querySign.lambda().eq(SysMqRecord::getBizDate,formatDate)
+ .in(SysMqRecord::getBizFileType, list)
+ .in(SysMqRecord::getBizType, ContractConst.BIZ_TYPE_FILE_SIGN)
+ .eq(SysMqRecord::getStatus, "2");
+ List signSucc = sysMqRecordMapper.selectList(querySign);
+ // 使用循环将 List 转换为 Map
+ Map signMap = new HashMap<>();
+ for (SysMqRecord obj : signSucc) {
+ String key = obj.getBizFileType() + "-" + obj.getBizNo(); // 拼接 key
+ signMap.put(key, obj);
+ }
+
+ List recordsUpdated = uploadFiles(backFail,signMap, jobReqEntity);
+ Map> uploadedGroup = CollStreamUtil.groupByKey(recordsUpdated, SysMqRecord::getBizDate);
+
+
// 上传马上sftp服务路径:/upload/DXBANK/back/contract/YYYYMMDD/
- String backSftpPath = getUploadPath(jobReqEntity, date);
+ /* String backSftpPath = getUploadPath(jobReqEntity, date);
String signFilePath = getSignFilePath(jobReqEntity, getYesDateFormats(date));
List eventTypeList = StrUtil.split(eventType, StrUtil.COMMA);
List recordsToUpload = queryRecordsToUpload(date, status, eventTypeList);
String okDownloadFilename = "DXBANK_download.ok";
+*/
+ jobRespEntity.setRespCode(RESP_CODE_000000);
+ jobRespEntity.setRespMesg(RESP_MESG_000000);
- try {
- SFTPUtil sftpUtil = fileTransferService.getSftpUtilInstance(coopNo, prdCode, fileType);
- sftpUtil.login();
- List recordsToUpdate = uploadFiles(recordsToUpload, backSftpPath, signFilePath, sftpUtil);
- updateSysMqRecordStatus(recordsToUpdate);
- String okfileContent = "0|" + recordsToUpdate.size();
- BatchFileUtil.makeFile(signFilePath, okDownloadFilename, okfileContent.getBytes());
- sftpUtil.upload(backSftpPath, signFilePath + okDownloadFilename);
- jobRespEntity.setRespCode(RESP_CODE_000000);
- jobRespEntity.setRespMesg(RESP_MESG_000000);
- } catch (Exception e) {
- log.error("msxfContractToSFTPTasklet 批量上传合同到马上消费SFTP失败", e);
- jobRespEntity.setRespCode(RESP_CODE_000056);
- jobRespEntity.setRespMesg(RESP_MESG_000056);
+ }
+
+ private List uploadFiles(List recordsToUpload,Map signMap, JobReqEntity jobReqEntity) {
+ for (SysMqRecord record : recordsToUpload) {
+ try {
+ String key = record.getBizFileType() + "-" + record.getBizNo();
+ SysMqRecord mqRecord = signMap.get(key);
+ if (mqRecord == null){
+ continue;
+ }
+ // 上传马上sftp服务路径:/upload/DXBANK/back/contract/YYYYMMDD/
+ String backSftpPath = getUploadPath(jobReqEntity, record.getBizDate());
+ // 获取远端服务器保存文件路径
+ String data = mqRecord.getData();
+ String signedPath = JSONObject.parseObject(data).getString("signedPath");
+ if (StringUtils.isEmpty(signedPath)){
+ continue;
+ }
+ //String saveFilePath = getSaveFilePath(jobReqEntity, record.getBizDate());
+
+ boolean success = uploadFile(record, backSftpPath, signedPath);
+ record.setStatus(success ? SysMqRecord.Status.DONE.getStatus() : SysMqRecord.Status.FAILED.getStatus());
+ } catch (Exception e) {
+ log.error("{} 上传合同失败,serNo:{}", MSG, record.getBizNo(), e);
+ record.setStatus(SysMqRecord.Status.FAILED.getStatus());
+ } finally {
+ try {
+ // 进行记录更新
+ updateSysMqRecordStatus(record);
+ } catch (Exception ex) {
+ log.error("{} 记录更新异常", record.getBizNo());
+ }
+ }
}
+
+ return CollUtil.removeNull(recordsToUpload);
}
private List queryRecordsToUpload(String date, Integer status, List eventTypeList) {
@@ -88,47 +160,57 @@ public class MsxfContractToSFTPTasklet extends MsxfContractBatchTasklet {
return sysMqRecordMapper.selectList(queryWrapper);
}
- private List uploadFiles(List recordsToUpload, String backSftpPath, String signFilePath, SFTPUtil sftpUtil) {
- return recordsToUpload.stream()
- .map(record -> {
- try {
- boolean success = uploadFile(record, backSftpPath, signFilePath, sftpUtil);
- record.setBizType(FILE_BACK.name());
- record.setStatus(success ? SysMqRecord.Status.DOING.getStatus() : SysMqRecord.Status.FAILED.getStatus());
- return record;
- } catch (Exception e) {
- log.error("上传合同失败,serNo:{}", record.getBizNo(), e);
- record.setStatus(SysMqRecord.Status.FAILED.getStatus());
- return record;
- }
- })
- .collect(Collectors.toList());
- }
- private boolean uploadFile(SysMqRecord sysMqRecord, String backSftpPath, String signFilePath, SFTPUtil sftpUtil) throws Exception {
+ private boolean uploadFile(SysMqRecord sysMqRecord, String backSftpPath, String saveFilePath) throws Exception {
+ if(sleepEnabled){
+ log.info("******** 开启睡眠 。。。 2秒 ********");
+ Thread.sleep(2000);
+ }
String serNo = sysMqRecord.getBizNo();
if (StrUtil.isBlank(serNo)) {
log.error("serNo 不存在 id:{}", sysMqRecord.getId());
return false;
}
- LmtSignRecordVO lmtSignRecordVO = JSONUtil.toBean(sysMqRecord.getData(), LmtSignRecordVO.class);
- if (lmtSignRecordVO == null) {
- signFilePath = signFilePath + serNo + "/" + "_contract.pdf";
- lmtSignRecordVO = new LmtSignRecordVO(serNo, "", signFilePath, "", "", backSftpPath);
- } else {
- signFilePath = lmtSignRecordVO.getSignPath();
+ if (StrUtil.isBlank(sysMqRecord.getData())) {
+ throw new RuntimeException("文件元信息不存在");
}
- File file = FileUtil.file(signFilePath);
+ /*LmtSignRecordVO lmtSignRecordVO = JSONUtil.toBean(sysMqRecord.getData(), LmtSignRecordVO.class);
+ String signFilePath = lmtSignRecordVO.getSignPath();*/
+ if (StrUtil.isBlank(saveFilePath)) {
+ throw new RuntimeException("签章合同文件路径不存在");
+ }
+
+ File file = FileUtil.file(saveFilePath);
if (!FileUtil.exist(file)) {
- log.error("签章的电子合同不存在,serNo:{},signFilePath:{}", sysMqRecord.getBizNo(), signFilePath);
- lmtSignRecordVO.setSignMsg("签章的电子合同不存在,serNo:{},signFilePath:{}" + sysMqRecord.getBizNo() + signFilePath);
+ log.error("签章的电子合同不存在,serNo:{},signFilePath:{}", sysMqRecord.getBizNo(), saveFilePath);
return false;
}
- sftpUtil.upload(backSftpPath, signFilePath);
- sysMqRecord.setData(JSONUtil.toJsonStr(lmtSignRecordVO));
- return true;
+
+ // 调用接口进行SFTP上传
+ MsxfSftpReqVO msxfSftpReqVO = new MsxfSftpReqVO();
+ msxfSftpReqVO.setUuid(IdUtil.fastSimpleUUID());
+ msxfSftpReqVO.setSaveFilePath(saveFilePath);
+ msxfSftpReqVO.setFileName(FileUtil.getName(file));
+ msxfSftpReqVO.setSftpUploadPath(backSftpPath);
+ msxfSftpReqVO.setFileContent(FileUtil.readBytes(file));
+ Result result = msxfSftpClient.contBacksend(JSONUtil.parseObj(msxfSftpReqVO));
+ log.info("{} 调用接口进行SFTP回传结果:{}", MSG, result);
+ if (!SUCCESS_00000.equals(result.getCode())) {
+ throw new RuntimeException("调用接口进行SFTP回传失败");
+ }
+
+ MsxfSftpRespVO msxfSftpRespVO = BeanUtil.toBean(result.getData(), MsxfSftpRespVO.class);
+ if (ObjectUtil.isNotNull(msxfSftpRespVO)) {
+ String returnCode = msxfSftpRespVO.getReturnCode();
+ if (StrUtil.isNotEmpty(returnCode) && "000000".equals(returnCode)) {
+ sysMqRecord.setData(JSONUtil.toJsonStr(msxfSftpRespVO));
+ return true;
+ }
+ }
+ return false;
}
+
}
\ No newline at end of file
diff --git a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfLoanDetailFileTasklet.java b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfLoanDetailFileTasklet.java
index 966a9a9..4219690 100644
--- a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfLoanDetailFileTasklet.java
+++ b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfLoanDetailFileTasklet.java
@@ -3,6 +3,8 @@ package com.zkj.loan.batch.tasklet.msxfold;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zkj.loan.batch.tasklet.BaseBatchTasklet;
+import com.zkj.loan.common.internet.mapper.bat.FacLoanDuebillMapper;
+import com.zkj.loan.common.internet.model.bat.FacLoanDuebill;
import com.zkj.loan.common.internet.model.biz.CtrlLoanDetail;
import com.zkj.loan.common.internet.service.base.biz.CtrlLoanDetailService;
import com.zkj.loan.common.internet.service.base.fac.LoanDetailsService;
@@ -62,6 +64,9 @@ public class MsxfLoanDetailFileTasklet extends BaseBatchTasklet {
@Resource
private RedissonClient redissonClient;
+ @Resource
+ private FacLoanDuebillMapper facLoanDuebillMapper;
+
private static final String[] CALC_FIELD = {
"biz_date",
"contNo",
@@ -89,7 +94,7 @@ public class MsxfLoanDetailFileTasklet extends BaseBatchTasklet {
String prdCode = (String) jobReqEntity.getJobParameter().get("prdCode");//文件名称
if (Objects.nonNull(object)) {
String tranDate = (String) object;
- date = LocalDate.parse(tranDate).plusDays(-1);
+ date = LocalDate.parse(tranDate);
} else {
RBucket redisPreDate = redissonClient.getBucket(SysRedisConstant.PREDATE);
date = redisPreDate.get();
@@ -102,12 +107,22 @@ public class MsxfLoanDetailFileTasklet extends BaseBatchTasklet {
queryWrapper.lambda().eq(CtrlLoanDetail::getPrdCode,prdCode);
ctrlLoanDetailService.remove(queryWrapper);
+ /*QueryWrapper loanDuebillQuery = new QueryWrapper<>();
+ loanDuebillQuery.lambda().eq(FacLoanDuebill::getBizDate,yesDate);
+ loanDuebillQuery.lambda().eq(FacLoanDuebill::getCoopNo,chanCode);
+ loanDuebillQuery.lambda().eq(FacLoanDuebill::getPrdCode,prdCode);
+ loanDuebillQuery.select("ifnull(sum(loan_bal),0) as loanBal,ifnull(sum(over_bal),0) as overBal");
+ FacLoanDuebill loanDuebill = facLoanDuebillMapper.selectOne(loanDuebillQuery);
+*/
CtrlLoanDetail loanDetail = loanDetailsService.countLoanData(yesDate,chanCode,prdCode);
loanDetail.setId(idGenerator.nextIdStr());
+ loanDetail.setOverLoanAmt(loanDetail.getOverAmt());
loanDetail.setCoopNo(chanCode);
loanDetail.setPrdCode(prdCode);
loanDetail.setCreateDate(LocalDate.now());
loanDetail.setCreateTime(LocalDateTime.now());
+ loanDetail.setUpdateDate(LocalDate.now());
+ loanDetail.setUpdateTime(LocalDateTime.now());
ctrlLoanDetailService.save(loanDetail);
/* String ctrlFile = saveTmpPath + "/" + yesDate + "-filelist"+ "/" + getFileName() + ".ctrl";
String ctrlFilePattern = replaceDatePattern(ctrlFile,yesDate);
diff --git a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfRepayFileTasklet.java b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfRepayFileTasklet.java
index 913cca1..adfd6ac 100644
--- a/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfRepayFileTasklet.java
+++ b/loan-parent/loan-batch-internet/loan-batch-internet-application/src/main/java/com/zkj/loan/batch/tasklet/msxfold/MsxfRepayFileTasklet.java
@@ -2,15 +2,19 @@ package com.zkj.loan.batch.tasklet.msxfold;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zkj.loan.batch.tasklet.BaseBatchTasklet;
+import com.zkj.loan.common.internet.mapper.biz.BizLoanClaimRepayMapper;
import com.zkj.loan.common.internet.mapper.cus.PlsRepayPlanDetailMapper;
import com.zkj.loan.common.internet.mapper.pls.ext.RepayPlanDetailExtMapper;
+import com.zkj.loan.common.internet.model.biz.BizLoanClaimRepay;
import com.zkj.loan.common.internet.model.biz.CtrlRepayDetail;
import com.zkj.loan.common.internet.model.cus.CusCoopMapping;
import com.zkj.loan.common.internet.model.fac.LoanRepayPlan;
import com.zkj.loan.common.internet.model.lmt.LmtCusCrdtLmt;
import com.zkj.loan.common.internet.model.pls.RepayPlanDetail;
+import com.zkj.loan.common.internet.service.base.biz.BizLoanClaimRepayService;
import com.zkj.loan.common.internet.service.base.biz.CtrlRepayDetailService;
import com.zkj.loan.common.internet.service.base.cus.CusCoopMappingService;
import com.zkj.loan.common.internet.service.base.lmt.LmtCusCrdtLmtService;
@@ -64,7 +68,8 @@ public class MsxfRepayFileTasklet extends BaseBatchTasklet {
@Resource
private IdGenerator idGenerator;
-
+ @Resource
+ private BizLoanClaimRepayMapper bizLoanClaimRepayMapper;
@Resource
private CtrlRepayDetailService ctrlRepayDetailService;
@@ -115,12 +120,18 @@ public class MsxfRepayFileTasklet extends BaseBatchTasklet {
}
String dateStr = date.toString().replace("-", "");
+ BizLoanClaimRepay claimRepay = bizLoanClaimRepayMapper.countClaimData(dateStr,chanCode,prdCode);
CtrlRepayDetail repayDetail = plsRepayPlanDetailMapper.countRepayData(dateStr,chanCode,prdCode);
repayDetail.setId(idGenerator.nextIdStr());
+ repayDetail.setClaimPrinAmt(claimRepay.getRepayAmt());
+ repayDetail.setClaimIntAmt(claimRepay.getPaidIntAmt());
+ repayDetail.setClaimPnltAmt(claimRepay.getPaidPnltAmt());
repayDetail.setPrdCode(prdCode);
repayDetail.setChanCode(chanCode);
- repayDetail.setCreateData(LocalDate.now());
+ repayDetail.setCreateDate(LocalDate.now());
repayDetail.setCreateTime(LocalDateTime.now());
+ repayDetail.setUpdateDate(LocalDate.now());
+ repayDetail.setUpdateTime(LocalDateTime.now());
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(CtrlRepayDetail::getBizDate,dateStr);
diff --git a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/java/com/zkj/loan/common/internet/mapper/biz/BizLoanClaimRepayMapper.java b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/java/com/zkj/loan/common/internet/mapper/biz/BizLoanClaimRepayMapper.java
index 899a4c9..fe26184 100644
--- a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/java/com/zkj/loan/common/internet/mapper/biz/BizLoanClaimRepayMapper.java
+++ b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/java/com/zkj/loan/common/internet/mapper/biz/BizLoanClaimRepayMapper.java
@@ -32,6 +32,9 @@ public interface BizLoanClaimRepayMapper extends BaseMapper {
int countByBizDate(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("coopNo") String coopNo);
-
+
List selectClaimCustList(@Param("createDate") LocalDate createDate,@Param("isUpdate") Boolean isUpdate);
+
+ BizLoanClaimRepay countClaimData(@Param("bizDate")String dateStr,@Param("coopNo") String chanCode, @Param("prdCode")String prdCode);
+
}
diff --git a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/biz/BizLoanClaimRepayMapper.xml b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/biz/BizLoanClaimRepayMapper.xml
index 1c98879..8a09ad7 100644
--- a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/biz/BizLoanClaimRepayMapper.xml
+++ b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/biz/BizLoanClaimRepayMapper.xml
@@ -94,42 +94,42 @@
@@ -143,4 +143,14 @@
+
+
+
diff --git a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/fac/LoanDetailsMapper.xml b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/fac/LoanDetailsMapper.xml
index b68ddbb..e2c94ac 100644
--- a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/fac/LoanDetailsMapper.xml
+++ b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/fac/LoanDetailsMapper.xml
@@ -38,7 +38,7 @@
- id,
+ id,
biz_date,
cont_no,
duebill_no,
@@ -84,9 +84,9 @@
from
fac_loan_details
-
- and coop_no = #{coopNo}
-
+
+ and coop_no = #{coopNo}
+
group by
(case
@@ -208,24 +208,24 @@
@@ -282,11 +282,12 @@ select
diff --git a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/sys/SysMqRecordMapper.xml b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/sys/SysMqRecordMapper.xml
index cfb0938..0faa56f 100644
--- a/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/sys/SysMqRecordMapper.xml
+++ b/loan-parent/loan-common-internet/loan-common-internet-mapper/src/main/resources/mapper/sys/SysMqRecordMapper.xml
@@ -17,30 +17,30 @@
INSERT INTO sys_mq_record
(
- id,
- biz_type,
- biz_no,
- data,
- status,
- biz_date,
- create_time,
- update_time,
- cust_no,
- duebill_no
+ id,
+ biz_type,
+ biz_no,
+ data,
+ status,
+ biz_date,
+ create_time,
+ update_time,
+ cust_no,
+ duebill_no
)
VALUES
- (
- #{id},
- #{bizType},
- #{bizNo},
- #{data},
- #{status},
- DATE_FORMAT(NOW(), '%Y%m%d'),
- NOW(),
- NOW(),
- #{custNo},
- #{duebillNo}
- )
+ (
+ #{id},
+ #{bizType},
+ #{bizNo},
+ #{data},
+ #{status},
+ DATE_FORMAT(NOW(), '%Y%m%d'),
+ NOW(),
+ NOW(),
+ #{custNo},
+ #{duebillNo}
+ )
@@ -54,7 +54,8 @@
create_time,
update_time,
cust_no,
- duebill_no
+ duebill_no,
+ biz_file_type
)
VALUES
@@ -64,11 +65,12 @@
#{record.bizNo},
#{record.data},
#{record.status},
- DATE_FORMAT(NOW(), '%Y%m%d'),
+ #{record.bizDate},
NOW(),
NOW(),
#{record.custNo},
- #{record.duebillNo}
+ #{record.duebillNo},
+ #{record.bizFileType}
)
@@ -89,20 +91,20 @@