Commit d884303df60dd9b96e243ebbbd96d7accf215289

Authored by YunaiV
1 parent 8f6c3775

trade:【交易售后】查询分页列表

Showing 15 changed files with 126 additions and 184 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/CouponController.java
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.collection.MapUtils; 6 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
7 import cn.iocoder.yudao.module.member.api.user.MemberUserApi; 7 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
8 -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; 8 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
9 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageItemRespVO; 9 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageItemRespVO;
10 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO; 10 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
11 import cn.iocoder.yudao.module.promotion.convert.coupon.CouponConvert; 11 import cn.iocoder.yudao.module.promotion.convert.coupon.CouponConvert;
@@ -66,7 +66,7 @@ public class CouponController { @@ -66,7 +66,7 @@ public class CouponController {
66 } 66 }
67 // 读取用户信息,进行拼接 67 // 读取用户信息,进行拼接
68 Set<Long> userIds = convertSet(pageResult.getList(), CouponDO::getUserId); 68 Set<Long> userIds = convertSet(pageResult.getList(), CouponDO::getUserId);
69 - Map<Long, UserRespDTO> userMap = memberUserApi.getUserMap(userIds); 69 + Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
70 pageResulVO.getList().forEach(itemRespVO -> MapUtils.findAndThen(userMap, itemRespVO.getUserId(), 70 pageResulVO.getList().forEach(itemRespVO -> MapUtils.findAndThen(userMap, itemRespVO.getUserId(),
71 userRespDTO -> itemRespVO.setNickname(userRespDTO.getNickname()))); 71 userRespDTO -> itemRespVO.setNickname(userRespDTO.getNickname())));
72 return success(pageResulVO); 72 return success(pageResulVO);
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; 8 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi; 9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
10 -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; 10 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
11 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO; 11 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
12 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; 12 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
13 import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponMapper; 13 import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponMapper;
@@ -71,7 +71,7 @@ public class CouponServiceImpl implements CouponService { @@ -71,7 +71,7 @@ public class CouponServiceImpl implements CouponService {
71 Set<Long> userIds = null; 71 Set<Long> userIds = null;
72 if (StrUtil.isNotEmpty(pageReqVO.getNickname())) { 72 if (StrUtil.isNotEmpty(pageReqVO.getNickname())) {
73 userIds = CollectionUtils.convertSet(memberUserApi.getUserListByNickname(pageReqVO.getNickname()), 73 userIds = CollectionUtils.convertSet(memberUserApi.getUserListByNickname(pageReqVO.getNickname()),
74 - UserRespDTO::getId); 74 + MemberUserRespDTO::getId);
75 if (CollUtil.isEmpty(userIds)) { 75 if (CollUtil.isEmpty(userIds)) {
76 return PageResult.empty(); 76 return PageResult.empty();
77 } 77 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java
1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale; 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
  7 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
5 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO; 8 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO;
6 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; 9 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO;
7 -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespVO; 10 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO;
8 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; 11 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert;
9 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; 12 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
10 import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService; 13 import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService;
@@ -18,8 +21,10 @@ import org.springframework.web.bind.annotation.*; @@ -18,8 +21,10 @@ import org.springframework.web.bind.annotation.*;
18 21
19 import javax.annotation.Resource; 22 import javax.annotation.Resource;
20 import javax.validation.Valid; 23 import javax.validation.Valid;
  24 +import java.util.Map;
21 25
22 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  27 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
23 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; 28 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
24 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 29 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
25 30
@@ -33,12 +38,22 @@ public class TradeAfterSaleController { @@ -33,12 +38,22 @@ public class TradeAfterSaleController {
33 @Resource 38 @Resource
34 private TradeAfterSaleService afterSaleService; 39 private TradeAfterSaleService afterSaleService;
35 40
  41 + @Resource
  42 + private MemberUserApi memberUserApi;
  43 +
36 @GetMapping("/page") 44 @GetMapping("/page")
37 @ApiOperation("获得交易售后分页") 45 @ApiOperation("获得交易售后分页")
38 @PreAuthorize("@ss.hasPermission('trade:after-sale:query')") 46 @PreAuthorize("@ss.hasPermission('trade:after-sale:query')")
39 - public CommonResult<PageResult<TradeAfterSaleRespVO>> getAfterSalePage(@Valid TradeAfterSalePageReqVO pageVO) { 47 + public CommonResult<PageResult<TradeAfterSaleRespPageItemVO>> getAfterSalePage(@Valid TradeAfterSalePageReqVO pageVO) {
40 PageResult<TradeAfterSaleDO> pageResult = afterSaleService.getAfterSalePage(pageVO); 48 PageResult<TradeAfterSaleDO> pageResult = afterSaleService.getAfterSalePage(pageVO);
41 - return success(TradeAfterSaleConvert.INSTANCE.convertPage(pageResult)); 49 + if (CollUtil.isEmpty(pageResult.getList())) {
  50 + return success(PageResult.empty());
  51 + }
  52 +
  53 + // 拼接数据
  54 + Map<Long, MemberUserRespDTO> memberUsers = memberUserApi.getUserMap(
  55 + convertSet(pageResult.getList(), TradeAfterSaleDO::getUserId));
  56 + return success(TradeAfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers));
42 } 57 }
43 58
44 @PutMapping("/agree") 59 @PutMapping("/agree")
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleBaseVO.java
1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo; 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo;
2 2
3 -import cn.iocoder.yudao.module.trade.controller.admin.base.property.ProductPropertyRespVO; 3 +import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyRespVO;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
6 import org.springframework.format.annotation.DateTimeFormat; 6 import org.springframework.format.annotation.DateTimeFormat;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRespPageItemVO.java
1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo; 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo;
2 2
  3 +import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
3 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 5 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 6 import lombok.Data;
@@ -8,11 +9,11 @@ import lombok.ToString; @@ -8,11 +9,11 @@ import lombok.ToString;
8 9
9 import java.time.LocalDateTime; 10 import java.time.LocalDateTime;
10 11
11 -@ApiModel("管理后台 - 交易售后 Response VO") 12 +@ApiModel("管理后台 - 交易售后分页的每一条记录 Response VO")
12 @Data 13 @Data
13 @EqualsAndHashCode(callSuper = true) 14 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 15 @ToString(callSuper = true)
15 -public class TradeAfterSaleRespVO extends TradeAfterSaleBaseVO { 16 +public class TradeAfterSaleRespPageItemVO extends TradeAfterSaleBaseVO {
16 17
17 @ApiModelProperty(value = "售后编号", required = true, example = "27630") 18 @ApiModelProperty(value = "售后编号", required = true, example = "27630")
18 private Long id; 19 private Long id;
@@ -20,4 +21,9 @@ public class TradeAfterSaleRespVO extends TradeAfterSaleBaseVO { @@ -20,4 +21,9 @@ public class TradeAfterSaleRespVO extends TradeAfterSaleBaseVO {
20 @ApiModelProperty(value = "创建时间", required = true) 21 @ApiModelProperty(value = "创建时间", required = true)
21 private LocalDateTime createTime; 22 private LocalDateTime createTime;
22 23
  24 + /**
  25 + * 用户信息
  26 + */
  27 + private MemberUserRespVO user;
  28 +
23 } 29 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/package-info.java 0 → 100644
  1 +/**
  2 + * 占位符,可忽略
  3 + */
  4 +package cn.iocoder.yudao.module.trade.controller.admin.base.member;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/user/MemberUserRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.admin.base.member.user;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +
  7 +@ApiModel("管理后台 - 会员用户 Response VO")
  8 +@Data
  9 +public class MemberUserRespVO {
  10 +
  11 + @ApiModelProperty(value = "用户 ID", required = true, example = "1")
  12 + private Long id;
  13 +
  14 + @ApiModelProperty(value = "用户昵称", required = true, example = "芋道源码")
  15 + private String nickname;
  16 +
  17 + @ApiModelProperty(value = "用户头像", example = "https://www.iocoder.cn/xxx.png")
  18 + private String avatar;
  19 +
  20 +}
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/property/ProductPropertyRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/product/property/ProductPropertyRespVO.java
1 -package cn.iocoder.yudao.module.trade.controller.admin.base.property; 1 +package cn.iocoder.yudao.module.trade.controller.admin.base.product.property;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
6 6
7 -@ApiModel("管理后台 - 商品规格 Request VO") 7 +@ApiModel("管理后台 - 商品规格 Response VO")
8 @Data 8 @Data
9 public class ProductPropertyRespVO { 9 public class ProductPropertyRespVO {
10 10
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java
1 package cn.iocoder.yudao.module.trade.convert.aftersale; 1 package cn.iocoder.yudao.module.trade.convert.aftersale;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; 5 import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
5 -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespVO; 6 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO;
  7 +import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
6 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; 8 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO;
7 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; 9 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 10 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
@@ -12,6 +14,8 @@ import org.mapstruct.Mapping; @@ -12,6 +14,8 @@ import org.mapstruct.Mapping;
12 import org.mapstruct.Mappings; 14 import org.mapstruct.Mappings;
13 import org.mapstruct.factory.Mappers; 15 import org.mapstruct.factory.Mappers;
14 16
  17 +import java.util.Map;
  18 +
15 @Mapper 19 @Mapper
16 public interface TradeAfterSaleConvert { 20 public interface TradeAfterSaleConvert {
17 21
@@ -34,6 +38,15 @@ public interface TradeAfterSaleConvert { @@ -34,6 +38,15 @@ public interface TradeAfterSaleConvert {
34 PayRefundCreateReqDTO convert(String userIp, TradeAfterSaleDO afterSale, 38 PayRefundCreateReqDTO convert(String userIp, TradeAfterSaleDO afterSale,
35 TradeOrderProperties orderProperties); 39 TradeOrderProperties orderProperties);
36 40
37 - PageResult<TradeAfterSaleRespVO> convertPage(PageResult<TradeAfterSaleDO> page); 41 + MemberUserRespVO convert(MemberUserRespDTO bean);
  42 +
  43 + PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> page);
  44 +
  45 + default PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> pageResult,
  46 + Map<Long, MemberUserRespDTO> memberUsers) {
  47 + PageResult<TradeAfterSaleRespPageItemVO> pageVOResult = convertPage(pageResult);
  48 + pageVOResult.getList().forEach(item -> item.setUser(convert(memberUsers.get(item.getUserId()))));
  49 + return pageVOResult;
  50 + }
38 51
39 } 52 }
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java
1 package cn.iocoder.yudao.module.member.api.user; 1 package cn.iocoder.yudao.module.member.api.user;
2 2
3 -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; 3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 4
5 import java.util.Collection; 5 import java.util.Collection;
6 import java.util.List; 6 import java.util.List;
@@ -21,7 +21,7 @@ public interface MemberUserApi { @@ -21,7 +21,7 @@ public interface MemberUserApi {
21 * @param id 用户编号 21 * @param id 用户编号
22 * @return 用户信息 22 * @return 用户信息
23 */ 23 */
24 - UserRespDTO getUser(Long id); 24 + MemberUserRespDTO getUser(Long id);
25 25
26 /** 26 /**
27 * 获得会员用户信息们 27 * 获得会员用户信息们
@@ -29,7 +29,7 @@ public interface MemberUserApi { @@ -29,7 +29,7 @@ public interface MemberUserApi {
29 * @param ids 用户编号的数组 29 * @param ids 用户编号的数组
30 * @return 用户信息们 30 * @return 用户信息们
31 */ 31 */
32 - List<UserRespDTO> getUsers(Collection<Long> ids); 32 + List<MemberUserRespDTO> getUsers(Collection<Long> ids);
33 33
34 /** 34 /**
35 * 获得会员用户 Map 35 * 获得会员用户 Map
@@ -37,8 +37,8 @@ public interface MemberUserApi { @@ -37,8 +37,8 @@ public interface MemberUserApi {
37 * @param ids 用户编号的数组 37 * @param ids 用户编号的数组
38 * @return 会员用户 Map 38 * @return 会员用户 Map
39 */ 39 */
40 - default Map<Long, UserRespDTO> getUserMap(Collection<Long> ids) {  
41 - return convertMap(getUsers(ids), UserRespDTO::getId); 40 + default Map<Long, MemberUserRespDTO> getUserMap(Collection<Long> ids) {
  41 + return convertMap(getUsers(ids), MemberUserRespDTO::getId);
42 } 42 }
43 43
44 /** 44 /**
@@ -47,6 +47,6 @@ public interface MemberUserApi { @@ -47,6 +47,6 @@ public interface MemberUserApi {
47 * @param nickname 用户昵称,模糊匹配 47 * @param nickname 用户昵称,模糊匹配
48 * @return 用户信息的列表 48 * @return 用户信息的列表
49 */ 49 */
50 - List<UserRespDTO> getUserListByNickname(String nickname); 50 + List<MemberUserRespDTO> getUserListByNickname(String nickname);
51 51
52 } 52 }
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java renamed to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java
@@ -9,7 +9,7 @@ import lombok.Data; @@ -9,7 +9,7 @@ import lombok.Data;
9 * @author 芋道源码 9 * @author 芋道源码
10 */ 10 */
11 @Data 11 @Data
12 -public class UserRespDTO { 12 +public class MemberUserRespDTO {
13 13
14 /** 14 /**
15 * 用户ID 15 * 用户ID
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java
1 package cn.iocoder.yudao.module.member.api.user; 1 package cn.iocoder.yudao.module.member.api.user;
2 2
3 -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; 3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 import cn.iocoder.yudao.module.member.convert.user.UserConvert; 4 import cn.iocoder.yudao.module.member.convert.user.UserConvert;
5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
6 import cn.iocoder.yudao.module.member.service.user.MemberUserService; 6 import cn.iocoder.yudao.module.member.service.user.MemberUserService;
@@ -24,18 +24,18 @@ public class MemberUserApiImpl implements MemberUserApi { @@ -24,18 +24,18 @@ public class MemberUserApiImpl implements MemberUserApi {
24 private MemberUserService userService; 24 private MemberUserService userService;
25 25
26 @Override 26 @Override
27 - public UserRespDTO getUser(Long id) { 27 + public MemberUserRespDTO getUser(Long id) {
28 MemberUserDO user = userService.getUser(id); 28 MemberUserDO user = userService.getUser(id);
29 return UserConvert.INSTANCE.convert2(user); 29 return UserConvert.INSTANCE.convert2(user);
30 } 30 }
31 31
32 @Override 32 @Override
33 - public List<UserRespDTO> getUsers(Collection<Long> ids) { 33 + public List<MemberUserRespDTO> getUsers(Collection<Long> ids) {
34 return UserConvert.INSTANCE.convertList2(userService.getUserList(ids)); 34 return UserConvert.INSTANCE.convertList2(userService.getUserList(ids));
35 } 35 }
36 36
37 @Override 37 @Override
38 - public List<UserRespDTO> getUserListByNickname(String nickname) { 38 + public List<MemberUserRespDTO> getUserListByNickname(String nickname) {
39 return UserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname)); 39 return UserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname));
40 } 40 }
41 41
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java
1 package cn.iocoder.yudao.module.member.convert.user; 1 package cn.iocoder.yudao.module.member.convert.user;
2 2
3 -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; 3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO; 4 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO;
5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
6 import org.mapstruct.Mapper; 6 import org.mapstruct.Mapper;
@@ -15,8 +15,8 @@ public interface UserConvert { @@ -15,8 +15,8 @@ public interface UserConvert {
15 15
16 AppUserInfoRespVO convert(MemberUserDO bean); 16 AppUserInfoRespVO convert(MemberUserDO bean);
17 17
18 - UserRespDTO convert2(MemberUserDO bean); 18 + MemberUserRespDTO convert2(MemberUserDO bean);
19 19
20 - List<UserRespDTO> convertList2(List<MemberUserDO> list); 20 + List<MemberUserRespDTO> convertList2(List<MemberUserDO> list);
21 21
22 } 22 }
yudao-ui-admin/src/views/mall/trade/afterSale/bak.vue deleted
1 -<template>  
2 - <div class="app-container">  
3 - <!-- 搜索工作栏 -->  
4 - <el-row :gutter="20">  
5 - <el-form :model="queryParams" label-width="68px" size="small">  
6 - <el-col :span="6" :xs="24">  
7 - <el-form-item label="下单时间">  
8 - <el-date-picker v-model="queryParams.date" type="daterange" range-separator="至"  
9 - start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="rangePickerOptions" style="width: 240px"/>  
10 - </el-form-item>  
11 - </el-col>  
12 - <el-col :span="6" :xs="24" style="line-height: 32px">  
13 - <el-button type="primary" icon="el-icon-search" size="mini">搜索</el-button>  
14 - <el-button icon="el-icon-refresh" size="mini">重置</el-button>  
15 - <el-button icon="el-icon-document" size="mini">导出订单</el-button>  
16 - </el-col>  
17 - </el-form>  
18 - </el-row>  
19 -  
20 - <!-- tab切换-->  
21 - <el-tabs v-model="activeTabName" type="card">  
22 - <el-tab-pane v-for="tabPane in tabPanes" :label="tabPane.text" :name="tabPane.name">  
23 - <!-- table -->  
24 - <el-table :data="tableData" :show-header="false" class="table-wrapper">  
25 - <el-table-column>  
26 - <template slot-scope="{ row }">  
27 - <!-- 订单下的商品 -->  
28 - <el-table :data="row.goods" border>  
29 - <el-table-column label="商品信息" prop="spxx" header-align="center" width="auto" min-width="300">  
30 - <div slot-scope="{ row, $index }" class="goods-info">  
31 - <img :src="row.img"/>  
32 - <span class="ellipsis-2" :title="row.name">{{row.name}}</span>  
33 - </div>  
34 - </el-table-column>  
35 - <el-table-column label="订单金额" prop="ddje" align="center" width="100"/>  
36 - <el-table-column label="买家" prop="mj" align="center" width="100"/>  
37 - <el-table-column label="退款金额" prop="tkje" align="center" width="100"/>  
38 - <el-table-column label="申请时间" prop="sqsj" align="center" width="180"/>  
39 - <el-table-column label="退款状态" prop="tkzt" align="center" width="100"/>  
40 - <el-table-column label="操作" align="center" width="100" fixed="right" >  
41 - <el-button slot-scope="{row}" type="text">详情</el-button>  
42 - </el-table-column>  
43 - </el-table>  
44 - </template>  
45 - </el-table-column>  
46 - </el-table>  
47 - </el-tab-pane>  
48 - </el-tabs>  
49 - </div>  
50 -</template>  
51 -  
52 -<script>  
53 -const dicData = {  
54 - refundStatus: [  
55 - { label: '全部', value: 'qb' },  
56 - { label: '申请维权', value: 'sqwq' },  
57 - { label: '待转账', value: 'dzz' },  
58 - { label: '维权结束', value: 'wqjs' },  
59 - { label: '买家待退货', value: 'mjdth' },  
60 - { label: '卖家待收货', value: 'mjdsh' },  
61 - { label: '卖家已收货', value: 'mjysh' },  
62 - { label: '卖家拒绝', value: 'mjjj' }  
63 - ],  
64 - refundWay: [  
65 - { label: '全部', value: 'qb' },  
66 - { label: '仅退款', value: 'jtk' },  
67 - { label: '退货退款', value: 'thtk' }  
68 - ],  
69 - refundType: [  
70 - { label: '全部', value: 'qb' },  
71 - { label: '订单退款', value: 'ddtk' },  
72 - { label: '售后退款', value: 'shtk' }  
73 - ]  
74 -}  
75 -  
76 -export default {  
77 - name: "index",  
78 - data () {  
79 - return {  
80 - dicData,  
81 - rangePickerOptions,  
82 - queryParams: {},  
83 - activeTabName: 'all',  
84 - tabPanes: [  
85 - { text: '全部', name: 'all' },  
86 - { text: '申请维权', name: 'sqwq' },  
87 - { text: '待转账', name: 'dzz' },  
88 - { text: '维权结束', name: 'wqjs' },  
89 - { text: '买家待退货', name: 'mjdth' },  
90 - { text: '卖家待收货', name: 'mjdsh' },  
91 - { text: '卖家已收货', name: 'mjysh' },  
92 - { text: '卖家拒绝', name: 'mjjj' }  
93 - ],  
94 - tableData: [  
95 - {  
96 - tkbh: '20221026220424001',  
97 - ddbh: '20221026220424001',  
98 - goods: [  
99 - {  
100 - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',  
101 - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',  
102 - ddje: '199',  
103 - mj: '张三',  
104 - tkje: 460,  
105 - sqsj: '2022-11-19',  
106 - tkzt: '申请维权(仅退款)'  
107 - }  
108 - ]  
109 - },  
110 - {  
111 - tkbh: '20221026220424001',  
112 - ddbh: '20221026220424001',  
113 - goods: [  
114 - {  
115 - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',  
116 - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',  
117 - ddje: '199',  
118 - mj: '张三',  
119 - tkje: 460,  
120 - sqsj: '2022-11-19',  
121 - tkzt: '申请维权(仅退款)'  
122 - }  
123 - ]  
124 - },  
125 - {  
126 - tkbh: '20221026220424001',  
127 - ddbh: '20221026220424001',  
128 - goods: [  
129 - {  
130 - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',  
131 - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',  
132 - ddje: '199',  
133 - mj: '张三',  
134 - tkje: 460,  
135 - sqsj: '2022-11-19',  
136 - tkzt: '申请维权(仅退款)'  
137 - }  
138 - ]  
139 - }  
140 - ]  
141 - }  
142 - },  
143 - methods: {  
144 - goToDetail (row) {  
145 - this.$router.push({ path: '/mall/trade/order/detail', query: { orderNo: row.orderNo }})  
146 - }  
147 - }  
148 - }  
149 -</script>  
yudao-ui-admin/src/views/mall/trade/afterSale/index.vue
@@ -46,20 +46,28 @@ @@ -46,20 +46,28 @@
46 <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> 46 <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
47 </el-row> 47 </el-row>
48 48
  49 + <!-- Tab 选项:真正的内容在 Lab -->
  50 + <el-tabs v-model="activeTab" type="card" @tab-click="tabClick" style="margin-top: -40px;">
  51 + <el-tab-pane v-for="tab in statusTabs" :key="tab.value" :label="tab.label" :name="tab.value" />
  52 + </el-tabs>
  53 +
49 <!-- 列表 --> 54 <!-- 列表 -->
50 <el-table v-loading="loading" :data="list"> 55 <el-table v-loading="loading" :data="list">
51 <el-table-column label="退款编号" align="center" prop="no" /> 56 <el-table-column label="退款编号" align="center" prop="no" />
52 - <el-table-column label="订单编号" align="center" prop="orderNo" />  
53 - <el-table-column label="订单编号" align="center" prop="orderNo" />  
54 - <el-table-column label="商品信息" align="center" prop="status" width="auto" min-width="300"> 57 + <el-table-column label="订单编号" align="center" prop="orderNo" /> <!-- TODO 芋艿:未来要加个订单链接 -->
  58 + <el-table-column label="商品信息" align="center" prop="spuName" width="auto" min-width="300">
55 <!-- TODO @小红:样式不太对,辛苦改改 --> 59 <!-- TODO @小红:样式不太对,辛苦改改 -->
56 <!-- <div slot-scope="{ row }" class="goods-info">--> 60 <!-- <div slot-scope="{ row }" class="goods-info">-->
57 <!-- <img :src="row.picUrl"/>--> 61 <!-- <img :src="row.picUrl"/>-->
58 <!-- <span class="ellipsis-2" :title="row.name">{{row.name}}</span>--> 62 <!-- <span class="ellipsis-2" :title="row.name">{{row.name}}</span>-->
59 <!-- </div>--> 63 <!-- </div>-->
60 </el-table-column> 64 </el-table-column>
61 - <el-table-column label="订单金额" align="center" prop="refundPrice" />  
62 - <el-table-column label="买家" align="center" prop="userId" /> 65 + <el-table-column label="订单金额" align="center" prop="refundPrice">
  66 + <template v-slot="scope">
  67 + <span>¥{{ (scope.row.refundPrice / 100.0).toFixed(2) }}</span>
  68 + </template>
  69 + </el-table-column>
  70 + <el-table-column label="买家" align="center" prop="user.nickname" /> <!-- TODO 芋艿:未来要加个会员链接 -->
63 <el-table-column label="申请时间" align="center" prop="createTime" width="180"> 71 <el-table-column label="申请时间" align="center" prop="createTime" width="180">
64 <template v-slot="scope"> 72 <template v-slot="scope">
65 <span>{{ parseTime(scope.row.createTime) }}</span> 73 <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -77,8 +85,9 @@ @@ -77,8 +85,9 @@
77 </el-table-column> 85 </el-table-column>
78 <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 86 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
79 <template v-slot="scope"> 87 <template v-slot="scope">
80 -<!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"-->  
81 -<!-- v-hasPermi="['trade:after-sale:update']">修改</el-button>--> 88 + <el-button size="mini" type="text" icon="el-icon-thumb"
  89 + >处理退款</el-button>
  90 +<!-- @click="handleUpdate(scope.row)" v-hasPermi="['trade:after-sale:update']"-->
82 </template> 91 </template>
83 </el-table-column> 92 </el-table-column>
84 </el-table> 93 </el-table>
@@ -91,6 +100,7 @@ @@ -91,6 +100,7 @@
91 <script> 100 <script>
92 import { getAfterSalePage } from "@/api/mall/trade/afterSale"; 101 import { getAfterSalePage } from "@/api/mall/trade/afterSale";
93 import { datePickerOptions } from "@/utils/constants"; 102 import { datePickerOptions } from "@/utils/constants";
  103 +import {DICT_TYPE, getDictDatas} from "@/utils/dict";
94 104
95 export default { 105 export default {
96 name: "AfterSale", 106 name: "AfterSale",
@@ -124,12 +134,25 @@ export default { @@ -124,12 +134,25 @@ export default {
124 way: null, 134 way: null,
125 type: null, 135 type: null,
126 }, 136 },
  137 + // Tab 筛选
  138 + activeTab: 'all',
  139 + statusTabs: [{
  140 + label: '全部',
  141 + value: 'all'
  142 + }],
127 // 静态变量 143 // 静态变量
128 datePickerOptions: datePickerOptions 144 datePickerOptions: datePickerOptions
129 }; 145 };
130 }, 146 },
131 created() { 147 created() {
132 this.getList(); 148 this.getList();
  149 + // 设置 statuses 过滤
  150 + for (const dict of getDictDatas(DICT_TYPE.TRADE_AFTER_SALE_STATUS)) {
  151 + this.statusTabs.push({
  152 + label: dict.label,
  153 + value: dict.value
  154 + })
  155 + }
133 }, 156 },
134 methods: { 157 methods: {
135 /** 查询列表 */ 158 /** 查询列表 */
@@ -145,13 +168,23 @@ export default { @@ -145,13 +168,23 @@ export default {
145 /** 搜索按钮操作 */ 168 /** 搜索按钮操作 */
146 handleQuery() { 169 handleQuery() {
147 this.queryParams.pageNo = 1; 170 this.queryParams.pageNo = 1;
  171 + this.activeTab = this.queryParams.status ? this.queryParams.status : 'all'; // 处理 tab
148 this.getList(); 172 this.getList();
149 }, 173 },
150 /** 重置按钮操作 */ 174 /** 重置按钮操作 */
151 resetQuery() { 175 resetQuery() {
152 this.resetForm("queryForm"); 176 this.resetForm("queryForm");
  177 + this.activeTab = 'all'; // 处理 tab
153 this.handleQuery(); 178 this.handleQuery();
154 }, 179 },
  180 + /** tab 切换 */
  181 + tabClick(tab) {
  182 + this.queryParams.status = tab.name === 'all' ? undefined : tab.name;
  183 + this.getList();
  184 + },
  185 + goToDetail (row) {
  186 + this.$router.push({ path: '/mall/trade/order/detail', query: { orderNo: row.orderNo }})
  187 + }
155 } 188 }
156 }; 189 };
157 </script> 190 </script>