|
|
@@ -17,6 +17,7 @@ import com.malk.utils.UtilMap;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.*;
|
|
|
@@ -65,7 +66,13 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
String fkgs = UtilMap.getString(formData, "textField_mjzgymw0");//付款公司
|
|
|
String fkfyhzh = UtilMap.getString(formData, "textField_mjzgymw1");//付款方银行账号
|
|
|
|
|
|
- item.put("BillsPayOrderNo",formInstId);//外部系统单据编号
|
|
|
+ int retryNUM = UtilMap.getInt(formData, "numberField_mkp4wc2r");//重试次数
|
|
|
+
|
|
|
+ if (retryNUM > 0){
|
|
|
+ item.put("BillsPayOrderNo",formInstId + "_" + retryNUM);//外部系统单据编号
|
|
|
+ }else {
|
|
|
+ item.put("BillsPayOrderNo",formInstId);//外部系统单据编号
|
|
|
+ }
|
|
|
|
|
|
//时间戳转化为yyyy-MM-dd
|
|
|
long fkrq = UtilMap.getLong(formData, "dateField_mkdsowjd");
|
|
|
@@ -101,7 +108,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
String privateAmount = UtilMap.getDouble(detail,"numberField_mjsl53ke").toString();//付款金额
|
|
|
String receiveAccountNo = UtilMap.getString(detail,"textField_mjsl53kd");//收款方银行账号
|
|
|
String receiveAccountName = UtilMap.getString(detail,"textField_mjsl53kb");//收款方账户名称
|
|
|
- String payUse = UtilMap.getString(detail,"textareaField_mjsl53kh");//用途:不得有非法字符,包括 ' " : %
|
|
|
+ String payUse = UtilMap.getString(detail,"textareaField_mjsl53kh");//费用明细
|
|
|
|
|
|
Map paymentRec = new HashMap();
|
|
|
paymentRec.put("BillsPayOrderNo",billsPayOrderNo);
|
|
|
@@ -109,7 +116,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
paymentRec.put("ReceiveAccountNo",receiveAccountNo);
|
|
|
paymentRec.put("ReceiveAccountName",receiveAccountName);
|
|
|
paymentRec.put("PayUse",payUse);
|
|
|
- paymentRec.put("Purpose","租金");
|
|
|
+ paymentRec.put("Purpose",payUse);
|
|
|
|
|
|
paymentRecList.add(paymentRec);
|
|
|
}
|
|
|
@@ -159,23 +166,27 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
default:break;
|
|
|
}
|
|
|
|
|
|
- String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
|
|
|
+ String payAmount = UtilMap.getDouble(formData, "numberField_mjqt1xrt").toString();
|
|
|
+
|
|
|
+ String payUse = UtilMap.getString(formData, "textareaField_mjsl53kh");//摘要
|
|
|
|
|
|
int retryNum = UtilMap.getInt(formData, "numberField_mkf5q51o");//重试次数
|
|
|
|
|
|
Map item = new HashMap();
|
|
|
item.put("BillsPayOrderNo",formInstId+"_"+retryNum);//外部系统单据编号
|
|
|
item.put("PaymentDate",fkrqStr);//付款日期(期望支付日期)
|
|
|
+ item.put("PayType","1");//付款类型 默认1.单笔付款,表示一对一(对公/对私)支付
|
|
|
item.put("BusinessTypeCode",GYPAY_API_TYPE_NO);//业务类型编号
|
|
|
item.put("BusinessTypeName",GYPAY_API_TYPE_NAME);//业务类型名称
|
|
|
item.put("PayOrgName",fkdwmc);//付款单位名称
|
|
|
item.put("PayAccountNo",fkfyhzh);//付款方银行账号
|
|
|
item.put("PayChannel",payChannelValue);//支付方式 1.直联支付 2.线下支付 3.全额支付 4.差额支付
|
|
|
- item.put("SumPayAmount",UtilMap.getDouble(formData, "numberField_mkdsowjo").toString());//合计付款金额
|
|
|
+ item.put("PayAmount",payAmount);//付款金额
|
|
|
item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
|
|
|
item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
|
|
|
item.put("WhetherUrgent",whetherUrgentValue);//是否加急 1.是 2.否
|
|
|
- item.put("Note",note);//备注
|
|
|
+ item.put("PayUse",payUse);
|
|
|
+ item.put("Purpose",payUse);
|
|
|
|
|
|
Map paymentRec = new HashMap();
|
|
|
paymentRec.put("ReceiveAccountNo",skfyhzh);
|
|
|
@@ -192,36 +203,172 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
return McR.success();
|
|
|
}
|
|
|
|
|
|
+ @Async
|
|
|
@Override
|
|
|
public void callback(Map result) {
|
|
|
String resultCode = UtilMap.getString(result, "ResultCode");
|
|
|
String resultMsg = UtilMap.getString(result, "ResultMsg");
|
|
|
Map resultInfo = ((List<Map>) UtilMap.getList(result, "ResultSet")).get(0);
|
|
|
- String billsPayOrderNo = UtilMap.getString(resultInfo, "BillsPayOrderNo");//外部系统单据编号
|
|
|
+ String[] split = UtilMap.getString(resultInfo, "BillsPayOrderNo").split("_");
|
|
|
+ boolean isRetry = false;
|
|
|
+ if (split.length > 1) {
|
|
|
+ isRetry = true;
|
|
|
+ }
|
|
|
+ String billsPayOrderNo = split[0];//外部系统单据编号 格式:实例id/实例id_重试次数
|
|
|
|
|
|
if ("0000".equals(resultCode)) {
|
|
|
+ //付款单生成成功 财资云支付结果
|
|
|
String payStatus = UtilMap.getString(resultInfo, "PayStatus");//业务状态:1-支付中,2-支付成功,3-支付失败,4- 已退款,5-部分支付成功,6-部分退款,10-未知
|
|
|
- String PayStatusName = UtilMap.getString(resultInfo, "PayStatusName");//业务状态名称
|
|
|
+ String payStatusName = getPayStatusName(payStatus);//业务状态名称
|
|
|
String relPaymentDate = UtilMap.getString(resultInfo, "RelPaymentDate");//实际付款日期(部分付款有成功时为最大支付日期)
|
|
|
+ String failReasons = UtilMap.getString(resultInfo, "FailReasons");
|
|
|
+
|
|
|
+ String relBillsCode = UtilMap.getString(resultInfo, "RelBillsCode");//工银实际单据号
|
|
|
+
|
|
|
+ //更新付款单信息
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .formInstanceId(billsPayOrderNo)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mkp4wc2q, textareaField_mjs6mcgf, textField_mkp5mn5l","生成成功","",relBillsCode)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
|
|
|
- log.info("ResultMsg:{},PayStatusName:{},实际付款日期:{}",resultMsg, PayStatusName,relPaymentDate);
|
|
|
+ log.info("ResultMsg:{},PayStatusName:{},实际付款日期:{}",resultMsg, payStatusName,relPaymentDate);
|
|
|
|
|
|
List<Map> batchList = (List<Map>) UtilMap.getList(resultInfo, "BatchList");
|
|
|
+
|
|
|
if (batchList != null && !batchList.isEmpty()) {
|
|
|
+ //有付款明细
|
|
|
for (Map map : batchList) {
|
|
|
String billsPayOrderNo2 = UtilMap.getString(map, "BillsPayOrderNo");
|
|
|
String payStatus2 = UtilMap.getString(map, "PayStatus");
|
|
|
+ String PayStatusName2 = getPayStatusName(payStatus2);
|
|
|
String relPaymentDate2 = UtilMap.getString(map, "RelPaymentDate");
|
|
|
-
|
|
|
+ String failReasons2 = UtilMap.getString(resultInfo, "FailReasons");
|
|
|
+
|
|
|
+ //更新付款明细
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mjs6mcfn, textField_mk128ce5", billsPayOrderNo, billsPayOrderNo2)))
|
|
|
+ .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9")
|
|
|
+ .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",PayStatusName2,DateUtil.parse(relPaymentDate2, "yyyy-MM-dd").getTime(),failReasons2)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //无付款明细
|
|
|
+ if (isRetry){
|
|
|
+ //重试付款
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .formInstanceId(billsPayOrderNo)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",payStatusName,DateUtil.parse(relPaymentDate, "yyyy-MM-dd").getTime(),failReasons)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }else {
|
|
|
+ //首次付款
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mjs6mcfn", billsPayOrderNo)))
|
|
|
+ .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9")
|
|
|
+ .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",payStatusName,DateUtil.parse(relPaymentDate, "yyyy-MM-dd").getTime(),failReasons)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
+ //付款单生成失败
|
|
|
String failReasons = UtilMap.getString(resultInfo, "FailReasons");
|
|
|
log.info("ResultMsg:{},FailReasons:{}",resultMsg, failReasons);
|
|
|
+
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .formInstanceId(billsPayOrderNo)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mkp4wc2q, textareaField_mjs6mcgf","生成失败",failReasons)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public McR salaryPay(Map map) {
|
|
|
+ String formInstId = UtilMap.getString(map, "formInstId");
|
|
|
+
|
|
|
+ Map item = new HashMap();
|
|
|
+
|
|
|
+ Map formData = ydClient.queryData(YDParam.builder()
|
|
|
+ .formInstanceId(formInstId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
+
|
|
|
+ String fkgs = UtilMap.getString(formData, "textField_mjzgymw0");//付款公司
|
|
|
+ String fkfyhzh = UtilMap.getString(formData, "textField_mjzgymw1");//付款方银行账号
|
|
|
+
|
|
|
+ int retryNUM = UtilMap.getInt(formData, "numberField_mkp4wc2r");//重试次数
|
|
|
+
|
|
|
+ if (retryNUM > 0){
|
|
|
+ item.put("BillsPayOrderNo",formInstId + "_" + retryNUM);//外部系统单据编号
|
|
|
+ }else {
|
|
|
+ item.put("BillsPayOrderNo",formInstId);//外部系统单据编号
|
|
|
+ }
|
|
|
+
|
|
|
+ item.put("PayType","2");//外部系统单据编号
|
|
|
+
|
|
|
+ //时间戳转化为yyyy-MM-dd
|
|
|
+ long fkrq = UtilMap.getLong(formData, "dateField_mkdsowjd");
|
|
|
+ String fkrqStr = DateUtil.format(new Date(fkrq), "yyyy-MM-dd");
|
|
|
+ item.put("PaymentDate",fkrqStr);//付款日期(期望支付日期)
|
|
|
+ item.put("BusinessTypeCode",GYPAY_API_TYPE_NO);//业务类型编号
|
|
|
+ item.put("BusinessTypeName",GYPAY_API_TYPE_NAME);//业务类型名称
|
|
|
+ item.put("PayOrgName",fkgs);//付款单位名称
|
|
|
+ item.put("PayAccountNo",fkfyhzh);//付款方银行账号
|
|
|
+ String payChannel = UtilMap.getString(formData, "selectField_mjm87v3v");
|
|
|
+ String payChannelValue = "";
|
|
|
+ //支付方式 1.直联支付 2.线下支付 3.全额支付 4.差额支付
|
|
|
+ switch (payChannel){
|
|
|
+ case "直联支付":payChannelValue = "1";break;
|
|
|
+ case "线下支付":payChannelValue = "2";break;
|
|
|
+ default:break;
|
|
|
+ }
|
|
|
+ item.put("PayChannel",payChannelValue);
|
|
|
+ item.put("PayAmount",UtilMap.getDouble(formData, "numberField_mjmc84h7").toString());//合计付款金额
|
|
|
+ item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
|
|
|
+
|
|
|
+ item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
|
|
|
+ String whetherUrgent = UtilMap.getString(formData, "radioField_mkdsowje");
|
|
|
+ item.put("WhetherUrgent","是".equals(whetherUrgent) ? 1 : 2);//是否加急 1.是 2.否
|
|
|
+ String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
|
|
|
+ item.put("Remark",note);//备注
|
|
|
+ String payUse = UtilMap.getString(formData, "textareaField_mjmc84h9");//费用明细
|
|
|
+ item.put("PayUse",payUse);
|
|
|
+ item.put("Purpose","工资");
|
|
|
+
|
|
|
+ List<Map> batchPrivateRecList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Map> details = UtilMap.getList(formData, "tableField_mjqqlln3");
|
|
|
+ for (Map detail : details) {
|
|
|
+ String billsPayOrderNo = UtilMap.getString(detail,"textField_mkns6lx6");//收款方单据编号
|
|
|
+ String privateAmount = UtilMap.getDouble(detail,"numberField_mjqt1xrt").toString();//付款金额
|
|
|
+ String receiveAccountNo = UtilMap.getString(detail,"textField_mjqpry6r");//收款方银行账号
|
|
|
+ String receiveAccountName = UtilMap.getString(detail,"textField_mjqpry6s");//收款方账户名称
|
|
|
+ String receiveBranchCode = UtilMap.getString(detail,"textField_mkdeg10p");//收款方开户行行号(收款方开户行行号、行名至少填写一项)
|
|
|
+ String receiveBranchName = UtilMap.getString(detail,"textField_mjqpry6u");//收款方开户行行号(收款方开户行行号、行名至少填写一项)
|
|
|
+
|
|
|
+ Map paymentRec = new HashMap();
|
|
|
+ paymentRec.put("BillsPayOrderNo",billsPayOrderNo);
|
|
|
+ paymentRec.put("PrivateAmount",privateAmount);
|
|
|
+ paymentRec.put("ReceiveAccountNo",receiveAccountNo);
|
|
|
+ paymentRec.put("ReceiveAccountName",receiveAccountName);
|
|
|
+ paymentRec.put("ReceiveBranchCode",receiveBranchCode);
|
|
|
+ paymentRec.put("ReceiveBranchName",receiveBranchName);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ batchPrivateRecList.add(paymentRec);
|
|
|
+ }
|
|
|
+
|
|
|
+ item.put("BatchPrivateRecList",batchPrivateRecList);
|
|
|
+
|
|
|
+ Map<String,Object> data = UtilMap.map("ParamSet", Arrays.asList(item));
|
|
|
+
|
|
|
+ Map result = gyPost("T0003", data);
|
|
|
+
|
|
|
+
|
|
|
+ return McR.success();
|
|
|
+ }
|
|
|
+
|
|
|
private Map gyPost(String MesgNo,Map<String,Object> data){
|
|
|
log.info("data:{}",data);
|
|
|
|
|
|
@@ -260,4 +407,21 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
|
|
|
return resultMap;
|
|
|
}
|
|
|
+
|
|
|
+ private String getPayStatusName(String payStatus){
|
|
|
+ //业务状态:1-支付中,2-支付成功,3-支付失败,4- 已退款,5-部分支付成功,6-部分退款,10-未知
|
|
|
+ String payStatusName = "";
|
|
|
+ switch (payStatus){
|
|
|
+ case "1": payStatusName = "支付中"; break;
|
|
|
+ case "2": payStatusName = "支付成功"; break;
|
|
|
+ case "3": payStatusName = "支付失败"; break;
|
|
|
+ case "4": payStatusName = "已退款"; break;
|
|
|
+ case "5": payStatusName = "部分支付成功"; break;
|
|
|
+ case "6": payStatusName = "部分退款"; break;
|
|
|
+ case "10": payStatusName = "未知"; break;
|
|
|
+ default: payStatusName = "未知"; break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return payStatusName;
|
|
|
+ }
|
|
|
}
|