提交代码

dev
胡锐 1 week ago
parent 698ec84fed
commit fa8beb86b8
  1. 1
      open-api/src/main/java/com/api/controller/v1/NotifyController.java
  2. 122
      open-api/src/main/java/com/api/controller/v1/TestController.java
  3. 7
      open-api/src/main/java/com/api/controller/v1/TradeMergeController.java
  4. 6
      schedule/src/main/resources/dev/application.yml
  5. 10
      service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeMergeService.java
  6. 6
      service/src/main/java/com/hfkj/openapi/v1/model/request/RequestOutSplitInfoModel.java
  7. 5
      service/src/main/java/com/hfkj/openapi/v1/model/response/OutSplitRspInfos.java
  8. 4
      service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderServiceImpl.java
  9. 3
      service/src/main/java/com/hfkj/service/impl/BsTradeOrderMergeServiceImpl.java

@ -183,6 +183,7 @@ public class NotifyController {
outSplitRspInfos.setMerchantName(subTradeOrder.getMerName());
outSplitRspInfos.setAmount(subTradeOrder.getTradeAmount());
outSplitRspInfos.setOutSubTradeNo(subTradeOrder.getOutTradeNo());
outSplitRspInfos.setSubAttach(subTradeOrder.getAttach());
responseOutSplitRspInfos.add(outSplitRspInfos);
}

