提交 aa8acee6 authored 作者: aiqingguo's avatar aiqingguo

Merge branch 'v10.7_borrowing_and_repayment_20240118' into test

package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单支付
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
}
\ No newline at end of file
package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单状态
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayStatusResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "实收金额(分)", example = "")
private Integer realAmount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
@ApiModelProperty(value = "交易状态", example = "")
private Integer transStatus;
}
\ No newline at end of file
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.service.thirdparty.nbbank.NbBankService; import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -26,21 +28,21 @@ public class TempBankController { ...@@ -26,21 +28,21 @@ public class TempBankController {
@ApiOperation(value = "directBankTransferOrder", notes = "<br>By:艾庆国") @ApiOperation(value = "directBankTransferOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/directBankTransferOrder", method = RequestMethod.POST) @RequestMapping(value = "/directBankTransferOrder", method = RequestMethod.POST)
public Result<String> directBankTransferOrder() throws Exception { public Result<NbBankOrderPayResultVO> directBankTransferOrder() throws Exception {
return Result.ok(bankService.orderPay(1)); return Result.ok(bankService.orderPay(1));
} }
@ApiOperation(value = "unionPayDirectOrder", notes = "<br>By:艾庆国") @ApiOperation(value = "unionPayDirectOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/unionPayDirectOrder", method = RequestMethod.POST) @RequestMapping(value = "/unionPayDirectOrder", method = RequestMethod.POST)
public Result<String> unionPayDirectOrder() throws Exception { public Result<NbBankOrderPayResultVO> unionPayDirectOrder() throws Exception {
return Result.ok(bankService.orderPay(2)); return Result.ok(bankService.orderPay(2));
} }
@ApiOperation(value = "queryOrder", notes = "<br>By:艾庆国") @ApiOperation(value = "queryOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/queryOrderTest", method = RequestMethod.POST) @RequestMapping(value = "/queryOrderTest", method = RequestMethod.POST)
public Result<Integer> queryOrderTest(String merSeqNo) throws Exception { public Result<NbBankOrderPayStatusResultVO> queryOrderTest(String merSeqNo) throws Exception {
return Result.ok(bankService.getOrderStatus(merSeqNo)); return Result.ok(bankService.getOrderStatus(merSeqNo));
} }
......
...@@ -99,7 +99,10 @@ public class NbBankNotifyServiceImpl implements NbBankNotifyService { ...@@ -99,7 +99,10 @@ public class NbBankNotifyServiceImpl implements NbBankNotifyService {
BigDecimal trxAmt = data.getBigDecimal("trxAmt"); BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt"); BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transStatus = data.getString("transStatus"); String transStatus = data.getString("transStatus");
bankService.orderPayCallback(merSeqNo,transSeqNo,trxAmt,transStatus); String signNo = data.getString("signNo");
// 回调
bankService.orderPayCallback(merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
}catch (Exception e){ }catch (Exception e){
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_NOTIFY_ERROR); throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_NOTIFY_ERROR);
......
package com.clx.performance.service.impl.thirdparty.nbbank; package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankService; import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService; import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.nbopen.api.SDKResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -32,20 +32,34 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -32,20 +32,34 @@ public class NbBankServiceImpl implements NbBankService {
* 第三方流水号 * 第三方流水号
*/ */
@Override @Override
public String orderPay(Integer payType) { public NbBankOrderPayResultVO orderPay(Integer payType) {
if (payType == 1){ if (payType == 1){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo); JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, "EFT33021200556315", 1);
String transSeqNo = data.getString("transSeqNo"); String transSeqNo = data.getString("transSeqNo");
return transSeqNo; String signNo = data.getString("signNo");
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return result;
} }
else if (payType == 2){ else if (payType == 2){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.unionPayDirectOrder(merSeqNo); JSONObject data = bankThirdpartyService.unionPayDirectOrder(merSeqNo, "EFT33021200556315", 1,
"313332082914","86041110000076809", "黑玫瑰");
String transSeqNo = data.getString("transSeqNo"); String transSeqNo = data.getString("transSeqNo");
return transSeqNo; NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
return result;
} }
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_PAY_TYPE_ERROR); throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_PAY_TYPE_ERROR);
...@@ -56,25 +70,40 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -56,25 +70,40 @@ public class NbBankServiceImpl implements NbBankService {
* @return * @return
*/ */
@Override @Override
public Integer getOrderStatus(String merSeqNo) { public NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo) {
SDKResponse sdkResponse = bankThirdpartyService.queryOrder(merSeqNo); JSONObject data = bankThirdpartyService.queryOrder(merSeqNo);
JSONObject response = JSON.parseObject(JSON.toJSONString(sdkResponse)); NbBankOrderPayStatusResultVO result = new NbBankOrderPayStatusResultVO();
String transStatus = response.getString("transStatus");
String transStatus = data.getString("transStatus");
if (StringUtils.equals(transStatus, "00")){return 1;} //交易成功 if (StringUtils.equals(transStatus, "00")){result.setTransStatus(1);} //交易成功
if (StringUtils.equals(transStatus, "01")){return 2;} //交易失败 else if (StringUtils.equals(transStatus, "01")){result.setTransStatus(2);} //交易失败
if (StringUtils.equals(transStatus, "02")){return 3;} //交易已受理 else if (StringUtils.equals(transStatus, "02")){result.setTransStatus(3);} //交易已受理
if (StringUtils.equals(transStatus, "80")){return 4;} //订单初始状态 else if (StringUtils.equals(transStatus, "80")){result.setTransStatus(4);} //订单初始状态
if (StringUtils.equals(transStatus, "90")){return 5;} //交易不存在 else if (StringUtils.equals(transStatus, "90")){result.setTransStatus(5);} //交易不存在
if (StringUtils.equals(transStatus, "99")){return 6;} //交易超时,须发起交易结果查询 else if (StringUtils.equals(transStatus, "99")){result.setTransStatus(6);} //交易超时,须发起交易结果查询
return 1; BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transSeqNo = data.getString("transSeqNo");
String signNo = data.getString("signNo");
result.setAmount(trxAmt==null? null : trxAmt.movePointLeft(2).intValue());
result.setRealAmount(trxAmt==null? null : realTrxAmt.movePointLeft(2).intValue());
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return result;
} }
@Override @Override
public void orderPayCallback(String merSeqNo, String transSeqNo, BigDecimal trxAmt, String transStatus) { public void orderPayCallback(String merSeqNo, String transSeqNo,
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, transSeqNo:{}, transSeqNo:{}", merSeqNo, transSeqNo, trxAmt, transStatus); BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo) {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
if (StringUtils.equals(transStatus, "00")){ //交易成功 if (StringUtils.equals(transStatus, "00")){ //交易成功
......
...@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Objects; import java.util.Objects;
...@@ -79,22 +80,27 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService { ...@@ -79,22 +80,27 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* "rspTime": "14:28:49:600" * "rspTime": "14:28:49:600"
* } * }
* } * }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
*/ */
@Override @Override
public JSONObject directBankTransferOrder(String merSeqNo) { public JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount) {
try { try {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填 jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", "EFT33021200556315"); //商户号 必填 jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填 jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填 jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", "1.23"); //订单金额 必填 jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "采购"); //订单详情 必填 jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "小黄鱼"); //商品名称 必填 jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填 jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填 jsonObject.put("productNum", "1"); //商品数量 必填
// jsonObject.put("closeDtTm", "2023-11-29 13:39:16"); //关单时间 // jsonObject.put("closeDtTm", "2023-11-29 13:39:16"); //关单时间
...@@ -102,7 +108,6 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService { ...@@ -102,7 +108,6 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
HashMap<String,String> httpHeader = new HashMap<>(); HashMap<String,String> httpHeader = new HashMap<>();
RequestApiData requestApiData = new RequestApiData(); RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey(nbBankConfig.getAppKey()); requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(jsonObject); requestApiData.setData(jsonObject);
...@@ -167,27 +172,36 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService { ...@@ -167,27 +172,36 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* "rspTime": "13:39:16:035" * "rspTime": "13:39:16:035"
* } * }
* } * }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
* payAcctOpenBankId: 开户行号
* payAcctNo: 付款账号
* payAcctNm: 付款户名
*/ */
@Override @Override
public JSONObject unionPayDirectOrder(String merSeqNo) { public JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm) {
try { try {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填 jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", "EFT33021200556315"); //商户号 必填 jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填 jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填 jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", "0.01"); //订单金额 必填 jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "采购"); //订单详情 必填 jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "小黄鱼"); //商品名称 必填 jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填 jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填 jsonObject.put("productNum", "1"); //商品数量 必填
jsonObject.put("payAcctNo", "86041110000076809"); //付款账号 必填 jsonObject.put("bankType", "00"); //账户类型 必填
jsonObject.put("payAcctNm", "黑玫瑰"); //付款户名 必填 jsonObject.put("payAcctOpenBankId", payAcctOpenBankId); //开户行号 必填
jsonObject.put("bankType", "00"); //账户类型 必填 jsonObject.put("payAcctNo", payAcctNo); //付款账号 必填
jsonObject.put("payAcctOpenBankId", "313332082914"); //开户行号 必填 jsonObject.put("payAcctNm", payAcctNm); //付款户名 必填
// jsonObject.put("mobilePhone", "13000000000"); //手机号 // jsonObject.put("mobilePhone", "13000000000"); //手机号
HashMap<String,String> httpHeader = new HashMap<>(); HashMap<String,String> httpHeader = new HashMap<>();
...@@ -322,7 +336,7 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService { ...@@ -322,7 +336,7 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* 99:交易超时,须发起交易结果查询 * 99:交易超时,须发起交易结果查询
*/ */
@Override @Override
public SDKResponse queryOrder(String merSeqNo) { public JSONObject queryOrder(String merSeqNo) {
try { try {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填 jsonObject.put("transId", "IP01"); //交易识别码 必填
...@@ -346,13 +360,21 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService { ...@@ -346,13 +360,21 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
request.setData(requestApiData); request.setData(requestApiData);
request.setHead(requestHead); request.setHead(requestHead);
log.info("SDK请求内容queryOrder: "+ JSON.toJSONString(request)); log.info("宁波银行, 查询交易结果(queryOrder), 参数: {}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.send(request); SDKResponse response = NBOpenSDK.send(request);
log.info("SDK响应结果queryOrder: "+JSON.toJSONString(response)); log.info("宁波银行, 查询交易结果(queryOrder), 结果: {}", JSON.toJSONString(response));
recordSave(NbBankRecordEnum.Type.QUERY_ORDER.getCode(), request, response); recordSave(NbBankRecordEnum.Type.QUERY_ORDER.getCode(), request, response);
return response; JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(queryOrder), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
return data;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
......
package com.clx.performance.service.thirdparty.nbbank; package com.clx.performance.service.thirdparty.nbbank;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import java.math.BigDecimal; import java.math.BigDecimal;
public interface NbBankService { public interface NbBankService {
String orderPay(Integer payType); NbBankOrderPayResultVO orderPay(Integer payType);
Integer getOrderStatus(String merSeqNo); NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo);
void orderPayCallback(String merSeqNo, String transSeqNo, BigDecimal trxAmt, String transStatus); void orderPayCallback(String merSeqNo, String transSeqNo,
BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo
);
} }
...@@ -6,11 +6,12 @@ import com.nbopen.api.SDKResponse; ...@@ -6,11 +6,12 @@ import com.nbopen.api.SDKResponse;
public interface NbBankThirdpartyService { public interface NbBankThirdpartyService {
JSONObject directBankTransferOrder(String merSeqNo); JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount);
JSONObject unionPayDirectOrder(String merSeqNo); JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm);
SDKResponse queryOrder(String merSeqNo); JSONObject queryOrder(String merSeqNo);
void recordSave(Integer type, SDKRequest request, SDKResponse response); void recordSave(Integer type, SDKRequest request, SDKResponse response);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论