This commit is contained in:
张秉卓
2026-04-07 17:51:27 +08:00
parent 488aec478a
commit 06e8e5ed88
32 changed files with 2273 additions and 2 deletions

View File

@ -0,0 +1,16 @@
package com.xjrsoft.module.fssp.callback;
/**
* FsspCallback接口定义了一个回调方法的规范
* 该接口用于实现回调机制,允许在特定事件发生时执行预定义的操作
*/
public interface FsspCallback<Resp> {
/**
* 执行回调方法
* 当触发回调条件时,此方法将被调用
* 不接收任何参数,也不返回任何值
*/
void execute(Resp resp);
}

View File

@ -0,0 +1,197 @@
package com.xjrsoft.module.fssp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class LngJkRpBillDto {
/**
* 电子回单id
*/
private String id;
/**
* 单据编号
*/
private String billno;
/**
* 资金组织编码, 公司三字码
*/
private String orgNumber;
/**
* 资金组织名称
*/
private String orgName;
/**
* 交易日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bizdate;
/**
* 币别代码
*/
private String currencyNumber;
/**
* 币别名称
*/
private String currency;
/**
* 银行账号
*/
private String accountbankNumber;
/**
* 银行账户名称
*/
private String accountbank;
/**
* 明细交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime detaildatetime;
/**
* 摘要
*/
private String description;
/**
* 业务类型, 1普通 2上划 3下拨
*/
private String biztype;
/**
* 业务参考号
*/
private String bizrefno;
/**
* 付款金额
*/
private BigDecimal debitamount;
/**
* 收款金额
*/
private BigDecimal creditamount;
/**
* 对方单位
*/
private String oppunit;
/**
* 对方账号
*/
private String oppbanknumber;
/**
* 对方开户行
*/
private String oppbank;
/**
* 明细流水号
*/
private String detailid;
/**
* 电子回单号
*/
private String receiptno;
/**
* 对账标识码
*/
private String bankcheckflag;
/**
* 回单路径文件名
*/
private String filepath;
/**
* 处理状态(N-未处理;E-错误;S-成功)
*/
private String statusProc;
/**
* 处理日志
*/
private String msgProc;
/**
* 处理时间
*/
private LocalDateTime dateProc;
/**
* 供应链回单路径文件名
*/
private String filepathAttr;
/**
* 附件处理状态(N-未处理;E-错误;S-成功)
*/
private String statusProcAttr;
/**
* 附件处理日志
*/
private String msgProcAttr;
/**
* 附件处理时间
*/
private LocalDateTime dateProcAttr;
/**
* 创建人id
*/
private Long createUserId;
/**
* 创建时间
*/
private LocalDateTime createDate;
/**
* 修改人id
*/
private Long modifyUserId;
/**
* 修改时间
*/
private LocalDateTime modifyDate;
/**
* 租户id
*/
private Long tenantId;
/**
* 部门id
*/
private Long deptId;
/**
* 数据权限id
*/
private Long ruleUserId;
}

View File

@ -0,0 +1,182 @@
package com.xjrsoft.module.fssp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class LngJkRpDto {
/**
* 交易明细id
*/
private String id;
/**
* 交易明细编号
*/
private String billno;
/**
* 资金组织编码, 公司三字码
*/
private String orgNumber;
/**
* 资金组织名称
*/
private String orgName;
/**
* 交易日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bizdate;
/**
* 记账日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime transdate;
/**
* 币别代码
*/
private String currencyNumber;
/**
* 币别名称
*/
private String currency;
/**
* 银行账号
*/
private String accountbankNumber;
/**
* 银行账户名称
*/
private String accountbank;
/**
* 交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime biztime;
/**
* 摘要
*/
private String description;
/**
* 业务类型, 1普通 2上划 3下拨
*/
private String biztype;
/**
* 业务参考号
*/
private String bizrefno;
/**
* 付款金额
*/
private BigDecimal debitamount;
/**
* 收款金额
*/
private BigDecimal creditamount;
/**
* 余额
*/
private BigDecimal transbalance;
/**
* 对方户名
*/
private String oppunit;
/**
* 对方账号
*/
private String oppbanknumber;
/**
* 对方开户行
*/
private String oppbank;
/**
* 对账标识码
*/
private String bankcheckflag;
/**
* 电子回单号
*/
private String receiptno;
/**
* 明细流水号
*/
private String detailid;
/**
* 处理状态(N-未处理;E-错误;S-成功)
*/
private String statusProc;
/**
* 处理日志
*/
private String msgProc;
/**
* 处理时间
*/
private LocalDateTime dateProc;
/**
* 创建人id
*/
private Long createUserId;
/**
* 创建时间
*/
private LocalDateTime createDate;
/**
* 修改人id
*/
private Long modifyUserId;
/**
* 修改时间
*/
private LocalDateTime modifyDate;
/**
* 租户id
*/
private Long tenantId;
/**
* 部门id
*/
private Long deptId;
/**
* 数据权限id
*/
private Long ruleUserId;
}

View File

@ -0,0 +1,41 @@
package com.xjrsoft.module.fssp.request;
import lombok.Data;
/**
* 登录API接口请求的参数信息
*/
@Data
public class AccessTokenReq {
/**
* 用户工号
*/
private String user;
/**
* 应用令牌
*/
private String apptoken;
/**
* 租户ID
*/
private String tenantid;
/**
* 数据中心ID如果不输入默认会选取租户下的缺省数据中心
*/
private String accountId;
/**
* 用户类型,默认值WorkerNumber
*/
private String usertype;
/**
* 语言,默认值zh_CN
*/
private String language;
}

