提交代码

dev
胡锐 3 days ago
parent 32ccd0d257
commit 387bfdd763
  1. 10
      cweb/src/main/java/com/cweb/controller/TestController.java
  2. 20
      open-api/src/main/java/com/api/controller/v1/TradeProfitSharingController.java
  3. 6
      schedule/src/main/java/com/hfkj/schedule/TradeOrderSchedule.java
  4. 26
      service/src/main/java/com/hfkj/channel/lakala/LaKaLaLedgerService.java
  5. 30
      service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeSeparateService.java
  6. 8
      service/src/main/java/com/hfkj/openapi/v1/model/request/RequestSeparateQueryAmtModel.java
  7. 22
      service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderProfitSharingServiceImpl.java
  8. 57
      service/src/main/java/com/hfkj/openapi/v1/utils/SignatureUtil.java
  9. 2
      service/src/main/java/com/hfkj/service/BsTradeOrderRefundService.java
  10. 9
      service/src/main/java/com/hfkj/service/impl/BsTradeOrderRefundServiceImpl.java

@ -3,10 +3,7 @@ package com.cweb.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hfkj.channel.alipay.utils.AlipayRequest;
import com.hfkj.channel.lakala.LaKaLaLedgerService;
import com.hfkj.channel.lakala.LaKaLaTradeMergeService;
import com.hfkj.channel.lakala.LaKaLaTradeService;
import com.hfkj.channel.lakala.LaKaLaWalletService;
import com.hfkj.channel.lakala.*;
import com.hfkj.channel.lakala.config.LaKaLaConfig;
import com.hfkj.channel.llg.service.LLGMerService;
import com.hfkj.channel.llg.service.LLGOrderService;
@ -890,6 +887,8 @@ public class TestController {
return ResponseMsgUtil.exception(e);
}
}
@Resource
private LaKaLaTradeSeparateService laKaLaTradeSeparateService;
@RequestMapping(value="/preorder",method = RequestMethod.GET)
@ResponseBody
@ -897,7 +896,8 @@ public class TestController {
public ResponseData preorder(@RequestParam(name = "tradeNo", required = true) String tradeNo) {
try {
return ResponseMsgUtil.success(laKaLaTradeService.preorder(tradeNo));
//return ResponseMsgUtil.success(laKaLaTradeSeparateService.query(tradeNo));
return ResponseMsgUtil.success(laKaLaLedgerService.queryReceiverDetail());
} catch (Exception e) {
log.error(e.getMessage(), e);

@ -98,10 +98,10 @@ public class TradeProfitSharingController {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "商户分账权限未开通");
}
for (RequestSeparateModel.RequestSeparateRecvDataModel recvData : body.getRecvDatas()) {
// 校验接收方
/*// 校验接收方
if (recvData.getRecvMerchantNo().equals(body.getMerchantNo())) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方不能与分账方主体相同");
}
}*/
// 查询接收方信息
BsMer recvMer = merService.getMer(recvData.getRecvMerchantNo());
if (recvMer == null) {
@ -110,13 +110,15 @@ public class TradeProfitSharingController {
if (!recvMer.getMerStatus().equals(MerStatusEnum.status1.getNumber())) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方状态异常");
}
// 接收方分账信息
BsMerLedger ledger = merLedgerService.getMerLedger(recvMer.getId(), PlatformTypeEnum.getDataByNumber(tradeOrder.getPlatformType()));
if (ledger == null) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方状态异常");
}
if (StringUtils.isBlank(ledger.getReceiverNo())) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方状态异常");
if (!recvMer.getMerNo().equals(tradeOrder.getMerNo())) {
// 接收方分账信息
BsMerLedger ledger = merLedgerService.getMerLedger(recvMer.getId(), PlatformTypeEnum.getDataByNumber(tradeOrder.getPlatformType()));
if (ledger == null) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方状态异常");
}
if (StringUtils.isBlank(ledger.getReceiverNo())) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "接收方状态异常");
}
}
}

