拉卡拉分账调试修正

This commit is contained in:
Jack 2025-02-10 00:36:15 +08:00
parent 0dd8de1de9
commit 82564922af
33 changed files with 621 additions and 103 deletions

View File

@ -20,7 +20,7 @@ import java.util.Date;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Accessors(chain = true) @Accessors(chain = true)
@TableName("shop_message_template") @TableName("lkl_ledger_member")
@ApiModel(value = "拉卡拉分账商户", description = "拉卡拉分账商户表") @ApiModel(value = "拉卡拉分账商户", description = "拉卡拉分账商户表")
public class LklLedgerMember implements Serializable { public class LklLedgerMember implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -20,7 +20,7 @@ import java.util.Date;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Accessors(chain = true) @Accessors(chain = true)
@TableName("shop_message_template") @TableName("lkl_ledger_mer_receiver_bind")
@ApiModel(value = "拉卡拉分账商户与接收方绑定关系", description = "拉卡拉分账商户与接收方绑定表") @ApiModel(value = "拉卡拉分账商户与接收方绑定关系", description = "拉卡拉分账商户与接收方绑定表")
public class LklLedgerMerReceiverBind implements Serializable { public class LklLedgerMerReceiverBind implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -20,7 +20,7 @@ import java.util.Date;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Accessors(chain = true) @Accessors(chain = true)
@TableName("shop_message_template") @TableName("lkl_ledger_receiver")
@ApiModel(value = "拉卡拉分账接收方", description = "拉卡拉分账接收方表") @ApiModel(value = "拉卡拉分账接收方", description = "拉卡拉分账接收方表")
public class LklLedgerReceiver implements Serializable { public class LklLedgerReceiver implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -30,6 +30,7 @@ public class LklLedgerReceiver implements Serializable {
private String org_code; private String org_code;
private String rec_org_code; private String rec_org_code;
private String rec_org_name; private String rec_org_name;
private String receiver_no;
private String receiver_name; private String receiver_name;
private String contact_mobile; private String contact_mobile;
private String license_no; private String license_no;
@ -46,9 +47,6 @@ public class LklLedgerReceiver implements Serializable {
private String acct_open_bank_name; private String acct_open_bank_name;
private String acct_clear_bank_code; private String acct_clear_bank_code;
private String attach_list; private String attach_list;
private String attach_type;
private String attach_name;
private String attach_store_path;
private String settle_type; private String settle_type;
private String version; private String version;
private Date created_at; private Date created_at;

View File

@ -1,11 +1,15 @@
package com.suisung.mall.common.utils; package com.suisung.mall.common.utils;
import cn.hutool.core.util.StrUtil; 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.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; 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<String, JsonElement> 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 驼峰命名的字符串 * @param camelCase 驼峰命名的字符串
* @return 下划线命名的字符串 * @return 下划线命名的字符串
*/ */
public static String camelToSnake(String camelCase) { private static String camelToSnake(String camelCase) {
// 处理输入为 null 或空字符串的情况
if (camelCase == null || camelCase.isEmpty()) {
return camelCase;
}
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (int i = 0; i < camelCase.length(); i++) { for (int i = 0; i < camelCase.length(); i++) {
char c = camelCase.charAt(i); char c = camelCase.charAt(i);
// 如果是大写字母且不是字符串的第一个字符则在前面添加下划线
if (Character.isUpperCase(c) && i > 0) { if (Character.isUpperCase(c) && i > 0) {
result.append("_"); result.append("_");
} }
// 将字符转换为小写并添加到结果中
result.append(Character.toLowerCase(c)); result.append(Character.toLowerCase(c));
} }
return result.toString(); return result.toString();
} }
/** /**
* 下划线命名转驼峰命名 * 将单个蛇形命名的字符串转换为驼峰命名
* * @param snakeCase 蛇形命名的字符串
* @param snakeCase 下划线命名的字符串
* @return 驼峰命名的字符串 * @return 驼峰命名的字符串
*/ */
public static String snakeToCamel(String snakeCase) { private static String snakeToCamel(String snakeCase) {
// 处理输入为 null 或空字符串的情况
if (snakeCase == null || snakeCase.isEmpty()) {
return snakeCase;
}
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
boolean capitalizeNext = false; boolean capitalizeNext = false;
for (char c : snakeCase.toCharArray()) { for (char c : snakeCase.toCharArray()) {
@ -396,7 +449,7 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils {
capitalizeNext = true; capitalizeNext = true;
} else { } else {
if (capitalizeNext) { if (capitalizeNext) {
// 将字符转换为大写并添加到结果中 // 将字符转换为大写
result.append(Character.toUpperCase(c)); result.append(Character.toUpperCase(c));
capitalizeNext = false; capitalizeNext = false;
} else { } else {
@ -407,6 +460,23 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils {
return result.toString(); 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);
}
/** /**
* 生成的随机数类型 * 生成的随机数类型

View File

@ -14,49 +14,55 @@ import com.suisung.mall.common.service.impl.BaseControllerImpl;
import com.suisung.mall.pay.service.LakalaPayService; import com.suisung.mall.pay.service.LakalaPayService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.io.IOException;
@Api(tags = "拉卡拉相关接口 - 前端控制器") @Api(tags = "拉卡拉相关接口 - 前端控制器")
@RestController @RestController
@RequestMapping("/mobile/pay/lakala") @RequestMapping("/mobile/pay/lakala")
public class LakalaController extends BaseControllerImpl { public class LakalaController extends BaseControllerImpl {
@Autowired @Resource
private LakalaPayService lakalaPayService; 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 = "商户分账业务开通申请") @ApiOperation(value = "商户分账业务开通申请", notes = "商户分账业务开通申请")
@RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST)
public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) { public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) {
return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); return lakalaPayService.applyLedgerMer(paramsJSON);
} }
@ApiOperation(value = "商户分账业务开通申请异步回调回调", notes = "商户分账业务开通申请异步回调回调") @ApiOperation(value = "商户分账业务开通申请异步回调回调", notes = "商户分账业务开通申请异步回调回调")
@RequestMapping(value = "/ledger/applyLedgerMerNotify", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyLedgerMerNotify", method = RequestMethod.POST)
public CommonResult ledgerApplyLedgerMerNotify(@RequestBody JSONObject paramsJSON) { public CommonResult ledgerApplyLedgerMerNotify(@RequestBody JSONObject paramsJSON) {
return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); return lakalaPayService.applyLedgerMer(paramsJSON);
} }
@ApiOperation(value = "分账接收方创建申请", notes = "分账接收方创建申请") @ApiOperation(value = "分账接收方创建申请", notes = "分账接收方创建申请")
@RequestMapping(value = "/ledger/applyLedgerReceiver", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyLedgerReceiver", method = RequestMethod.POST)
public CommonResult applyLedgerReceiver(@RequestBody JSONObject paramsJSON) { public CommonResult applyLedgerReceiver(@RequestBody JSONObject paramsJSON) {
return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); return lakalaPayService.applyLedgerMer(paramsJSON);
} }
@ApiOperation(value = "分账关系绑定申请", notes = "分账关系绑定申请") @ApiOperation(value = "分账关系绑定申请", notes = "分账关系绑定申请")
@RequestMapping(value = "/ledger/applyBind", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyBind", method = RequestMethod.POST)
public CommonResult applyBind(@RequestBody JSONObject paramsJSON) { public CommonResult applyBind(@RequestBody JSONObject paramsJSON) {
return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); return lakalaPayService.applyLedgerMer(paramsJSON);
} }
@ApiOperation(value = "分账关系绑定申请异步回调通知", notes = "分账关系绑定申请异步回调通知") @ApiOperation(value = "分账关系绑定申请异步回调通知", notes = "分账关系绑定申请异步回调通知")
@RequestMapping(value = "/ledger/applyBindNotify", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyBindNotify", method = RequestMethod.POST)
public CommonResult applyBindNotify(@RequestBody JSONObject paramsJSON) { public JSONObject applyBindNotify(@RequestBody JSONObject paramsJSON) {
return lakalaPayService.ledgerApplyLedgerMer(paramsJSON); return lakalaPayService.applyLedgerMerNotify(paramsJSON);
} }
} }

View File

@ -10,7 +10,6 @@ package com.suisung.mall.pay.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suisung.mall.common.modules.lakala.LklLedgerMember; import com.suisung.mall.common.modules.lakala.LklLedgerMember;
import com.suisung.mall.common.modules.pay.PayBaseRechargeLevel;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@ -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<LklLedgerMerReceiverBind> {
}

View File

@ -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<LklLedgerReceiver> {
}

View File

@ -92,5 +92,41 @@ public interface LakalaPayService {
* @param paramsJSON * @param paramsJSON
* @return * @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);
} }

View File

@ -12,4 +12,11 @@ import com.suisung.mall.common.modules.lakala.LklLedgerMember;
import com.suisung.mall.core.web.service.IBaseService; import com.suisung.mall.core.web.service.IBaseService;
public interface LklLedgerMemberService extends IBaseService<LklLedgerMember> { public interface LklLedgerMemberService extends IBaseService<LklLedgerMember> {
/**
* 根据银联商户号新增或修改记录
* @param record
* @return
*/
Boolean saveOrUpdateByMerCupNo(LklLedgerMember record);
} }

View File

@ -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<LklLedgerMerReceiverBind> {
/**
* 根据接收方编号新增或更新记录
* @param record
* @return
*/
Boolean saveOrUpdateByReceiverNo(LklLedgerMerReceiverBind record);
}

View File

@ -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<LklLedgerReceiver> {
/**
* 根据接收方编号新增或更新记录
* @param record
* @return
*/
Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record);
}

View File

@ -11,9 +11,9 @@ import com.suisung.mall.common.constant.RedisConstant;
import com.suisung.mall.common.feignService.AccountService; import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.common.modules.account.AccountBaseConfig; import com.suisung.mall.common.modules.account.AccountBaseConfig;
import com.suisung.mall.common.modules.account.AccountUserInfo; 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.RedisService;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl; 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.mapper.AccountBaseConfigMapper;
import com.suisung.mall.pay.service.AccountBaseConfigService; import com.suisung.mall.pay.service.AccountBaseConfigService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -42,16 +42,13 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class AccountBaseConfigServiceImpl extends BaseServiceImpl<AccountBaseConfigMapper, AccountBaseConfig> implements AccountBaseConfigService, CommandLineRunner { public class AccountBaseConfigServiceImpl extends BaseServiceImpl<AccountBaseConfigMapper, AccountBaseConfig> implements AccountBaseConfigService, CommandLineRunner {
public static Map<String, AccountBaseConfig> configMap;
public static Long version = 0L;
@Autowired @Autowired
private AccountService accountService; private AccountService accountService;
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
public static Map<String, AccountBaseConfig> configMap;
public static Long version = 0L;
/** /**
* 根据config_key 获取 config_value * 根据config_key 获取 config_value
* *
@ -239,6 +236,7 @@ public class AccountBaseConfigServiceImpl extends BaseServiceImpl<AccountBaseCon
/** /**
* 同步配置表缓存 * 同步配置表缓存
*
* @param loop * @param loop
*/ */
@Async @Async

View File

@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -55,11 +56,10 @@ public class AnalytiscTradeServiceImpl implements AnalytiscTradeService {
throw new ApiException(ResultCode.UNAUTHORIZED); throw new ApiException(ResultCode.UNAUTHORIZED);
} }
Integer siteId = user.getSiteid() ; Integer siteId = user.getSiteid();
Integer storeId =user.getStoreId() ; Integer storeId = user.getStoreId();
Integer chainId =user.getChainId() ; Integer chainId = user.getChainId();
Integer userId =user.getUserId() ; Integer userId = user.getUserId();
// 获取当日交易额 // 获取当日交易额
@ -82,7 +82,7 @@ public class AnalytiscTradeServiceImpl implements AnalytiscTradeService {
// 计算日环比 日环比 = (当日数据 - 前一日数据) / 前一日数据 * 100% // 计算日环比 日环比 = (当日数据 - 前一日数据) / 前一日数据 * 100%
BigDecimal daym2m = BigDecimal.ZERO; BigDecimal daym2m = BigDecimal.ZERO;
if (yestodayTradeAmount.getAmount().compareTo(BigDecimal.ZERO) != 0) { if (yestodayTradeAmount.getAmount().compareTo(BigDecimal.ZERO) != 0) {
daym2m = (todayTradeAmount.getAmount().subtract(yestodayTradeAmount.getAmount())).divide(yestodayTradeAmount.getAmount(), 2, BigDecimal.ROUND_HALF_UP); daym2m = (todayTradeAmount.getAmount().subtract(yestodayTradeAmount.getAmount())).divide(yestodayTradeAmount.getAmount(), 2, RoundingMode.HALF_UP);
//.multiply(new BigDecimal("100")); //.multiply(new BigDecimal("100"));
} else { } else {
@ -108,10 +108,10 @@ public class AnalytiscTradeServiceImpl implements AnalytiscTradeService {
throw new ApiException(ResultCode.UNAUTHORIZED); throw new ApiException(ResultCode.UNAUTHORIZED);
} }
Integer siteId = user.getSiteid() ; Integer siteId = user.getSiteid();
Integer storeId =user.getStoreId() ; Integer storeId = user.getStoreId();
Integer chainId =user.getChainId() ; Integer chainId = user.getChainId();
Integer userId =user.getUserId() ; Integer userId = user.getUserId();
return analytiscTradeDao.getPayTimeLine(input.getStime() == null ? null : new Date(input.getStime()), input.getEtime() == null ? null : new Date(input.getEtime()), siteId, storeId, userId); return analytiscTradeDao.getPayTimeLine(input.getStime() == null ? null : new Date(input.getStime()), input.getEtime() == null ? null : new Date(input.getEtime()), siteId, storeId, userId);
} }

View File

@ -23,11 +23,15 @@ import com.suisung.mall.common.api.CommonResult;
import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.feignService.ShopService; import com.suisung.mall.common.feignService.ShopService;
import com.suisung.mall.common.modules.lakala.LklLedgerMember; import com.suisung.mall.common.modules.lakala.LklLedgerMember;
import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind;
import com.suisung.mall.common.modules.lakala.LklLedgerReceiver;
import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.modules.store.ShopStoreBase;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.pay.service.LakalaPayService; import com.suisung.mall.pay.service.LakalaPayService;
import com.suisung.mall.pay.service.LklLedgerMemberService; import com.suisung.mall.pay.service.LklLedgerMemberService;
import com.suisung.mall.pay.service.LklLedgerMerReceiverBindService;
import com.suisung.mall.pay.service.LklLedgerReceiverService;
import com.suisung.mall.pay.utils.LakalaUtil; import com.suisung.mall.pay.utils.LakalaUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -38,6 +42,8 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Slf4j @Slf4j
@ -74,6 +80,12 @@ public class LakalaPayServiceImpl implements LakalaPayService {
@Autowired @Autowired
private LklLedgerMemberService lklLedgerMemberService; private LklLedgerMemberService lklLedgerMemberService;
@Autowired
private LklLedgerReceiverService lklLedgerReceiverService;
@Autowired
private LklLedgerMerReceiverBindService lklLedgerMerReceiverBindService;
/** /**
* 初始化 拉卡拉SDK * 初始化 拉卡拉SDK
* *
@ -363,8 +375,8 @@ public class LakalaPayServiceImpl implements LakalaPayService {
//2. 装配数据 //2. 装配数据
V2MmsOpenApiUploadFileRequest req = new V2MmsOpenApiUploadFileRequest(); V2MmsOpenApiUploadFileRequest req = new V2MmsOpenApiUploadFileRequest();
req.setVersion("1.0"); req.setVersion("1.0");
req.setOrderNo(orderNo);
req.setOrgCode(orgCode); req.setOrgCode(orgCode);
req.setOrderNo(orderNo);
req.setAttType(attType); req.setAttType(attType);
req.setAttExtName(attExtName); req.setAttExtName(attExtName);
req.setAttContext(attContext); req.setAttContext(attContext);
@ -374,7 +386,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000") || !lakalaRespJSON.getStr("cmdRetCode").equals("GLOBAL_SUCCESS")) { if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
} }
@ -386,30 +398,32 @@ public class LakalaPayServiceImpl implements LakalaPayService {
} }
@Override @Override
public CommonResult ledgerApplyLedgerMer(JSONObject paramsJSON) { public CommonResult applyLedgerMer(JSONObject paramsJSON) {
// 1. 配置初始化 // 1. 配置初始化
initLKLSDK(); initLKLSDK();
//2. 装配数据 //2. 装配数据
V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest(); V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest();
req.setVersion("2.0"); req.setVersion("2.0");
String orderNo = StringUtils.genLklOrderNo(8); String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数
req.setOrderNo(orderNo); req.setOrderNo(orderNo);
req.setOrgCode(orgCode); req.setOrgCode(orgCode);
req.setMerInnerNo(paramsJSON.getStr("merInnerNo")); req.setMerInnerNo(paramsJSON.getStr("merInnerNo"));
req.setMerCupNo(paramsJSON.getStr("merCupNo")); req.setMerCupNo(paramsJSON.getStr("merCupNo"));
req.setContactMobile(paramsJSON.getStr("contactMobile")); req.setContactMobile(paramsJSON.getStr("contactMobile"));
req.setSplitLowestRatio(new BigDecimal(paramsJSON.getStr("splitLowestRatio"))); req.setSplitLowestRatio(new BigDecimal(paramsJSON.getStr("splitLowestRatio")));
req.setSplitEntrustFileName(paramsJSON.getStr("splitEntrustFileName")); String fileName = paramsJSON.getStr("splitEntrustFileName");
req.setSplitEntrustFileName(fileName);
// 文件上传到拉卡拉服务器 // 文件上传到拉卡拉服务器
JSONObject fileUploadResp = uploadFile(orderNo, "SPLIT_ENTRUST_FILE", "png", paramsJSON.getStr("splitEntrustFile")); JSONObject fileUploadResp = uploadFile(orderNo, "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), paramsJSON.getStr("splitEntrustFile"));
if (fileUploadResp != null || StrUtil.isNotBlank(fileUploadResp.getStr("attFileId"))) { if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
req.setSplitEntrustFilePath(fileUploadResp.getStr("attFileId")); throw new ApiException(I18nUtil._("分账结算委托书上传失败!"));
} }
// req.setSplitEntrustFilePath("G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.png");
String splitEntrustFilePath = fileUploadResp.getStr("attFileId");
req.setSplitEntrustFilePath(splitEntrustFilePath);
// req.setSplitEntrustFilePath("G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf");
String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerNotify"; String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerNotify";
req.setRetUrl(retUrl); req.setRetUrl(retUrl);
@ -418,23 +432,27 @@ public class LakalaPayServiceImpl implements LakalaPayService {
paramsJSON.set("version", "2.0"); paramsJSON.set("version", "2.0");
paramsJSON.set("ret_url", retUrl); paramsJSON.set("ret_url", retUrl);
paramsJSON.set("org_code", orgCode); paramsJSON.set("org_code", orgCode);
paramsJSON.set("split_entrust_file_path", splitEntrustFilePath);
try { try {
//3. 发送请求 //3. 发送请求
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); 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.get("applyId")); paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg"));
paramsJSON.set("audit_status_text", paramsJSON.get("remark"));
// 新增数据 // 新增数据
// JSON 对象的键名转换为下划线命名 // JSON 对象的键名转换为下划线命名
LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.camelToSnake(paramsJSON.toString()), LklLedgerMember.class); LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class);
lklLedgerMemberService.edit(lklLedgerMember); lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember);
return CommonResult.success(null, "提交成功,待审核中!"); return CommonResult.success(null, "提交成功,待审核中!");
} catch (SDKException e) { } catch (SDKException e) {
@ -443,5 +461,182 @@ public class LakalaPayServiceImpl implements LakalaPayService {
} }
} }
/**
* 商户分账业务开通申请回调
* 参考https://o.lakala.com/#/home/document/detail?id=379
*
* @param paramsJSON
* @return
*/
@Override
public JSONObject applyLedgerMerNotify(JSONObject paramsJSON) {
JSONObject respData = new JSONObject();
respData.put("retCode", "000000");
respData.put("retMsg", "操作成功!");
respData.put("respData", null);
return respData;
}
/**
* 分账接收方创建申请
* 参考https://o.lakala.com/#/home/document/detail?id=380
*
* @param paramsJSON
* @return
*/
@Override
public CommonResult applyLedgerReceiver(JSONObject paramsJSON) {
// 1. 配置初始化
initLKLSDK();
//2. 装配数据
V2MmsOpenApiLedgerApplyLedgerReceiverRequest req = new V2MmsOpenApiLedgerApplyLedgerReceiverRequest();
req.setVersion("2.0");
String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数
req.setOrderNo(orderNo);
req.setOrgCode(orgCode);
req.setContactMobile(paramsJSON.getStr("contactMobile"));
req.setReceiverName(paramsJSON.getStr("receiverName"));
req.setAcctCertificateNo(paramsJSON.getStr("acctCertificateNo"));
req.setAcctOpenBankCode(paramsJSON.getStr("acctOpenBankCode"));
req.setAcctOpenBankName(paramsJSON.getStr("acctOpenBankName"));
req.setAcctName(paramsJSON.getStr("acctName"));
req.setAcctNo(paramsJSON.getStr("acctNo"));
req.setAcctTypeCode(paramsJSON.getStr("acctTypeCode"));
req.setAcctCertificateType(paramsJSON.getStr("acctCertificateTyp"));
List<V2MmsOpenApiLedgerApplyLedgerReceiverRequest.AttachInfo> 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;
}
} }

View File

@ -8,14 +8,39 @@
package com.suisung.mall.pay.service.impl; 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.lakala.LklLedgerMember;
import com.suisung.mall.common.modules.pay.PayConsumeTrade;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.LklLedgerMemberMapper; import com.suisung.mall.pay.mapper.LklLedgerMemberMapper;
import com.suisung.mall.pay.mapper.PayConsumeTradeMapper;
import com.suisung.mall.pay.service.LklLedgerMemberService; import com.suisung.mall.pay.service.LklLedgerMemberService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberMapper, LklLedgerMember> implements LklLedgerMemberService { public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberMapper, LklLedgerMember> implements LklLedgerMemberService {
/**
* 根据银联商户号新增或修改记录
*
* @param record
* @return
*/
@Override
public Boolean saveOrUpdateByMerCupNo(LklLedgerMember record) {
if (record == null || StrUtil.isBlank(record.getMer_cup_no())) {
return false;
}
QueryWrapper<LklLedgerMember> 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);
}
} }

View File

@ -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<LklLedgerMerReceiverBindMapper, LklLedgerMerReceiverBind> implements LklLedgerMerReceiverBindService {
/**
* 根据接收方编号新增或更新记录
*
* @param record
* @return
*/
@Override
public Boolean saveOrUpdateByReceiverNo(LklLedgerMerReceiverBind record) {
if (record == null || StrUtil.isBlank(record.getReceiver_no())) {
return false;
}
QueryWrapper<LklLedgerMerReceiverBind> 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);
}
}

View File

@ -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<LklLedgerReceiverMapper, LklLedgerReceiver> implements LklLedgerReceiverService {
/**
* 根据接收方编号新增或更新记录
*
* @param record
* @return
*/
@Override
public Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record) {
if (record == null || StrUtil.isBlank(record.getReceiver_no())) {
return false;
}
QueryWrapper<LklLedgerReceiver> 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);
}
}

View File

@ -14,9 +14,9 @@ import com.suisung.mall.common.exception.ApiUserException;
import com.suisung.mall.common.feignService.ShopService; import com.suisung.mall.common.feignService.ShopService;
import com.suisung.mall.common.modules.pay.PayBaseRechargeLevel; import com.suisung.mall.common.modules.pay.PayBaseRechargeLevel;
import com.suisung.mall.common.modules.pay.PayConsumeTrade; 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.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; 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.mapper.PayBaseRechargeLevelMapper;
import com.suisung.mall.pay.service.PayBaseRechargeLevelService; import com.suisung.mall.pay.service.PayBaseRechargeLevelService;
import com.suisung.mall.pay.service.PayConsumeTradeService; import com.suisung.mall.pay.service.PayConsumeTradeService;
@ -64,8 +64,7 @@ public class PayBaseRechargeLevelServiceImpl extends BaseServiceImpl<PayBaseRech
String order_id = null; //将生成去支付的订单编号 String order_id = null; //将生成去支付的订单编号
if (CheckUtil.isNotEmpty(recharge_level_id)) if (CheckUtil.isNotEmpty(recharge_level_id)) {
{
PayBaseRechargeLevel recharge_level_row = get(recharge_level_id); PayBaseRechargeLevel recharge_level_row = get(recharge_level_id);
if (recharge_level_row == null || (recharge_level_row != null && recharge_level_row.getRecharge_level_value() <= 0)) { if (recharge_level_row == null || (recharge_level_row != null && recharge_level_row.getRecharge_level_value() <= 0)) {

View File

@ -13,10 +13,10 @@ import com.suisung.mall.common.exception.ApiUserException;
import com.suisung.mall.common.modules.pay.PayCardHistory; import com.suisung.mall.common.modules.pay.PayCardHistory;
import com.suisung.mall.common.modules.pay.PayCardType; import com.suisung.mall.common.modules.pay.PayCardType;
import com.suisung.mall.common.service.MessageService; 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.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.excel.EasyExcelUtil; import com.suisung.mall.common.utils.excel.EasyExcelUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.excel.topic.PayCardHistoryTemp; import com.suisung.mall.pay.excel.topic.PayCardHistoryTemp;
import com.suisung.mall.pay.excel.topic.PayCardHistoryTempListener; import com.suisung.mall.pay.excel.topic.PayCardHistoryTempListener;
import com.suisung.mall.pay.mapper.PayCardHistoryMapper; import com.suisung.mall.pay.mapper.PayCardHistoryMapper;

View File

@ -14,9 +14,9 @@ import com.suisung.mall.common.modules.pay.PayCardInfo;
import com.suisung.mall.common.modules.pay.PayCardMedia; import com.suisung.mall.common.modules.pay.PayCardMedia;
import com.suisung.mall.common.modules.pay.PayCardType; import com.suisung.mall.common.modules.pay.PayCardType;
import com.suisung.mall.common.modules.product.ShopProductIndex; import com.suisung.mall.common.modules.product.ShopProductIndex;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.constbank.RSAUtil; import com.suisung.mall.common.utils.constbank.RSAUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayCardInfoMapper; import com.suisung.mall.pay.mapper.PayCardInfoMapper;
import com.suisung.mall.pay.service.PayCardHistoryService; import com.suisung.mall.pay.service.PayCardHistoryService;
import com.suisung.mall.pay.service.PayCardInfoService; import com.suisung.mall.pay.service.PayCardInfoService;

View File

@ -14,8 +14,8 @@ import com.suisung.mall.common.domain.UserDto;
import com.suisung.mall.common.feignService.ShopService; import com.suisung.mall.common.feignService.ShopService;
import com.suisung.mall.common.modules.pay.PayCardType; import com.suisung.mall.common.modules.pay.PayCardType;
import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.modules.store.ShopStoreBase;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayCardTypeMapper; import com.suisung.mall.pay.mapper.PayCardTypeMapper;
import com.suisung.mall.pay.service.PayCardHistoryService; import com.suisung.mall.pay.service.PayCardHistoryService;
import com.suisung.mall.pay.service.PayCardTypeService; import com.suisung.mall.pay.service.PayCardTypeService;

View File

@ -23,10 +23,10 @@ import com.suisung.mall.common.modules.pay.PayConsumeRecord;
import com.suisung.mall.common.modules.pay.PayConsumeTrade; import com.suisung.mall.common.modules.pay.PayConsumeTrade;
import com.suisung.mall.common.modules.pay.PayUserResource; import com.suisung.mall.common.modules.pay.PayUserResource;
import com.suisung.mall.common.service.MessageService; import com.suisung.mall.common.service.MessageService;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.CSVUtils; import com.suisung.mall.common.utils.CSVUtils;
import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayConsumeDepositMapper; import com.suisung.mall.pay.mapper.PayConsumeDepositMapper;
import com.suisung.mall.pay.service.*; import com.suisung.mall.pay.service.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -113,11 +113,11 @@ public class PayConsumeDepositServiceImpl extends BaseServiceImpl<PayConsumeDepo
// 增加付款时间范围筛选 // 增加付款时间范围筛选
String order_date_start = getParameter("order_date_start"); String order_date_start = getParameter("order_date_start");
if (CheckUtil.isNotEmpty(order_date_start)) { if (CheckUtil.isNotEmpty(order_date_start)) {
wrapper.gt("deposit_gmt_payment",order_date_start); wrapper.gt("deposit_gmt_payment", order_date_start);
} }
String order_date_end = getParameter("order_date_end"); String order_date_end = getParameter("order_date_end");
if (CheckUtil.isNotEmpty(order_date_end)) { if (CheckUtil.isNotEmpty(order_date_end)) {
wrapper.lt("deposit_gmt_payment",order_date_end); wrapper.lt("deposit_gmt_payment", order_date_end);
} }
Map data = payConsumeDepositService.getLists(wrapper, pageNum, pageSize); Map data = payConsumeDepositService.getLists(wrapper, pageNum, pageSize);
@ -600,12 +600,12 @@ public class PayConsumeDepositServiceImpl extends BaseServiceImpl<PayConsumeDepo
I18nUtil._("支付渠道名称"), I18nUtil._("支付方式"), I18nUtil._("交易状态"), I18nUtil._("支付渠道名称"), I18nUtil._("支付方式"), I18nUtil._("交易状态"),
I18nUtil._("付款时间"), I18nUtil._("卖家户号"), I18nUtil._("卖家支付账号"), I18nUtil._("付款时间"), I18nUtil._("卖家户号"), I18nUtil._("卖家支付账号"),
I18nUtil._("买家支付用户号"), I18nUtil._("买家支付宝账号"), I18nUtil._("买家编号"), I18nUtil._("买家支付用户号"), I18nUtil._("买家支付宝账号"), I18nUtil._("买家编号"),
I18nUtil._("买家昵称"), I18nUtil._("交易金额"),I18nUtil._("收款确认"), I18nUtil._("买家昵称"), I18nUtil._("交易金额"), I18nUtil._("收款确认"),
I18nUtil._("支付状态")}; I18nUtil._("支付状态")};
UserDto currentUser = getCurrentUser(); UserDto currentUser = getCurrentUser();
QueryWrapper<PayConsumeDeposit> queryWrapper = new QueryWrapper<>(); QueryWrapper<PayConsumeDeposit> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("store_id",currentUser.getStore_id()); queryWrapper.eq("store_id", currentUser.getStore_id());
if (CollectionUtils.isNotEmpty(order_ids)) { if (CollectionUtils.isNotEmpty(order_ids)) {
queryWrapper.in("order_id", order_ids); queryWrapper.in("order_id", order_ids);
@ -618,7 +618,7 @@ public class PayConsumeDepositServiceImpl extends BaseServiceImpl<PayConsumeDepo
// 订单编号, 交易号, 支付渠道 // 订单编号, 交易号, 支付渠道
String order_id = Convert.toStr(item.get("order_id"), ""); String order_id = Convert.toStr(item.get("order_id"), "");
String deposit_trade_no = Convert.toStr(item.get("deposit_trade_no"), "") + "\t"; String deposit_trade_no = Convert.toStr(item.get("deposit_trade_no"), "") + "\t";
String payment_channel_id = Convert.toStr(item.get("payment_channel_id"),""); String payment_channel_id = Convert.toStr(item.get("payment_channel_id"), "");
// 支付渠道名称, 支付方式, 交易状态 // 支付渠道名称, 支付方式, 交易状态
String payment_channel_name = Convert.toStr(item.get("payment_channel_name"), ""); String payment_channel_name = Convert.toStr(item.get("payment_channel_name"), "");
String deposit_payment_type = Convert.toStr(item.get("deposit_payment_type"), ""); String deposit_payment_type = Convert.toStr(item.get("deposit_payment_type"), "");

View File

@ -17,9 +17,9 @@ import com.suisung.mall.common.feignService.ShopService;
import com.suisung.mall.common.modules.pay.PayConsumeRecord; import com.suisung.mall.common.modules.pay.PayConsumeRecord;
import com.suisung.mall.common.modules.pay.PayConsumeTrade; import com.suisung.mall.common.modules.pay.PayConsumeTrade;
import com.suisung.mall.common.modules.pay.PayPaymentChannel; import com.suisung.mall.common.modules.pay.PayPaymentChannel;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.MybatisPlusQueryUtil; import com.suisung.mall.common.utils.MybatisPlusQueryUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayConsumeRecordMapper; import com.suisung.mall.pay.mapper.PayConsumeRecordMapper;
import com.suisung.mall.pay.service.PayConsumeRecordService; import com.suisung.mall.pay.service.PayConsumeRecordService;
import com.suisung.mall.pay.service.PayConsumeTradeService; import com.suisung.mall.pay.service.PayConsumeTradeService;

View File

@ -2,8 +2,8 @@ package com.suisung.mall.pay.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.suisung.mall.common.modules.pay.PayConsumeTradeCombine; import com.suisung.mall.common.modules.pay.PayConsumeTradeCombine;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayConsumeTradeCombineMapper; import com.suisung.mall.pay.mapper.PayConsumeTradeCombineMapper;
import com.suisung.mall.pay.service.PayConsumeTradeCombineService; import com.suisung.mall.pay.service.PayConsumeTradeCombineService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -18,12 +18,11 @@ import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.common.feignService.ShopService; import com.suisung.mall.common.feignService.ShopService;
import com.suisung.mall.common.modules.order.*; import com.suisung.mall.common.modules.order.*;
import com.suisung.mall.common.modules.pay.*; import com.suisung.mall.common.modules.pay.*;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayConsumeTradeMapper; import com.suisung.mall.pay.mapper.PayConsumeTradeMapper;
import com.suisung.mall.pay.service.*; import com.suisung.mall.pay.service.*;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -173,7 +172,7 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl<PayConsumeTradeM
* @param points 积分支付,此处为积分转换的支付额度 * @param points 积分支付,此处为积分转换的支付额度
* @param credit 信用支付 * @param credit 信用支付
* @param redpack 红包支付 * @param redpack 红包支付
* todo 没有增量更新数据 * todo 没有增量更新数据
*/ */
// todo 优化逻辑 // todo 优化逻辑
@Override @Override
@ -943,7 +942,7 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl<PayConsumeTradeM
DateTime dateTime = DateUtil.offsetDay(new Date(), -day_flag); DateTime dateTime = DateUtil.offsetDay(new Date(), -day_flag);
Integer trade_day = DateUtil.dayOfMonth(dateTime); Integer trade_day = DateUtil.dayOfMonth(dateTime);
Integer trade_month = DateUtil.month(dateTime) + 1; Integer trade_month = DateUtil.month(dateTime) + 1;
Integer trade_year = DateUtil.year(dateTime); Integer trade_year = DateUtil.year(dateTime);
queryWrapper.eq("trade_year", trade_year) queryWrapper.eq("trade_year", trade_year)
.eq("trade_day", trade_day) .eq("trade_day", trade_day)
.eq("trade_month", trade_month); .eq("trade_month", trade_month);
@ -1004,7 +1003,7 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl<PayConsumeTradeM
/** /**
* 执行退款操作 * 执行退款操作
* *
* @param return_rows 订单信息 * @param return_rows 订单信息
*/ */
@Override @Override
public boolean doRefund(List<ShopOrderReturn> return_rows) { public boolean doRefund(List<ShopOrderReturn> return_rows) {
@ -1361,9 +1360,10 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl<PayConsumeTradeM
/** /**
* 更改交易订单的订单状态和付款状态 * 更改交易订单的订单状态和付款状态
*
* @param orderId * @param orderId
* @param orderStateId 空值或0将不更新 * @param orderStateId 空值或0将不更新
* @param tradeIsPaid 空值或0将不更新 * @param tradeIsPaid 空值或0将不更新
* @return * @return
*/ */
@Override @Override
@ -1375,22 +1375,22 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl<PayConsumeTradeM
UpdateWrapper<PayConsumeTrade> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<PayConsumeTrade> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("order_id", orderId); updateWrapper.eq("order_id", orderId);
int cnt =0; int cnt = 0;
if(orderStateId != null && orderStateId > 0){ if (orderStateId != null && orderStateId > 0) {
updateWrapper.set("order_state_id", orderStateId); updateWrapper.set("order_state_id", orderStateId);
cnt++; cnt++;
} }
if(tradeIsPaid != null && tradeIsPaid > 0){ if (tradeIsPaid != null && tradeIsPaid > 0) {
updateWrapper.set("trade_is_paid", tradeIsPaid); updateWrapper.set("trade_is_paid", tradeIsPaid);
cnt++; cnt++;
} }
if(cnt <= 0){ if (cnt <= 0) {
return false; return false;
} }
return update(updateWrapper); return update(updateWrapper);
} }
} }

View File

@ -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.PayConsumeWithdraw;
import com.suisung.mall.common.modules.pay.PayUserResource; import com.suisung.mall.common.modules.pay.PayUserResource;
import com.suisung.mall.common.pojo.vo.PayConsumeWithdrawOrderVo; 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.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.excel.ExcelUtil; 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.mapper.PayConsumeWithdrawMapper;
import com.suisung.mall.pay.service.*; import com.suisung.mall.pay.service.*;
import io.seata.spring.annotation.GlobalTransactional; import io.seata.spring.annotation.GlobalTransactional;

View File

@ -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.PayConsumeWithdraw;
import com.suisung.mall.common.modules.pay.PayUserBankCard; import com.suisung.mall.common.modules.pay.PayUserBankCard;
import com.suisung.mall.common.modules.pay.PayUserResource; 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.common.utils.I18nUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.PayUserBankCardMapper; import com.suisung.mall.pay.mapper.PayUserBankCardMapper;
import com.suisung.mall.pay.service.*; import com.suisung.mall.pay.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -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.pay.PayUserResource;
import com.suisung.mall.common.modules.user.ShopUserPointsHistory; import com.suisung.mall.common.modules.user.ShopUserPointsHistory;
import com.suisung.mall.common.service.MessageService; 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.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.MybatisPlusQueryUtil; import com.suisung.mall.common.utils.MybatisPlusQueryUtil;
import com.suisung.mall.common.utils.excel.EasyExcelUtil; 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.UserPayTemp;
import com.suisung.mall.pay.excel.topic.UserPayTempListener; import com.suisung.mall.pay.excel.topic.UserPayTempListener;
import com.suisung.mall.pay.mapper.PayUserResourceMapper; import com.suisung.mall.pay.mapper.PayUserResourceMapper;

View File

@ -3,8 +3,8 @@ package com.suisung.mall.pay.service.impl;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.suisung.mall.common.modules.base.ShopBaseStateCode; 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.common.utils.I18nUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.mapper.ShopBaseStateCodeMapper; import com.suisung.mall.pay.mapper.ShopBaseStateCodeMapper;
import com.suisung.mall.pay.service.ShopBaseStateCodeService; import com.suisung.mall.pay.service.ShopBaseStateCodeService;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -69,7 +69,7 @@ public class ShopBaseStateCodeServiceImpl extends BaseServiceImpl<ShopBaseStateC
/** /**
* @param code * @param code
* @param type 默认值 "state_code_code" * @param type 默认值 "state_code_code"
* todo 加缓存 * todo 加缓存
*/ */
@Override @Override
public String getCode(Integer code, String type) { public String getCode(Integer code, String type) {

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.suisung.mall.pay.mapper.LklLedgerMemberMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.suisung.mall.pay.mapper.LklLedgerMerReceiverBindMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.suisung.mall.pay.mapper.LklLedgerReceiverMapper">
</mapper>