View File

@ -0,0 +1,36 @@
package com.xjrsoft.module.fssp.request;
import lombok.Data;
/**
* 获取应用令牌请求的参数信息
*/
@Data
public class AppTokenReq {
/**
* 第三方appId
*/
private String appId;
/**
* 第三方app的密码
*/
private String appSecuret;
/**
* 租户ID
*/
private String tenantid;
/**
* 数据中心ID如果不输入默认会选取租户下的缺省数据中心
*/
private String accountId;
/**
* 语言,默认值zh_CN
*/
private String language;
}

View File

@ -0,0 +1,16 @@
package com.xjrsoft.module.fssp.request;
import lombok.Data;
/**
* 获取电子回单附件请求的参数信息
*/
@Data
public class FsspDzhdfjReq {
// 路径文件名
private String path;
// API访问标识
private String accesstoken;
}

View File

@ -0,0 +1,36 @@
package com.xjrsoft.module.fssp.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 获取电子回单信息请求的参数信息
*/
@Data
public class FsspDzhdxxReq {
// 资金组织
private String orgNumber;
// 银行账号
private String accountbank;
// 电子回单号
private String receiptno;
// 交易开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime beginDate;
// 交易结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime endDate;
// 请求数据大小
private Integer pageSize;
// 分页页码
private Integer pageNo;
}

View File

@ -0,0 +1,36 @@
package com.xjrsoft.module.fssp.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 获取电子回单信息请求的参数信息
*/
@Data
public class FsspPzReq {
// 核算组织
private String orgNumber;
// 凭证号
private String billno;
// 交易开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime beginDate;
// 交易结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime endDate;
// 源单id
private String sourcebill;
// 请求数据大小
private Integer pageSize;
// 分页页码
private Integer pageNo;
}

View File

@ -0,0 +1,36 @@
package com.xjrsoft.module.fssp.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 获取银行交易明细请求的参数信息
*/
@Data
public class FsspYhjymxReq {
// 资金组织
private String orgNumber;
// 银行账号
private String accountbank;
// 对账标识码
private String bankcheckflag;
// 交易开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime beginDate;
// 交易结束时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endDate;
// 请求数据大小
private Integer pageSize;
// 分页页码
private Integer pageNo;
}

View File

@ -0,0 +1,25 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class AccessTokenResp {
// 请求是否成功的标识true或false
private String success;
// 错误代码0是成功其他为错误
private String errorCode;
// 错误消息
private String errorDesc;
// API访问标识后续其他API访问需要使用。在用access_token访问的过程中如果response error code的值为1表示该access_token已经超时。
private String accessToken;
// Token过期时间
private Long expireTime;
}

View File

@ -0,0 +1,25 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class AppTokenResp {
// 请求是否成功的标识true或false
private String success;
// 错误代码0是成功其他为错误
private String errorCode;
// 错误消息
private String errorDesc;
// 应用令牌
private String appToken;
// Token过期时间
private Long expireTime;
}

View File

@ -0,0 +1,18 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class AsstactentryResp {
private String flexfield;
private String number;
private String ebsnumber;
private String name;
}

View File

@ -0,0 +1,14 @@
package com.xjrsoft.module.fssp.response;
/**
* FsspResponse 接口,用于定义从联邦服务安全平台(FSSP)获取响应的基本结构
* 该接口提供了一个方法来判断请求是否成功执行
*/
public interface BaseResponse {
/**
* 判断请求是否成功执行
* @return 如果请求成功返回true否则返回false
*/
boolean isSuccess();
}

View File

@ -0,0 +1,126 @@
package com.xjrsoft.module.fssp.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class DzhdxxResp {
/**
* 电子回单id
*/
private String id;
/**
* 单据编号
*/
private String billno;
/**
* 资金组织编码, 公司三字码
*/
private String orgNumber;
/**
* 资金组织名称
*/
private String orgName;
/**
* 交易日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bizdate;
/**
* 币别代码
*/
private String currencyNumber;
/**
* 币别名称
*/
private String currency;
/**
* 银行账号
*/
private String accountbankNumber;
/**
* 银行账户名称
*/
private String accountbank;
/**
* 明细交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime detaildatetime;
/**
* 摘要
*/
private String description;
/**
* 业务类型, 1普通 2上划 3下拨
*/
private String biztype;
/**
* 业务参考号
*/
private String bizrefno;
/**
* 付款金额
*/
private BigDecimal debitamount;
/**
* 收款金额
*/
private BigDecimal creditamount;
/**
* 对方单位
*/
private String oppunit;
/**
* 对方账号
*/
private String oppbanknumber;
/**
* 对方开户行
*/
private String oppbank;
/**
* 明细流水号
*/
private String detailid;
/**
* 电子回单号
*/
private String receiptno;
/**
* 对账标识码
*/
private String bankcheckflag;
/**
* 回单路径文件名
*/
private String filepath;
}

View File

@ -0,0 +1,28 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
import java.util.List;
/**
* FsspDataResponse类是一个泛型类用于封装分页数据响应结果
* @param <T> 泛型类型,表示分页数据中列表元素的类型
*/
@Data
public class FsspDataResp<T> {
// 是否最后一页
private Boolean lastPage;
// 请求数据大小,即每页显示的记录数
private Integer pageSize;
// 分页页码从1开始计数
private Integer pageNo;
// 总记录数,即所有数据中的总条目数
private Integer totalCount;
// 明细列表,包含当前页的所有数据记录
private List<T> rows;
}

