From c80281c4269623609f5b815d60b241f5462de9cc Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期日, 09 六月 2024 18:52:47 +0800 Subject: [PATCH] 提交【管理后台】-营销管理模块相关接口 --- ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java | 4 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java | 2 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java | 28 + ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java | 8 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java | 242 ++++++++++++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java | 40 ++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java | 19 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java | 2 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java | 17 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponReceiveQuery.java | 33 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java | 21 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java | 7 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java | 50 ++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java | 11 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionVideoVO.java | 2 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponUpdDTO.java | 28 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponQuery.java | 30 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java | 38 ++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java | 24 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/InsertGroup.java | 10 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java | 9 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 47 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtCouponVO.java | 72 ++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/Coupon.java | 7 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java | 15 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/ModifyGroup.java | 10 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/DistributionMethodEnum.java | 27 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponDTO.java | 85 +++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java | 2 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionBannerVO.java | 2 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 10 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java | 83 ++++ 32 files changed, 934 insertions(+), 51 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java index e6493e0..01d7989 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java +++ b/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,9 +47,9 @@ @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; diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java index 6d3d586..cc634b2 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java +++ b/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; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java index 0bd58bc..0d9b379 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java +++ b/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()); + } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java index b95b0f8..c66ac4f 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java +++ b/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()); + } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java index f7bd36e..ca31aaf 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java +++ b/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); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java index 933c141..ed131cb 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java +++ b/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); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/InsertGroup.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/InsertGroup.java new file mode 100644 index 0000000..00df1a5 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/InsertGroup.java @@ -0,0 +1,10 @@ +package com.ruoyi.system.api.validate; + +/** + * @author mitao + * @date 2024/6/9 + * <p>插入数据校验分组</p> + */ +public interface InsertGroup { + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/ModifyGroup.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/ModifyGroup.java new file mode 100644 index 0000000..795af03 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/validate/ModifyGroup.java @@ -0,0 +1,10 @@ +package com.ruoyi.system.api.validate; + +/** + * @author mitao + * @date 2024/6/9 + * <p>编辑数据校验分组</p> + */ +public interface ModifyGroup { + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java new file mode 100644 index 0000000..802f624 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/DistributionMethodEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/DistributionMethodEnum.java new file mode 100644 index 0000000..982e56e --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/DistributionMethodEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java index 472c4fb..a868acc 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java +++ b/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)); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java index 2f460c2..3536ffc 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java +++ b/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); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java index ea14810..1d500f6 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java +++ b/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(); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java index 8ad93a3..f01f4a8 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java +++ b/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)); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java index f41cdb2..c1d75ad 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java +++ b/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); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index ad15e76..3e46d1b 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/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(); + } } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java index ea7dd90..af8bba0 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java +++ b/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)); + } } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponDTO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponDTO.java new file mode 100644 index 0000000..6e00781 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponDTO.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponQuery.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponQuery.java new file mode 100644 index 0000000..0ecedb9 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponQuery.java @@ -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; +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponReceiveQuery.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponReceiveQuery.java new file mode 100644 index 0000000..547886e --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponReceiveQuery.java @@ -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; +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponUpdDTO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponUpdDTO.java new file mode 100644 index 0000000..42c9e2b --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtCouponUpdDTO.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java new file mode 100644 index 0000000..61c80c1 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtCouponVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtCouponVO.java new file mode 100644 index 0000000..b37ee48 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtCouponVO.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionBannerVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionBannerVO.java index 8ecb6c0..a80a6aa 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionBannerVO.java +++ b/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; diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionVideoVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionVideoVO.java index 773879d..5654539 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionVideoVO.java +++ b/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; diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java index 58281cb..2e23de9 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java +++ b/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; diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/Coupon.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/Coupon.java index 2a13280..a8b87e5 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/Coupon.java +++ b/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; diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java index 8ab187e..eb05110 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java +++ b/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); } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java new file mode 100644 index 0000000..015ce65 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java @@ -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); + } + } +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java index f50c186..8bb9f28 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java +++ b/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); } } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java index 9bf43cf..a7455d7 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java +++ b/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; + } } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java index 2fbca28..b583f35 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java +++ b/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()); } - // 远程调用会员服务进行条件查询 - List<Member> memberList = memberClient.getMemberListByCondition(memberDTO, - SecurityConstants.INNER).getData(); - Set<Long> memberIdSet = memberList.stream().map(Member::getId).collect(Collectors.toSet()); + if (StringUtils.isNotNull(memberDTO)) { + // 远程调用会员服务进行条件查询 + List<Member> memberList = memberClient.getMemberListByCondition(memberDTO, + SecurityConstants.INNER).getData(); + memberIdSet = memberList.stream().map(Member::getId) + .collect(Collectors.toSet()); + } + // 分页查询心愿求购列表 Page<PromotionWishList> page = this.lambdaQuery() .eq(StringUtils.isNotNull(query.getReplyStatus()), -- Gitblit v1.7.1