Commit 8533db6b authored by hongguangwu's avatar hongguangwu

1.7.20-非扣税银企

parent c1b7c913
package com.yifu.cloud.plus.v1.yifu.common.core.vo;
import lombok.Data;
import java.io.Serializable;
/**
* @Author hgw
* @Date 2022-10-21 09:50:08
* @Description 通用Vo
* @Version 1.0
*/
@Data
public class BaseIdNameNoVo implements Serializable {
private String id;
private String name;
private String no;
private String type;
}
...@@ -91,7 +91,7 @@ public class EkpBankAtta { ...@@ -91,7 +91,7 @@ public class EkpBankAtta {
@ExcelProperty("链接ID") @ExcelProperty("链接ID")
private String fdLinkId; private String fdLinkId;
/** /**
* 类型:1:银企付款主表;2:银企付款明细表 3:银企付款回单 * 类型:1:银企付款主表;2:银企付款明细表 3:银企付款回单4:非扣税回单
*/ */
@ExcelAttribute(name = "类型") @ExcelAttribute(name = "类型")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
......
...@@ -160,7 +160,11 @@ public class IcbcTransactionFlowIssueController { ...@@ -160,7 +160,11 @@ public class IcbcTransactionFlowIssueController {
@Inner @Inner
@PostMapping("/inner/getPdfFile") @PostMapping("/inner/getPdfFile")
public R getPdfFile() throws IOException { public R getPdfFile() throws IOException {
return icbcTransactionFlowIssueService.getPdfFile(); // 工资
icbcTransactionFlowIssueService.getPdfFile();
// 非扣税
//icbcTransactionFlowIssueService.getPdfFileByNoTax();
return R.ok();
} }
@Operation(summary = "定时任务获取回单文件", description = "定时任务获取回单文件") @Operation(summary = "定时任务获取回单文件", description = "定时任务获取回单文件")
...@@ -168,4 +172,10 @@ public class IcbcTransactionFlowIssueController { ...@@ -168,4 +172,10 @@ public class IcbcTransactionFlowIssueController {
public R getPdfFileTest() throws IOException { public R getPdfFileTest() throws IOException {
return icbcTransactionFlowIssueService.getPdfFile(); return icbcTransactionFlowIssueService.getPdfFile();
} }
@Operation(summary = "手动获取非扣税回单文件", description = "手动获取非扣税回单文件")
@PostMapping("/getTestPdfFileByNoTax")
public R getTestPdfFileByNoTax(@RequestParam(required = false) String targetDate) throws Exception {
return icbcTransactionFlowIssueService.getPdfFileByNoTax(targetDate);
}
} }
package com.yifu.cloud.plus.v1.ekp.controller; package com.yifu.cloud.plus.v1.ekp.controller;
import com.icbc.api.IcbcApiException; import com.icbc.api.IcbcApiException;
import com.icbc.api.response.MybankEnterpriseTradeQhisdResponseV1;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet; import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService; import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner; import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
...@@ -15,6 +17,10 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -15,6 +17,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 银企互联相关功能 * 银企互联相关功能
* *
...@@ -160,4 +166,14 @@ public class IcbcTransactionFlowQueryController { ...@@ -160,4 +166,14 @@ public class IcbcTransactionFlowQueryController {
public R submitSearch() { public R submitSearch() {
return icbcTransactionFlowQueryService.submitSearch(); return icbcTransactionFlowQueryService.submitSearch();
} }
// 获取非扣税单号对应的流水号,用来查询回单文件
@Operation(summary = "非扣税流水号查询tranDate格式20260227", description = "非扣税流水号查询")
@PostMapping("/getIcbcChuZhangLiuShui")
public R<Map<String, BaseIdNameNoVo>> getIcbcChuZhangLiuShui(@RequestParam(required = false) String tranDate) throws IcbcApiException {
Map<String, BaseIdNameNoVo> returnMap = new HashMap<>();
icbcTransactionFlowQueryService.getIcbcChuZhangLiuShui(tranDate, returnMap);
return R.ok(returnMap);
}
} }
...@@ -5,6 +5,7 @@ import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo; ...@@ -5,6 +5,7 @@ import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpDeptContractInfoVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpDeptContractInfoVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpDeptInfoVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpDeptInfoVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpSocialSumInfoVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpSocialSumInfoVo;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -50,6 +51,11 @@ public interface EkpSocialInfoMapper extends BaseMapper<EkpSocialInfo> { ...@@ -50,6 +51,11 @@ public interface EkpSocialInfoMapper extends BaseMapper<EkpSocialInfo> {
*/ */
List<Map<String,String>> getAllserioNoLsatSevenDays(); List<Map<String,String>> getAllserioNoLsatSevenDays();
// 查询所有需要查询的单号-主表
List<BaseIdNameNoVo> getNoToQueryByMain();
// 查询所有需要查询的单号-明细表
List<BaseIdNameNoVo> getNoToQueryByDetail();
/** /**
* 获取需要拉流水的银行账户 * 获取需要拉流水的银行账户
* @param * @param
......
...@@ -94,6 +94,10 @@ public interface IcbcTransactionFlowIssueService extends IService<EkpSocialInfo> ...@@ -94,6 +94,10 @@ public interface IcbcTransactionFlowIssueService extends IService<EkpSocialInfo>
**/ **/
R<String> doGetEkpBankNoTaxStatus(); R<String> doGetEkpBankNoTaxStatus();
// hych写的,获取回单文件
R getPdfFile() throws IOException; R getPdfFile() throws IOException;
// hgw仿写的,获取非扣税回单文件
R getPdfFileByNoTax(String targetDate) throws Exception;
} }
...@@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.icbc.api.DefaultIcbcClient; import com.icbc.api.DefaultIcbcClient;
import com.icbc.api.IcbcApiException; import com.icbc.api.IcbcApiException;
import com.icbc.api.response.MybankEnterprisePayQpayentResponseV1; import com.icbc.api.response.MybankEnterprisePayQpayentResponseV1;
import com.icbc.api.response.MybankEnterpriseTradeQhisdResponseV1;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet; import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo; import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelNoTaxVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelNoTaxVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankResultVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpBankResultVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 聚富通到账通知交易流水查询 * 聚富通到账通知交易流水查询
...@@ -65,4 +68,7 @@ public interface IcbcTransactionFlowQueryService extends IService<EkpSocialInfo> ...@@ -65,4 +68,7 @@ public interface IcbcTransactionFlowQueryService extends IService<EkpSocialInfo>
// 查询非扣税结果 // 查询非扣税结果
MybankEnterprisePayQpayentResponseV1 getResultNoTax(EkpBankResultVo task, String tranDate, String tranTime, String seqNo, DefaultIcbcClient client); MybankEnterprisePayQpayentResponseV1 getResultNoTax(EkpBankResultVo task, String tranDate, String tranTime, String seqNo, DefaultIcbcClient client);
// 获取非扣税单号对应的流水号,用来查询回单文件
void getIcbcChuZhangLiuShui(String tranDate, Map<String, BaseIdNameNoVo> returnMap) throws IcbcApiException;
} }
...@@ -27,6 +27,7 @@ import com.yifu.cloud.plus.v1.ekp.service.*; ...@@ -27,6 +27,7 @@ import com.yifu.cloud.plus.v1.ekp.service.*;
import com.yifu.cloud.plus.v1.ekp.vo.*; import com.yifu.cloud.plus.v1.ekp.vo.*;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*; import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
...@@ -1728,6 +1729,164 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -1728,6 +1729,164 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn
return R.ok(); return R.ok();
} }
/**
* 获取非扣税回单文件
* hgw
* 2026-02-27
*/
@Override
public R getPdfFileByNoTax(String targetDate) throws Exception {
if (Common.isEmpty(targetDate)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1); // 获取前一天日期
targetDate = sdf.format(cal.getTime());
}
Map<String, BaseIdNameNoVo> returnMap = new HashMap<>();
icbcTransactionFlowQueryService.getIcbcChuZhangLiuShui(targetDate, returnMap);
if (returnMap != null && !returnMap.isEmpty()) {
// 工商银行SFTP服务器地址
String host = "gw.open.icbc.com.cn";
// 工商银行SFTP服务器端口
int port = 8001;
// 登录用户名
String username = "WXYQHL";
// 私钥路径(用于身份验证)
//E:\IdeaProjects\yifu_mvp\yifu-ekp\yifu-ekp-biz\src\main\resources\icbc\icbc
String privateKeyPath = "";
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("id_rsa");
if (inputStream == null) {
throw new FileNotFoundException("资源未找到");
}
File tempFile = File.createTempFile("temp-", ".tmp");
tempFile.deleteOnExit(); // JVM退出时删除临时文件
try (FileOutputStream out = new FileOutputStream(tempFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
privateKeyPath = tempFile.getAbsolutePath();
// 远程目录路径
log.info("秘钥文件目录: " + privateKeyPath);
// 远程目录路径
String remoteDir = "/Ebillsend/download";
Session session = null;
ChannelSftp channelSftp = null;
try {
JSch jsch = new JSch();
// 添加私钥(注意:需要是没有密码保护的私钥)
jsch.addIdentity(privateKeyPath);
// 创建会话
session = jsch.getSession(username, host, port);
// 关闭严格的主机密钥检查(生产环境应配置known_hosts)设置为no,已有公私钥验证
session.setConfig("StrictHostKeyChecking", "no");
// 连接会话
session.connect();
// 创建SFTP通道
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
// 切换远程目录
channelSftp.cd(remoteDir);
// 列出目录文件
Vector<ChannelSftp.LsEntry> files = channelSftp.ls("*");
log.info("找到文件数量: " + files.size());
// 下载所有文件
//ESC 字符:在 Java 中,ESC 字符可以用 \u001B 表示。
//如果输入字符串中可能包含连续的 ESC 字符(如 \u001B\u001B),split("\u001B") 会在结果数组中生成空字符串("")。如果需要过滤掉空字符串,可以使用 split("\u001B", -1) 或后续处理。
String fileName;
String tempDirPre = System.getProperty("java.io.tmpdir") + "sftp_processing/";
String tempDir;
File dir;
String localZipPath;
String unzipDir;
for (ChannelSftp.LsEntry entry : files) {
if (!entry.getAttrs().isDir()) {
fileName = entry.getFilename();
//找到存回单的压缩文件
if (fileName.contains(targetDate) && fileName.endsWith(".zip")) {
try {
// 1. 处理压缩包文件
//String date = extractDateFromFileName(fileName);
//String indexFileName = "ReceiptIndex_00_" + date + ".bin";
// 2. 查找对应的索引文件
/*Optional<ChannelSftp.LsEntry> indexEntry = files.stream()
.filter(e -> e.getFilename().equals(indexFileName))
.findFirst();
if (!indexEntry.isPresent()) {
log.info("未找到对应的索引文件:{}", indexFileName);
continue;
}*/
// 3. 创建临时目录
tempDir = tempDirPre + System.currentTimeMillis() + "/";
dir = new File(tempDir);
if (!dir.exists() && !dir.mkdirs()) {
throw new IOException("Failed to create directory: " + tempDir);
}
log.info("临时目录: " + tempDir);
// 4. 下载并解压压缩包
localZipPath = tempDir + fileName;
channelSftp.get(fileName, localZipPath);
unzipDir = tempDir + "unzipped/";
unzipFile(localZipPath, unzipDir);
// 5. 下载并解析索引文件
/*String localIndexPath = tempDir + indexFileName;
channelSftp.get(indexFileName, localIndexPath);
Map<String, String> salaryPdfMap = parseIndexFile(localIndexPath);*/
// 6. 处理映射关系
processPdfFilesByNoTax(unzipDir, returnMap);
// 7. 清理临时文件
FileUtils.deleteDirectory(new File(tempDir));
} catch (Exception e) {
log.error("处理文件[{}]时发生错误:", fileName, e);
}
}
// log.info("正在下载: " + fileName);
// channelSftp.get(fileName, localPath + fileName);
}
}
} catch (JSchException e) {
// 如果认证失败,直接返回
if (e.getMessage().contains("Auth fail")) {
return R.failed("认证失败");
}
} catch (SftpException e) {
// 如果SFTP操作失败,直接返回
return R.failed(e.getMessage());
} finally {
// 确保通道和会话被正确关闭
if (channelSftp != null && channelSftp.isConnected()) {
channelSftp.exit();
}
if (session != null && session.isConnected()) {
session.disconnect();
}
}
}
return R.ok();
}
// 辅助方法定义 // 辅助方法定义
private String extractDateFromFileName(String fileName) { private String extractDateFromFileName(String fileName) {
Pattern pattern = Pattern.compile(".*_(\\d{8})_.*\\.zip"); Pattern pattern = Pattern.compile(".*_(\\d{8})_.*\\.zip");
...@@ -1839,6 +1998,65 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -1839,6 +1998,65 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn
} }
} }
public String getPdfNumberByNoTax(String fileName) {
// 正则表达式:匹配下划线之间的数字序列
String[] parts = fileName.split(CommonConstants.DOWN_LINE_STRING);
// 检查是否有足够的段
if (parts.length >= 3) {
// 根据格式,目标数字在第3个位置(索引2)
return parts[2];
}
return fileName; // 如果没有匹配到,返回null
}
private void processPdfFilesByNoTax(String pdfDir, Map<String, BaseIdNameNoVo> returnMap) {
File directory = new File(pdfDir);
File[] pdfFiles = directory.listFiles((dir, name) -> name.endsWith(".pdf"));
if (pdfFiles == null) return;
String filePath = "ekpBankDownPdfFile";
EkpBankAtta attaOld;
BaseIdNameNoVo vo;
String pdfName;
String pdfNameKey;
String key;
boolean flag;
String linkId;
EkpBankAtta atta;
for (File pdfFile : pdfFiles) {
pdfName = pdfFile.getName();
pdfNameKey = this.getPdfNumberByNoTax(pdfName);
vo = returnMap.get(pdfNameKey);
if (vo != null) {
//文件上传至阿里云,以便ekp服务调用
try (InputStream inputStream = new FileInputStream(pdfFile)) {
key = filePath + "/" + pdfName;
// 调用上传服务
flag = ossUtil.uploadFileByStream(inputStream, key, null);
if (flag) {
linkId = vo.getId();
//重复的过滤
attaOld = ekpBankAttaService.getOne(Wrappers.<EkpBankAtta>query().lambda().
eq(EkpBankAtta::getFdLinkId, linkId).last(CommonConstants.LAST_ONE_SQL));
if (Common.isEmpty(attaOld)) {
atta = new EkpBankAtta();
atta.setFdAttaName(pdfName);
atta.setFdAttaSrc(key);
atta.setFdAttaSize(pdfFile.length());
atta.setFdCreateTime(LocalDateTime.now());
atta.setFdLinkId(linkId);
atta.setFdLinkType(CommonConstants.FOUR_INT);
ekpBankAttaService.save(atta);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/** /**
* @Description: 发放记录日志 * @Description: 发放记录日志
* @Author: hgw * @Author: hgw
......
...@@ -20,12 +20,12 @@ import com.yifu.cloud.plus.v1.ekp.service.EkpBankIcbcLogService; ...@@ -20,12 +20,12 @@ import com.yifu.cloud.plus.v1.ekp.service.EkpBankIcbcLogService;
import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService; import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService;
import com.yifu.cloud.plus.v1.ekp.vo.EKPEntryPushParam; import com.yifu.cloud.plus.v1.ekp.vo.EKPEntryPushParam;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelNoTaxVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelNoTaxVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankExcelVo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankResultVo; import com.yifu.cloud.plus.v1.ekp.vo.EkpBankResultVo;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil; import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo;
import io.micrometer.core.instrument.util.StringUtils; import io.micrometer.core.instrument.util.StringUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -38,6 +38,7 @@ import org.springframework.util.MultiValueMap; ...@@ -38,6 +38,7 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
...@@ -307,6 +308,148 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -307,6 +308,148 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn
return R.ok(); return R.ok();
} }
/**
* 获取非扣税单号对应的流水号,用来查询回单文件
*
* @author hgw
* @date 2026-02-28
* @since mvp1.7.20
*/
@Override
public void getIcbcChuZhangLiuShui(String tranDate, Map<String, BaseIdNameNoVo> returnMap) throws IcbcApiException {
// String tranDate = "20260227"
if (Common.isEmpty(tranDate)) {
// 获取昨天的日期
LocalDate yesterday = LocalDate.now().minusDays(1);
// 格式化为 YYYYMMDD
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
tranDate = yesterday.format(formatter);
}
String beginDate = tranDate;
String endDate = tranDate;
// 获取当前时间
LocalTime currentTime = LocalTime.now();
// 使用DateTimeFormatter格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HHmmssSSS");
String formattedTime = currentTime.format(formatter);
DefaultIcbcClient client = new DefaultIcbcClient(icbcConfigProperties.getAppId(), IcbcConstants.SIGN_TYPE_CA_SM_ICBC,
icbcConfigProperties.getAppPrivateKey(), IcbcConstants.CHARSET_UTF8, IcbcConstants.FORMAT_JSON, null,
null, null, icbcConfigProperties.getCaSm(), null);
client.setIcbc_ca(icbcConfigProperties.getCaSmIcbc());
// 查需要获取流水的账号
List<Map<String,String>> accountList = baseMapper.getAccountList();
if (accountList.isEmpty()) {
return ;
}
List<BaseIdNameNoVo> mainNoList = baseMapper.getNoToQueryByMain();
Map<String, BaseIdNameNoVo> mainMap = new HashMap<>();
if (mainNoList != null && !mainNoList.isEmpty()) {
for (BaseIdNameNoVo vo : mainNoList) {
mainMap.put(vo.getNo(), vo);
}
}
List<BaseIdNameNoVo> detailNoList = baseMapper.getNoToQueryByDetail();
Map<String, BaseIdNameNoVo> detailMap = new HashMap<>();
if (detailNoList != null && !detailNoList.isEmpty()) {
for (BaseIdNameNoVo vo : detailNoList) {
detailMap.put(vo.getNo(), vo);
}
}
// 定义请求工行需要的传参对象
MybankEnterpriseTradeQhisdRequestV1.MybankEnterpriseTradeQhisdRequestBizV1 bizContent;
MybankEnterpriseTradeQhisdRequestV1 request;
String fSeqNo;
MybankEnterpriseTradeQhisdResponseV1 response;
for(Map<String,String> accountInfo: accountList) {
bizContent = new MybankEnterpriseTradeQhisdRequestV1.MybankEnterpriseTradeQhisdRequestBizV1();
request = new MybankEnterpriseTradeQhisdRequestV1();
bizContent.setTranDate(tranDate);
bizContent.setTranTime(formattedTime);
bizContent.setTransCode("QHISD");
bizContent.setLanguage("zh_CN");
fSeqNo = "AHWX" + System.currentTimeMillis();
bizContent.setfSeqno(fSeqNo);
bizContent.setAccountNo(accountInfo.get("bank_no"));
bizContent.setBeginDate(beginDate);
bizContent.setEndDate(endDate);
// 2进账 1出账
bizContent.setDrcrf("1");
request.setServiceUrl(icbcConfigProperties.getServerUrl());
request.setBizContent(bizContent);
response = client.execute(request);
if (response.isSuccess()) {
getInfoListByNoTax(request, mainMap, returnMap, detailMap, client, bizContent);
}
}
}
private void getInfoListByNoTax(MybankEnterpriseTradeQhisdRequestV1 request
, Map<String, BaseIdNameNoVo> mainMap, Map<String, BaseIdNameNoVo> returnMap
, Map<String, BaseIdNameNoVo> detailMap
,DefaultIcbcClient client, MybankEnterpriseTradeQhisdRequestV1.MybankEnterpriseTradeQhisdRequestBizV1 bizContent) {
try {
MybankEnterpriseTradeQhisdResponseV1 response = client.execute(request);
if (response.isSuccess()) {
List<MybankEnterpriseTradeQhisdResponseV1.MybankEnterpriseTradeQhisdResponseRdV1> valueList = response.getRd();
if (valueList != null && !valueList.isEmpty()) {
String receiptInfo;
String startTag = "<指令编号>";
String endTag = "</指令编号>";
int startIndex;
int endIndex;
String no;
BaseIdNameNoVo infoVo;
BaseIdNameNoVo infoDetailVo;
if (returnMap == null) {
returnMap = new HashMap<>();
}
for (MybankEnterpriseTradeQhisdResponseV1.MybankEnterpriseTradeQhisdResponseRdV1 vo : valueList) {
if (Common.isNotNull(vo.getReceiptInfo())) {
receiptInfo = vo.getReceiptInfo();
startIndex = receiptInfo.indexOf(startTag);
endIndex = receiptInfo.indexOf(endTag);
if (startIndex != -1 && endIndex != -1) {
no = receiptInfo.substring(startIndex + startTag.length(), endIndex);
if (no.contains("-")) {
no = no.split("-")[0];
}
// no 的值将是 "HQP923041354291"
infoVo = mainMap.get(no);
if (infoVo != null) {
infoVo.setName(vo.getOnlySequence());
infoVo.setType(CommonConstants.THREE_STRING);
returnMap.put(vo.getOnlySequence(), infoVo);
}
infoDetailVo = detailMap.get(no);
if (infoDetailVo != null) {
infoDetailVo.setName(vo.getOnlySequence());
infoVo.setType(CommonConstants.FOUR_STRING);
returnMap.put(vo.getOnlySequence(), infoVo);
}
}
}
}
}
// 循环
if (Common.isNotNull(response.getNextTag())) {
bizContent.setNextTag(response.getNextTag());
request.setBizContent(bizContent);
getInfoListByNoTax(request, mainMap, returnMap, detailMap, client, bizContent);
}
}
} catch (Exception e){
log.error("异常", e);
}
}
private void getInfoList(MybankEnterpriseTradeQhisdRequestV1 request, private void getInfoList(MybankEnterpriseTradeQhisdRequestV1 request,
List<MybankEnterpriseTradeQhisdResponseV1.MybankEnterpriseTradeQhisdResponseRdV1> valueList, List<MybankEnterpriseTradeQhisdResponseV1.MybankEnterpriseTradeQhisdResponseRdV1> valueList,
DefaultIcbcClient client, MybankEnterpriseTradeQhisdRequestV1.MybankEnterpriseTradeQhisdRequestBizV1 bizContent) { DefaultIcbcClient client, MybankEnterpriseTradeQhisdRequestV1.MybankEnterpriseTradeQhisdRequestBizV1 bizContent) {
......
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
...@@ -131,6 +131,26 @@ ...@@ -131,6 +131,26 @@
and fd_3b57f8de9df354 = '是' and fd_3b57f8de9df354 = '是'
</select> </select>
<!--查询所有需要查询的单号-主表-->
<select id="getNoToQueryByMain" resultType="com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo">
SELECT a.fd_id id,a.fd_atta_src no FROM ekp_bank_pay_task a
where a.fd_pay_type = '非扣税' and a.fd_atta_src is not null
and a.fd_create_time >= DATE_SUB(curdate(), INTERVAL 3 MONTH)
and not EXISTS (
select 1 from ekp_bank_atta b where b.fd_link_type='4' and a.fd_id=b.fd_link_id
)
</select>
<!--查询所有需要查询的单号-明细表-->
<select id="getNoToQueryByDetail" resultType="com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseIdNameNoVo">
SELECT a.fd_id id,a.fd_atta_src no FROM ekp_bank_grant_detail a
left join ekp_bank_pay_task m on m.fd_id=a.fd_parent_id
where m.fd_pay_type = '非扣税' and a.fd_atta_src is not null
and a.fd_create_time >= DATE_SUB(curdate(), INTERVAL 6 MONTH)
and not EXISTS (
select 1 from ekp_bank_atta b where b.fd_link_type='4' and a.fd_id=b.fd_link_id
)
</select>
<!--查询付款账户信息--> <!--查询付款账户信息-->
<select id="getAccountList" resultType="Map"> <select id="getAccountList" resultType="Map">
......
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