View File

@ -0,0 +1,28 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
/**
* FsspResponse 接口,用于定义从联邦服务安全平台(FSSP)获取响应的基本结构
* 该接口提供了一个方法来判断请求是否成功执行
*/
@Data
public class FsspResp implements BaseResponse {
// 响应状态,true、false
private String success;
// 错误代码
private String errorCode;
// 返回消息
private String message;
// 响应数据,泛型类型
private FsspDataResp data;
@Override
public boolean isSuccess() {
return "true".equals(success);
}
}

View File

@ -0,0 +1,128 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class ListgridviewapResp {
/**
* 摘要
*/
private String tallyabstract;
/**
* 会计科目编码
*/
private String account;
/**
* 计量单位编码
*/
private String unit;
/**
* 数量
*/
private BigDecimal quantities;
/**
* 单价
*/
private BigDecimal price;
/**
* 币别编码
*/
private String cuscurrency;
/**
* 汇率
*/
private BigDecimal exrate;
/**
* 原币金额
*/
private BigDecimal oriamount;
/**
* 原币借方
*/
private BigDecimal tallyamount;
/**
* 借方金额(本位币)
*/
private BigDecimal standardamount;
/**
* 原币贷方
*/
private BigDecimal loanamount;
/**
* 贷方金额(本位币)
*/
private BigDecimal loanstanamount;
/**
* 帐户
*/
private String assgrpnum;
/**
* 帐户说明
*/
private String assgrpname;
/**
* 船名
*/
private String shipsname;
/**
* 航次
*/
private String cruises;
/**
* 列次
*/
private String trains;
/**
* 备用1
*/
private String remark1;
/**
* 备用2
*/
private String remark2;
/**
* 备用3
*/
private String remark3;
/**
* 同步ebs单价
*/
private BigDecimal newquantity;
/**
* 同步ebs数量
*/
private BigDecimal newprice;
/**
* 核算维度
*/
List<AsstactentryResp> asstactentry;
}

View File

@ -0,0 +1,149 @@
package com.xjrsoft.module.fssp.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class PzResp {
/**
* 凭证号
*/
private String billno;
/**
* 核算组织编码, 公司三字码
*/
private String orgNumber;
/**
* 核算组织名称
*/
private String orgName;
/**
* 期间
*/
private String period;
/**
* 附件数
*/
private Integer attachment;
/**
* 账簿类型,默认100001
*/
private String accountbook;
/**
* 业务日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bizdate;
/**
* 记账日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bookdate;
/**
* 凭证类型
*/
private String vouchertype;
/**
* 账簿类型
*/
private String booktype;
/**
* 参考消息
*/
private String description;
/**
* 状态A暂存 B已提交 C已审核 D已作废
*/
private String billstatus;
/**
* 是否过账
*/
private Boolean ispost;
/**
* 复核状态a无需复核 b待复核 c已复核
*/
private String ischeck;
/**
* 创建人工号
*/
private String creatorNumber;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime createtime;
/**
* 制单人工号
*/
private String submitterNumber;
/**
* 制单人
*/
private String submitter;
/**
* 审核人工号
*/
private String auditorNumber;
/**
* 审核人
*/
private String auditor;
/**
* 审核时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime auditdate;
/**
* 过账人工号
*/
private String posterNumber;
/**
* 过账人
*/
private String poster;
/**
* 过账时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime posttime;
/**
* 记账明细
*/
List<ListgridviewapResp> listgridviewap;
}

View File

@ -0,0 +1,35 @@
package com.xjrsoft.module.fssp.response;
import lombok.Data;
/**
* FsspResponse类是一个泛型类用于封装Fssp接口的响应数据
* @param <T> 泛型类型,表示响应数据的具体类型
*/
@Data
public class TokenResp<T> implements BaseResponse {
// 响应状态
private String state;
// 错误代码
private String errorCode;
// 错误信息
private String errorMsg;
// 响应消息
private String message;
// 响应数据,泛型类型
private T data;
/**
* 判断响应是否成功
* @return 如果状态为"success"则返回true否则返回false
*/
public boolean isSuccess() {
return state != null && "success".equals(state);
}
}

View File

@ -0,0 +1,132 @@
package com.xjrsoft.module.fssp.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 应用令牌响应类,用于封装应用令牌接口返回的数据
*/
@Data
public class YhjymxResp {
/**
* 交易明细id
*/
private String id;
/**
* 交易明细编号
*/
private String billno;
/**
* 资金组织编码, 公司三字码
*/
private String orgNumber;
/**
* 资金组织名称
*/
private String orgName;
/**
* 交易日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime bizdate;
/**
* 记账日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime transdate;
/**
* 币别代码
*/
private String currencyNumber;
/**
* 币别名称
*/
private String currency;
/**
* 银行账号
*/
private String accountbankNumber;
/**
* 银行账户名称
*/
private String accountbank;
/**
* 交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime biztime;
/**
* 摘要
*/
private String description;
/**
* 业务类型, 1普通 2上划 3下拨
*/
private String biztype;
/**
* 业务参考号
*/
private String bizrefno;
/**
* 付款金额
*/
private BigDecimal debitamount;
/**
* 收款金额
*/
private BigDecimal creditamount;
/**
* 余额
*/
private BigDecimal transbalance;
/**
* 对方户名
*/
private String oppunit;
/**
* 对方账号
*/
private String oppbanknumber;
/**
* 对方开户行
*/
private String oppbank;
/**
* 对账标识码
*/
private String bankcheckflag;
/**
* 电子回单号
*/
private String receiptno;
/**
* 明细流水号
*/
private String detailid;
}

