Commit bbee720710fbb79e056ba97336fb36414cefd0f0

Authored by YunaiV
1 parent 1b87b8a4

📖 CRM:code review 拼团记录的实现

Showing 11 changed files with 79 additions and 17 deletions
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/history/ProductBrowseHistoryService.java
@@ -19,10 +19,9 @@ public interface ProductBrowseHistoryService { @@ -19,10 +19,9 @@ public interface ProductBrowseHistoryService {
19 * 19 *
20 * @param userId 用户编号 20 * @param userId 用户编号
21 * @param spuId SPU 编号 21 * @param spuId SPU 编号
22 - * @return 编号  
23 */ 22 */
24 @Async 23 @Async
25 - Long createBrowseHistory(Long userId, Long spuId); 24 + void createBrowseHistory(Long userId, Long spuId);
26 25
27 /** 26 /**
28 * 隐藏用户商品浏览记录 27 * 隐藏用户商品浏览记录
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/history/ProductBrowseHistoryServiceImpl.java
@@ -26,10 +26,10 @@ public class ProductBrowseHistoryServiceImpl implements ProductBrowseHistoryServ @@ -26,10 +26,10 @@ public class ProductBrowseHistoryServiceImpl implements ProductBrowseHistoryServ
26 private ProductBrowseHistoryMapper browseHistoryMapper; 26 private ProductBrowseHistoryMapper browseHistoryMapper;
27 27
28 @Override 28 @Override
29 - public Long createBrowseHistory(Long userId, Long spuId) { 29 + public void createBrowseHistory(Long userId, Long spuId) {
30 // 用户未登录时不记录 30 // 用户未登录时不记录
31 if (userId == null) { 31 if (userId == null) {
32 - return null; 32 + return;
33 } 33 }
34 34
35 // 情况一:同一个商品,只保留最新的一条记录 35 // 情况一:同一个商品,只保留最新的一条记录
@@ -50,7 +50,6 @@ public class ProductBrowseHistoryServiceImpl implements ProductBrowseHistoryServ @@ -50,7 +50,6 @@ public class ProductBrowseHistoryServiceImpl implements ProductBrowseHistoryServ
50 .setUserId(userId) 50 .setUserId(userId)
51 .setSpuId(spuId); 51 .setSpuId(spuId);
52 browseHistoryMapper.insert(browseHistory); 52 browseHistoryMapper.insert(browseHistory);
53 - return browseHistory.getId();  
54 } 53 }
55 54
56 @Override 55 @Override
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationRecordController.java
1 package cn.iocoder.yudao.module.promotion.controller.app.combination; 1 package cn.iocoder.yudao.module.promotion.controller.app.combination;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  6 +import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
4 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordDetailRespVO; 7 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordDetailRespVO;
  8 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordPageReqVO;
5 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordRespVO; 9 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordRespVO;
6 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordSummaryRespVO; 10 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordSummaryRespVO;
7 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; 11 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
@@ -13,6 +17,9 @@ import io.swagger.v3.oas.annotations.Operation; @@ -13,6 +17,9 @@ import io.swagger.v3.oas.annotations.Operation;
13 import io.swagger.v3.oas.annotations.Parameter; 17 import io.swagger.v3.oas.annotations.Parameter;
14 import io.swagger.v3.oas.annotations.Parameters; 18 import io.swagger.v3.oas.annotations.Parameters;
15 import io.swagger.v3.oas.annotations.tags.Tag; 19 import io.swagger.v3.oas.annotations.tags.Tag;
  20 +import jakarta.annotation.Resource;
  21 +import jakarta.validation.Valid;
  22 +import jakarta.validation.constraints.Max;
16 import org.springframework.context.annotation.Lazy; 23 import org.springframework.context.annotation.Lazy;
17 import org.springframework.validation.annotation.Validated; 24 import org.springframework.validation.annotation.Validated;
18 import org.springframework.web.bind.annotation.GetMapping; 25 import org.springframework.web.bind.annotation.GetMapping;
@@ -20,8 +27,6 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -20,8 +27,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
20 import org.springframework.web.bind.annotation.RequestParam; 27 import org.springframework.web.bind.annotation.RequestParam;
21 import org.springframework.web.bind.annotation.RestController; 28 import org.springframework.web.bind.annotation.RestController;
22 29
23 -import jakarta.annotation.Resource;  
24 -import jakarta.validation.constraints.Max;  
25 import java.util.Collections; 30 import java.util.Collections;
26 import java.util.List; 31 import java.util.List;
27 import java.util.Objects; 32 import java.util.Objects;
@@ -73,8 +78,18 @@ public class AppCombinationRecordController { @@ -73,8 +78,18 @@ public class AppCombinationRecordController {
73 @RequestParam(value = "activityId", required = false) Long activityId, 78 @RequestParam(value = "activityId", required = false) Long activityId,
74 @RequestParam("status") Integer status, 79 @RequestParam("status") Integer status,
75 @RequestParam(value = "count", defaultValue = "20") @Max(20) Integer count) { 80 @RequestParam(value = "count", defaultValue = "20") @Max(20) Integer count) {
76 - return success(CombinationActivityConvert.INSTANCE.convertList3(  
77 - combinationRecordService.getHeadCombinationRecordList(activityId, status, count))); 81 + List<CombinationRecordDO> list = combinationRecordService.getHeadCombinationRecordList(activityId, status, count);
  82 + return success(BeanUtils.toBean(list, AppCombinationRecordRespVO.class));
  83 + }
  84 +
  85 + @GetMapping("/page")
  86 + @Operation(summary = "获得我的拼团记录分页")
  87 + @PreAuthenticated
  88 + public CommonResult<PageResult<AppCombinationRecordRespVO>> getCombinationRecordPage(
  89 + @Valid AppCombinationRecordPageReqVO pageReqVO) {
  90 + PageResult<CombinationRecordDO> pageResult = combinationRecordService.getCombinationRecordPage(
  91 + getLoginUserId(), pageReqVO);
  92 + return success(BeanUtils.toBean(pageResult, AppCombinationRecordRespVO.class));
78 } 93 }
79 94
80 @GetMapping("/get-detail") 95 @GetMapping("/get-detail")
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/record/AppCombinationRecordPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  5 +import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
  6 +import io.swagger.v3.oas.annotations.media.Schema;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +import lombok.ToString;
  10 +
  11 +@Schema(description = "用户 App - 拼团记录分页 Request VO")
  12 +@Data
  13 +@EqualsAndHashCode(callSuper = true)
  14 +@ToString(callSuper = true)
  15 +public class AppCombinationRecordPageReqVO extends PageParam {
  16 +
  17 + @Schema(description = "拼团状态", example = "1")
  18 + @InEnum(value = CombinationRecordStatusEnum.class, message = "拼团状态必须是 {value}")
  19 + private Integer status;
  20 +
  21 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/record/AppCombinationRecordRespVO.java
@@ -33,12 +33,18 @@ public class AppCombinationRecordRespVO { @@ -33,12 +33,18 @@ public class AppCombinationRecordRespVO {
33 @Schema(description = "拼团状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 33 @Schema(description = "拼团状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
34 private Integer status; 34 private Integer status;
35 35
  36 + @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
  37 + private Long orderId;
  38 +
36 @Schema(description = "商品名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是大黄豆") 39 @Schema(description = "商品名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是大黄豆")
37 private String spuName; 40 private String spuName;
38 41
39 @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") 42 @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
40 private String picUrl; 43 private String picUrl;
41 44
  45 + @Schema(description = "购买的商品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  46 + private Integer count;
  47 +
42 @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") 48 @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
43 private Integer combinationPrice; 49 private Integer combinationPrice;
44 50
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyPageController.java
@@ -22,6 +22,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -22,6 +22,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 @RequestMapping("/promotion/diy-page") 22 @RequestMapping("/promotion/diy-page")
23 @Validated 23 @Validated
24 public class AppDiyPageController { 24 public class AppDiyPageController {
  25 +
25 @Resource 26 @Resource
26 private DiyPageService diyPageService; 27 private DiyPageService diyPageService;
27 28
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java
@@ -60,7 +60,6 @@ public interface CombinationActivityConvert { @@ -60,7 +60,6 @@ public interface CombinationActivityConvert {
60 60
61 List<CombinationActivityRespVO> convertList(List<CombinationActivityDO> list); 61 List<CombinationActivityRespVO> convertList(List<CombinationActivityDO> list);
62 62
63 -  
64 default PageResult<CombinationActivityPageItemRespVO> convertPage(PageResult<CombinationActivityDO> page, 63 default PageResult<CombinationActivityPageItemRespVO> convertPage(PageResult<CombinationActivityDO> page,
65 List<CombinationProductDO> productList, 64 List<CombinationProductDO> productList,
66 Map<Long, Integer> groupCountMap, 65 Map<Long, Integer> groupCountMap,
@@ -125,7 +124,6 @@ public interface CombinationActivityConvert { @@ -125,7 +124,6 @@ public interface CombinationActivityConvert {
125 .setNickname(user.getNickname()).setAvatar(user.getAvatar()) 124 .setNickname(user.getNickname()).setAvatar(user.getAvatar())
126 // 商品信息 125 // 商品信息
127 .setSpuName(spu.getName()).setPicUrl(sku.getPicUrl()); 126 .setSpuName(spu.getName()).setPicUrl(sku.getPicUrl());
128 -  
129 } 127 }
130 128
131 List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list); 129 List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list);
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationRecordMapper.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 8 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
9 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO; 9 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO;
  10 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordPageReqVO;
10 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; 11 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO;
11 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 12 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
12 import org.apache.ibatis.annotations.Mapper; 13 import org.apache.ibatis.annotations.Mapper;
@@ -143,4 +144,11 @@ public interface CombinationRecordMapper extends BaseMapperX&lt;CombinationRecordDO @@ -143,4 +144,11 @@ public interface CombinationRecordMapper extends BaseMapperX&lt;CombinationRecordDO
143 return selectList(CombinationRecordDO::getHeadId, headId); 144 return selectList(CombinationRecordDO::getHeadId, headId);
144 } 145 }
145 146
  147 + default PageResult<CombinationRecordDO> selectPage(Long userId, AppCombinationRecordPageReqVO pageReqVO) {
  148 + LambdaQueryWrapperX<CombinationRecordDO> queryWrapper = new LambdaQueryWrapperX<CombinationRecordDO>()
  149 + .eq(CombinationRecordDO::getUserId, userId)
  150 + .eqIfPresent(CombinationRecordDO::getStatus, pageReqVO.getStatus());
  151 + return selectPage(pageReqVO, queryWrapper);
  152 + }
  153 +
146 } 154 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordService.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 5 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
6 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO; 6 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;
7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO;
  8 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordPageReqVO;
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 9 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
9 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; 10 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
10 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; 11 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO;
@@ -163,4 +164,13 @@ public interface CombinationRecordService { @@ -163,4 +164,13 @@ public interface CombinationRecordService {
163 */ 164 */
164 KeyValue<Integer, Integer> expireCombinationRecord(); 165 KeyValue<Integer, Integer> expireCombinationRecord();
165 166
  167 + /**
  168 + * 获得拼团记录分页数据
  169 + *
  170 + * @param userId 用户编号
  171 + * @param pageReqVO 分页请求
  172 + * @return 拼团记录分页数据
  173 + */
  174 + PageResult<CombinationRecordDO> getCombinationRecordPage(Long userId, AppCombinationRecordPageReqVO pageReqVO);
  175 +
166 } 176 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java
@@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; @@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
16 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 16 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
17 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO; 17 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;
18 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO; 18 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.recrod.CombinationRecordReqPageVO;
  19 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordPageReqVO;
19 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; 20 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
20 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 21 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
21 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; 22 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
@@ -23,14 +24,14 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationR @@ -23,14 +24,14 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationR
23 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationRecordMapper; 24 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationRecordMapper;
24 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum; 25 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
25 import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi; 26 import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
  27 +import jakarta.annotation.Nullable;
  28 +import jakarta.annotation.Resource;
26 import lombok.extern.slf4j.Slf4j; 29 import lombok.extern.slf4j.Slf4j;
27 import org.springframework.context.annotation.Lazy; 30 import org.springframework.context.annotation.Lazy;
28 import org.springframework.stereotype.Service; 31 import org.springframework.stereotype.Service;
29 import org.springframework.transaction.annotation.Transactional; 32 import org.springframework.transaction.annotation.Transactional;
30 import org.springframework.validation.annotation.Validated; 33 import org.springframework.validation.annotation.Validated;
31 34
32 -import jakarta.annotation.Nullable;  
33 -import jakarta.annotation.Resource;  
34 import java.time.LocalDateTime; 35 import java.time.LocalDateTime;
35 import java.util.*; 36 import java.util.*;
36 37
@@ -159,7 +160,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -159,7 +160,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
159 // 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP 160 // 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP
160 if (record.getHeadId() == null) { 161 if (record.getHeadId() == null) {
161 record.setStartTime(LocalDateTime.now()) 162 record.setStartTime(LocalDateTime.now())
162 - .setExpireTime(keyValue.getKey().getStartTime().plusHours(keyValue.getKey().getLimitDuration())) 163 + .setExpireTime(LocalDateTime.now().plusHours(keyValue.getKey().getLimitDuration()))
163 .setHeadId(CombinationRecordDO.HEAD_ID_GROUP); 164 .setHeadId(CombinationRecordDO.HEAD_ID_GROUP);
164 } else { 165 } else {
165 // 2.2.有团长的情况下需要设置开始时间和过期时间为团长的 166 // 2.2.有团长的情况下需要设置开始时间和过期时间为团长的
@@ -408,6 +409,11 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -408,6 +409,11 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
408 return records; 409 return records;
409 } 410 }
410 411
  412 + @Override
  413 + public PageResult<CombinationRecordDO> getCombinationRecordPage(Long userId, AppCombinationRecordPageReqVO pageReqVO) {
  414 + return combinationRecordMapper.selectPage(userId, pageReqVO);
  415 + }
  416 +
411 /** 417 /**
412 * 获得自身的代理对象,解决 AOP 生效问题 418 * 获得自身的代理对象,解决 AOP 生效问题
413 * 419 *
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
@@ -21,18 +21,17 @@ import com.google.common.collect.Maps; @@ -21,18 +21,17 @@ import com.google.common.collect.Maps;
21 import io.swagger.v3.oas.annotations.Operation; 21 import io.swagger.v3.oas.annotations.Operation;
22 import io.swagger.v3.oas.annotations.Parameter; 22 import io.swagger.v3.oas.annotations.Parameter;
23 import io.swagger.v3.oas.annotations.tags.Tag; 23 import io.swagger.v3.oas.annotations.tags.Tag;
  24 +import jakarta.annotation.Resource;
  25 +import jakarta.validation.Valid;
24 import lombok.extern.slf4j.Slf4j; 26 import lombok.extern.slf4j.Slf4j;
25 import org.springframework.validation.annotation.Validated; 27 import org.springframework.validation.annotation.Validated;
26 import org.springframework.web.bind.annotation.*; 28 import org.springframework.web.bind.annotation.*;
27 29
28 -import jakarta.annotation.Resource;  
29 -import jakarta.validation.Valid;  
30 import java.util.List; 30 import java.util.List;
31 import java.util.Map; 31 import java.util.Map;
32 32
33 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 33 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
34 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 34 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
35 -import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;  
36 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 35 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
37 36
38 @Tag(name = "用户 App - 交易订单") 37 @Tag(name = "用户 App - 交易订单")