Commit d884303df60dd9b96e243ebbbd96d7accf215289
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
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
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> |