View File

@ -0,0 +1,77 @@
package com.xjrsoft.module.fssp.client;
import com.pictc.enums.BusinessCode;
import com.xjrsoft.common.exception.BusinessException;
import com.xjrsoft.module.fssp.callback.FsspCallback;
import com.xjrsoft.module.fssp.response.BaseResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.util.Collections;
import java.util.Map;
@Slf4j
@Component
public class FsspHttpClient {
private static RestTemplate rest = new RestTemplate();
public static <Req, Resp extends BaseResponse> void post(Req req,
String url,
Class<Resp> clz,
FsspCallback<Resp> callback) {
post(req, url, clz, null, callback);
}
public static <Req, Resp extends BaseResponse> void post(Req req,
String url,
Class<Resp> clz,
Map<String, String> headerMap,
FsspCallback<Resp> callback) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
if (headerMap != null) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
headers.add(entry.getKey(), entry.getValue());
}
}
RequestEntity<Req> request = new RequestEntity<Req>(req, headers, HttpMethod.POST, URI.create(url));
ResponseEntity<Resp> responseEntity = rest.exchange(request, clz);
if(!responseEntity.hasBody()) {
throw new BusinessException(BusinessCode.of(10901,"接口请求失败"));
}
Resp response = responseEntity.getBody();
if(response != null && response.isSuccess()) {
callback.execute(response);
}else {
throw new BusinessException(BusinessCode.of(10902,"接口响应失败"));
}
}
public static byte[] downloadFile(String path, String accessToken, String url) {
StringBuilder builder = new StringBuilder();
builder.append(url);
builder.append("?path=");
builder.append(path);
builder.append("&accesstoken=");
builder.append(accessToken);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_OCTET_STREAM));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<byte[]> response = rest.exchange(
url,
HttpMethod.GET,
entity,
byte[].class
);
if (response.getStatusCode() == HttpStatus.OK) {
return response.getBody();
} else {
throw new BusinessException(BusinessCode.of(10902,"下载失败HTTP状态码: " + response.getStatusCode()));
}
}
}

View File

@ -0,0 +1,44 @@
package com.xjrsoft.module.fssp.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Data
@Component
@RefreshScope
@ConfigurationProperties("xjrsoft.fssp")
public class FsspConfig {
private String appTokenUrl;
private String appId;
private String appSecuret;
private String tenantid;
private String accountId;
private String language;
private String loginUrl;
private String user;
private String usertype;
private String yhjymxUrl;
private String orgNumber;
private String accountbank;
private String dzhdxxUrl;
private String dzhdfjUrl;
private String pzUrl;
}

View File

@ -0,0 +1,233 @@
package com.xjrsoft.module.fssp.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @title: 接口-收付款
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Data
@TableName("lng_jk_rp")
@ApiModel(value = "接口-收付款对象", description = "接口-收付款")
public class LngJkRp implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 交易明细id
*/
@ApiModelProperty("交易明细id")
@TableId
private Long id;
/**
* 交易明细编号
*/
@ApiModelProperty("交易明细编号")
private String billno;
/**
* 资金组织编码, 公司三字码
*/
@ApiModelProperty("资金组织编码(公司三字码)")
private String orgNumber;
/**
* 资金组织名称
*/
@ApiModelProperty("资金组织名称")
private String orgName;
/**
* 交易日期
*/
@ApiModelProperty("交易日期(格式yyyy-MM-dd)")
private LocalDateTime bizdate;
/**
* 记账日期
*/
@ApiModelProperty("记账日期(格式yyyy-MM-dd)")
private LocalDateTime transdate;
/**
* 币别代码
*/
@ApiModelProperty("币别代码")
private String currencyNumber;
/**
* 币别名称
*/
@ApiModelProperty("币别名称")
private String currency;
/**
* 银行账号
*/
@ApiModelProperty("银行账号")
private String accountbankNumber;
/**
* 银行账户名称
*/
@ApiModelProperty("银行账户名称")
private String accountbank;
/**
* 交易时间
*/
@ApiModelProperty("交易时间(格式yyyy-MM-dd HH:mm:ss)")
private LocalDateTime biztime;
/**
* 摘要
*/
@ApiModelProperty("摘要")
private String description;
/**
* 业务类型, 1普通 2上划 3下拨
*/
@ApiModelProperty("业务类型(1普通2上划3下拨)")
private String biztype;
/**
* 业务参考号
*/
@ApiModelProperty("业务参考号")
private String bizrefno;
/**
* 付款金额
*/
@ApiModelProperty("付款金额")
private BigDecimal debitamount;
/**
* 收款金额
*/
@ApiModelProperty("收款金额")
private BigDecimal creditamount;
/**
* 余额
*/
@ApiModelProperty("余额")
private BigDecimal transbalance;
/**
* 对方户名
*/
@ApiModelProperty("对方户名")
private String oppunit;
/**
* 对方账号
*/
@ApiModelProperty("对方账号")
private String oppbanknumber;
/**
* 对方开户行
*/
@ApiModelProperty("对方开户行")
private String oppbank;
/**
* 对账标识码
*/
@ApiModelProperty("对账标识码(可用于匹配付款单)")
private String bankcheckflag;
/**
* 电子回单号
*/
@ApiModelProperty("电子回单号(可用于匹配电子回单)")
private String receiptno;
/**
* 明细流水号
*/
@ApiModelProperty("明细流水号")
private String detailid;
/**
* 处理状态(N-未处理;E-错误;S-成功)
*/
@ApiModelProperty("处理状态(N-未处理;E-错误;S-成功)")
private String statusProc;
/**
* 处理日志
*/
@ApiModelProperty("处理日志")
private String msgProc;
/**
* 处理时间
*/
@ApiModelProperty("处理时间")
private LocalDateTime dateProc;
/**
* 创建人id
*/
@ApiModelProperty("创建人id")
@TableField(fill = FieldFill.INSERT)
private Long createUserId;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createDate;
/**
* 修改人id
*/
@ApiModelProperty("修改人id")
@TableField(fill = FieldFill.UPDATE)
private Long modifyUserId;
/**
* 修改时间
*/
@ApiModelProperty("修改时间")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime modifyDate;
/**
* 租户id
*/
@ApiModelProperty("租户id")
private Long tenantId;
/**
* 部门id
*/
@ApiModelProperty("部门id")
@TableField(fill = FieldFill.INSERT)
private Long deptId;
/**
* 数据权限id
*/
@ApiModelProperty("数据权限id")
@TableField(fill = FieldFill.INSERT)
private Long ruleUserId;
}

