记得上下班打卡 | git大法好,push需谨慎

Commit 4329239a authored by wangyifan's avatar wangyifan

设置支付商品名称

parent 026bd85f
......@@ -7,14 +7,12 @@ import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import com.liquidnet.service.dragon.dto.DragonPayOrderQueryRespDto;
......@@ -39,8 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
......@@ -585,9 +581,13 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
if (preParam.getDeviceFrom().equals("micropay")) {
dragonPayBaseReqDto.setAuthCode(preParam.getAuthCode());
}
String name = preParam.getStoreName();
if (StringUtil.isNotNull(preParam.getStoreName()) && preParam.getStoreName().length() >= 32) {
name = name.substring(0, 32);
// String name = preParam.getStoreName();
// if (StringUtil.isNotNull(preParam.getStoreName()) && preParam.getStoreName().length() >= 32) {
// name = name.substring(0, 32);
// }
String name = PaySubjectUtils.cleanSubject(PaySubjectUtils.formatSpuNameNumByGoblinOrderSqlParamList(sqlParams));
if (name.isEmpty()) {
name = preParam.getStoreName();
}
dragonPayBaseReqDto.setName(name);
dragonPayBaseReqDto.setDetail("正在现场");
......@@ -851,9 +851,11 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
}
BigDecimal price = BigDecimal.ZERO;
String[] orderIds = redisUtils.getMasterCode(storeOrderVo.getMasterOrderCode());
List<String> orderSkuIdList = new ArrayList<>();
for (String orderId : orderIds) {
GoblinStoreOrderVo orderVo = redisUtils.getGoblinOrder(orderId);
price = price.add(orderVo.getPriceActual());
orderSkuIdList.addAll(orderVo.getOrderSkuVoIds());
}
GoblinPayInnerResultVo payInnerResultVo = GoblinPayInnerResultVo.getNew();
// if (!storeOrderVo.getPayType().equals("FREE") && storeOrderVo.getPayType().equals(param.getPayType()) && storeOrderVo.getDeviceFrom().equals(param.getDeviceFrom())) {
......@@ -885,10 +887,20 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
}
dragonPayBaseReqDto.setType("PRODUCT");
dragonPayBaseReqDto.setPrice(price);
String name = storeOrderVo.getStoreName();
if (StringUtil.isNotNull(storeOrderVo.getStoreName()) && storeOrderVo.getStoreName().length() >= 32) {
name = name.substring(0, 32);
// String name = storeOrderVo.getStoreName();
// if (StringUtil.isNotNull(storeOrderVo.getStoreName()) && storeOrderVo.getStoreName().length() >= 32) {
// name = name.substring(0, 32);
// }
List<GoblinOrderSkuVo> goblinOrderSkuVos = new ArrayList<>();
for (String orderSkuId : orderSkuIdList) {
GoblinOrderSkuVo goblinOrderSkuVo = redisUtils.getGoblinOrderSkuVo(orderSkuId);
goblinOrderSkuVos.add(goblinOrderSkuVo);
}
String name = PaySubjectUtils.cleanSubject(PaySubjectUtils.formatSpuNameNumSummaryFromSkuVos(goblinOrderSkuVos));
if (name.isEmpty()) {
name = storeOrderVo.getStoreName();
}
dragonPayBaseReqDto.setName(name);
dragonPayBaseReqDto.setDetail("正在现场");
dragonPayBaseReqDto.setOrderCode(storeOrderVo.getMasterOrderCode());
......
......@@ -735,9 +735,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
if (orderTickets.getPriceActual().compareTo(BigDecimal.valueOf(0)) > 0) {
String name = dataUtils.getTicketPayTxt(ticketData.getTicketsId());
if (name.equals("")) {
if (name.isEmpty()) {
name = PaySubjectUtils.cleanSubject(performanceData.getTitle());
if (name.isEmpty()) {
name = "正在现场";
}
}
// // 调用支付
// if (payOrderParam.getPayType().equalsIgnoreCase(DragonConstant.PayChannelEnum.WEPAY.getCode())) {
// if (payOrderParam.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.JS.getCode()) || payOrderParam.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.APPLET.getCode())) {
......@@ -865,9 +868,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
return ResponseDto.failure(ErrorMapping.get("20004"));
}
String name = dataUtils.getTicketPayTxt(orderTicketData.getTicketId());
if (name.equals("")) {
if (name.isEmpty()) {
name = PaySubjectUtils.cleanSubject(orderTicketData.getPerformanceTitle());
if (name.isEmpty()) {
name = "正在现场";
}
}
// if (payAgainParam.getPayType().equalsIgnoreCase(DragonConstant.PayChannelEnum.WEPAY.getCode())) {
// if (payAgainParam.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.JS.getCode()) || payAgainParam.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.APPLET.getCode())) {
// if (StringUtil.isEmpty(payAgainParam.getOpenId())) {
......
package com.liquidnet.service.order.utils;
import com.liquidnet.service.goblin.dto.vo.GoblinOrderSkuVo;
import com.liquidnet.service.goblin.entity.GoblinOrderSku;
import com.liquidnet.service.goblin.param.GoblinOrderSqlParam;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Slf4j
public class PaySubjectUtils {
/**
* 清理 subject,只保留中文、英文、数字和空格,其他字符替换为 -
* @param subject 原始商品名称
* @return 清理后的 subject
*/
public static String cleanSubject(String subject) {
if (subject == null || subject.trim().isEmpty()) {
return "";
}
try {
subject = subject.trim();
// 长度限制(支付宝限制256字符)
if (subject.length() > 100) {
subject = subject.substring(0, 100);
}
// 正则表达式:匹配非中文、非英文、非数字、非空格的字符
// 中文范围:\u4e00-\u9fa5
// 英文范围:a-zA-Z
// 数字范围:0-9
// 空格:保留
Pattern pattern = Pattern.compile("[^\\u4e00-\\u9fa5a-zA-Z0-9]");
// 替换所有不符合的字符为 -
String cleaned = pattern.matcher(subject).replaceAll("-");
// 处理多个连续的 - 替换为单个 -
cleaned = cleaned.replaceAll("-+", "-");
// 去除首尾的 -(保留空格)
cleaned = cleaned.replaceAll("^-|-$", "");
return "正在现场-" + cleaned;
}catch (Exception e){
log.error("error", e);
}
return "";
}
/**
* 将订单 SKU 列表汇总并格式化为 "正在现场-spuName-num,spuName-num..." 的字符串。
* 相同 spuName 的数量会自动累加。
*
* @param sqlParams 订单参数列表,可能为 null 或包含 null 元素
* @return 格式化后的字符串,若无有效 SKU 则返回 "正在现场-"
*/
public static String formatSpuNameNumByGoblinOrderSqlParamList(List<GoblinOrderSqlParam> sqlParams) {
if (sqlParams == null || sqlParams.isEmpty()) {
return "";
}
try {
// 聚合 spuName -> totalNum(安全处理 null)
Map<String, Integer> aggregated = sqlParams.stream()
.filter(Objects::nonNull)
.map(GoblinOrderSqlParam::getOrderSkuList)
.filter(Objects::nonNull)
.flatMap(List::stream)
.filter(Objects::nonNull)
.filter(sku -> sku.getSpuName() != null && !sku.getSpuName().trim().isEmpty())
.collect(Collectors.groupingBy(
GoblinOrderSku::getSpuName,
Collectors.summingInt(sku -> sku.getNum() == null ? 0 : sku.getNum())
));
// 按 spuName 排序(可选,使输出更稳定)
return aggregated.entrySet().stream()
.sorted(Map.Entry.comparingByKey()) // 可选:按商品名排序
.map(entry -> entry.getKey() + "-" + entry.getValue())
.collect(Collectors.joining(","));
}catch (Exception e) {
log.error("error", e);
}
return "";
}
public static String formatSpuNameNumSummaryFromSkuVos(List<GoblinOrderSkuVo> skuVos) {
if (skuVos == null || skuVos.isEmpty()) {
return "";
}
Map<String, Integer> aggregated = skuVos.stream()
.filter(Objects::nonNull)
.filter(vo -> vo.getSpuName() != null && !vo.getSpuName().trim().isEmpty())
.collect(Collectors.groupingBy(
GoblinOrderSkuVo::getSpuName,
Collectors.summingInt(vo -> vo.getNum() == null ? 0 : vo.getNum())
));
String detailPart = aggregated.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(e -> e.getKey() + "-" + e.getValue())
.collect(Collectors.joining(","));
return detailPart;
}
public static void main(String[] args) {
String text = "「发呆的下午」| 北京的第一次“发呆冲击” 鸟撞x虎啸春x大叫控";
String text2 = "大波浪乐队 2021全新专辑《新逻辑 不止一面》全国巡演郑州";
String text3 = "Matt吕彦良2025-Fresh-ME-新鲜之旅巡演-Refresh-with-Matt-Lv-长沙站Matt吕彦良2025-Fresh-ME-新鲜之旅巡演-Refr鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅鲜之旅";
System.out.println(cleanSubject(text));
System.out.println(cleanSubject(text2));
System.out.println(cleanSubject(text3));
}
}
......@@ -20,8 +20,8 @@ liquidnet:
# username: admin
# password: admin
config:
# location: /Users/jiangxiulong/IdeaProjects/liquidnet-bus-v1/liquidnet-bus-config/liquidnet-config
location: /app/support-config
# location: 'D:/Work/ModernSky/projects/zhengzai/config/liquidnet-config'
location: 'D:/Work/ModernSky/projects/zhengzai/liquidnet-bus-v1/liquidnet-bus-config/liquidnet-config'
# end-dev-这里是配置信息基本值
spring:
......
......@@ -13,7 +13,7 @@ spring:
eureka:
instance:
hostname: 172.17.192.42
hostname: localhost
preferIpAddress: true
health-check-url: http://localhost:${server.port}${server.servlet.context-path}/actuator/health
status-page-url: http://localhost:${server.port}${server.servlet.context-path}/actuator/info
......
......@@ -2,4 +2,4 @@ spring:
application:
name: liquidnet-support-eureka
profiles:
active: test
\ No newline at end of file
active: dev
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment