提交 142b197f authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118'…

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118' into v10.7_borrowing_and_repayment_20240118
......@@ -114,7 +114,9 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_SYNC_ERROR(1912, "承运同步网络货运异常"),
BORROWER_NAME_EXIST(1701, "数据重复,请核实后重新提交"),
BORROWER_CONFIG_BORROWER_ID_EXIST(1701, "数据重复,请核实后重新提交"),
BORROWER_DELETE_ENABLE_ERROR(1702, "无法删除启用数据"),
BORROWER_CONFIG_BORROWER_ID_EXIST(1703, "数据重复,请核实后重新提交"),
BORROWER_CONFIG_DELETE_ENABLE_ERROR(1704, "无法删除启用数据"),
NB_BANK_API_ERROR(1800, "宁波银行api调用失败"),
NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"),
......
......@@ -33,7 +33,7 @@ public class NbBankOrderResultVO {
@ApiModelProperty(value = "转账编号(转账专用)", example = "1234567")
private String signNo;
@ApiModelProperty(value = "交易状态", example = "")
@ApiModelProperty(value = "交易状态:1交易成功 2交易失败 3交易已受理 4订单初始状态 5交易不存在 6交易超时", example = "1")
private Integer transStatus;
}
\ No newline at end of file
......@@ -13,7 +13,7 @@ public class NbBankConfig {
private String appKey = "77667c76_3503_4c04_95f7_fc10938c7942";
private String merId = "EFT33021200556315";
private String file;
private String configFilePath;
private String publicKeyPath;
private String privateKeyPath;
......
......@@ -37,7 +37,18 @@ public class TempBankController {
@RequestMapping(value = "/orderDirectPay", method = RequestMethod.POST)
public Result<NbBankOrderPayResultVO> orderDirectPay() {
return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000076809", "黑玫瑰"));
// return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000076809", "黑玫瑰"));
// return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000075926", "客户客户"));
return Result.ok(bankService.orderDirectPay(null,1,"313332082914","86031110000180611", "槟榔王"));
}
@ApiOperation(value = "订单支付1", notes = "<br>By:艾庆国")
@RequestMapping(value = "/orderDirectPay1", method = RequestMethod.POST)
public Result<NbBankOrderPayResultVO> orderDirectPay1(String payAcctNo, String payAcctNm) {
// return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000076809", "黑玫瑰"));
// return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000075926", "客户客户"));
return Result.ok(bankService.orderDirectPay(null,1,"313332082914",payAcctNo, payAcctNm));
}
@ApiOperation(value = "查询", notes = "<br>By:艾庆国")
......@@ -49,16 +60,24 @@ public class TempBankController {
@ApiOperation(value = "调账", notes = "<br>By:艾庆国")
@RequestMapping(value = "/adjust", method = RequestMethod.POST)
public Result<NbBankOrderResultVO> adjust(String merSeqNo, Integer amount) {
public Result<NbBankOrderResultVO> adjust(String orgMerSeqNo, Integer amount) {
return Result.ok(bankService.adjust(merSeqNo, amount));
return Result.ok(bankService.adjust(orgMerSeqNo,amount));
}
@ApiOperation(value = "退款", notes = "<br>By:艾庆国")
@RequestMapping(value = "/refund", method = RequestMethod.POST)
public Result<NbBankOrderResultVO> refund(String orgMerSeqNo, Integer amount, String orgTransSeqNo) {
public Result<NbBankOrderResultVO> refund(Integer type, String orgMerSeqNo, Integer amount, String orgTransSeqNo) {
return Result.ok(bankService.refund(type,orgMerSeqNo,amount,orgTransSeqNo));
}
return Result.ok(bankService.refund(orgMerSeqNo,amount,orgTransSeqNo));
@ApiOperation(value = "回调", notes = "<br>By:艾庆国")
@RequestMapping(value = "/notify", method = RequestMethod.POST)
public Result notify(NbBankOrderResultVO param) {
bankService.orderPayCallback(param.getMerSeqNo(), param.getTransSeqNo(),
param.getAmount(), param.getAmount(), param.getTransStatus(), param.getSignNo());
return Result.ok();
}
}
......@@ -113,6 +113,9 @@ public class BorrowerConfigServiceImpl implements BorrowerConfigService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
BorrowerConfig borrowerConfig = borrowerConfigDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(borrowerConfig.getStatus(), BorrowerConfigEnum.Status.ENABLE)){
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_CONFIG_DELETE_ENABLE_ERROR);
}
borrowerConfig.setDeleteStatus(BorrowerConfigEnum.DeleteStatus.YES.getCode());
borrowerConfig.setOpUserNo(loginUserInfo.getUserNo());
......
......@@ -102,6 +102,9 @@ public class BorrowerServiceImpl implements BorrowerService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Borrower borrower = borrowerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(borrower.getStatus(), BorrowerEnum.Status.ENABLE)){
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_DELETE_ENABLE_ERROR);
}
borrower.setDeleteStatus(BorrowerEnum.DeleteStatus.YES.getCode());
borrower.setOpUserNo(loginUserInfo.getUserNo());
......
......@@ -2,6 +2,7 @@ package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.config.nbbank.NbBankConfig;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.nbbank.NbBankRecordEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankNotifyService;
......@@ -13,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
......@@ -20,6 +22,9 @@ import java.math.BigDecimal;
@Service
public class NbBankNotifyServiceImpl implements NbBankNotifyService {
@Autowired
private NbBankConfig nbBankConfig;
@Autowired
private NbBankService bankService;
......@@ -64,13 +69,14 @@ public class NbBankNotifyServiceImpl implements NbBankNotifyService {
* }
* }
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void payNotify(String body) {
log.info("宁波银行回调, data:{}", JSON.toJSONString(body));
try {
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey("77667c76_3503_4c04_95f7_fc10938c7942");
requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(JSON.parseObject(body));
requestApiData.setServiceId("notifyMerchant");
......@@ -89,11 +95,6 @@ public class NbBankNotifyServiceImpl implements NbBankNotifyService {
nbBankThirdpartyService.recordSave(NbBankRecordEnum.Type.NOTIFY_MERCHANT.getCode(), request, response);
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(notifyMerchant), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
String merSeqNo = data.getString("merSeqNo");
String transSeqNo = data.getString("transSeqNo");
Integer trxAmt = data.getBigDecimal("trxAmt").movePointRight(2).intValue();
......
......@@ -44,7 +44,8 @@ public class NbBankServiceImpl implements NbBankService {
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, merDtTm, amount);
String transSeqNo = data.getString("transSeqNo");
String signNo = data.getString("signNo");
String cardNo = data.getString("cardNo");
String signNo = getSignNo(data.getString("signNo"), cardNo);
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(amount);
......@@ -126,6 +127,7 @@ public class NbBankServiceImpl implements NbBankService {
*/
@Override
public NbBankOrderResultVO adjust(String orgMerSeqNo, Integer amount) {
String merDtTm = LocalDateTimeUtils.formatTime();
JSONObject data = bankThirdpartyService.fundTransferOrder(orgMerSeqNo, merDtTm, amount,
null, null);
......@@ -153,16 +155,17 @@ public class NbBankServiceImpl implements NbBankService {
/**
* 退款
* @Param type: 1普通退款 2银行转账退款
* @param orgMerSeqNo 商户流水号(原)
* @param amount 金额分
* @param orgTransSeqNo 第三方流水号 (原)
*/
@Override
public NbBankOrderResultVO refund(String orgMerSeqNo, Integer amount, String orgTransSeqNo) {
public NbBankOrderResultVO refund(Integer type, String orgMerSeqNo, Integer amount, String orgTransSeqNo) {
String merSeqNo = idGenerateSnowFlake.nextIdToString(3L);
String merDtTm = LocalDateTimeUtils.formatTime();
JSONObject data = bankThirdpartyService.refund(merSeqNo, merDtTm, amount,
JSONObject data = bankThirdpartyService.refund(type, merSeqNo, merDtTm, amount,
orgMerSeqNo, orgTransSeqNo);
NbBankOrderResultVO result = new NbBankOrderResultVO();
......@@ -203,25 +206,54 @@ public class NbBankServiceImpl implements NbBankService {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
NbBankOrderResultVO result = new NbBankOrderResultVO();
if (StringUtils.equals(transStatus, "00")){ //交易成功
result.setTransStatus(1);
}
if (StringUtils.equals(transStatus, "01")){ //交易失败
result.setTransStatus(2);
}
if (StringUtils.equals(transStatus, "02")){ //交易已受理
result.setTransStatus(3);
}
if (StringUtils.equals(transStatus, "80")){ //订单初始状态
result.setTransStatus(4);
}
if (StringUtils.equals(transStatus, "90")){ //交易不存在
result.setTransStatus(5);
}
if (StringUtils.equals(transStatus, "99")){ //交易超时,须发起交易结果查询
result.setTransStatus(6);
}
orderPayCallback(merSeqNo, transSeqNo, trxAmt, realTrxAmt, result.getTransStatus(), signNo);
}
/**
* 银行回调
* @param merSeqNo 商户流水号
* @param transSeqNo 第三方流水号
* @param trxAmt 订单金额分
* @param realTrxAmt 实收金额分
* @param transStatus 交易状态
* @param signNo 转账编码
*/
@Override
public void orderPayCallback(String merSeqNo, String transSeqNo,
Integer trxAmt, Integer realTrxAmt,
Integer transStatus,
String signNo) {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
}
/**
* 获取转账编码,默认银行卡后7位
*/
private String getSignNo(String signNo, String cardNo){
return StringUtils.isBlank(signNo)? StringUtils.right(cardNo,7) : signNo;
}
}
......@@ -14,7 +14,7 @@ import com.nbopen.api.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -44,13 +44,15 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
File file = new File("/app/nbbank");
file.mkdir();
downloadUsingStream(nbBankConfig.getConfigFilePath(), "/app/nbbank/bankConfig.json");
downloadUsingStream(nbBankConfig.getPublicKeyPath(), "/app/nbbank/bankPubKey.cer");
downloadUsingStream(nbBankConfig.getPrivateKeyPath(), "/app/nbbank/bankPrivateKey.sm2");
ClassPathResource classPathResource = new ClassPathResource("bank/config-nbbank.json");
FileSystemResource resource = new FileSystemResource("/app/nbbank/bankConfig.json");
InputStream inputStream;
try {
inputStream = classPathResource.getInputStream();
inputStream = resource.getInputStream();
boolean initResult = NBOpenSDK.init(inputStream);
log.info("宁波银行SDK初始化, 状态:{}", initResult);
log.info("sdk版本信息:{}", NBOpenSDK.getVersionInfo());
......@@ -416,9 +418,9 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
String customerId, String payCustomerId) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("transId", "IP01"); //交易识别码 必填 云账簿 CP01, 普通转账 IP01
jsonObject.put("merId", nbBankConfig.getMerId()); //商户号 必填
jsonObject.put("merSeqNo", orgMerSeqNo); //商户流水 必填
jsonObject.put("merSeqNo", orgMerSeqNo); //商户流水 必填
jsonObject.put("merDtTm", merDtTm); //商户交易时间 必填
jsonObject.put("trxAmt", new BigDecimal(trxAmt).movePointLeft(2)); //交易金额
......@@ -471,19 +473,39 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
/**
* 退款
* 5.2退款
* {
* "data": {
* "clearDate": "20240131",
* "errorCode": "PAY013",
* "errorMsg": "原支付订单非成功状态,无法退款",
* "merId": "EFT33021200247909",
* "merSeqNo": "7158282384029478912",
* "transSeqNo": "2024013110183508603395pEiLj8Kd",
* "transStatus": "01",
* "trxAmt": "0.01"
* },
* "head": {
* "rqsJrnlNo": "20971617100330682",
* "rspCode": "000000",
* "rspDate": "2024-01-31",
* "rspMsg": "交易成功",
* "rspTime": "10:18:35:131"
* }
* }
* @Param type: 1普通退款 2银行转账退款
* @return
*/
@Override
public JSONObject refund(String merSeqNo, String merDtTm,
public JSONObject refund(Integer type, String merSeqNo, String merDtTm,
Integer amount,
String orgMerSeqNo, String coreSeqNo) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("transId", type==1? "TK01" : "TK02"); //交易识别码 必填
jsonObject.put("merId", nbBankConfig.getMerId()); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("merDtTm", merDtTm); //商户时间 必填
jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orgMerSeqNo", orgMerSeqNo); //原订单流水号 必填
......
......@@ -17,12 +17,17 @@ public interface NbBankService {
NbBankOrderResultVO adjust(String orgMerSeqNo, Integer amount);
NbBankOrderResultVO refund(String orgMerSeqNo, Integer amount, String orgTransSeqNo);
NbBankOrderResultVO refund(Integer type, String orgMerSeqNo, Integer amount, String orgTransSeqNo);
void orderPayCallback(String merSeqNo, String transSeqNo,
Integer trxAmt, Integer realTrxAmt,
String transStatus,
String signNo
);
void orderPayCallback(String merSeqNo, String transSeqNo,
Integer trxAmt, Integer realTrxAmt,
Integer transStatus,
String signNo
);
}
......@@ -17,7 +17,7 @@ public interface NbBankThirdpartyService {
Integer trxAmt,
String customerId, String payCustomerId);
JSONObject refund(String merSeqNo, String merDtTm, Integer amount,
JSONObject refund(Integer type, String merSeqNo, String merDtTm, Integer amount,
String orgMerSeqNo, String coreSeqNo);
void recordSave(Integer type, SDKRequest request, SDKResponse response);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论