View File

@ -0,0 +1,247 @@
package com.xjrsoft.module.fssp.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @title: 接口-收付款-电子回单
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Data
@TableName("lng_jk_rp_bill")
@ApiModel(value = "接口-收付款-电子回单对象", description = "接口-收付款-电子回单")
public class LngJkRpBill {
/**
* 电子回单id
*/
@ApiModelProperty("电子回单id")
@TableId
private String id;
/**
* 单据编号
*/
@ApiModelProperty("单据编号")
private String billno;
/**
* 资金组织编码(公司三字码)
*/
@ApiModelProperty("资金组织编码(公司三字码)")
private String orgNumber;
/**
* 资金组织名称
*/
@ApiModelProperty("资金组织名称")
private String orgName;
/**
* 交易日期(格式yyyy-MM-dd)
*/
@ApiModelProperty("交易日期(格式yyyy-MM-dd)")
private LocalDateTime bizdate;
/**
* 币别代码
*/
@ApiModelProperty("币别代码")
private String currencyNumber;
/**
* 币别名称
*/
@ApiModelProperty("币别名称")
private String currency;
/**
* 银行账号
*/
@ApiModelProperty("银行账号")
private String accountbankNumber;
/**
* 银行账户名称
*/
@ApiModelProperty("银行账户名称")
private String accountbank;
/**
* 明细交易时间(格式yyyy-MM-dd HH:mm:ss)
*/
@ApiModelProperty("明细交易时间(格式yyyy-MM-dd HH:mm:ss)")
private LocalDateTime detaildatetime;
/**
* 摘要
*/
@ApiModelProperty("摘要")
private String description;
/**
* 业务类型(1普通2上划3下拨)
*/
@ApiModelProperty("业务类型(1普通2上划3下拨)")
private String biztype;
/**
* 业务参考号
*/
@ApiModelProperty("业务参考号")
private String bizrefno;
/**
* 付款金额
*/
@ApiModelProperty("付款金额")
private BigDecimal debitamount;
/**
* 收款金额
*/
@ApiModelProperty("收款金额")
private BigDecimal creditamount;
/**
* 对方单位
*/
@ApiModelProperty("对方单位")
private String oppunit;
/**
* 对方账号
*/
@ApiModelProperty("对方账号")
private String oppbanknumber;
/**
* 对方开户行
*/
@ApiModelProperty("对方开户行")
private String oppbank;
/**
* 明细流水号
*/
@ApiModelProperty("明细流水号")
private String detailid;
/**
* 电子回单号(可用于匹配银行交易明细)
*/
@ApiModelProperty("电子回单号(可用于匹配银行交易明细)")
private String receiptno;
/**
* 对账标识码
*/
@ApiModelProperty("对账标识码")
private String bankcheckflag;
/**
* 回单路径文件名
*/
@ApiModelProperty("回单路径文件名")
private String filepath;
/**
* 处理状态(N-未处理;E-错误;S-成功)
*/
@ApiModelProperty("处理状态(N-未处理;E-错误;S-成功)")
private String statusProc;
/**
* 处理日志
*/
@ApiModelProperty("处理日志")
private String msgProc;
/**
* 处理时间
*/
@ApiModelProperty("处理时间")
private LocalDateTime dateProc;
/**
* 供应链回单路径文件名
*/
@ApiModelProperty("供应链回单路径文件名")
private String filepathAttr;
/**
* 附件处理状态(N-未处理;E-错误;S-成功)
*/
@ApiModelProperty("附件处理状态(N-未处理;E-错误;S-成功)")
private String statusProcAttr;
/**
* 附件处理日志
*/
@ApiModelProperty("附件处理日志")
private String msgProcAttr;
/**
* 附件处理时间
*/
@ApiModelProperty("附件处理时间")
private LocalDateTime dateProcAttr;
/**
* 创建人id
*/
@ApiModelProperty("创建人id")
@TableField(fill = FieldFill.INSERT)
private Long createUserId;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createDate;
/**
* 修改人id
*/
@ApiModelProperty("修改人id")
@TableField(fill = FieldFill.UPDATE)
private Long modifyUserId;
/**
* 修改时间
*/
@ApiModelProperty("修改时间")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime modifyDate;
/**
* 租户id
*/
@ApiModelProperty("租户id")
private Long tenantId;
/**
* 部门id
*/
@ApiModelProperty("部门id")
@TableField(fill = FieldFill.INSERT)
private Long deptId;
/**
* 数据权限id
*/
@ApiModelProperty("数据权限id")
@TableField(fill = FieldFill.INSERT)
private Long ruleUserId;
}

