From 387bfdd763c58a48e13a54fa755fb50b3f43ef8f Mon Sep 17 00:00:00 2001 From: hu177768073 <177768073@qq.com> Date: Tue, 12 Aug 2025 16:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cweb/controller/TestController.java | 10 ++-- .../v1/TradeProfitSharingController.java | 20 ++++--- .../com/hfkj/schedule/TradeOrderSchedule.java | 6 +- .../channel/lakala/LaKaLaLedgerService.java | 26 +++++++++ .../lakala/LaKaLaTradeSeparateService.java | 30 +++++----- .../request/RequestSeparateQueryAmtModel.java | 8 +-- ...ApiTradeOrderProfitSharingServiceImpl.java | 22 ++----- .../hfkj/openapi/v1/utils/SignatureUtil.java | 57 ++++++++----------- .../service/BsTradeOrderRefundService.java | 2 +- .../impl/BsTradeOrderRefundServiceImpl.java | 9 +-- 10 files changed, 99 insertions(+), 91 deletions(-) diff --git a/cweb/src/main/java/com/cweb/controller/TestController.java b/cweb/src/main/java/com/cweb/controller/TestController.java index 6fe4ec2..10aa365 100644 --- a/cweb/src/main/java/com/cweb/controller/TestController.java +++ b/cweb/src/main/java/com/cweb/controller/TestController.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); diff --git a/open-api/src/main/java/com/api/controller/v1/TradeProfitSharingController.java b/open-api/src/main/java/com/api/controller/v1/TradeProfitSharingController.java index 190a15c..c4f07cc 100644 --- a/open-api/src/main/java/com/api/controller/v1/TradeProfitSharingController.java +++ b/open-api/src/main/java/com/api/controller/v1/TradeProfitSharingController.java @@ -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, "接收方状态异常"); + } } } diff --git a/schedule/src/main/java/com/hfkj/schedule/TradeOrderSchedule.java b/schedule/src/main/java/com/hfkj/schedule/TradeOrderSchedule.java index 6be8e60..7041618 100644 --- a/schedule/src/main/java/com/hfkj/schedule/TradeOrderSchedule.java +++ b/schedule/src/main/java/com/hfkj/schedule/TradeOrderSchedule.java @@ -289,8 +289,8 @@ public class TradeOrderSchedule { * 完结分账 * 每分钟扫描一次需要完结的订单 */ - @Scheduled(cron="0 0/1 * * * ?") - public void profitSharingFinish() { + /* @Scheduled(cron="0 0/1 * * * ?")*/ +/* public void profitSharingFinish() { List tradeOrderProfitSharingList = tradeOrderProfitSharingService.getNeedFinishProfitSharingOrder(); for (BsTradeOrderProfitSharing tradeOrderProfitSharing : tradeOrderProfitSharingList) { try { @@ -328,7 +328,7 @@ public class TradeOrderSchedule { tradeOrderProfitSharingService.editData(tradeOrderProfitSharing); } } - } + }*/ /** * 交易结算 diff --git a/service/src/main/java/com/hfkj/channel/lakala/LaKaLaLedgerService.java b/service/src/main/java/com/hfkj/channel/lakala/LaKaLaLedgerService.java index 4137702..e46e15d 100644 --- a/service/src/main/java/com/hfkj/channel/lakala/LaKaLaLedgerService.java +++ b/service/src/main/java/com/hfkj/channel/lakala/LaKaLaLedgerService.java @@ -594,4 +594,30 @@ public class LaKaLaLedgerService { merLedgerReceiverApplyService.editReceiverApply(ledgerReceiverApply); } + + /** + * 分账关系解绑申请 + */ + public JSONObject queryReceiverDetail() { + Map commonParam = new HashMap<>(); + commonParam.put("reqTime", DateUtil.format(new Date(), "yyyyMMddHHmmss")); + commonParam.put("version", "1.0.0"); + commonParam.put("reqId", UnionUtils.createNonceStr()); + + Map 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 reqParam = LaKaLaConfig.generateSignParamsV2(JSONObject.parseObject(JSONObject.toJSONString(commonParam))); + // 头部参数 + Map 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; + } + } diff --git a/service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeSeparateService.java b/service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeSeparateService.java index 9fb6a74..356a184 100644 --- a/service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeSeparateService.java +++ b/service/src/main/java/com/hfkj/channel/lakala/LaKaLaTradeSeparateService.java @@ -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 commonParam = new HashMap<>(); commonParam.put("req_time", DateUtil.format(new Date(), "yyyyMMddHHmmss")); commonParam.put("version", "3.0"); Map 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 commonParam = new HashMap<>(); commonParam.put("req_time", DateUtil.format(new Date(), "yyyyMMddHHmmss")); commonParam.put("version", "3.0"); Map 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 reqParam = LaKaLaConfig.generateSignParamsV3(JSONObject.parseObject(JSONObject.toJSONString(commonParam))); diff --git a/service/src/main/java/com/hfkj/openapi/v1/model/request/RequestSeparateQueryAmtModel.java b/service/src/main/java/com/hfkj/openapi/v1/model/request/RequestSeparateQueryAmtModel.java index acb4c46..59a2144 100644 --- a/service/src/main/java/com/hfkj/openapi/v1/model/request/RequestSeparateQueryAmtModel.java +++ b/service/src/main/java/com/hfkj/openapi/v1/model/request/RequestSeparateQueryAmtModel.java @@ -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; /** * 签名参数 diff --git a/service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderProfitSharingServiceImpl.java b/service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderProfitSharingServiceImpl.java index c235261..ec7a414 100644 --- a/service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderProfitSharingServiceImpl.java +++ b/service/src/main/java/com/hfkj/openapi/v1/service/impl/OpenApiTradeOrderProfitSharingServiceImpl.java @@ -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"))); diff --git a/service/src/main/java/com/hfkj/openapi/v1/utils/SignatureUtil.java b/service/src/main/java/com/hfkj/openapi/v1/utils/SignatureUtil.java index 75df014..8b01f64 100644 --- a/service/src/main/java/com/hfkj/openapi/v1/utils/SignatureUtil.java +++ b/service/src/main/java/com/hfkj/openapi/v1/utils/SignatureUtil.java @@ -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); diff --git a/service/src/main/java/com/hfkj/service/BsTradeOrderRefundService.java b/service/src/main/java/com/hfkj/service/BsTradeOrderRefundService.java index a309b52..4526aed 100644 --- a/service/src/main/java/com/hfkj/service/BsTradeOrderRefundService.java +++ b/service/src/main/java/com/hfkj/service/BsTradeOrderRefundService.java @@ -28,7 +28,7 @@ public interface BsTradeOrderRefundService { * @param outTradeOrder * @return */ - BsTradeOrderRefund getRefundByOutTradeOrder(String outTradeOrder); + List getRefundByOutTradeOrder(String outTradeOrder); /** * 根据合单退款id查询退款 diff --git a/service/src/main/java/com/hfkj/service/impl/BsTradeOrderRefundServiceImpl.java b/service/src/main/java/com/hfkj/service/impl/BsTradeOrderRefundServiceImpl.java index 15f946e..d65c37d 100644 --- a/service/src/main/java/com/hfkj/service/impl/BsTradeOrderRefundServiceImpl.java +++ b/service/src/main/java/com/hfkj/service/impl/BsTradeOrderRefundServiceImpl.java @@ -154,14 +154,11 @@ public class BsTradeOrderRefundServiceImpl implements BsTradeOrderRefundService } @Override - public BsTradeOrderRefund getRefundByOutTradeOrder(String outTradeOrder) { + public List getRefundByOutTradeOrder(String outTradeOrder) { BsTradeOrderRefundExample example = new BsTradeOrderRefundExample(); example.createCriteria().andOutTradeNoEqualTo(outTradeOrder).andStatusNotEqualTo(TradeOrderRefundStatusEnum.status0.getNumber()); - List list = tradeOrderRefundMapper.selectByExample(example); - if (list.size() > 0) { - return list.get(0); - } - return null; + example.setOrderByClause("create_time desc"); + return tradeOrderRefundMapper.selectByExample(example); } @Override