@ -1,6 +1,8 @@
package com.api.controller.v1;
import com.alibaba.fastjson.JSONObject;
import com.hfkj.channel.lakala.LaKaLaTradeMergeService;
import com.hfkj.channel.lakala.LaKaLaTradeService;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
@ -63,6 +65,60 @@ public class TestController {
@Resource
private BsMerService merService;
@RequestMapping(value="/preorder",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "合单支付")
public Object preorder(@RequestParam(value = "transType" , required = true) String transType,
@RequestParam(value = "payMode" , required = true) String payMode) {
log.info("========= Start 分账发起接口 Start ===========");
try {
Map<String,Object> reqBody = new HashMap<>();
reqBody.put("merchantNo", "2023041916292112804");
reqBody.put("outTradeNo", DateUtil.date2String(new Date(),DateUtil.YMDHMS)+ IDGenerator.nextId(2));
reqBody.put("totalAmount", "1.5");
reqBody.put("subject", "测试交易");
reqBody.put("notifyUrl", "https://gratia-pay.dctpay.com/openApi/v1/payNotify/test");
reqBody.put("transType", transType);//"NATIVE" "JSAP I"
reqBody.put("payMode", payMode); // WECHAT ALIPAY UQRCODEPAY
reqBody.put("profitSharing", 0);
if (payMode.equals("ALIPAY")) {
reqBody.put("userId", "2088612673845396");
} else {
reqBody.put("subAppid", "wxa075e8509802f826");
reqBody.put("userId", "od8qG06bHnTsDWklsB2VsssLZYcQ");
}
reqBody.put("attach", "测试附加域");
reqBody.put("specialField", "测试特殊字段");
/* List<Map<String,Object>> outSplitInfoList = new ArrayList<>();
Map<String,Object> outSplitInfo1 = new HashMap<>();
outSplitInfo1.put("outSubTradeNo", MapUtils.getString(reqBody,"outTradeNo")+"_1");
outSplitInfo1.put("merchantNo", "2023041916292112804");
outSplitInfo1.put("amount", "1");
outSplitInfoList.add(outSplitInfo1);
Map<String,Object> outSplitInfo2 = new HashMap<>();
outSplitInfo2.put("outSubTradeNo", MapUtils.getString(reqBody,"outTradeNo")+"_2");
outSplitInfo2.put("merchantNo", "2024061217292423201");
outSplitInfo2.put("amount", "0.5");
outSplitInfoList.add(outSplitInfo2);
reqBody.put("outSplitInfo", outSplitInfoList);*/
reqBody.put("sign", SignatureUtil.createSign(reqBody,merKeyService.getKeyByMerNo(MapUtils.getString(reqBody,"merchantNo"))));
JSONObject object = HttpsUtils.doPost("http://localhost:9605/openApi/v1/trade/preorder", JSONObject.parseObject(JSONObject.toJSONString(reqBody)));
log.info("返回参数:" + JSONObject.toJSONString(object));
return object;
} catch (Exception e) {
log.info("出现异常:", e);
return ResponseMsgUtil.exception(e);
} finally {
log.info("========= END 分账发起接口 END ===========");
}
}
@RequestMapping(value="/mergePreorder",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "合单支付")
@ -71,12 +127,12 @@ public class TestController {
log.info("========= Start 分账发起接口 Start ===========");
try {
Map<String,Object> reqBody = new HashMap<>();
reqBody.put("merchantNo", "2023090616352962600");
reqBody.put("merchantNo", "2023041916292112804");
reqBody.put("outTradeNo", DateUtil.date2String(new Date(),DateUtil.YMDHMS)+ IDGenerator.nextId(2));
reqBody.put("totalAmount", "1");
reqBody.put("totalAmount", "1.5");
reqBody.put("subject", "测试交易");
reqBody.put("notifyUrl", "https://gratia-pay.dctpay.com/openApi/v1/payNotify/test");
reqBody.put("transType", transType);//"NATIVE" "JSAPI"
reqBody.put("transType", transType);//"NATIVE" "JSAP I"
reqBody.put("payMode", payMode); // WECHAT ALIPAY UQRCODEPAY
if (payMode.equals("ALIPAY")) {
reqBody.put("userId", "2088612673845396");
@ -90,13 +146,13 @@ public class TestController {
List<Map<String,Object>> outSplitInfoList = new ArrayList<>();
Map<String,Object> outSplitInfo1 = new HashMap<>();
outSplitInfo1.put("outSubTradeNo", MapUtils.getString(reqBody,"outTradeNo")+"_1");
outSplitInfo1.put("merchantNo", "2023090616352962600");
outSplitInfo1.put("amount", "0.5");
outSplitInfo1.put("merchantNo", "2023041916292112804");
outSplitInfo1.put("amount", "1");
outSplitInfoList.add(outSplitInfo1);
Map<String,Object> outSplitInfo2 = new HashMap<>();
outSplitInfo2.put("outSubTradeNo", MapUtils.getString(reqBody,"outTradeNo")+"_2");
outSplitInfo2.put("merchantNo", "2023091316462069203");
outSplitInfo2.put("merchantNo", "2024061217292423201");
outSplitInfo2.put("amount", "0.5");
outSplitInfoList.add(outSplitInfo2);
@ -115,10 +171,10 @@ public class TestController {
}
}
@RequestMapping(value="/refund",method = RequestMethod.POST)
@RequestMapping(value="/mergeRefund",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "合单退款")
public Object refund(@RequestBody JSONObject body) {
public Object mergeRefund(@RequestBody JSONObject body) {
log.info("========= Start 查询交易 Start ===========");
try {
BsTradeOrderMerge orderMerge = tradeOrderMergeService.getOrderMerge(body.getString("outTradeNo"));
@ -158,6 +214,36 @@ public class TestController {
}
}
@RequestMapping(value="/refund",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "交易退款")
public Object refund(@RequestBody JSONObject body) {
log.info("========= Start 查询交易 Start ===========");
try {
BsTradeOrder tradeOrder = tradeOrderService.getOrderByOutTradeNo(body.getString("outTradeNo"));
if (tradeOrder == null) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.COMMON_ERROR, "错误的订单");
}
Map<String,Object> reqBody = new HashMap<>();
reqBody.put("merchantNo", tradeOrder.getMerNo());
reqBody.put("outTradeNo", tradeOrder.getOutTradeNo());
reqBody.put("refundTradeNo", "R"+DateUtil.date2String(new Date(),DateUtil.YMDHMS)+IDGenerator.nextId(2));
reqBody.put("refundAmount", body.getBigDecimal("refundAmount"));
reqBody.put("refundReason", "测试退款");
reqBody.put("sign", SignatureUtil.createSign(reqBody,merKeyService.getKeyByMerNo(MapUtils.getString(reqBody,"merchantNo"))));
System.out.println("请求接口参数:"+JSONObject.toJSONString(reqBody));
JSONObject object = HttpsUtils.doPost("http://localhost:9605/openApi/v1/trade/refund", JSONObject.parseObject(JSONObject.toJSONString(reqBody)));
log.info("返回参数:" + JSONObject.toJSONString(object));
return object;
} catch (Exception e) {
log.info("出现异常:", e);
return ResponseMsgUtil.exception(e);
} finally {
log.info("========= END 查询交易 END ===========");
}
}
@RequestMapping(value="/queryTrade",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "查询交易")
@ -184,6 +270,26 @@ public class TestController {
log.info("========= END 查询交易 END ===========");
}
}
@Resource
private LaKaLaTradeService laKaLaTradeService;
@RequestMapping(value="/lklQueryTrade",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "查询交易")
public Object lklQueryTrade(@RequestBody JSONObject body) {
log.info("========= Start 查询交易 Start ===========");
try {
//return laKaLaTradeService.queryTrade(body.getString("outTradeNo"));
//return laKaLaTradeService.queryTradeOrderTrans(body.getString("outTradeNo"));
return laKaLaTradeService.queryTradeOrderRefundTrans(body.getString("outTradeNo"));
} catch (Exception e) {
log.info("出现异常:", e);
return ResponseMsgUtil.exception(e);
} finally {
log.info("========= END 查询交易 END ===========");
}
}
}

@ -158,7 +158,7 @@ public class TradeMergeController {
// tradeOrder.setPayNotifyUrl(body.getNotifyUrl());
tradeOrder.setSubject(body.getSubject());
tradeOrder.setRefundPrice(new BigDecimal("0"));
tradeOrder.setAttach(body.getAttach());
tradeOrder.setAttach(outSplitInfo.getSubAttach());
tradeOrder.setSpecialField(body.getSpecialField());
tradeOrder.setRequestIp(tradeOrderMerge.getRequestIp());
tradeOrder.setRebateActivityPart(false);
@ -240,13 +240,14 @@ public class TradeMergeController {
outSplitRspInfos.setMerchantName(subTradeOrder.getMerName());
outSplitRspInfos.setAmount(subTradeOrder.getTradeAmount());
outSplitRspInfos.setOutSubTradeNo(subTradeOrder.getOutTradeNo());
outSplitRspInfos.setSubAttach(subTradeOrder.getAttach());
responseOutSplitRspInfos.add(outSplitRspInfos);
}
// 退款记录
List<RefundSplitInfo> refundSplitInfoList = new ArrayList<>();
List<BsTradeOrderRefund> refundList = tradeOrderRefundService.getListByMergeId(orderMerge.getId())
.stream().filter(o->o.getStatus().equals(TradeOrderRefundStatusEnum.status2.getNumber()))
.stream().filter(o-> !o.getStatus().equals(TradeOrderRefundStatusEnum.status1.getNumber()))
.collect(Collectors.toList());
for (BsTradeOrderRefund refund : refundList) {
RefundSplitInfo refundSplitInfo = new RefundSplitInfo();
@ -291,4 +292,6 @@ public class TradeMergeController {
}
}
}

@ -9,7 +9,7 @@ debug: false
#datasource数据源设置
spring:
datasource:
url: jdbc:mysql://139.9.154.68:3306/gratia_pay?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://139.9.154.68:3306/gratia_pay_prod?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: HF123456.
type: com.alibaba.druid.pool.DruidDataSource
@ -28,7 +28,7 @@ spring:
poolPreparedStatements: true
maxOpenPreparedStatements: 20
redis:
database: 6
database: 7
host: 139.9.154.68
port: 36379
password: HF123456.Redis
@ -70,7 +70,7 @@ jetcache:
host: 139.9.154.68
port: 36379
password: HF123456.Redis
database: 6
database: 7
keyConvertor: fastjson
broadcastChannel: projectA
valueEncoder: java

@ -293,7 +293,15 @@ public class LaKaLaTradeMergeService {
refund.setRefundAmount(outSplitRspInfos.getBigDecimal("refund_amount").divide(new BigDecimal("100")));
refund.setPayerAmount(outSplitRspInfos.getBigDecimal("refund_amount").divide(new BigDecimal("100")));
refund.setRefundTime(tradeOrderRefundMerge.getRefundTime());
refund.setStatus(TradeOrderRefundStatusEnum.status2.getNumber());
if (StringUtils.isBlank(outSplitRspInfos.getString("trade_state"))) {
refund.setStatus(TradeOrderRefundStatusEnum.status2.getNumber());
refund.setRefundTime(tradeOrderRefundMerge.getRefundTime());
} else if (outSplitRspInfos.getString("trade_state").equals("SUCCESS")) {
refund.setStatus(TradeOrderRefundStatusEnum.status2.getNumber());
refund.setRefundTime(tradeOrderRefundMerge.getRefundTime());
} else if (outSplitRspInfos.getString("trade_state").equals("FAIL")) {
refund.setStatus(TradeOrderRefundStatusEnum.status3.getNumber());
}
tradeOrderRefundService.editOrderRefund(refund);
outSplitRspInfosList.add(refund);
}

@ -36,4 +36,10 @@ public class RequestOutSplitInfoModel {
@DecimalMin(value = "0.01", message = "交易最小金额0.01元")
@NotBlank(message = "交易金额必填项")
private String amount;
/**
* 子附加域
*/
@Length(max = 128, message = "子附加域限制在128位字符以内")
private String subAttach;
}

@ -27,4 +27,9 @@ public class OutSplitRspInfos {
* 金额
*/
private BigDecimal amount;
/**
* 子附加域
*/
private String subAttach;
}

@ -159,7 +159,9 @@ public class OpenApiTradeOrderServiceImpl implements OpenApiTradeOrderService {
// 查询子订单
List<BsTradeOrder> subList = bsTradeOrderService.getOrderByMergeTradeId(tradeOrder.getMergeId());
for (BsTradeOrder sub : subList) {
if (sub == null || !sub.getRefundType().equals(TradeOrderRefundTypeEnum.type1.getNumber())) {
if (sub.getRefundType() == null) {
allRefund = false;
} else if (sub.getRefundType().equals(TradeOrderRefundTypeEnum.type2.getNumber())) {
allRefund = false;
}
}

@ -104,6 +104,9 @@ public class BsTradeOrderMergeServiceImpl implements BsTradeOrderMergeService {
tradeOrder.setStatus(TradeOrderStatusEnum.status3.getNumber());
tradeOrder.setPayTime(orderMerge.getPayTime());
tradeOrder.setAccTradeNo(orderMerge.getAccTradeNo());
tradeOrder.setAccSettleAmount(tradeOrder.getTradeAmount());
tradeOrder.setAccDiscountAmount(new BigDecimal("0"));
tradeOrder.setAccMdiscountAmount(new BigDecimal("0"));
// 合单的支付流水号
if (StringUtils.isNotBlank(MapUtils.getString(other, "card_type"))) {
tradeOrder.setCardType(MapUtils.getString(other, "card_type"));

Loading…
Cancel
Save