View File

@ -0,0 +1,244 @@
package com.xjrsoft.module.fssp.handler;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.api.client.util.Lists;
import com.google.api.client.util.Maps;
import com.pictc.enums.BusinessCode;
import com.xjrsoft.common.exception.BusinessException;
import com.xjrsoft.common.utils.CollectionUtils;
import com.xjrsoft.common.utils.RedisUtil;
import com.xjrsoft.module.fssp.client.FsspHttpClient;
import com.xjrsoft.module.fssp.config.FsspConfig;
import com.xjrsoft.module.fssp.dto.LngJkRpBillDto;
import com.xjrsoft.module.fssp.dto.LngJkRpDto;
import com.xjrsoft.module.fssp.entity.LngJkRp;
import com.xjrsoft.module.fssp.entity.LngJkRpBill;
import com.xjrsoft.module.fssp.request.*;
import com.xjrsoft.module.fssp.response.*;
import com.xjrsoft.module.fssp.service.LngJkRpBillService;
import com.xjrsoft.module.fssp.service.LngJkRpService;
import com.xjrsoft.module.system.client.IFileClient;
import com.xjrsoft.module.system.dto.FileUploadDto;
import com.xjrsoft.module.system.vo.LngFileUploadVo;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
@Slf4j
@Component
public class FsspJobHandler {
private FsspConfig config;
private RedisUtil redisUtil;
private LngJkRpService lngJkRpService;
private LngJkRpBillService lngJkRpBillService;
private IFileClient iFileClient;
private static final String FSSP_APP_TOKEN = "fssp_app_token";
private static final String FSSP_ACCESS_TOKEN = "fssp_access_token";
private static final String ACCESSTOKEN = "accesstoken";
public FsspJobHandler(FsspConfig config,
RedisUtil redisUtil,
LngJkRpService lngJkRpService,
LngJkRpBillService lngJkRpBillService,
IFileClient iFileClient) {
this.config = config;
this.redisUtil = redisUtil;
this.lngJkRpService = lngJkRpService;
this.lngJkRpBillService = lngJkRpBillService;
this.iFileClient = iFileClient;
}
private String getAppToken() {
AppTokenReq appTokenReq = new AppTokenReq();
appTokenReq.setAppId(config.getAppId());
appTokenReq.setAppSecuret(config.getAppSecuret());
appTokenReq.setTenantid(config.getTenantid());
appTokenReq.setAccountId(config.getAccountId());
appTokenReq.setLanguage(config.getLanguage());
AtomicReference<String> appToken = new AtomicReference<>();
FsspHttpClient.post(appTokenReq, config.getAppTokenUrl(), TokenResp.class, resp -> {
AppTokenResp data = (AppTokenResp) resp.getData();
if ("0".equals(data.getErrorCode())) {
appToken.set(data.getAppToken());
redisUtil.set(FSSP_APP_TOKEN, data.getAppToken(), data.getExpireTime());
} else {
throw new BusinessException(BusinessCode.of(10903,"AppToken已过期"));
}
});
return appToken.toString();
}
private String getAccessToken() {
AccessTokenReq accessTokenReq = new AccessTokenReq();
accessTokenReq.setUser(config.getUser());
String appToken = redisUtil.get(FSSP_APP_TOKEN);
accessTokenReq.setApptoken(StringUtils.isNotBlank(appToken) ? appToken : this.getAppToken());
accessTokenReq.setTenantid(config.getTenantid());
accessTokenReq.setAccountId(config.getAccountId());
accessTokenReq.setUsertype(config.getUsertype());
accessTokenReq.setLanguage(config.getLanguage());
AtomicReference<String> accessToken = new AtomicReference<>();
FsspHttpClient.post(accessTokenReq, config.getLoginUrl(), TokenResp.class, resp -> {
AccessTokenResp data = (AccessTokenResp) resp.getData();
if ("0".equals(data.getErrorCode())) {
accessToken.set(data.getAccessToken());
redisUtil.set(FSSP_ACCESS_TOKEN, data.getAccessToken(), data.getExpireTime());
} else {
throw new BusinessException(BusinessCode.of(10903,"AccessToken已过期"));
}
});
return accessToken.toString();
}
@XxlJob("yhjymxJobHandler")
public void yhjymxJobHandler(Integer pageNo) {
log.info("定时任务---银行交易明细查询---开始");
FsspYhjymxReq fsspYhjymxReq = new FsspYhjymxReq();
fsspYhjymxReq.setOrgNumber(config.getOrgNumber());
fsspYhjymxReq.setAccountbank(config.getAccountbank());
fsspYhjymxReq.setBankcheckflag(null);
// 开始时间必须小于等于结束时间且开始时间和结束时间不可相差60天以上
fsspYhjymxReq.setBeginDate(LocalDateTime.now());
fsspYhjymxReq.setEndDate(LocalDateTime.now());
fsspYhjymxReq.setPageSize(100);
fsspYhjymxReq.setPageNo(pageNo == null ? 1 : pageNo);
List<LngJkRpDto> dtoList = Lists.newArrayList();
Map<String, String> headers = Maps.newHashMap();
String accesstoken = redisUtil.get(FSSP_ACCESS_TOKEN);
headers.put(ACCESSTOKEN, StringUtils.isNotBlank(accesstoken) ? accesstoken : this.getAccessToken());
FsspHttpClient.post(fsspYhjymxReq, config.getYhjymxUrl(), FsspResp.class, headers, resp -> {
FsspDataResp data = resp.getData();
if (data != null) {
data.getRows().forEach(row -> {
LngJkRpDto lngJkRpDto = (LngJkRpDto) row;
lngJkRpDto.setStatusProc("N");
lngJkRpDto.setMsgProc("接收成功");
lngJkRpDto.setDateProc(LocalDateTime.now());
dtoList.add(lngJkRpDto);
});
List<LngJkRp> list = BeanUtil.copyToList(dtoList, LngJkRp.class);
lngJkRpService.saveOrUpdateBatch(list);
if (!data.getLastPage()) {
yhjymxJobHandler(fsspYhjymxReq.getPageNo() + 1);
}
}
});
log.info("定时任务---电子回单信息查询---结束");
}
@XxlJob("dzhdxxJobHandler")
public void dzhdxxJobHandler(Integer pageNo) {
log.info("定时任务---电子回单信息查询---开始");
FsspDzhdxxReq fsspDzhdxxReq = new FsspDzhdxxReq();
fsspDzhdxxReq.setOrgNumber(config.getOrgNumber());
fsspDzhdxxReq.setAccountbank(config.getAccountbank());
fsspDzhdxxReq.setReceiptno(null);
// 开始时间必须小于等于结束时间且开始时间和结束时间不可相差60天以上
fsspDzhdxxReq.setBeginDate(LocalDateTime.now());
fsspDzhdxxReq.setEndDate(LocalDateTime.now());
fsspDzhdxxReq.setPageSize(100);
fsspDzhdxxReq.setPageNo(pageNo == null ? 1 : pageNo);
List<LngJkRpBillDto> dtoList = Lists.newArrayList();
Map<String, String> headers = Maps.newHashMap();
String accesstoken = redisUtil.get(FSSP_ACCESS_TOKEN);
headers.put(ACCESSTOKEN, StringUtils.isNotBlank(accesstoken) ? accesstoken : this.getAccessToken());
FsspHttpClient.post(fsspDzhdxxReq, config.getDzhdxxUrl(), FsspResp.class, headers, resp -> {
FsspDataResp data = resp.getData();
if (data != null) {
data.getRows().forEach(row -> {
LngJkRpBillDto lngJkRpBillDto = (LngJkRpBillDto) row;
lngJkRpBillDto.setStatusProc("N");
lngJkRpBillDto.setMsgProc("接收成功");
lngJkRpBillDto.setDateProc(LocalDateTime.now());
lngJkRpBillDto.setStatusProcAttr("N");
dtoList.add(lngJkRpBillDto);
});
List<LngJkRpBill> list = BeanUtil.copyToList(dtoList, LngJkRpBill.class);
lngJkRpBillService.saveOrUpdateBatch(list);
if (!data.getLastPage()) {
dzhdxxJobHandler(fsspDzhdxxReq.getPageNo() + 1);
}
}
});
log.info("定时任务---电子回单信息查询---结束");
}
@XxlJob("dzhdfjJobHandler")
public void dzhdfjJobHandler() {
log.info("定时任务---电子回单附件下载---开始");
List<String> statusList = Lists.newArrayList();
statusList.add("N");
statusList.add("E");
List<LngJkRpBill> list = lngJkRpBillService.list(new LambdaQueryWrapper<LngJkRpBill>()
.in(LngJkRpBill::getStatusProc, statusList));
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(x -> {
downloadFile(x);
});
}
log.info("定时任务---批量下载电子回单附件---结束");
}
private void downloadFile(LngJkRpBill lngJkRpBill) {
String accesstoken = redisUtil.get(FSSP_ACCESS_TOKEN);
if (StringUtils.isBlank(accesstoken)) {
accesstoken = this.getAccessToken();
}
byte[] fileByte = FsspHttpClient.downloadFile(lngJkRpBill.getFilepath(), accesstoken, config.getDzhdfjUrl());
FileUploadDto uploadDto = new FileUploadDto();
uploadDto.setBuffer(fileByte);
uploadDto.setTableName("lng_jk_rp_bill");
try {
LngFileUploadVo vo = iFileClient.upload(uploadDto);
lngJkRpBill.setFilepathAttr(vo.getFilePath());
lngJkRpBill.setStatusProcAttr("S");
lngJkRpBill.setDateProcAttr(LocalDateTime.now());
} catch (Exception e) {
lngJkRpBill.setStatusProcAttr("E");
lngJkRpBill.setMsgProcAttr(e.getMessage());
lngJkRpBill.setDateProcAttr(LocalDateTime.now());
}
}
@XxlJob("pzJobHandler")
public void pzJobHandler(Integer pageNo) {
FsspPzReq fsspPzReq = new FsspPzReq();
fsspPzReq.setOrgNumber(config.getOrgNumber());
fsspPzReq.setBillno(null);
// 开始时间必须小于等于结束时间且开始时间和结束时间不可相差60天以上
fsspPzReq.setBeginDate(LocalDateTime.now());
fsspPzReq.setEndDate(LocalDateTime.now());
fsspPzReq.setSourcebill(null);
fsspPzReq.setPageSize(100);
fsspPzReq.setPageNo(pageNo == null ? 1 : pageNo);
List<Object> list = Lists.newArrayList();
Map<String, String> headers = Maps.newHashMap();
String accesstoken = redisUtil.get(FSSP_ACCESS_TOKEN);
headers.put(ACCESSTOKEN, StringUtils.isNotBlank(accesstoken) ? accesstoken : this.getAccessToken());
FsspHttpClient.post(fsspPzReq, config.getPzUrl(), FsspResp.class, headers, resp -> {
FsspDataResp data = resp.getData();
data.getRows().forEach(row -> {
PzResp pzResp = (PzResp) row;
list.add(pzResp);
});
if (!data.getLastPage()) {
pzJobHandler(fsspPzReq.getPageNo() + 1);
}
});
}
}

