4个文件已修改
1个文件已添加
122 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/MemberController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/security/GlobalRequestCachingFilter.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeDrawServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/MemberController.java
@@ -4,13 +4,20 @@
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.form.MemberBindStoreForm;
import cn.lili.modules.lmk.domain.form.MemberNickNameForm;
import cn.lili.modules.lmk.domain.form.VideoCommentForm;
import cn.lili.modules.member.service.MemberService;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
 * lmk-shop-java
@@ -26,9 +33,24 @@
public class MemberController {
    private final MemberService memberService;
    // Jackson 实例(用于手动解析 JSON)
    private final ObjectMapper objectMapper = new ObjectMapper();
    @PutMapping("/updateNickName")
    public Result updateMemberNickName(@RequestBody MemberNickNameForm form){
    public Result updateMemberNickName(HttpServletRequest request)throws IOException {
        BufferedReader reader = request.getReader();
        StringBuilder jsonStr = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            jsonStr.append(line);
        }
        String requestBody = jsonStr.toString();
        System.out.println("后端接收的 JSON 字符串:" + requestBody);
        MemberNickNameForm form = objectMapper.readValue(
                requestBody.getBytes(StandardCharsets.UTF_8), // 转为 UTF-8 字节数组
                MemberNickNameForm.class // 目标实体类
        );
        return memberService.updateMemberNickName(form);
    }
buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java
@@ -7,6 +7,7 @@
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.lmk.domain.form.MemberNickNameForm;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.MemberEditDTO;
import cn.lili.modules.member.entity.enums.QRCodeLoginSessionStatusEnum;
@@ -15,18 +16,28 @@
import cn.lili.modules.sms.SmsUtil;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -50,7 +61,7 @@
    @Autowired
    private VerificationService verificationService;
    private final ObjectMapper objectMapper = new ObjectMapper();
    @ApiOperation(value = "web-获取登录二维码")
    @PostMapping(value = "/pc_session", produces = "application/json;charset=UTF-8")
    public ResultMessage<Object> createPcSession() {
@@ -240,8 +251,40 @@
    @ApiOperation(value = "修改用户自己资料")
    @PutMapping("/editOwn")
    public ResultMessage<Member> editOwn(MemberEditDTO memberEditDTO) {
    public ResultMessage<Member> editOwn(HttpServletRequest request) throws IOException {
        BufferedReader reader = request.getReader();
        StringBuilder jsonStr = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            jsonStr.append(line);
        }
        String requestBody = jsonStr.toString();
        JSONObject jsonObj = JSONObject.parseObject(requestBody);
        JSONObject cleanObj = new JSONObject();
        Set<String> allowedFields = new HashSet<>();
        allowedFields.add("nickName");
        allowedFields.add("regionId");
        allowedFields.add("region");
        allowedFields.add("sex");
        allowedFields.add("birthday");
        allowedFields.add("address");
        allowedFields.add("face");
        for (String field : allowedFields) {
            Object value = jsonObj.get(field);
            if (value != null) {
                if (value instanceof com.alibaba.fastjson.JSONArray && ((com.alibaba.fastjson.JSONArray) value).isEmpty()) {
                    cleanObj.put(field, "");
                } else {
                    cleanObj.put(field, value);
                }
            }
        }
        String cleanJson = cleanObj.toString();
        MemberEditDTO memberEditDTO = objectMapper.readValue(
                cleanJson.getBytes(StandardCharsets.UTF_8), // 转为 UTF-8 字节数组
                MemberEditDTO.class // 目标实体类
        );
        return ResultUtil.data(memberService.editOwn(memberEditDTO));
    }
buyer-api/src/main/java/cn/lili/security/GlobalRequestCachingFilter.java
New file
@@ -0,0 +1,35 @@
package cn.lili.security;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * lmk-shop-java
 *
 * @author : zxl
 * @date : 2025-11-20 13:35
 **/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class GlobalRequestCachingFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        // 包装所有请求,支持重复读取请求体
        ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);
        // 统一设置UTF-8编码,避免表情乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=UTF-8");
        filterChain.doFilter(wrappedRequest, response);
    }
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeDrawServiceImpl.java
@@ -187,8 +187,11 @@
        int length = trimNick.length();
        // JDK 8 不支持 String.repeat,用 StringBuilder 拼接脱敏字符
        if (length <= 2) {
            return trimNick;
        if (length ==1){
            return trimNick + "*";
        }
        if (length == 2) {
            return trimNick.charAt(0) + "*";
        }
        StringBuilder mask = new StringBuilder();
        for (int i = 0; i < length - 2; i++) {
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java
@@ -20,6 +20,7 @@
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService;
import cn.lili.modules.payment.entity.RefundLog;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import cn.lili.modules.payment.service.RefundLogService;
import cn.lili.modules.store.entity.dos.Bill;
import cn.lili.modules.store.entity.dto.BillSearchParams;
@@ -183,6 +184,12 @@
                        -storeFlow.getDistributionRebate()
                )
        );
        //特殊处理0元购的退款账单
        if (PaymentMethodEnum.BANK_TRANSFER.name().equals(payStoreFlow.getPaymentName())&&"-1".equals(payStoreFlow.getTransactionId())) {
            if (Double.valueOf(0).equals(payStoreFlow.getBillPrice())) {
                storeFlow.setBillPrice(0D);
            }
        }
        //退款日志
        RefundLog refundLog = refundLogService.queryByAfterSaleSn(afterSale.getSn());
        //第三方流水单号