ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.CouponUseEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -46,8 +47,8 @@ @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") private CouponTypeEnum couponType; @ApiModelProperty(value = "优惠券状态-1删除0已过期1已领取2已使用") private Integer couponStatus; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") private CouponUseEnum couponStatus; @ApiModelProperty(value = "满减金额,例如:满100元") private BigDecimal fullReductionAmount; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java
@@ -15,6 +15,6 @@ @ApiModelProperty(value = "会员id") private Long memberId; @ApiModelProperty(value = "优惠券状态-1删除0已过期1已领取2已使用") @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") private Integer couponStatus; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java
@@ -5,12 +5,12 @@ import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import com.ruoyi.system.api.domain.dto.updMembeOneDTO; import com.ruoyi.system.api.feignClient.MemberClient; import java.util.Collection; import java.util.List; import java.util.Set; import org.springframework.cloud.openfeign.FallbackFactory; /** @@ -35,10 +35,12 @@ } @Override public R<List<Member>> getMemberListByIds(Set<Long> memberIdList, String source) { public R<List<Member>> getMemberListByIds(Collection<Long> memberIdList, String source) { return R.fail("获取用户列表失败:" + cause.getMessage()); } @Override public R<AppMiniLoginVO> miniLogin(AppMiniLoginDTO appMiniLoginDto) { return R.fail("登录用户失败:" + cause.getMessage()); @@ -54,6 +56,17 @@ public R<?> updMembeOne(updMembeOneDTO dMembeOneDTO) { return R.fail("修改用户等级失败:" + cause.getMessage()); } @Override public R<List<Member>> getMemberListByCondition(MemberDTO memberDTO, String source) { return R.fail("获取用户列表失败:" + cause.getMessage()); } @Override public R<List<Member>> getMemberListByLevel(List<String> memberLevelList, String source) { return R.fail("获取用户列表失败:" + cause.getMessage()); } }; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -5,15 +5,17 @@ import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.OrderUpdDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.vo.OrderVO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.feignClient.OrderClient; import java.util.Collection; import java.util.List; import java.util.Map; import org.springframework.cloud.openfeign.FallbackFactory; @@ -107,7 +109,10 @@ return R.fail("生成保证金失败" + cause.getMessage()); } @Override public R<List<Order>> getOrderByCouponIds(Collection<Long> couponIds, String source) { return R.fail("根据优惠券id列表获取订单列表失败" + cause.getMessage()); } }; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java
@@ -46,4 +46,8 @@ @PostMapping("/member/list-by-condition") R<List<Member>> getMemberListByCondition(@RequestBody MemberDTO memberDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/member/list-by-level") R<List<Member>> getMemberListByLevel(@RequestBody List<String> memberLevelList, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -7,15 +7,17 @@ import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.OrderUpdDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.vo.OrderVO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.factory.OrderFallbackFactory; import java.util.Collection; import java.util.List; import java.util.Map; import org.springframework.cloud.openfeign.FeignClient; @@ -137,5 +139,14 @@ R<PayInfoVO> SaveOrderAuctionBond(@RequestBody MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 根据优惠券id集合查询订单列表 * * @param couponIdSet 优惠券id集合 * @param inner 内部调用标志 * @return List<Order> */ @PostMapping("/order/list-by-coupon") R<List<Order>> getOrderByCouponIds(@RequestBody Collection<Long> couponIds, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/InsertGroup.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.system.api.validate; /** * @author mitao * @date 2024/6/9 * <p>插入数据校验分组</p> */ public interface InsertGroup { } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/ModifyGroup.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.system.api.validate; /** * @author mitao * @date 2024/6/9 * <p>编辑数据校验分组</p> */ public interface ModifyGroup { } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.common.core.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum CouponUseEnum { UNUSED(0, "未使用"), USED(1, "已使用"); @EnumValue private final Integer code; @JsonValue private final String desc; public static CouponUseEnum getEnumByCode(Integer code) { for (CouponUseEnum e : CouponUseEnum.values()) { if (e.code.equals(code)) { return e; } } return null; } } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/DistributionMethodEnum.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.common.core.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum DistributionMethodEnum { ALL_MEMBERS(1, "全部会员"), SPECIFY_MEMBERSHIP_LEVEL(2, "指定会员等级"), DESIGNATED_MEMBERS(3, "指定会员"); @EnumValue private final Integer code; @JsonValue private final String desc; public static DistributionMethodEnum getEnumByCode(Integer code) { for (DistributionMethodEnum e : DistributionMethodEnum.values()) { if (e.code.equals(code)) { return e; } } return null; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java
@@ -48,8 +48,14 @@ } @InnerAuth @PostMapping("/member/list-by-condition") @PostMapping("/list-by-condition") R<List<Member>> getMemberListByCondition(@RequestBody MemberDTO memberDTO) { return R.ok(memberService.getMemberListByCondition(memberDTO)); } @InnerAuth @PostMapping("/list-by-level") R<List<Member>> getMemberListByLevel(@RequestBody List<String> memberLevelList) { return R.ok(memberService.getMemberListByLevel(memberLevelList)); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java
@@ -66,4 +66,6 @@ void updMembeOne(@RequestBody updMembeOneDTO dMembeOneDTO); List<Member> getMemberListByCondition(MemberDTO memberDTO); List<Member> getMemberListByLevel(List<String> memberLevelList); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -592,9 +592,19 @@ return this.lambdaQuery() .like(StringUtils.isNotBlank(memberDTO.getNickname()), Member::getNickname, memberDTO.getNickname()) .like(StringUtils.isNotBlank(memberDTO.getRealName()), Member::getRealName, memberDTO.getRealName()) .like(StringUtils.isNotBlank(memberDTO.getPhone()), Member::getPhone, memberDTO.getPhone()).list(); } @Override public List<Member> getMemberListByLevel(List<String> memberLevelList) { return this.lambdaQuery() .in(StringUtils.isNotEmpty(memberLevelList), Member::getLevel, memberLevelList) .orderByDesc(Member::getLevel) .list(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
@@ -9,13 +9,20 @@ import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.OrderUpdDTO; import java.util.List; import com.ruoyi.system.api.domain.vo.OrderVO; import java.util.Collection; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; 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.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** @@ -106,4 +113,15 @@ orderService.updateBatchById(orders); return R.ok(); } /** * 根据优惠券id集合查询订单列表 * * @param couponIds 优惠券id集合 * @return List<Order> */ @PostMapping("/order/list-by-coupon") R<List<Order>> getOrderByCouponIds(@RequestBody Collection<Long> couponIds) { return R.ok(orderService.getOrderByCouponIds(couponIds)); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
@@ -10,9 +10,9 @@ import com.ruoyi.system.api.domain.vo.MemberOrderListVO; import com.ruoyi.system.api.domain.vo.MemberTiOrderVO; import com.ruoyi.system.api.domain.vo.OrderVO; import org.springframework.web.bind.annotation.RequestBody; import java.util.Collection; import java.util.List; import org.springframework.web.bind.annotation.RequestBody; /** * <p> @@ -64,4 +64,11 @@ void AffirmOrderOne(@RequestBody MemberOrderListDTO memberOrderListDTO); /** * 根据优惠券id集合查询订单列表 * * @param couponIds 优惠券id集合 * @return List<Order> */ List<Order> getOrderByCouponIds(Collection<Long> couponIds); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -12,27 +12,28 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.order.domain.MemberInvoiceRise; import com.ruoyi.order.domain.Paylog; import com.ruoyi.order.mapper.OrderAuctionBondMapper; import com.ruoyi.order.mapper.OrderMapper; import com.ruoyi.order.service.IOrderAuctionBondService; import com.ruoyi.order.service.IOrderService; import com.ruoyi.order.service.IPaylogService; import com.ruoyi.order.util.OrderUtil; import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.domain.dto.*; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.annotation.Resource; import com.ruoyi.order.util.SinataUtil; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.CustomConfig; import com.ruoyi.system.api.domain.GoodsGroupPurchase; import com.ruoyi.system.api.domain.GoodsSeckill; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; import com.ruoyi.system.api.domain.dto.MemberOrderDTO; import com.ruoyi.system.api.domain.dto.MemberOrderListDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.updMembeOneDTO; import com.ruoyi.system.api.domain.vo.MemberOrderListVO; import com.ruoyi.system.api.domain.vo.MemberTiOrderVO; import com.ruoyi.system.api.domain.vo.OrderVO; @@ -40,6 +41,13 @@ import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import org.apache.commons.beanutils.BeanUtils; import org.springframework.stereotype.Service; @@ -608,4 +616,15 @@ baseMapper.updateById(order); } } /** * 根据优惠券id集合查询订单列表 * * @param couponIds 优惠券id集合 * @return List<Order> */ @Override public List<Order> getOrderByCouponIds(Collection<Long> couponIds) { return this.lambdaQuery().in(Order::getCouponId, couponIds).list(); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java
@@ -1,6 +1,24 @@ package com.ruoyi.promotion.controller.management; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponReceiveQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponUpdDTO; import com.ruoyi.promotion.controller.management.vo.CouponReceiveDetailVO; import com.ruoyi.promotion.controller.management.vo.MgtCouponVO; import com.ruoyi.promotion.service.ICouponService; import com.ruoyi.system.api.validate.InsertGroup; import com.ruoyi.system.api.validate.ModifyGroup; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; 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; @@ -14,6 +32,71 @@ */ @RestController @RequestMapping("/mgt/coupon") @RequiredArgsConstructor @Api(value = "管理后台-优惠券管理相关接口", tags = "管理后台-优惠券管理相关接口") public class MgtCouponController { private final ICouponService couponService; /** * 获取优惠券列表的分页数据 * * @param query 管理后台-优惠券查询对象 * @return PageDTO<MgtCouponVO> */ @ApiOperation(value = "获取优惠券列表的分页数据", notes = "优惠券列表的分页数据") @PostMapping("/page") public R<PageDTO<MgtCouponVO>> getCouponPage(@Validated @RequestBody MgtCouponQuery query) { return R.ok(couponService.getCouponPage(query)); } /** * 添加优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ @ApiOperation("添加优惠券") @PostMapping("/add") public R<?> saveCoupon(@Validated(InsertGroup.class) @RequestBody MgtCouponDTO dto) { couponService.saveCoupon(dto); return R.ok(); } /** * 编辑优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ @ApiOperation("编辑优惠券") @PutMapping("/update") public R<?> updateCoupon(@Validated(ModifyGroup.class) @RequestBody MgtCouponDTO dto) { couponService.updateCoupon(dto); return R.ok(); } /** * 上架/下架 * * @param dto * @return */ @ApiOperation("上架/下架") @PutMapping("/upd-status") public R<?> updStatus(@Validated @RequestBody MgtCouponUpdDTO dto) { couponService.updStatus(dto); return R.ok(); } /** * 领取详情 * * @param query 管理后台-优惠券领取详情查询对象 * @return PageDTO<CouponReceiveDetailVO> */ @ApiOperation("领取详情") @PostMapping("/receive-detail") public R<PageDTO<CouponReceiveDetailVO>> getReceiveDetail( @Validated @RequestBody MgtCouponReceiveQuery query) { return R.ok(couponService.getReceiveDetail(query)); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponDTO.java
New file @@ -0,0 +1,85 @@ package com.ruoyi.promotion.controller.management.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.DistributionMethodEnum; import com.ruoyi.system.api.validate.InsertGroup; import com.ruoyi.system.api.validate.ModifyGroup; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import lombok.Data; /** * @author mitao * @date 2024/6/9 */ @Data @ApiModel(value = "管理后台-优惠券数据传输对象", description = "管理后台-优惠券数据传输对象") public class MgtCouponDTO implements Serializable { private static final long serialVersionUID = 471073836029292058L; @ApiModelProperty(value = "优惠券id", notes = "添加不传,更新必传") @NotNull(message = "优惠券id不能为空", groups = {ModifyGroup.class}) private Long id; @ApiModelProperty(value = "优惠券名称") @NotBlank(message = "优惠券名称不能为空", groups = {InsertGroup.class, ModifyGroup.class}) private String couponName; @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") @NotNull(message = "优惠券类型不能为空", groups = {InsertGroup.class}) private CouponTypeEnum couponType; @ApiModelProperty(value = "满减金额,例如:满100元") private BigDecimal fullReductionAmount; @ApiModelProperty(value = "减少金额,例如:减50元") private BigDecimal reductionAmount; @ApiModelProperty(value = "代金券金额,例如:50元") private BigDecimal voucherAmount; @ApiModelProperty(value = "折扣额度,例如:8折") private Double discountRate; @ApiModelProperty(value = "最高可抵扣金额,例如:200元") private BigDecimal maxDiscount; @ApiModelProperty(value = "优惠券说明") @NotBlank(message = "优惠券说明不能为空", groups = {InsertGroup.class, ModifyGroup.class}) private String description; @ApiModelProperty(value = "有效期起") @NotNull(message = "有效期起不能为空", groups = {InsertGroup.class}) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime startDate; @ApiModelProperty(value = "有效期止") @NotNull(message = "有效期止不能为空", groups = {InsertGroup.class}) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime endDate; @ApiModelProperty(value = "发放方式 全部会员 指定会员等级 指定会员") @NotNull(message = "发放方式不能为空", groups = {InsertGroup.class}) private DistributionMethodEnum distributionMethod; @ApiModelProperty(value = "会员等级,多等级以 , 隔开") private String memberLevel; @ApiModelProperty(value = "发放张数") @NotNull(message = "发放张数不能为空", groups = {InsertGroup.class}) private Integer issuedQuantity; @ApiModelProperty(value = "会员id列表") @NotEmpty(message = "会员id列表不能为空", groups = {InsertGroup.class}) private List<Long> memberIdList; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponQuery.java
New file @@ -0,0 +1,30 @@ package com.ruoyi.promotion.controller.management.dto; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.DistributionMethodEnum; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author mitao * @date 2024/6/9 */ @Data @EqualsAndHashCode(callSuper = true) @ApiModel(value = "管理后台-优惠券查询对象", description = "管理后台-优惠券查询对象") public class MgtCouponQuery extends BasePage { private static final long serialVersionUID = -3645816773946506015L; @ApiModelProperty(value = "优惠券名称") private String couponName; @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") private CouponTypeEnum couponType; @ApiModelProperty(value = "发放方式 1=全部会员 2=指定会员等级 3=指定会员") private DistributionMethodEnum distributionMethod; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponReceiveQuery.java
New file @@ -0,0 +1,33 @@ package com.ruoyi.promotion.controller.management.dto; import com.ruoyi.common.core.enums.CouponUseEnum; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author mitao * @date 2024/6/9 */ @Data @EqualsAndHashCode(callSuper = true) @ApiModel(value = "管理后台-优惠券领取详情查询对象", description = "管理后台-优惠券领取详情查询对象") public class MgtCouponReceiveQuery extends BasePage { private static final long serialVersionUID = -2131590270318555753L; @ApiModelProperty(value = "优惠券id") @NotNull(message = "优惠券id不能为空") private Long id; @ApiModelProperty(value = "会员姓名") private String realName; @ApiModelProperty(value = "联系电话") private String phone; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") private CouponUseEnum couponStatus; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponUpdDTO.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.promotion.controller.management.dto; import com.ruoyi.common.core.enums.ListingStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import javax.validation.constraints.NotNull; import lombok.Data; /** * @author mitao * @date 2024/6/9 */ @Data @ApiModel(value = "管理后台-优惠券上架下架数据传输对象", description = "管理后台-优惠券上架下架数据传输对象") public class MgtCouponUpdDTO implements Serializable { private static final long serialVersionUID = 3742544140798931375L; @ApiModelProperty(value = "优惠券id", notes = "添加不传,更新必传") @NotNull(message = "优惠券id不能为空") private Long id; @ApiModelProperty(value = "状态 上架中 已下架") @NotNull(message = "状态不能为空") private ListingStatusEnum couponStatus; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java
New file @@ -0,0 +1,40 @@ package com.ruoyi.promotion.controller.management.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.CouponUseEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.time.LocalDateTime; import lombok.Data; /** * @author mitao * @date 2024/6/9 */ @Data @ApiModel(value = "管理后台-优惠券领取详情视图对象", description = "管理后台-优惠券领取详情视图对象") public class CouponReceiveDetailVO { @ApiModelProperty(value = "优惠券id") private Long couponId; @ApiModelProperty(value = "优惠券id") private Long memberId; @ApiModelProperty(value = "会员姓名") private String realName; @ApiModelProperty(value = "联系电话") private String phone; @ApiModelProperty(value = "订单编号") private String orderNo; @ApiModelProperty(value = "使用时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") private CouponUseEnum couponStatus; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtCouponVO.java
New file @@ -0,0 +1,72 @@ package com.ruoyi.promotion.controller.management.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.DistributionMethodEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; import java.time.LocalDateTime; import lombok.Data; /** * @author mitao * @date 2024/6/9 */ @Data @ApiModel(value = "管理后台-优惠券视图对象", description = "管理后台-优惠券视图对象") public class MgtCouponVO { @ApiModelProperty(value = "优惠券id") private Long id; @ApiModelProperty(value = "优惠券名称") private String couponName; @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") private CouponTypeEnum couponType; @ApiModelProperty(value = "状态 0=已上架 1=已下架") private Integer couponStatus; @ApiModelProperty(value = "满减金额,例如:满100元") private BigDecimal fullReductionAmount; @ApiModelProperty(value = "减少金额,例如:减50元") private BigDecimal reductionAmount; @ApiModelProperty(value = "代金券金额,例如:50元") private BigDecimal voucherAmount; @ApiModelProperty(value = "折扣额度,例如:8折") private Double discountRate; @ApiModelProperty(value = "最高可抵扣金额,例如:200元") private BigDecimal maxDiscount; @ApiModelProperty(value = "优惠券说明") private String description; @ApiModelProperty(value = "有效期起") private LocalDateTime startDate; @ApiModelProperty(value = "有效期止") private LocalDateTime endDate; @ApiModelProperty(value = "发放方式 1=全部会员 2=指定会员等级 3=指定会员") private DistributionMethodEnum distributionMethod; @ApiModelProperty(value = "会员等级,多等级以 , 隔开") private String memberLevel; @ApiModelProperty(value = "发放张数") private Integer issuedQuantity; @ApiModelProperty(value = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "优惠券详情") private String details; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionBannerVO.java
@@ -14,7 +14,7 @@ * @date 2024/6/6 */ @Data @ApiModel(value = "轮播图视图对象", description = "轮播图视图对象") @ApiModel(value = "管理后台-轮播图视图对象", description = "管理后台-轮播图视图对象") public class MgtPromotionBannerVO implements Serializable { private static final long serialVersionUID = -6660029413001641863L; ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionVideoVO.java
@@ -10,7 +10,7 @@ * @date 2024/6/3 */ @Data @ApiModel(value = "大屏视频视图对象", description = "大屏视频视图对象") @ApiModel(value = "管理后台-大屏视频视图对象", description = "管理后台-大屏视频视图对象") public class MgtPromotionVideoVO implements Serializable { private static final long serialVersionUID = -1717120548273715375L; ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java
@@ -20,7 +20,7 @@ */ @Data @EqualsAndHashCode(callSuper = false) @ApiModel(value = "心愿求购视图对象", description = "心愿求购视图对象") @ApiModel(value = "管理后台-心愿求购视图对象", description = "管理后台-心愿求购视图对象") public class MgtPromotionWishListVO implements Serializable { private static final long serialVersionUID = 1L; ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/Coupon.java
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.DistributionMethodEnum; import com.ruoyi.common.core.enums.ListingStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -43,7 +45,7 @@ private CouponTypeEnum couponType; @ApiModelProperty(value = "状态 0=已上架 1=已下架") private Integer couponStatus; private ListingStatusEnum couponStatus; @ApiModelProperty(value = "满减金额,例如:满100元") private BigDecimal fullReductionAmount; @@ -69,6 +71,9 @@ @ApiModelProperty(value = "有效期止") private LocalDateTime endDate; @ApiModelProperty(value = "发放方式 1=全部会员 2=指定会员等级 3=指定会员") private DistributionMethodEnum distributionMethod; @ApiModelProperty(value = "会员等级,多等级以 , 隔开") private String memberLevel; ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java
@@ -1,6 +1,13 @@ package com.ruoyi.promotion.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponReceiveQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponUpdDTO; import com.ruoyi.promotion.controller.management.vo.CouponReceiveDetailVO; import com.ruoyi.promotion.controller.management.vo.MgtCouponVO; import com.ruoyi.promotion.domain.Coupon; /** @@ -13,4 +20,35 @@ */ public interface ICouponService extends IService<Coupon> { /** * 获取优惠券列表的分页数据 * * @param query 管理后台-优惠券查询对象 * @return PageDTO<MgtCouponVO> */ PageDTO<MgtCouponVO> getCouponPage(MgtCouponQuery query); /** * 添加优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ void saveCoupon(MgtCouponDTO dto); /** * 编辑优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ void updateCoupon(MgtCouponDTO dto); void updStatus(MgtCouponUpdDTO dto); /** * 领取详情 * * @param query 管理后台-优惠券领取详情查询对象 * @return PageDTO<CouponReceiveDetailVO> */ PageDTO<CouponReceiveDetailVO> getReceiveDetail(MgtCouponReceiveQuery query); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java
New file @@ -0,0 +1,50 @@ package com.ruoyi.promotion.service.async; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.promotion.domain.Coupon; import com.ruoyi.promotion.service.ICouponMemberService; import com.ruoyi.system.api.domain.CouponMember; import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; /** * @author mitao * @date 2024/6/9 */ @Service @RequiredArgsConstructor public class AsyncMethodService { private final ICouponMemberService couponMemberService; /** * 异步处理优惠券发放 * * @param coupon 发放的优惠券 * @param memberIdList 发放的会员id */ @Async public void issueCoupon(Coupon coupon, List<Long> memberIdList) { Long couponId = coupon.getId(); Integer issuedQuantity = coupon.getIssuedQuantity(); List<CouponMember> memberCouponList = new ArrayList<>(); for (Long memberId : memberIdList) { coupon.setId(null); CouponMember couponMember = BeanUtils.copyBean(coupon, CouponMember.class); couponMember.setMemberId(memberId); couponMember.setCouponId(couponId); memberCouponList.add(couponMember); if (StringUtils.isNotNull(issuedQuantity) && memberCouponList.size() >= issuedQuantity) { break; } } if (StringUtils.isNotEmpty(memberCouponList)) { couponMemberService.saveBatch(memberCouponList); } } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java
@@ -4,12 +4,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.CouponUseEnum; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.promotion.mapper.CouponMemberMapper; import com.ruoyi.promotion.service.ICouponMemberService; import java.time.LocalDateTime; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import java.util.List; import org.springframework.stereotype.Service; @@ -28,18 +28,19 @@ @Override public PageDTO<CouponMember> getCouponMemberList(CouponMemberDTO couponMemberDTO) { LambdaQueryWrapper<CouponMember> wrapper= Wrappers.lambdaQuery(); wrapper.eq(CouponMember::getCouponStatus,1); wrapper.eq(CouponMember::getCouponStatus, CouponUseEnum.UNUSED); wrapper.eq(CouponMember::getDelFlag,0); List<CouponMember> couponMemberList=this.list(wrapper); for (CouponMember couponMember:couponMemberList){ /* for (CouponMember couponMember:couponMemberList){ if(LocalDateTime.now().isAfter(couponMember.getEndDate())){ couponMember.setCouponStatus(0); this.updateById(couponMember); } } }*/ Page<CouponMember> page = new Page<>(couponMemberDTO.getPageCurr(), couponMemberDTO.getPageSize()); LambdaQueryWrapper<CouponMember> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(CouponMember::getCouponStatus,couponMemberDTO.getCouponStatus()); wrapper1.eq(CouponMember::getCouponStatus, CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus())); wrapper1.eq(CouponMember::getDelFlag,0); Page<CouponMember> page1 = this.page(page, wrapper); return PageDTO.of(page1); @@ -53,7 +54,7 @@ @Override public void updCouponMember(CouponMemberDTO couponMemberDTO) { CouponMember byId = this.getById(couponMemberDTO.getId()); byId.setCouponStatus(couponMemberDTO.getCouponStatus()); byId.setCouponStatus(CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus())); this.updateById(byId); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
@@ -1,9 +1,41 @@ package com.ruoyi.promotion.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.CouponUseEnum; import com.ruoyi.common.core.enums.DistributionMethodEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponDTO; import com.ruoyi.promotion.controller.management.dto.MgtCouponQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponReceiveQuery; import com.ruoyi.promotion.controller.management.dto.MgtCouponUpdDTO; import com.ruoyi.promotion.controller.management.vo.CouponReceiveDetailVO; import com.ruoyi.promotion.controller.management.vo.MgtCouponVO; import com.ruoyi.promotion.domain.Coupon; import com.ruoyi.promotion.mapper.CouponMapper; import com.ruoyi.promotion.service.ICouponMemberService; import com.ruoyi.promotion.service.ICouponService; import com.ruoyi.promotion.service.async.AsyncMethodService; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.OrderClient; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; /** @@ -15,6 +47,216 @@ * @since 2024-05-16 */ @Service @RequiredArgsConstructor public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements ICouponService { private final AsyncMethodService asyncMethodService; private final MemberClient memberClient; private final OrderClient orderClient; private final ICouponMemberService couponMemberService; /** * 获取优惠券列表的分页数据 * * @param query 管理后台-优惠券查询对象 * @return PageDTO<MgtCouponVO> */ @Override public PageDTO<MgtCouponVO> getCouponPage(MgtCouponQuery query) { Page<Coupon> page = this.lambdaQuery() .select(Coupon::getId, Coupon::getCouponName, Coupon::getCouponType, Coupon::getFullReductionAmount, Coupon::getReductionAmount, Coupon::getVoucherAmount, Coupon::getDiscountRate, Coupon::getDistributionMethod, Coupon::getCouponStatus, Coupon::getDescription, Coupon::getCreateTime) .like(StringUtils.isNotBlank(query.getCouponName()), Coupon::getCouponName, query.getCouponName()) .eq(StringUtils.isNotNull(query.getCouponType()), Coupon::getCouponType, query.getCouponType()) .eq(StringUtils.isNotNull(query.getDistributionMethod()), Coupon::getDistributionMethod, query.getDistributionMethod()) .page(new Page<>(query.getPageCurr(), query.getPageSize())); if (StringUtils.isEmpty(page.getRecords())) { return PageDTO.empty(page); } PageDTO<MgtCouponVO> mgtCouponVOPageDTO = PageDTO.of(page, MgtCouponVO.class); List<MgtCouponVO> collect = mgtCouponVOPageDTO.getList().stream().peek(coupon -> { if (CouponTypeEnum.FULL_REDUCTION_COUPON.equals(coupon.getCouponType())) { coupon.setDetails("满" + coupon.getFullReductionAmount() + "元减" + coupon.getReductionAmount() + "元"); } else if (CouponTypeEnum.CASH_COUPON.equals(coupon.getCouponType())) { coupon.setDetails(coupon.getVoucherAmount().toString()); } else if (CouponTypeEnum.COUPON.equals(coupon.getCouponType())) { coupon.setDetails(coupon.getDiscountRate() + "折"); } }).collect(Collectors.toList()); mgtCouponVOPageDTO.setList(collect); return mgtCouponVOPageDTO; } /** * 添加优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ @Override public void saveCoupon(MgtCouponDTO dto) { // 参数校验 if (dto.getCouponType().equals(CouponTypeEnum.FULL_REDUCTION_COUPON)) { if (StringUtils.isNull(dto.getFullReductionAmount()) || StringUtils.isNull( dto.getReductionAmount())) { throw new ServiceException("满减券的满减金额不能为空"); } } else if (dto.getCouponType().equals(CouponTypeEnum.CASH_COUPON) && StringUtils.isNull( dto.getVoucherAmount())) { throw new ServiceException("代金券的代金券金额不能为空"); } else if (dto.getCouponType().equals(CouponTypeEnum.COUPON) && StringUtils.isNull( dto.getDiscountRate())) { throw new ServiceException("折扣券的折扣额度不能为空"); } if (dto.getDistributionMethod().equals(DistributionMethodEnum.SPECIFY_MEMBERSHIP_LEVEL) && StringUtils.isBlank(dto.getMemberLevel())) { throw new ServiceException("会员等级不能为空"); } else if (dto.getDistributionMethod().equals(DistributionMethodEnum.DESIGNATED_MEMBERS) && StringUtils.isEmpty(dto.getMemberIdList())) { throw new ServiceException("会员id列表不能为空"); } Coupon coupon = BeanUtils.copyBean(dto, Coupon.class); this.save(coupon); List<Long> memberIdList = new ArrayList<>(); if (dto.getDistributionMethod().equals(DistributionMethodEnum.DESIGNATED_MEMBERS)) { memberIdList = dto.getMemberIdList(); } else if (dto.getDistributionMethod() .equals(DistributionMethodEnum.SPECIFY_MEMBERSHIP_LEVEL)) { String[] memberLevelsStr = dto.getMemberLevel().replace(",", ",").split(","); // 转为List<String>集合 List<Member> memberList = memberClient.getMemberListByLevel( Lists.newArrayList(memberLevelsStr), SecurityConstants.INNER).getData(); memberIdList = memberList.stream().map(Member::getId).collect(Collectors.toList()); } else if (dto.getDistributionMethod().equals(DistributionMethodEnum.ALL_MEMBERS)) { List<Member> memberList = memberClient.getMemberListByLevel( CollUtils.emptyList(), SecurityConstants.INNER).getData(); memberIdList = memberList.stream().map(Member::getId).collect(Collectors.toList()); } // 发放优惠券 asyncMethodService.issueCoupon(coupon, memberIdList); } /** * 编辑优惠券 * * @param dto 管理后台-优惠券数据传输对象 */ @Override public void updateCoupon(MgtCouponDTO dto) { Coupon coupon = this.getById(dto.getId()); if (StringUtils.isNull(coupon)) { throw new ServiceException("优惠券不存在"); } coupon.setCouponName(dto.getCouponName()); coupon.setDescription(dto.getDescription()); this.updateById(coupon); } @Override public void updStatus(MgtCouponUpdDTO dto) { this.lambdaUpdate() .set(Coupon::getCouponStatus, dto.getCouponStatus()) .eq(Coupon::getId, dto.getId()); } /** * 领取详情 * * @param query 管理后台-优惠券领取详情查询对象 * @return PageDTO<CouponReceiveDetailVO> */ @Override public PageDTO<CouponReceiveDetailVO> getReceiveDetail(MgtCouponReceiveQuery query) { MemberDTO memberDTO = null; Set<Long> memberIdSet = null; if (StringUtils.isNotBlank(query.getRealName()) || StringUtils.isNotBlank( query.getPhone())) { memberDTO = new MemberDTO(); memberDTO.setRealName(query.getRealName()); memberDTO.setPhone(query.getPhone()); } if (StringUtils.isNotNull(memberDTO)) { List<Member> data = memberClient.getMemberListByCondition(memberDTO, SecurityConstants.INNER).getData(); memberIdSet = data.stream().map(Member::getId).collect(Collectors.toSet()); } Page<CouponMember> page = couponMemberService.lambdaQuery() .eq(StringUtils.isNotNull(query.getCouponStatus()), CouponMember::getCouponStatus, query.getCouponStatus()) .in(StringUtils.isNotEmpty(memberIdSet), CouponMember::getMemberId, memberIdSet) .eq(CouponMember::getCouponId, query.getId()) .page(new Page<>(query.getPageCurr(), query.getPageSize())); if (StringUtils.isEmpty(page.getRecords())) { return PageDTO.empty(page); } PageDTO<CouponReceiveDetailVO> couponReceiveDetailVOPageDTO = PageDTO.of(page, CouponReceiveDetailVO.class); // 远程调用会员服务,获取会员信息 List<Long> memberIdList = page.getRecords().stream().map(CouponMember::getMemberId) .collect(Collectors.toList()); if (StringUtils.isNotEmpty(memberIdList)) { List<Member> memberList = memberClient.getMemberListByIds(memberIdList, SecurityConstants.INNER).getData(); Map<Long, Member> memberMap = memberList.stream() .collect(Collectors.toMap(Member::getId, Function.identity())); couponReceiveDetailVOPageDTO.getList().forEach(item -> { Member member = memberMap.get(item.getMemberId()); item.setRealName(member.getRealName()); item.setPhone(member.getPhone()); }); } // 远程调用订单服务,获取订单信息 List<CouponReceiveDetailVO> usedCouponList = couponReceiveDetailVOPageDTO.getList().stream() .filter(item -> item.getCouponStatus().equals( CouponUseEnum.USED)).collect(Collectors.toList()); Set<Long> couponIdSet = usedCouponList.stream().map(CouponReceiveDetailVO::getCouponId) .collect(Collectors.toSet()); Map<String, Order> orderMap = null; Map<Long, Member> memberMap = null; if (StringUtils.isNotEmpty(usedCouponList)) { List<Order> data = orderClient.getOrderByCouponIds(couponIdSet, SecurityConstants.INNER) .getData(); orderMap = data.stream().collect( Collectors.toMap(order -> order.getCouponId() + "-" + order.getMemberId(), Function.identity())); } Set<Long> memberSet = couponReceiveDetailVOPageDTO.getList().stream() .map(CouponReceiveDetailVO::getMemberId).collect( Collectors.toSet()); if (StringUtils.isNotEmpty(memberSet)) { List<Member> data = memberClient.getMemberListByIds(memberSet, SecurityConstants.INNER) .getData(); memberMap = data.stream().collect( Collectors.toMap(Member::getId, Function.identity())); } // 封装VO for (CouponReceiveDetailVO couponReceiveDetailVO : couponReceiveDetailVOPageDTO.getList()) { if (StringUtils.isNotEmpty(memberMap)) { Member member = memberMap.get(couponReceiveDetailVO.getMemberId()); if (StringUtils.isNotNull(member)) { couponReceiveDetailVO.setRealName(member.getRealName()); couponReceiveDetailVO.setPhone(member.getPhone()); } } else if (StringUtils.isNotEmpty(orderMap)) { Order order = orderMap.get(couponReceiveDetailVO.getCouponId() + "-" + couponReceiveDetailVO.getMemberId()); if (StringUtils.isNotNull(order)) { couponReceiveDetailVO.setOrderNo(order.getOrderNo()); couponReceiveDetailVO.setCreateTime(order.getCreateTime()); } } else { break; } } return couponReceiveDetailVOPageDTO; } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java
@@ -85,17 +85,22 @@ public PageDTO<MgtPromotionWishListVO> getPromotionWishListPage( MgtPromotionWishListQuery query) { // 封装会员条件查询对象 MemberDTO memberDTO = new MemberDTO(); if (StringUtils.isNotBlank(query.getNickname())) { MemberDTO memberDTO = null; Set<Long> memberIdSet = null; if (StringUtils.isNotBlank(query.getNickname()) || StringUtils.isNotBlank( query.getPhone())) { memberDTO = new MemberDTO(); memberDTO.setNickname(query.getNickname()); } if (StringUtils.isNotBlank(query.getPhone())) { memberDTO.setPhone(query.getPhone()); } if (StringUtils.isNotNull(memberDTO)) { // 远程调用会员服务进行条件查询 List<Member> memberList = memberClient.getMemberListByCondition(memberDTO, SecurityConstants.INNER).getData(); Set<Long> memberIdSet = memberList.stream().map(Member::getId).collect(Collectors.toSet()); memberIdSet = memberList.stream().map(Member::getId) .collect(Collectors.toSet()); } // 分页查询心愿求购列表 Page<PromotionWishList> page = this.lambdaQuery() .eq(StringUtils.isNotNull(query.getReplyStatus()),