View File

@ -0,0 +1,17 @@
package com.xjrsoft.module.fssp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.xjrsoft.module.fssp.entity.LngJkRpBill;
import org.apache.ibatis.annotations.Mapper;
/**
* @title: mapper
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Mapper
public interface LngJkRpBillMapper extends MPJBaseMapper<LngJkRpBill>, BaseMapper<LngJkRpBill> {
}

View File

@ -0,0 +1,17 @@
package com.xjrsoft.module.fssp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.xjrsoft.module.fssp.entity.LngJkRp;
import org.apache.ibatis.annotations.Mapper;
/**
* @title: mapper
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Mapper
public interface LngJkRpMapper extends MPJBaseMapper<LngJkRp>, BaseMapper<LngJkRp> {
}

View File

@ -0,0 +1,17 @@
package com.xjrsoft.module.fssp.service;
import com.github.yulichang.base.MPJBaseService;
import com.github.yulichang.extension.mapping.base.MPJDeepService;
import com.github.yulichang.extension.mapping.base.MPJRelationService;
import com.xjrsoft.module.fssp.entity.LngJkRpBill;
/**
* @title: service
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
public interface LngJkRpBillService extends MPJBaseService<LngJkRpBill>, MPJDeepService<LngJkRpBill>, MPJRelationService<LngJkRpBill> {
}

View File

@ -0,0 +1,17 @@
package com.xjrsoft.module.fssp.service;
import com.github.yulichang.base.MPJBaseService;
import com.github.yulichang.extension.mapping.base.MPJDeepService;
import com.github.yulichang.extension.mapping.base.MPJRelationService;
import com.xjrsoft.module.fssp.entity.LngJkRp;
/**
* @title: service
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
public interface LngJkRpService extends MPJBaseService<LngJkRp>, MPJDeepService<LngJkRp>, MPJRelationService<LngJkRp> {
}

View File

@ -0,0 +1,20 @@
package com.xjrsoft.module.fssp.service.impl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.xjrsoft.module.fssp.entity.LngJkRpBill;
import com.xjrsoft.module.fssp.mapper.LngJkRpBillMapper;
import com.xjrsoft.module.fssp.service.LngJkRpBillService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @title: service
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Service
@AllArgsConstructor
public class LngJkRpBillServiceImpl extends MPJBaseServiceImpl<LngJkRpBillMapper, LngJkRpBill> implements LngJkRpBillService {
}

View File

@ -0,0 +1,20 @@
package com.xjrsoft.module.fssp.service.impl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.xjrsoft.module.fssp.entity.LngJkRp;
import com.xjrsoft.module.fssp.mapper.LngJkRpMapper;
import com.xjrsoft.module.fssp.service.LngJkRpService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @title: service
* @Author 管理员
* @Date: 2025-12-24
* @Version 1.0
*/
@Service
@AllArgsConstructor
public class LngJkRpServiceImpl extends MPJBaseServiceImpl<LngJkRpMapper, LngJkRp> implements LngJkRpService {
}

