推送杭州银行

This commit is contained in:
lvleigang 2025-09-09 13:42:36 +08:00
parent 486805c35a
commit cbc9cb8b93
3 changed files with 428 additions and 147 deletions

View File

@ -33,6 +33,7 @@ public class ZxBankEntity extends BaseEntity {
private String summaryId;// private String summaryId;//
private String mainId;//主表id private String mainId;//主表id
private String workitemId;//主表id private String workitemId;//主表id
private String fDocumentNo;//主表id
public String getSummaryId() { public String getSummaryId() {
return summaryId; return summaryId;
@ -273,4 +274,12 @@ public class ZxBankEntity extends BaseEntity {
public void setWorkitemId(String workitemId) { public void setWorkitemId(String workitemId) {
this.workitemId = workitemId; this.workitemId = workitemId;
} }
public String getfDocumentNo() {
return fDocumentNo;
}
public void setfDocumentNo(String fDocumentNo) {
this.fDocumentNo = fDocumentNo;
}
} }

View File

@ -4,6 +4,7 @@
<resultMap id="get-ZxBankEntity-result" type="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity"> <resultMap id="get-ZxBankEntity-result" type="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity">
<result property="sourceFlowNumber" column="sourceFlowNumber" /> <result property="sourceFlowNumber" column="sourceFlowNumber" />
<result property="documentNo" column="documentNo" /> <result property="documentNo" column="documentNo" />
<result property="fDocumentNo" column="fDocumentNo" />
<result property="companyCode" column="companyCode" /> <result property="companyCode" column="companyCode" />
<result property="fundType" column="fundType" /> <result property="fundType" column="fundType" />
<result property="digest" column="digest" /> <result property="digest" column="digest" />
@ -38,6 +39,7 @@
data_id as dataId data_id as dataId
,source_flow_number as sourceFlowNumber ,source_flow_number as sourceFlowNumber
,document_no as documentNo ,document_no as documentNo
,f_document_no as fDocumentNo
,company_code as companyCode ,company_code as companyCode
,fund_type as fundType ,fund_type as fundType
,digest as digest ,digest as digest
@ -94,12 +96,12 @@
<select id="queryElecIsNullZX" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity"> <select id="queryElecIsNullZX" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity">
select select
<include refid="ZxBankEntity_Base_Column_List" /> <include refid="ZxBankEntity_Base_Column_List" />
from v_hzya_pay where (pay_result='已支付' or pay_result='支付成功' ) and receipt is null and from v_hzya_pay where (pay_result='已支付' or pay_result='支付成功' ) and receipt is null
</select> </select>
<select id="queryElecIsNullZXNew" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity"> <select id="queryElecIsNullZXNew" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity">
select select
<include refid="ZxBankEntity_Base_Column_List" /> <include refid="ZxBankEntity_Base_Column_List" />
from v_hzya_pay_new where (pay_result='已支付' or pay_result='支付成功' ) and receipt is null and from v_hzya_pay_new where (pay_result='已支付' or pay_result='支付成功' ) and receipt is null
</select> </select>
<!--通过主键修改方法--> <!--通过主键修改方法-->

View File

@ -167,20 +167,14 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
try { try {
ZxBankEntity zxBankEntity = json.toJavaObject(ZxBankEntity.class); ZxBankEntity zxBankEntity = json.toJavaObject(ZxBankEntity.class);
zxBankEntity.setDataSourceCode("HT-OA"); zxBankEntity.setDataSourceCode("HT-OA");
logger.info("======开始查询中信返回的支付结果====="); logger.error("======开始查询中信返回的支付结果=====");
List<ZxBankEntity> zxBankEntities = zxBankDao.queryResultIsNullZX(zxBankEntity); List<ZxBankEntity> zxBankEntities = zxBankDao.queryResultIsNullZX(zxBankEntity);
logger.error("======查询新试图=====");
List<ZxBankEntity> zxBankEntities1 = zxBankDao.queryResultIsNullZXNew(zxBankEntity); List<ZxBankEntity> zxBankEntities1 = zxBankDao.queryResultIsNullZXNew(zxBankEntity);
if(zxBankEntities1 != null && zxBankEntities1.size() > 0){ logger.error("======查询新试图返回结果1=====");
if(zxBankEntities == null){ if(zxBankEntities != null&& zxBankEntities.size() > 0){
zxBankEntities = new ArrayList<>();
}
zxBankEntities.addAll(zxBankEntities1);
}
if(CollectionUtils.isEmpty(zxBankEntities)){
logger.info("=====杭泰付款单中没有已推送并且支付结果为空的数据========");
return BaseResult.getSuccessMessageEntity("查询成功");
}
for (ZxBankEntity bankEntity : zxBankEntities) { for (ZxBankEntity bankEntity : zxBankEntities) {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
list.add(bankEntity.getDocumentNo()); list.add(bankEntity.getDocumentNo());
JSONObject jsonObject=new JSONObject(); JSONObject jsonObject=new JSONObject();
@ -221,6 +215,70 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
String payStatus = jsonObjectList.getString("payStatus");//返回的状态 String payStatus = jsonObjectList.getString("payStatus");//返回的状态
String errorMsg = jsonObjectList.getString("errorMsg");//返回的错误信息 String errorMsg = jsonObjectList.getString("errorMsg");//返回的错误信息
logger.info("====付款單查询中信返回的单据号为:{},返回结果为:{},错误信息为:{}",documentNo,payStatus,errorMsg); logger.info("====付款單查询中信返回的单据号为:{},返回结果为:{},错误信息为:{}",documentNo,payStatus,errorMsg);
if(documentNo.equals(bankEntity.getDocumentNo())){
//修改支付状态
bankEntity.setPayResult(PayState.payStateGetValue(payStatus));
bankEntity.setDataSourceCode("HT-OA");
bankEntity.setId(bankEntity.getDataId());
//中信银行 有很多状态是PAYING的也会提示错误信息
if (StrUtil.isNotEmpty(errorMsg)){
bankEntity.setPayResult(errorMsg);
}
zxBankDao.updateResultStatus(bankEntity);
saveTaskLivingDetails(bankEntity.getDataId(), bankEntity.getDocumentNo(), jsonData.toJSONString(), resultJson.toJSONString(), true,"ZxBankResultPluginInitializer");
}
}
}else{
logger.info("====查询支付结果返回值中的list为空====");
//TODO 为空说明根本就没推到司库这部分数据是推送时就报错了 这里要改下 在推送司库时如果推送失败当时就要更新错误信息避免这里查到为空的
}
}
}
}
if(zxBankEntities1 != null&& zxBankEntities1.size() > 0){
for (ZxBankEntity bankEntity : zxBankEntities1) {
List<String> list = new ArrayList<>();
list.add(bankEntity.getDocumentNo());
JSONObject jsonObject=new JSONObject();
jsonObject.put("documentNoList",list);
JSONObject objectData=new JSONObject();
objectData.put("data",jsonObject);
logger.info("=======杭泰付款单调用中信支付结果查询请求参数明文为:{}", objectData.toJSONString());
String encrypt = SM2Util.encrypt(objectData.toJSONString(), publicKey);
JSONObject jsonData=new JSONObject();
jsonData.put("data",encrypt);
logger.error("=======杭泰付款单调用中信支付结果查询请求参数密文为:{}铭文{}", jsonData.toJSONString(),bankEntity.getDocumentNo());
//发送数据
String result = HttpRequest.post(url).
header("appId", "800058").
header("apiCode", "8000580001").
//header("access_token", tokenBody).
header("publicKey", "ZJYALA1PchEI1s2D5vaapO9RZ6CiDFv/pJAV88lRYg0oBwBCe7eDIk+3zDUT+v578prj").
header("secretKey", "jcoATYyty05KgDwL4O0xD+Ulq5ExYWkGvZGf2bhKrMaCehb3NIm5DUnJSK/r2SUaj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
body(jsonData.toJSONString()).
execute().
body();
logger.error("========杭泰付款单调用中信支付结果查询返回参数为:{}====={}=====", result,bankEntity.getDocumentNo());
JSONObject resultJson = JSONObject.parseObject(result);
if (!resultJson.getBoolean("flag")) {
saveTaskLivingDetails(bankEntity.getDataId(), bankEntity.getDocumentNo(), jsonData.toJSONString(), resultJson.toJSONString(), false,"ZxBankResultPluginInitializer");
} else {
JSONObject attribute = resultJson.getJSONObject("attribute");
String data = attribute.getString("data");
// logger.info("=======杭泰付款单调用中信支付结果查询返回参数密文为:{}", data);
String decrypt = SM2Util.decrypt(data, privateKey);
logger.error("=======杭泰付款单调用中信支付结果查询返回参数明文为:{},{}", decrypt,bankEntity.getDocumentNo());
JSONObject jsonObjectData = JSONObject.parseObject(decrypt);
JSONArray jsonArray = jsonObjectData.getJSONArray("list");
if(CollectionUtils.isNotEmpty(jsonArray)){
for (Object o : jsonArray) {
JSONObject jsonObjectList=(JSONObject) JSON.toJSON(o);
String documentNo = jsonObjectList.getString("documentNo");//返回的业务单据号
String payStatus = jsonObjectList.getString("payStatus");//返回的状态
String errorMsg = jsonObjectList.getString("errorMsg");//返回的错误信息
logger.error("====付款單查询中信返回的单据号为:{},返回结果为:{},错误信息为:{}",documentNo,payStatus,errorMsg);
if(documentNo.equals(bankEntity.getDocumentNo())){ if(documentNo.equals(bankEntity.getDocumentNo())){
//修改支付状态 //修改支付状态
bankEntity.setPayResult(PayState.payStateGetValue(payStatus)); bankEntity.setPayResult(PayState.payStateGetValue(payStatus));
@ -327,11 +385,15 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
} }
} }
}else{ }else{
if(bankEntity.getTabName().equals("formson_0329")){
sendDatas(bankEntity);
}
logger.info("====查询支付结果返回值中的list为空===="); logger.info("====查询支付结果返回值中的list为空====");
//TODO 为空说明根本就没推到司库这部分数据是推送时就报错了 这里要改下 在推送司库时如果推送失败当时就要更新错误信息避免这里查到为空的 //TODO 为空说明根本就没推到司库这部分数据是推送时就报错了 这里要改下 在推送司库时如果推送失败当时就要更新错误信息避免这里查到为空的
} }
} }
} }
}
//logger.info("========杭泰付款单查询支付结果执行成功========"); //logger.info("========杭泰付款单查询支付结果执行成功========");
return BaseResult.getSuccessMessageEntity("支付结果查询成功"); return BaseResult.getSuccessMessageEntity("支付结果查询成功");
}catch (Exception e){ }catch (Exception e){
@ -340,6 +402,164 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
} }
return BaseResult.getFailureMessageEntity("支付结果查询失败"); return BaseResult.getFailureMessageEntity("支付结果查询失败");
} }
private void sendDatas(ZxBankEntity bankEntity) {
List<String> list = new ArrayList<>();
list.add(bankEntity.getfDocumentNo());
JSONObject jsonObject=new JSONObject();
jsonObject.put("documentNoList",list);
JSONObject objectData=new JSONObject();
objectData.put("data",jsonObject);
logger.info("=======杭泰付款单调用中信支付结果查询请求参数明文为:{}", objectData.toJSONString());
String encrypt = SM2Util.encrypt(objectData.toJSONString(), publicKey);
JSONObject jsonData=new JSONObject();
jsonData.put("data",encrypt);
logger.error("=======杭泰付款单调用中信支付结果查询请求参数密文为:{}铭文{}", jsonData.toJSONString(),bankEntity.getfDocumentNo());
//发送数据
String result = HttpRequest.post(url).
header("appId", "800058").
header("apiCode", "8000580001").
//header("access_token", tokenBody).
header("publicKey", "ZJYALA1PchEI1s2D5vaapO9RZ6CiDFv/pJAV88lRYg0oBwBCe7eDIk+3zDUT+v578prj").
header("secretKey", "jcoATYyty05KgDwL4O0xD+Ulq5ExYWkGvZGf2bhKrMaCehb3NIm5DUnJSK/r2SUaj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
body(jsonData.toJSONString()).
execute().
body();
logger.error("========杭泰付款单调用中信支付结果查询返回参数为:{}====={}=====", result,bankEntity.getfDocumentNo());
JSONObject resultJson = JSONObject.parseObject(result);
if (!resultJson.getBoolean("flag")) {
saveTaskLivingDetails(bankEntity.getDataId(), bankEntity.getfDocumentNo(), jsonData.toJSONString(), resultJson.toJSONString(), false,"ZxBankResultPluginInitializer");
} else {
JSONObject attribute = resultJson.getJSONObject("attribute");
String data = attribute.getString("data");
// logger.info("=======杭泰付款单调用中信支付结果查询返回参数密文为:{}", data);
String decrypt = null;
try {
decrypt = SM2Util.decrypt(data, privateKey);
} catch (Exception e) {
e.printStackTrace();
}
logger.error("=======杭泰付款单调用中信支付结果查询返回参数明文为:{},{}", decrypt,bankEntity.getfDocumentNo());
JSONObject jsonObjectData = JSONObject.parseObject(decrypt);
JSONArray jsonArray = jsonObjectData.getJSONArray("list");
if(CollectionUtils.isNotEmpty(jsonArray)){
for (Object o : jsonArray) {
JSONObject jsonObjectList=(JSONObject) JSON.toJSON(o);
String documentNo = jsonObjectList.getString("documentNo");//返回的业务单据号
String payStatus = jsonObjectList.getString("payStatus");//返回的状态
String errorMsg = jsonObjectList.getString("errorMsg");//返回的错误信息
logger.error("====付款單查询中信返回的单据号为:{},返回结果为:{},错误信息为:{}",documentNo,payStatus,errorMsg);
if(documentNo.equals(bankEntity.getfDocumentNo())){
//修改支付状态
bankEntity.setPayResult(PayState.payStateGetValue(payStatus));
bankEntity.setDataSourceCode("HT-OA");
bankEntity.setId(bankEntity.getDataId());
//中信银行 有很多状态是PAYING的也会提示错误信息
if (StrUtil.isNotEmpty(errorMsg)){
bankEntity.setPayResult(errorMsg);
}
zxBankDao.updateResultStatus(bankEntity);
//1查询单据是否全部流程结束
logger.error("====付款單查询中信返回的单据号为:{},返回结果为:{},错误信息为:{}",documentNo,payStatus,errorMsg);
List<ZxBankEntity> resultList = null;
bankEntity.setDataSourceCode("HT-OA");
//对公付款单
if("formson_0329".equals(bankEntity.getTabName())){
resultList = zxBankDao.queryResultStatusMx(bankEntity);
}
//招待报销单
if("formmain_0294".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatus(bankEntity);
}
//日常报销单
if("formmain_0314".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatus(bankEntity);
}
// 差旅报销单-
if("formmain_0533".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatus(bankEntity);
}
// 借还款
if("formmain_0293".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatus(bankEntity);
}
//资金归集
if("formson_0378".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatusMx(bankEntity);
}
//资金拨付
if("formson_0465".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatusMx(bankEntity);
}
//同名账户划转
if("formson_0469".equals(bankEntity.getTabName())) {
resultList = zxBankDao.queryResultStatusMx(bankEntity);
}
//2修改流程结果
if(resultList != null && resultList.size() > 0){
int cg = 0;
int zfz = 0;
int sl = 0;
String workitemId = null;
for (int i = 0; i < resultList.size(); i++) {
sl++;
if(resultList.get(i).getPayResult() != null && ("已支付".equals(resultList.get(i).getPayResult()) || "支付成功".equals(resultList.get(i).getPayResult()) )){
cg++;
}
if(resultList.get(i).getPayResult() == null || "".equals(resultList.get(i).getPayResult()) || "支付中".equals(resultList.get(i).getPayResult())){
zfz++;
}
if(workitemId == null){
workitemId = resultList.get(i).getWorkitemId();
}
}
logger.error("付款單查询支付中状态:{}",zfz);
if(zfz == 0){//没有支付中才处理流程
if(workitemId != null && !"".equals(workitemId)){
String token = getTokens();
logger.error("付款單token状态{}",token);
if(cg == sl){//流程提交
String senddata = finishValueOf(workitemId,"支付结果获取成功");
logger.error("修改流程提交发送:{}",senddata);
String returnData = doSendData("8000590007",token,senddata);
logger.error("修改流程提交返回结果"+returnData);
if (StrUtil.isNotEmpty(returnData)){
logger.error("修改流程提交返回结果"+returnData);
}
}else {//流程回退
String senddata = stepBackValueOf(workitemId,"支付错误退回");
logger.error("修改流程回退发送:{}",senddata);
String returnData = doSendData("8000590006",token,senddata);
logger.error("修改流程回退返回结果"+returnData);
if (StrUtil.isNotEmpty(returnData)){
logger.error("修改流程回退返回结果"+returnData);
}
}
}
}
}
saveTaskLivingDetails(bankEntity.getDataId(), bankEntity.getDocumentNo(), jsonData.toJSONString(), resultJson.toJSONString(), true,"ZxBankResultPluginInitializer");
}
}
}else{
logger.info("====查询支付结果返回值中的list为空====");
}
}
}
private String getTokens() { private String getTokens() {
String token = null; String token = null;
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
@ -481,6 +701,9 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
elecDownlod(elecdata.toJSONString(),bankEntity); elecDownlod(elecdata.toJSONString(),bankEntity);
} }
} }
if(bankEntity.getTabName().equals("formson_0329")){
getHdDatas(bankEntity);
}
} }
}catch (Exception e){ }catch (Exception e){
logger.info("======杭泰付款单查询中信电子回单失败:{}",e.getMessage()); logger.info("======杭泰付款单查询中信电子回单失败:{}",e.getMessage());
@ -489,6 +712,53 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
return null; return null;
} }
private void getHdDatas(ZxBankEntity bankEntity) throws Exception {
JSONObject jsonParam=new JSONObject();
jsonParam.put("companyCode",bankEntity.getCompanyCode());//公司编码
jsonParam.put("documentNo",bankEntity.getfDocumentNo());//单据号
JSONObject jsonData=new JSONObject();
jsonData.put("data",jsonParam);
String params = jsonData.toJSONString();
logger.info("======杭泰付款单调用中信电子回单查询请求参数明文为:{}========",params);
String encrypt = SM2Util.encrypt(params, publicKey);
JSONObject objectData=new JSONObject();
objectData.put("data",encrypt);
logger.info("======杭泰付款单调用中信电子回单查询请求参数密文为:{}========",objectData.toJSONString());
//发送数据
String result = HttpRequest.post(url).
header("appId", "800058").
header("apiCode", "8000580002").
//header("access_token", tokenBody).
header("publicKey", "ZJYALA1PchEI1s2D5vaapO9RZ6CiDFv/pJAV88lRYg0oBwBCe7eDIk+3zDUT+v578prj").
header("secretKey", "jcoATYyty05KgDwL4O0xD+Ulq5ExYWkGvZGf2bhKrMaCehb3NIm5DUnJSK/r2SUaj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
body(objectData.toJSONString()).
execute().
body();
logger.info("======杭泰付款单调用中信电子回单查询返回参数为:{}========",result);
JSONObject resultJson = JSONObject.parseObject(result);
if (!resultJson.getBoolean("flag")) {
saveTaskLivingDetails(bankEntity.getDataId(), bankEntity.getfDocumentNo(), params, resultJson.toJSONString(), false,"ZxBankElecPluginInitializer");
} else {
JSONObject attribute = resultJson.getJSONObject("attribute");
String data = attribute.getString("data");
logger.info("=======杭泰付款单调用中信支付结果查询返回参数密文为:{}", data);
String decrypt = SM2Util.decrypt(data, privateKey);
JSONObject jsonObjectData = JSONObject.parseObject(decrypt);
String billId = jsonObjectData.getString("billId"); //电子回单id 电子回单下载需要
logger.info("======中信电子回单返回的电子回单id为:{}====",billId);
if(StrUtil.isNotEmpty(billId)){
List<String> list=new ArrayList<>();
list.add(billId);
JSONObject billIds=new JSONObject();
billIds.put("billIds",list);
JSONObject elecdata=new JSONObject();
elecdata.put("data",billIds);
logger.info("====调用中信电子回单下载得请求参数明文为:{}=======",elecdata.toJSONString());
elecDownlod(elecdata.toJSONString(),bankEntity);
}
}
}
private JsonResultEntity elecDownlod(String params,ZxBankEntity zxBankEntity){ private JsonResultEntity elecDownlod(String params,ZxBankEntity zxBankEntity){
try { try {
String encrypt = SM2Util.encrypt(params, publicKey); String encrypt = SM2Util.encrypt(params, publicKey);
@ -1079,7 +1349,7 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
//对公付款单 //对公付款单
if("formmain_0327".equals(tableName)){ if("formmain_0327".equals(tableName)){
parent.put("sourceFlowNumber", mxData.getString("id")+"_"+hour+minute); parent.put("sourceFlowNumber", mxData.getString("id")+"_"+hour+minute);
parent.put("documentNo", mainData.getString("field0146")); parent.put("documentNo", mxData.getString("field0368"));
parent.put("companyCode", mainData.getString("field0149")); parent.put("companyCode", mainData.getString("field0149"));
parent.put("fundType", "0001"); parent.put("fundType", "0001");
parent.put("digest","付对公付款"+mxData.getString("field0368")); parent.put("digest","付对公付款"+mxData.getString("field0368"));