From 82564922afab64007b322079951aa16442cff5a0 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 10 Feb 2025 00:36:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/lakala/LklLedgerMember.java | 2 +- .../lakala/LklLedgerMerReceiverBind.java | 2 +- .../modules/lakala/LklLedgerReceiver.java | 6 +- .../mall/common/utils/StringUtils.java | 106 +++++++-- .../controller/mobile/LakalaController.java | 34 +-- .../pay/mapper/LklLedgerMemberMapper.java | 1 - .../LklLedgerMerReceiverBindMapper.java | 18 ++ .../pay/mapper/LklLedgerReceiverMapper.java | 18 ++ .../mall/pay/service/LakalaPayService.java | 38 ++- .../pay/service/LklLedgerMemberService.java | 7 + .../LklLedgerMerReceiverBindService.java | 22 ++ .../pay/service/LklLedgerReceiverService.java | 23 ++ .../impl/AccountBaseConfigServiceImpl.java | 10 +- .../impl/AnalytiscTradeServiceImpl.java | 20 +- .../service/impl/LakalaPayServiceImpl.java | 225 ++++++++++++++++-- .../impl/LklLedgerMemberServiceImpl.java | 29 ++- .../LklLedgerMerReceiverBindServiceImpl.java | 45 ++++ .../impl/LklLedgerReceiverServiceImpl.java | 44 ++++ .../impl/PayBaseRechargeLevelServiceImpl.java | 5 +- .../impl/PayCardHistoryServiceImpl.java | 2 +- .../service/impl/PayCardInfoServiceImpl.java | 2 +- .../service/impl/PayCardTypeServiceImpl.java | 2 +- .../impl/PayConsumeDepositServiceImpl.java | 12 +- .../impl/PayConsumeRecordServiceImpl.java | 2 +- .../PayConsumeTradeCombineServiceImpl.java | 2 +- .../impl/PayConsumeTradeServiceImpl.java | 22 +- .../impl/PayConsumeWithdrawServiceImpl.java | 2 +- .../impl/PayUserBankCardServiceImpl.java | 2 +- .../impl/PayUserResourceServiceImpl.java | 2 +- .../impl/ShopBaseStateCodeServiceImpl.java | 4 +- .../mapper/pay/LklLedgerMemberMapper.xml | 5 + .../pay/LklLedgerMerReceiverBindMapper.xml | 5 + .../mapper/pay/LklLedgerReceiverMapper.xml | 5 + 33 files changed, 621 insertions(+), 103 deletions(-) create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMerReceiverBindMapper.java create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerReceiverMapper.java create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMerReceiverBindService.java create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerReceiverService.java create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMerReceiverBindServiceImpl.java create mode 100644 mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerReceiverServiceImpl.java create mode 100644 mall-pay/src/main/resources/mapper/pay/LklLedgerMemberMapper.xml create mode 100644 mall-pay/src/main/resources/mapper/pay/LklLedgerMerReceiverBindMapper.xml create mode 100644 mall-pay/src/main/resources/mapper/pay/LklLedgerReceiverMapper.xml diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMember.java b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMember.java index fd096b1f..8a91802d 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMember.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMember.java @@ -20,7 +20,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName("shop_message_template") +@TableName("lkl_ledger_member") @ApiModel(value = "拉卡拉分账商户", description = "拉卡拉分账商户表") public class LklLedgerMember implements Serializable { private static final long serialVersionUID = 1L; diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMerReceiverBind.java b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMerReceiverBind.java index d1419ecb..f3525525 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMerReceiverBind.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerMerReceiverBind.java @@ -20,7 +20,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName("shop_message_template") +@TableName("lkl_ledger_mer_receiver_bind") @ApiModel(value = "拉卡拉分账商户与接收方绑定关系", description = "拉卡拉分账商户与接收方绑定表") public class LklLedgerMerReceiverBind implements Serializable { private static final long serialVersionUID = 1L; diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java index d3fedb3c..bf76e349 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java @@ -20,7 +20,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName("shop_message_template") +@TableName("lkl_ledger_receiver") @ApiModel(value = "拉卡拉分账接收方", description = "拉卡拉分账接收方表") public class LklLedgerReceiver implements Serializable { private static final long serialVersionUID = 1L; @@ -30,6 +30,7 @@ public class LklLedgerReceiver implements Serializable { private String org_code; private String rec_org_code; private String rec_org_name; + private String receiver_no; private String receiver_name; private String contact_mobile; private String license_no; @@ -46,9 +47,6 @@ public class LklLedgerReceiver implements Serializable { private String acct_open_bank_name; private String acct_clear_bank_code; private String attach_list; - private String attach_type; - private String attach_name; - private String attach_store_path; private String settle_type; private String version; private Date created_at; diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java index 3a1dcb52..e8e435f2 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java @@ -1,11 +1,15 @@ package com.suisung.mall.common.utils; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -354,40 +358,89 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils { } /** - * 驼峰命名转下划线命名 - * + * 将 JSON 字符串中驼峰命名的键转换为下划线命名 + * @param jsonString 输入的 JSON 字符串 + * @return 转换后的 JSON 字符串 + */ + public static String convertCamelToSnake(String jsonString) { + Gson gson = new Gson(); + JsonElement jsonElement = JsonParser.parseString(jsonString); + JsonElement convertedElement = convertKeys(jsonElement,true); + return gson.toJson(convertedElement); + } + + /** + * 将 JSON 字符串中蛇形命名的键转换为驼峰命名 + * @param jsonString 输入的 JSON 字符串 + * @return 转换后的 JSON 字符串 + */ + public static String convertSnakeToCamel(String jsonString) { + Gson gson = new Gson(); + // 解析 JSON 字符串为 JsonElement 对象 + JsonElement jsonElement = JsonParser.parseString(jsonString); + // 递归转换键名 + JsonElement convertedElement = convertKeys(jsonElement,true); + // 将转换后的 JsonElement 转换回 JSON 字符串 + return gson.toJson(convertedElement); + } + + /** + * 递归转换 JSON 元素中的键名 + * @param element 要转换的 JSON 元素 + * @return 转换后的 JSON 元素 + */ + private static JsonElement convertKeys(JsonElement element, boolean isCamelToSnake) { + if (element.isJsonObject()) { + JsonObject jsonObject = element.getAsJsonObject(); + JsonObject newJsonObject = new JsonObject(); + for (Map.Entry entry : jsonObject.entrySet()) { + + String newKey ; + if(isCamelToSnake) { + newKey = camelToSnake(entry.getKey()); + }else{ + newKey = snakeToCamel(entry.getKey()); + } + JsonElement value = entry.getValue(); + newJsonObject.add(newKey, convertKeys(value, isCamelToSnake)); + } + return newJsonObject; + } else if (element.isJsonArray()) { + JsonArray jsonArray = element.getAsJsonArray(); + JsonArray newJsonArray = new JsonArray(); + for (JsonElement item : jsonArray) { + newJsonArray.add(convertKeys(item, isCamelToSnake)); + } + return newJsonArray; + } + return element; + } + + + + /** + * 将单个驼峰命名的字符串转换为下划线命名 * @param camelCase 驼峰命名的字符串 * @return 下划线命名的字符串 */ - public static String camelToSnake(String camelCase) { - // 处理输入为 null 或空字符串的情况 - if (camelCase == null || camelCase.isEmpty()) { - return camelCase; - } + private static String camelToSnake(String camelCase) { StringBuilder result = new StringBuilder(); for (int i = 0; i < camelCase.length(); i++) { char c = camelCase.charAt(i); - // 如果是大写字母且不是字符串的第一个字符,则在前面添加下划线 if (Character.isUpperCase(c) && i > 0) { result.append("_"); } - // 将字符转换为小写并添加到结果中 result.append(Character.toLowerCase(c)); } return result.toString(); } /** - * 下划线命名转驼峰命名 - * - * @param snakeCase 下划线命名的字符串 + * 将单个蛇形命名的字符串转换为驼峰命名 + * @param snakeCase 蛇形命名的字符串 * @return 驼峰命名的字符串 */ - public static String snakeToCamel(String snakeCase) { - // 处理输入为 null 或空字符串的情况 - if (snakeCase == null || snakeCase.isEmpty()) { - return snakeCase; - } + private static String snakeToCamel(String snakeCase) { StringBuilder result = new StringBuilder(); boolean capitalizeNext = false; for (char c : snakeCase.toCharArray()) { @@ -396,7 +449,7 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils { capitalizeNext = true; } else { if (capitalizeNext) { - // 将字符转换为大写并添加到结果中 + // 将字符转换为大写 result.append(Character.toUpperCase(c)); capitalizeNext = false; } else { @@ -407,6 +460,23 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils { return result.toString(); } + /** + * 根据文件名获取文件后缀 + * @param fileName 文件名 + * @return 文件后缀,如果没有后缀则返回空字符串 + */ + public static String getFileExt(String fileName) { + if (fileName == null || fileName.isEmpty()) { + return ""; + } + int lastIndex = fileName.lastIndexOf('.'); + if (lastIndex == -1 || lastIndex == fileName.length() - 1) { + return ""; + } + return fileName.substring(lastIndex + 1); + } + + /** * 生成的随机数类型 diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/LakalaController.java b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/LakalaController.java index 039da04f..fee927f0 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/LakalaController.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/LakalaController.java @@ -14,49 +14,55 @@ import com.suisung.mall.common.service.impl.BaseControllerImpl; import com.suisung.mall.pay.service.LakalaPayService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.util.Base64Utils; + +import javax.annotation.Resource; +import java.io.IOException; @Api(tags = "拉卡拉相关接口 - 前端控制器") @RestController @RequestMapping("/mobile/pay/lakala") public class LakalaController extends BaseControllerImpl { - @Autowired + @Resource private LakalaPayService lakalaPayService; + @ApiOperation(value = "本地文件转base64", notes = "本地文件转base64") + @RequestMapping(value = "/file2base64", method = RequestMethod.POST) + public String file2Base64(@RequestParam("file") MultipartFile file) throws IOException { + String str=Base64Utils.encodeToString(file.getBytes()); + return str; + } + @ApiOperation(value = "商户分账业务开通申请", notes = "商户分账业务开通申请") @RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST) public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) { - return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); + return lakalaPayService.applyLedgerMer(paramsJSON); } @ApiOperation(value = "商户分账业务开通申请异步回调回调", notes = "商户分账业务开通申请异步回调回调") @RequestMapping(value = "/ledger/applyLedgerMerNotify", method = RequestMethod.POST) public CommonResult ledgerApplyLedgerMerNotify(@RequestBody JSONObject paramsJSON) { - return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); + return lakalaPayService.applyLedgerMer(paramsJSON); } @ApiOperation(value = "分账接收方创建申请", notes = "分账接收方创建申请") @RequestMapping(value = "/ledger/applyLedgerReceiver", method = RequestMethod.POST) public CommonResult applyLedgerReceiver(@RequestBody JSONObject paramsJSON) { - return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); + return lakalaPayService.applyLedgerMer(paramsJSON); } @ApiOperation(value = "分账关系绑定申请", notes = "分账关系绑定申请") @RequestMapping(value = "/ledger/applyBind", method = RequestMethod.POST) public CommonResult applyBind(@RequestBody JSONObject paramsJSON) { - return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); + return lakalaPayService.applyLedgerMer(paramsJSON); } @ApiOperation(value = "分账关系绑定申请异步回调通知", notes = "分账关系绑定申请异步回调通知") @RequestMapping(value = "/ledger/applyBindNotify", method = RequestMethod.POST) - public CommonResult applyBindNotify(@RequestBody JSONObject paramsJSON) { - return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); + public JSONObject applyBindNotify(@RequestBody JSONObject paramsJSON) { + return lakalaPayService.applyLedgerMerNotify(paramsJSON); } - - } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMemberMapper.java b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMemberMapper.java index 149d5a70..b8a031f7 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMemberMapper.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMemberMapper.java @@ -10,7 +10,6 @@ package com.suisung.mall.pay.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.suisung.mall.common.modules.lakala.LklLedgerMember; -import com.suisung.mall.common.modules.pay.PayBaseRechargeLevel; import org.springframework.stereotype.Repository; diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMerReceiverBindMapper.java b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMerReceiverBindMapper.java new file mode 100644 index 00000000..dca530d0 --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerMerReceiverBindMapper.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind; +import org.springframework.stereotype.Repository; + + +@Repository +public interface LklLedgerMerReceiverBindMapper extends BaseMapper { +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerReceiverMapper.java b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerReceiverMapper.java new file mode 100644 index 00000000..12dfebec --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/mapper/LklLedgerReceiverMapper.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.suisung.mall.common.modules.lakala.LklLedgerReceiver; +import org.springframework.stereotype.Repository; + + +@Repository +public interface LklLedgerReceiverMapper extends BaseMapper { +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java index 420ee481..83a2efa4 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java @@ -92,5 +92,41 @@ public interface LakalaPayService { * @param paramsJSON * @return */ - CommonResult ledgerApplyLedgerMer(JSONObject paramsJSON); + CommonResult applyLedgerMer(JSONObject paramsJSON); + + /** + * 商户分账业务开通申请回调 + * 参考:https://o.lakala.com/#/home/document/detail?id=379 + * @param paramsJSON + * @return + */ + JSONObject applyLedgerMerNotify(JSONObject paramsJSON); + + /** + * 分账接收方创建申请 + * 参考:https://o.lakala.com/#/home/document/detail?id=380 + * @param paramsJSON + * @return + */ + CommonResult applyLedgerReceiver(JSONObject paramsJSON); + + + /** + * 分账关系绑定申请 + * 参考:https://o.lakala.com/#/home/document/detail?id=386 + * @param paramsJSON + * @return + */ + CommonResult applyLedgerMerReceiverBind(JSONObject paramsJSON); + + + /** + * 分账关系绑定申请回调 + * 参考:https://o.lakala.com/#/home/document/detail?id=379 + * @param paramsJSON + * @return + */ + JSONObject applyLedgerMerReceiverBindNotify(JSONObject paramsJSON); + + } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMemberService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMemberService.java index f64fc757..4d310ace 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMemberService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMemberService.java @@ -12,4 +12,11 @@ import com.suisung.mall.common.modules.lakala.LklLedgerMember; import com.suisung.mall.core.web.service.IBaseService; public interface LklLedgerMemberService extends IBaseService { + + /** + * 根据银联商户号新增或修改记录 + * @param record + * @return + */ + Boolean saveOrUpdateByMerCupNo(LklLedgerMember record); } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMerReceiverBindService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMerReceiverBindService.java new file mode 100644 index 00000000..02812a4c --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerMerReceiverBindService.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.service; + +import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind; +import com.suisung.mall.core.web.service.IBaseService; + +public interface LklLedgerMerReceiverBindService extends IBaseService { + + /** + * 根据接收方编号新增或更新记录 + * @param record + * @return + */ + Boolean saveOrUpdateByReceiverNo(LklLedgerMerReceiverBind record); +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerReceiverService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerReceiverService.java new file mode 100644 index 00000000..06ab8619 --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LklLedgerReceiverService.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.service; + +import com.suisung.mall.common.modules.lakala.LklLedgerMember; +import com.suisung.mall.common.modules.lakala.LklLedgerReceiver; +import com.suisung.mall.core.web.service.IBaseService; + +public interface LklLedgerReceiverService extends IBaseService { + + /** + * 根据接收方编号新增或更新记录 + * @param record + * @return + */ + Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record); +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/AccountBaseConfigServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/AccountBaseConfigServiceImpl.java index d9fc167a..5161c0c7 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/AccountBaseConfigServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/AccountBaseConfigServiceImpl.java @@ -11,9 +11,9 @@ import com.suisung.mall.common.constant.RedisConstant; import com.suisung.mall.common.feignService.AccountService; import com.suisung.mall.common.modules.account.AccountBaseConfig; import com.suisung.mall.common.modules.account.AccountUserInfo; +import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.core.web.service.RedisService; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; -import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.pay.mapper.AccountBaseConfigMapper; import com.suisung.mall.pay.service.AccountBaseConfigService; import lombok.extern.slf4j.Slf4j; @@ -42,16 +42,13 @@ import java.util.stream.Collectors; @Slf4j public class AccountBaseConfigServiceImpl extends BaseServiceImpl implements AccountBaseConfigService, CommandLineRunner { + public static Map configMap; + public static Long version = 0L; @Autowired private AccountService accountService; - @Autowired private RedisService redisService; - public static Map configMap; - - public static Long version = 0L; - /** * 根据config_key 获取 config_value * @@ -239,6 +236,7 @@ public class AccountBaseConfigServiceImpl extends BaseServiceImpl attachList = new ArrayList<>(); + V2MmsOpenApiLedgerApplyLedgerReceiverRequest.AttachInfo attachInfo = new V2MmsOpenApiLedgerApplyLedgerReceiverRequest.AttachInfo(); + + for (Object attachJSON : paramsJSON.getJSONArray("attachList")) { + JSONObject attachJSONObj = (JSONObject) attachJSON; + String fileName = paramsJSON.getStr("attachName"); + attachInfo.setAttachName(fileName); + attachInfo.setAttachType(attachJSONObj.getStr("attachType")); + + JSONObject fileUploadResp = uploadFile(StringUtils.genLklOrderNo(8), attachJSONObj.getStr("attachType"), StringUtils.getFileExt(fileName), paramsJSON.getStr("attachFile")); + if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { + throw new ApiException(I18nUtil._("附件上传失败!")); + } + + attachInfo.setAttachStorePath(fileUploadResp.getStr("attFileId")); + + attachList.add(attachInfo); + } + + req.setAttachList(attachList); + + + paramsJSON.set("orderNo", orderNo); + paramsJSON.set("version", "2.0"); + paramsJSON.set("org_code", orgCode); + paramsJSON.set("attach_list", JSONUtil.toJsonStr(attachList)); + + try { + //3. 发送请求 + String responseStr = LKLSDK.httpPost(req); + + JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); + if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { + throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); + } + + paramsJSON.set("receiver_no", lakalaRespJSON.getByPath("respData.receiverNo")); + paramsJSON.set("rec_org_code", lakalaRespJSON.getByPath("respData.orgId")); + paramsJSON.set("rec_org_name", lakalaRespJSON.getByPath("respData.orgName")); + + // 新增数据 + // 将 JSON 对象的键名转换为下划线命名 + LklLedgerReceiver lklLedgerReceiver = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerReceiver.class); + lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver); + + return CommonResult.success(null, "提交成功,待审核中!"); + } catch (SDKException e) { + log.error("分账申请失败:", e); + throw new ApiException(I18nUtil._("申请失败!"), e); + } + } + + /** + * 分账关系绑定申请 + * 参考:https://o.lakala.com/#/home/document/detail?id=386 + * + * @param paramsJSON + * @return + */ + @Override + public CommonResult applyLedgerMerReceiverBind(JSONObject paramsJSON) { + // 1. 配置初始化 + initLKLSDK(); + + //2. 装配数据 + V2MmsOpenApiLedgerApplyBindRequest req = new V2MmsOpenApiLedgerApplyBindRequest(); + req.setVersion("2.0"); + String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数 + req.setOrderNo(orderNo); + req.setOrgCode(orgCode); + req.setMerInnerNo(paramsJSON.getStr("merInnerNo")); + req.setMerCupNo(paramsJSON.getStr("merCupNo")); + req.setReceiverNo(paramsJSON.getStr("receiverNo")); + + String fileName = paramsJSON.getStr("entrustFileName"); + req.setEntrustFileName(fileName); + // 文件上传到拉卡拉服务器 + JSONObject fileUploadResp = uploadFile(orderNo, "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), paramsJSON.getStr("splitEntrustFile")); + if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { + throw new ApiException(I18nUtil._("合作协议上传失败!")); + } + + String entrustFilePath = fileUploadResp.getStr("attFileId"); + req.setEntrustFilePath(entrustFilePath); + + String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerReceiverBindNotify"; + req.setRetUrl(retUrl); + + paramsJSON.set("orderNo", orderNo); + paramsJSON.set("version", "2.0"); + paramsJSON.set("ret_url", retUrl); + paramsJSON.set("org_code", orgCode); + paramsJSON.set("entrust_file_name", entrustFilePath); + + try { + //3. 发送请求 + String responseStr = LKLSDK.httpPost(req); + + JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); + if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { + throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); +// responseStr="{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}"; +// lakalaRespJSON = JSONUtil.parseObj(responseStr); + } + + paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); + paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); + paramsJSON.set("audit_status_text", paramsJSON.get("remark")); + + // 新增数据 + // 将 JSON 对象的键名转换为下划线命名 + LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class); + lklLedgerMerReceiverBindService.saveOrUpdateByReceiverNo(lklLedgerMerReceiverBind); + + return CommonResult.success(null, "提交成功,待审核中!"); + } catch (SDKException e) { + log.error("分账绑定关系申请失败:", e); + throw new ApiException(I18nUtil._("分账绑定关系申请失败!"), e); + } + } + + /** + * 分账关系绑定申请回调 + * 参考:https://o.lakala.com/#/home/document/detail?id=379 + * + * @param paramsJSON + * @return + */ + @Override + public JSONObject applyLedgerMerReceiverBindNotify(JSONObject paramsJSON) { + return null; + } + } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMemberServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMemberServiceImpl.java index 5041c01d..607b88d4 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMemberServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMemberServiceImpl.java @@ -8,14 +8,39 @@ package com.suisung.mall.pay.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.common.modules.lakala.LklLedgerMember; -import com.suisung.mall.common.modules.pay.PayConsumeTrade; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.mapper.LklLedgerMemberMapper; -import com.suisung.mall.pay.mapper.PayConsumeTradeMapper; import com.suisung.mall.pay.service.LklLedgerMemberService; import org.springframework.stereotype.Service; @Service public class LklLedgerMemberServiceImpl extends BaseServiceImpl implements LklLedgerMemberService { + + + /** + * 根据银联商户号新增或修改记录 + * + * @param record + * @return + */ + @Override + public Boolean saveOrUpdateByMerCupNo(LklLedgerMember record) { + if (record == null || StrUtil.isBlank(record.getMer_cup_no())) { + return false; + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mer_cup_no", record.getMer_cup_no()); + LklLedgerMember existsRecord = getOne(queryWrapper); + if (existsRecord != null) { + // update + record.setId(existsRecord.getId()); + return updateById(record); + } + + return save(record); + } } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMerReceiverBindServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMerReceiverBindServiceImpl.java new file mode 100644 index 00000000..4df900ea --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerMerReceiverBindServiceImpl.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; +import com.suisung.mall.pay.mapper.LklLedgerMerReceiverBindMapper; +import com.suisung.mall.pay.service.LklLedgerMerReceiverBindService; +import org.springframework.stereotype.Service; + +@Service +public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl implements LklLedgerMerReceiverBindService { + /** + * 根据接收方编号新增或更新记录 + * + * @param record + * @return + */ + @Override + public Boolean saveOrUpdateByReceiverNo(LklLedgerMerReceiverBind record) { + if (record == null || StrUtil.isBlank(record.getReceiver_no())) { + return false; + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mer_cup_no", record.getMer_cup_no()); + queryWrapper.eq("receiver_no", record.getReceiver_no()); + LklLedgerMerReceiverBind existsRecord = getOne(queryWrapper); + if (existsRecord != null) { + // update + record.setId(existsRecord.getId()); + return updateById(record); + } + + return save(record); + } +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerReceiverServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerReceiverServiceImpl.java new file mode 100644 index 00000000..6d148ede --- /dev/null +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LklLedgerReceiverServiceImpl.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.pay.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.suisung.mall.common.modules.lakala.LklLedgerReceiver; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; +import com.suisung.mall.pay.mapper.LklLedgerReceiverMapper; +import com.suisung.mall.pay.service.LklLedgerReceiverService; +import org.springframework.stereotype.Service; + +@Service +public class LklLedgerReceiverServiceImpl extends BaseServiceImpl implements LklLedgerReceiverService { + /** + * 根据接收方编号新增或更新记录 + * + * @param record + * @return + */ + @Override + public Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record) { + if (record == null || StrUtil.isBlank(record.getReceiver_no())) { + return false; + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("receiver_no", record.getReceiver_no()); + LklLedgerReceiver existsRecord = getOne(queryWrapper); + if (existsRecord != null) { + // update + record.setId(existsRecord.getId()); + return updateById(record); + } + + return save(record); + } +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayBaseRechargeLevelServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayBaseRechargeLevelServiceImpl.java index f62f8d50..cffb65a6 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayBaseRechargeLevelServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayBaseRechargeLevelServiceImpl.java @@ -14,9 +14,9 @@ import com.suisung.mall.common.exception.ApiUserException; import com.suisung.mall.common.feignService.ShopService; import com.suisung.mall.common.modules.pay.PayBaseRechargeLevel; import com.suisung.mall.common.modules.pay.PayConsumeTrade; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.mapper.PayBaseRechargeLevelMapper; import com.suisung.mall.pay.service.PayBaseRechargeLevelService; import com.suisung.mall.pay.service.PayConsumeTradeService; @@ -64,8 +64,7 @@ public class PayBaseRechargeLevelServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("store_id",currentUser.getStore_id()); + queryWrapper.eq("store_id", currentUser.getStore_id()); if (CollectionUtils.isNotEmpty(order_ids)) { queryWrapper.in("order_id", order_ids); @@ -618,7 +618,7 @@ public class PayConsumeDepositServiceImpl extends BaseServiceImpl return_rows) { @@ -1361,9 +1360,10 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("order_id", orderId); - int cnt =0; - if(orderStateId != null && orderStateId > 0){ + int cnt = 0; + if (orderStateId != null && orderStateId > 0) { updateWrapper.set("order_state_id", orderStateId); cnt++; } - if(tradeIsPaid != null && tradeIsPaid > 0){ + if (tradeIsPaid != null && tradeIsPaid > 0) { updateWrapper.set("trade_is_paid", tradeIsPaid); cnt++; } - if(cnt <= 0){ + if (cnt <= 0) { return false; } - return update(updateWrapper); + return update(updateWrapper); } } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeWithdrawServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeWithdrawServiceImpl.java index 85355c51..b397ca4c 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeWithdrawServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeWithdrawServiceImpl.java @@ -19,10 +19,10 @@ import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.common.modules.pay.PayConsumeWithdraw; import com.suisung.mall.common.modules.pay.PayUserResource; import com.suisung.mall.common.pojo.vo.PayConsumeWithdrawOrderVo; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.excel.ExcelUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.mapper.PayConsumeWithdrawMapper; import com.suisung.mall.pay.service.*; import io.seata.spring.annotation.GlobalTransactional; diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserBankCardServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserBankCardServiceImpl.java index d2e7198a..ba3a66b9 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserBankCardServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserBankCardServiceImpl.java @@ -18,8 +18,8 @@ import com.suisung.mall.common.modules.pay.PayBaseBank; import com.suisung.mall.common.modules.pay.PayConsumeWithdraw; import com.suisung.mall.common.modules.pay.PayUserBankCard; import com.suisung.mall.common.modules.pay.PayUserResource; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.I18nUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.mapper.PayUserBankCardMapper; import com.suisung.mall.pay.service.*; import org.springframework.beans.factory.annotation.Autowired; diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserResourceServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserResourceServiceImpl.java index bf3634b4..9d7ebde1 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserResourceServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserResourceServiceImpl.java @@ -27,11 +27,11 @@ import com.suisung.mall.common.modules.pay.PayUserPay; import com.suisung.mall.common.modules.pay.PayUserResource; import com.suisung.mall.common.modules.user.ShopUserPointsHistory; import com.suisung.mall.common.service.MessageService; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.MybatisPlusQueryUtil; import com.suisung.mall.common.utils.excel.EasyExcelUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.excel.topic.UserPayTemp; import com.suisung.mall.pay.excel.topic.UserPayTempListener; import com.suisung.mall.pay.mapper.PayUserResourceMapper; diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/ShopBaseStateCodeServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/ShopBaseStateCodeServiceImpl.java index 5d8a842f..f8822a78 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/ShopBaseStateCodeServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/ShopBaseStateCodeServiceImpl.java @@ -3,8 +3,8 @@ package com.suisung.mall.pay.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.suisung.mall.common.modules.base.ShopBaseStateCode; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.I18nUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.pay.mapper.ShopBaseStateCodeMapper; import com.suisung.mall.pay.service.ShopBaseStateCodeService; import org.springframework.cache.annotation.Cacheable; @@ -69,7 +69,7 @@ public class ShopBaseStateCodeServiceImpl extends BaseServiceImpl + + + + diff --git a/mall-pay/src/main/resources/mapper/pay/LklLedgerMerReceiverBindMapper.xml b/mall-pay/src/main/resources/mapper/pay/LklLedgerMerReceiverBindMapper.xml new file mode 100644 index 00000000..48a2e523 --- /dev/null +++ b/mall-pay/src/main/resources/mapper/pay/LklLedgerMerReceiverBindMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mall-pay/src/main/resources/mapper/pay/LklLedgerReceiverMapper.xml b/mall-pay/src/main/resources/mapper/pay/LklLedgerReceiverMapper.xml new file mode 100644 index 00000000..6b372f64 --- /dev/null +++ b/mall-pay/src/main/resources/mapper/pay/LklLedgerReceiverMapper.xml @@ -0,0 +1,5 @@ + + + + +