View File

@ -54,6 +54,20 @@ xjrsoft:
javaPath: F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-demo\itc-pcitc-demo-service
webPath: F:\ges-scm\code\dev\geg-gas-web
appPath: D:\pm\yfxm-newgit\uniapp\xjrsoft-uni #前端app
fssp:
app-token-url: https://esb-test.geg.com.cn:8443/gw/query-uat-service/ierp/api/getAppToken.do
app-id: CWT
app-securet: @pK9WM85TTweSnlckk1uJ80rX8cuzDegk
tenantid: ierpuat
accountId: 2372076203864489984
language: zh_CN
login-url: https://esb-test.geg.com.cn:8443/gw/query-uat-service/ierp/api/login.do
user: 111
usertype: 111
yhjymx-url: https://esb-test.geg.com.cn:8443/gw/待注册后补充
org-number: 111
accountbank: 111
dzhdxx-url: https://esb-test.geg.com.cn:8443/gw/cas-uat-service/ierp/kapi/v2/dlkf/bei/bei_elecreceipt/getList
dzhdfj-url: https://esb-test.geg.com.cn:8443/gw/cas-uat-service/ierp/attachment/download.do
pz-url: https://esb-test.geg.com.cn:8443/gw/cas-uat-service/ierp/kapi/v2/dlkf/gl/gl_voucher/batchquery