@ -289,8 +289,8 @@ public class TradeOrderSchedule {
* 完结分账
* 每分钟扫描一次需要完结的订单
*/
@Scheduled(cron="0 0/1 * * * ?")
public void profitSharingFinish() {
/* @Scheduled(cron="0 0/1 * * * ?")*/
/* public void profitSharingFinish() {
List<BsTradeOrderProfitSharing> tradeOrderProfitSharingList = tradeOrderProfitSharingService.getNeedFinishProfitSharingOrder();
for (BsTradeOrderProfitSharing tradeOrderProfitSharing : tradeOrderProfitSharingList) {
try {
@ -328,7 +328,7 @@ public class TradeOrderSchedule {
tradeOrderProfitSharingService.editData(tradeOrderProfitSharing);
}
}
}
}*/
/**
* 交易结算

@ -594,4 +594,30 @@ public class LaKaLaLedgerService {
merLedgerReceiverApplyService.editReceiverApply(ledgerReceiverApply);
}
/**
* 分账关系解绑申请
*/
public JSONObject queryReceiverDetail() {
Map<String, Object> commonParam = new HashMap<>();
commonParam.put("reqTime", DateUtil.format(new Date(), "yyyyMMddHHmmss"));
commonParam.put("version", "1.0.0");
commonParam.put("reqId", UnionUtils.createNonceStr());
Map<String, Object> map = new HashMap<>();
map.put("version", "1.0");
map.put("orderNo", System.currentTimeMillis()+"");
map.put("orgCode", "965644");
map.put("receiverNo", "SR2023091917041");
commonParam.put("reqData", map);
Map<String, Object> reqParam = LaKaLaConfig.generateSignParamsV2(JSONObject.parseObject(JSONObject.toJSONString(commonParam)));
// 头部参数
Map<String, Object> heard = new HashMap<>();
heard.put("Authorization", reqParam.get("Authorization"));
JSONObject responseBody = HttpsUtils.doPost(CommonSysConst.getSysConfig().getLkl_request_url() + "/api/v2/mms/openApi/ledger/queryReceiverDetail", commonParam, heard);
return responseBody;
}
}

@ -89,7 +89,11 @@ public class LaKaLaTradeSeparateService {
for (BsTradeOrderProfitSharingReceiver receiver : profitSharingReceiverList) {
if (receiver.getReceiverAmount().compareTo(new BigDecimal("0")) != 0) {
recvDatasMap = new HashMap<>();
recvDatasMap.put("recv_no", receiver.getReceiverAccount());
if (receiver.getReceiverNo().equals(tradeOrder.getMerNo())) {
recvDatasMap.put("recv_merchant_no", receiver.getReceiverAccount());
} else {
recvDatasMap.put("recv_no", receiver.getReceiverAccount());
}
recvDatasMap.put("separate_value", receiver.getReceiverAmount().multiply(new BigDecimal("100")).longValue());
recvDatasMapList.add(recvDatasMap);
}
@ -142,21 +146,21 @@ public class LaKaLaTradeSeparateService {
return tradeOrderProfitSharing;
}
public JSONObject queryAmt(String profitSharingOrderNo) {
// 交易订单分账
BsTradeOrderProfitSharing tradeOrderProfitSharing = tradeOrderProfitSharingService.getDetailByProfitSharingOrderNo(profitSharingOrderNo);
if (null == tradeOrderProfitSharing) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "未找到交易分账记录");
}
/**
* 查询可分账金额
* @param outTradeNo
* @return
*/
public JSONObject queryAmt(String outTradeNo) {
// 查询交易详情
BsTradeOrder tradeOrder = tradeOrderService.getOrderByOutTradeNo(tradeOrderProfitSharing.getTradeOrderNo());
BsTradeOrder tradeOrder = tradeOrderService.getOrderByOutTradeNo(outTradeNo);
Map<String, Object> commonParam = new HashMap<>();
commonParam.put("req_time", DateUtil.format(new Date(), "yyyyMMddHHmmss"));
commonParam.put("version", "3.0");
Map<String, Object> map = new HashMap<>();
map.put("merchant_no", tradeOrderProfitSharing.getPlatformMerNo());
map.put("merchant_no", tradeOrder.getPlatformMerNo());
map.put("log_no", tradeOrder.getPlatformLogNo());
map.put("log_date", DateUtil.date2String(tradeOrder.getPayTime(), "yyyyMMdd"));
commonParam.put("req_data", map);
@ -172,8 +176,6 @@ public class LaKaLaTradeSeparateService {
if (!responseBody.getString("code").equals("SACS0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, responseBody.getString("msg"));
}
tradeOrderProfitSharing.setStatus(ProfitSharingStatusEnum.status2.getNumber());
tradeOrderProfitSharingService.editData(tradeOrderProfitSharing);
return responseBody.getJSONObject("resp_data");
}
@ -275,19 +277,21 @@ public class LaKaLaTradeSeparateService {
*/
public JSONObject query(String profitSharingOrderNo) {
log.info("========= Start 分账结果查询 Start ===========");
/*
// 交易订单分账
BsTradeOrderProfitSharing tradeOrderProfitSharing = tradeOrderProfitSharingService.getDetailByProfitSharingOrderNo(profitSharingOrderNo);
if (null == tradeOrderProfitSharing) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "未找到交易分账记录");
}
*/
Map<String, Object> commonParam = new HashMap<>();
commonParam.put("req_time", DateUtil.format(new Date(), "yyyyMMddHHmmss"));
commonParam.put("version", "3.0");
Map<String, Object> map = new HashMap<>();
map.put("merchant_no", tradeOrderProfitSharing.getPlatformMerNo());
map.put("out_separate_no", tradeOrderProfitSharing.getProfitSharingOrderNo());
map.put("merchant_no", "8226410506500HA");
map.put("out_separate_no", "L250806102141542");
commonParam.put("req_data", map);
Map<String, Object> reqParam = LaKaLaConfig.generateSignParamsV3(JSONObject.parseObject(JSONObject.toJSONString(commonParam)));

@ -21,11 +21,11 @@ public class RequestSeparateQueryAmtModel {
private String merchantNo;
/**
* 分账流水
* 商户交易单
*/
@NotBlank(message = "分账流水号必填项")
@Length(min = 6, max = 50, message = "分账流水号限制6至50位字符串长度")
private String outSeparateNo;
@NotBlank(message = "商户交易单号必填项")
@Length(min = 6, max = 50, message = "商户交易单号长度限制6至50位字符串长度")
private String outTradeNo;
/**
* 签名参数

@ -100,7 +100,11 @@ public class OpenApiTradeOrderProfitSharingServiceImpl implements OpenApiTradeOr
profitSharingReceiver.setReceiverObjectType(ProfitSharingReceiverObjectType.mer.getType());
profitSharingReceiver.setReceiverObjectId(recvMer.getId().toString());
profitSharingReceiver.setReceiverNo(recvMer.getMerNo());
profitSharingReceiver.setReceiverAccount(merLedger.getReceiverNo());
if (recvMer.getMerNo().equals(tradeOrder.getMerNo())) {
profitSharingReceiver.setReceiverAccount(tradeOrder.getPlatformMerNo());
} else {
profitSharingReceiver.setReceiverAccount(merLedger.getReceiverNo());
}
profitSharingReceiver.setReceiverName(recvMer.getMerName());
profitSharingReceiver.setReceiverAmount(new BigDecimal(recvData.getSeparateAmount()));
tradeOrderProfitSharingReceiverService.editData(profitSharingReceiver);
@ -262,22 +266,8 @@ public class OpenApiTradeOrderProfitSharingServiceImpl implements OpenApiTradeOr
@Override
public ResponseSeparateQueryAmtModel queryAmt(RequestSeparateQueryAmtModel separateQueryAmtModel) throws Exception {
// 查询分账
BsTradeOrderProfitSharing tradeOrderProfitSharing = tradeOrderProfitSharingService.getDetailByProfitSharingOrderNo(separateQueryAmtModel.getOutSeparateNo());
if (tradeOrderProfitSharing == null) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "未知的分账流水号");
}
// 交易订单
BsTradeOrder tradeOrder = openApiTradeOrderService.getOrderByOutTradeNo(tradeOrderProfitSharing.getTradeOrderNo());
if (tradeOrder == null) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "未知的交易流水号");
}
if (!separateQueryAmtModel.getMerchantNo().equals(tradeOrder.getMerNo())) {
throw ErrorHelp.genException(SysCode.OpenApi, ErrorCode.OPEN_API_COMMON, "未知的分账流水号");
}
// 第三方查询
JSONObject queryAmt = laKaLaTradeSeparateService.queryAmt(separateQueryAmtModel.getOutSeparateNo());
JSONObject queryAmt = laKaLaTradeSeparateService.queryAmt(separateQueryAmtModel.getOutTradeNo());
ResponseSeparateQueryAmtModel responseSeparateQueryAmtModel = new ResponseSeparateQueryAmtModel();
responseSeparateQueryAmtModel.setMerchantNo(separateQueryAmtModel.getMerchantNo());
responseSeparateQueryAmtModel.setTotalSeparateAmt(queryAmt.getBigDecimal("total_separate_amt").divide(new BigDecimal("100")));

@ -64,6 +64,7 @@ public class SignatureUtil {
}
}
sb.append("&key=").append(key);
System.out.println("签名字符串:"+sb.toString());
return sb.toString();
}
@ -84,42 +85,30 @@ public class SignatureUtil {
public static void main(String[] args) throws Exception {
String paramStr = "{\n" +
" \"merchantNo\": \"2023121813322612707\",\n" +
" \"outTradeNo\": \"ZF1130202312190012\",\n" +
" \"payMode\": \"ALIPAY\",\n" +
" \"totalAmount\": 1,\n" +
" \"transType\": \"NATIVE\",\n" +
" \"profitSharing\": 1,\n" +
" \"specialField\": \"测试\"" +
"\t\"outSplitInfo\": [{\n" +
"\t\t\"amount\": \"0.01\",\n" +
"\t\t\"outSubTradeNo\": \"CPBUS0202508121514410002_1\",\n" +
"\t\t\"subAttach\": \"202508061503020001\",\n" +
"\t\t\"merchantNo\": \"2025080710431547108\"\n" +
"\t}, {\n" +
"\t\t\"amount\": \"0.04\",\n" +
"\t\t\"outSubTradeNo\": \"CPBUS0202508121514410002_2\",\n" +
"\t\t\"subAttach\": \"202508120930470001,202508061102190001\",\n" +
"\t\t\"merchantNo\": \"2023082309581210306\"\n" +
"\t}],\n" +
"\t\"totalAmount\": \"0.05\",\n" +
"\t\"transType\": \"JSAPI\",\n" +
"\t\"payMode\": \"WECHAT\",\n" +
"\t\"subject\": \"微信合单支付\",\n" +
"\t\"outTradeNo\": \"CPBUS0202508121514410002\",\n" +
"\t\"notifyUrl\": \"http://test.api2.ctpark.cn/3rdparty/payment/payNotifyHpay\",\n" +
"\t\"attach\": \"wxMergePay\",\n" +
"\t\"userId\": \"o4Jwb42CBpXgAZJaF985MViTBIaI\",\n" +
"\t\"merchantNo\": \"2023082309581210306\",\n" +
"\t\"subAppid\": \"wxc1d482cb439d570d\"\n" +
"}";
/* String paramStr = "{\n" +
" \"merchantNo\": \"2023121813322612707\",\n" +
" \"outSeparateNo\": \"1530202305190001\",\n" +
" \"outTradeNo\": \"ZF1130202312190004\",\n" +
" \"totalAmount\": \"0.01\",\n" +
" \"recvDatas\": [\n" +
" {\n" +
" \"recvMerchantNo\": \"2023121811484863205\",\n" +
" \"separateAmount\": \"0.01\"\n" +
" }\n" +
" ]" +
"}";*/
/*
String paramStr = "{\n" +
" \"merchantNo\": \"2023121813322612707\",\n" +
" \"outSeparateNo\": \"1530202305190001\"" +
"}";*/
/* String paramStr = "{\n" +
" \"merchantNo\": \"2023121813322612707\",\n" +
" \"outTradeNo\": \"ZF1130202312190004\",\n" +
" \"refundAmount\": \"1\",\n" +
" \"refundReason\": \"测试退款\",\n" +
" \"refundTradeNo\": \"1170202312190001\"" +
"}";*/
String sign = createSign(JSONObject.parseObject(paramStr), "7ub4JCbyExtW4ragz6FO6bGkVnuV7cUp");
String sign = createSign(JSONObject.parseObject(paramStr), "rz58ZH8tTOCWxGPsRplGC3BDCBQmxsZo");
System.out.println(sign);
JSONObject object = JSONObject.parseObject(paramStr);

@ -28,7 +28,7 @@ public interface BsTradeOrderRefundService {
* @param outTradeOrder
* @return
*/
BsTradeOrderRefund getRefundByOutTradeOrder(String outTradeOrder);
List<BsTradeOrderRefund> getRefundByOutTradeOrder(String outTradeOrder);
/**
* 根据合单退款id查询退款

@ -154,14 +154,11 @@ public class BsTradeOrderRefundServiceImpl implements BsTradeOrderRefundService
}
@Override
public BsTradeOrderRefund getRefundByOutTradeOrder(String outTradeOrder) {
public List<BsTradeOrderRefund> getRefundByOutTradeOrder(String outTradeOrder) {
BsTradeOrderRefundExample example = new BsTradeOrderRefundExample();
example.createCriteria().andOutTradeNoEqualTo(outTradeOrder).andStatusNotEqualTo(TradeOrderRefundStatusEnum.status0.getNumber());
List<BsTradeOrderRefund> list = tradeOrderRefundMapper.selectByExample(example);
if (list.size() > 0) {
return list.get(0);
}
return null;
example.setOrderByClause("create_time desc");
return tradeOrderRefundMapper.selectByExample(example);
}
@Override

Loading…
Cancel
Save