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()); //第三方流水单号