Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-mvp
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangxinjiang
yifu-mvp
Commits
8533db6b
Commit
8533db6b
authored
Feb 28, 2026
by
hongguangwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.7.20-非扣税银企
parent
c1b7c913
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
484 additions
and
3 deletions
+484
-3
BaseIdNameNoVo.java
...ifu/cloud/plus/v1/yifu/common/core/vo/BaseIdNameNoVo.java
+19
-0
EkpBankAtta.java
...n/java/com/yifu/cloud/plus/v1/ekp/entity/EkpBankAtta.java
+1
-1
IcbcTransactionFlowIssueController.java
...v1/ekp/controller/IcbcTransactionFlowIssueController.java
+11
-1
IcbcTransactionFlowQueryController.java
...v1/ekp/controller/IcbcTransactionFlowQueryController.java
+16
-0
EkpSocialInfoMapper.java
...om/yifu/cloud/plus/v1/ekp/mapper/EkpSocialInfoMapper.java
+6
-0
IcbcTransactionFlowIssueService.java
.../plus/v1/ekp/service/IcbcTransactionFlowIssueService.java
+4
-0
IcbcTransactionFlowQueryService.java
.../plus/v1/ekp/service/IcbcTransactionFlowQueryService.java
+6
-0
IcbcTransactionFlowIssueServiceImpl.java
...ekp/service/impl/IcbcTransactionFlowIssueServiceImpl.java
+218
-0
IcbcTransactionFlowQueryServiceImpl.java
...ekp/service/impl/IcbcTransactionFlowQueryServiceImpl.java
+144
-1
id_rsa
yifu-ekp/yifu-ekp-biz/src/main/resources/id_rsa
+39
-0
EkpSocialInfoMapper.xml
...ekp-biz/src/main/resources/mapper/EkpSocialInfoMapper.xml
+20
-0
No files found.
yifu-common/yifu-common-core/src/main/java/com/yifu/cloud/plus/v1/yifu/common/core/vo/BaseIdNameNoVo.java
0 → 100644
View file @
8533db6b
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
;
}
yifu-ekp/yifu-ekp-api/src/main/java/com/yifu/cloud/plus/v1/ekp/entity/EkpBankAtta.java
View file @
8533db6b
...
@@ -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
)
...
...
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/controller/IcbcTransactionFlowIssueController.java
View file @
8533db6b
...
@@ -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
);
}
}
}
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/controller/IcbcTransactionFlowQueryController.java
View file @
8533db6b
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
);
}
}
}
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/mapper/EkpSocialInfoMapper.java
View file @
8533db6b
...
@@ -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
...
...
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/service/IcbcTransactionFlowIssueService.java
View file @
8533db6b
...
@@ -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
;
}
}
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/service/IcbcTransactionFlowQueryService.java
View file @
8533db6b
...
@@ -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
;
}
}
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/service/impl/IcbcTransactionFlowIssueServiceImpl.java
View file @
8533db6b
...
@@ -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
...
...
yifu-ekp/yifu-ekp-biz/src/main/java/com/yifu/cloud/plus/v1/ekp/service/impl/IcbcTransactionFlowQueryServiceImpl.java
View file @
8533db6b
...
@@ -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
)
{
...
...
yifu-ekp/yifu-ekp-biz/src/main/resources/id_rsa
0 → 100644
View file @
8533db6b
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
yifu-ekp/yifu-ekp-biz/src/main/resources/mapper/EkpSocialInfoMapper.xml
View file @
8533db6b
...
@@ -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"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment