qizai 1 рік тому
батько
коміт
f8e0c8c66c

+ 1 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/CouponDTO.java

@@ -69,7 +69,7 @@ public class CouponDTO implements Serializable {
     /**
      * 优惠券状态
      */
-    private PromotionStatus status;
+    private CouponStatus status;
 
     /**
      * 创建用户

+ 5 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/UserCouponDTO.java

@@ -39,6 +39,11 @@ public class UserCouponDTO implements Serializable {
      */
     private CouponType type;
 
+    /**
+     * 是否已使用
+     */
+    private Boolean used;
+
     /**
      * 优惠券
      */

+ 1 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/CouponModifyParam.java

@@ -73,7 +73,7 @@ public class CouponModifyParam implements Serializable {
      * 优惠券状态
      */
     @NotNull(message = "优惠券状态不能为空")
-    private PromotionStatus status;
+    private CouponStatus status;
 
     /**
      * 限制领取数量

+ 8 - 4
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/GoodsPagingParam.java

@@ -1,9 +1,5 @@
 package com.chelvc.cloud.vehicle.api.param;
 
-import java.io.Serializable;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
 import com.chelvc.cloud.vehicle.api.constant.GoodsStatus;
 import com.chelvc.framework.common.model.Paging;
 import lombok.AllArgsConstructor;
@@ -11,6 +7,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
 /**
  * 商品信息
  *
@@ -42,4 +42,8 @@ public class GoodsPagingParam implements Serializable {
      * 商品状态
      */
     private GoodsStatus status;
+    /**
+     * 商家ID
+     */
+    private Long merchantId;
 }

+ 19 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/PromotionUtils.java

@@ -0,0 +1,19 @@
+package com.chelvc.cloud.vehicle.api.util;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 优惠活动通用验证类
+ *
+ * @author qizai
+ * @date 2023/10/16
+ */
+@Slf4j
+public class PromotionUtils {
+
+    public static final String START_TIME_COLUMN = "start_time";
+    public static final String END_TIME_COLUMN = "end_time";
+    public static final String PLATFORM_ID = "0";
+    public static final String PLATFORM_NAME = "platform";
+
+}

+ 2 - 1
vehicle-server/pom.xml

@@ -20,6 +20,7 @@
         <vehicle-api.version>1.0.0-SNAPSHOT</vehicle-api.version>
         <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
         <framework-database.version>1.0.0-RELEASE</framework-database.version>
+        <hutool-version>5.8.14</hutool-version>
     </properties>
 
     <dependencies>
@@ -50,7 +51,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>5.5.8</version>
+            <version>${hutool-version}</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>

+ 24 - 27
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Coupon.java

@@ -1,17 +1,12 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.chelvc.cloud.vehicle.api.constant.CouponClaimType;
-import com.chelvc.cloud.vehicle.api.constant.CouponStatus;
-import com.chelvc.cloud.vehicle.api.constant.CouponType;
-import com.chelvc.cloud.vehicle.api.constant.PromotionStatus;
-import com.chelvc.framework.database.entity.ModifyEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chelvc.cloud.vehicle.api.constant.*;
 import lombok.*;
 import lombok.experimental.SuperBuilder;
 
-import java.util.Date;
+import java.util.List;
 
 /**
  * 优惠券数据模型
@@ -25,17 +20,8 @@ import java.util.Date;
 @AllArgsConstructor
 @ToString(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
-public class Coupon extends ModifyEntity<Long> {
-    /**
-     * 主键
-     */
-    @TableId(type = IdType.ASSIGN_ID)
-    private Long id;
-
-    /**
-     * 商家ID
-     */
-    private Long merchantId;
+@TableName(autoResultMap = true)
+public class Coupon extends BasePromotion {
 
     /**
      * 优惠券类型
@@ -48,25 +34,20 @@ public class Coupon extends ModifyEntity<Long> {
     private String name;
 
     /**
-     * 优惠金额
+     * 优惠金额
      */
     private Double amount;
 
     /**
-     * 满减金额
+     * 消费门槛
      */
-    private Double reduce;
+    private Double consumeThreshold;
 
     /**
      * 优惠折扣
      */
     private Double discount;
 
-    /**
-     * 过期时间
-     */
-    private Date expiration;
-
     /**
      * 优惠券描述
      */
@@ -102,9 +83,25 @@ public class Coupon extends ModifyEntity<Long> {
      */
     private CouponClaimType claimType;
 
+    /**
+     * 时间范围类型
+     */
+    private CouponRangeDay rangeDayType;
+
+    /**
+     * 有效天数
+     */
+    private Integer effectiveDays;
+
     /**
      * 促销状态
      */
     @TableField(exist = false)
     private PromotionStatus promotionStatus;
+
+    /**
+     * 优惠券关联商品集合
+     */
+    @TableField(exist = false)
+    private List<PromotionGoods> promotionGoodsList;
 }

+ 19 - 8
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserCoupon.java

@@ -5,8 +5,13 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.chelvc.cloud.vehicle.api.constant.CouponType;
 import com.chelvc.cloud.vehicle.api.constant.UserCouponStatus;
-import com.chelvc.framework.database.entity.BasicEntity;
-import lombok.*;
+import com.chelvc.framework.database.entity.ModifyEntity;
+import com.chelvc.framework.database.interceptor.DeletedTypeHandler;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
 import java.util.Date;
@@ -23,7 +28,7 @@ import java.util.Date;
 @AllArgsConstructor
 @ToString(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
-public class UserCoupon extends BasicEntity<Long> {
+public class UserCoupon extends ModifyEntity<Long> {
     /**
      * 主键
      */
@@ -35,11 +40,6 @@ public class UserCoupon extends BasicEntity<Long> {
      */
     private Long userId;
 
-    /**
-     * 用户名称
-     */
-    private String userName;
-
     /**
      * 优惠券ID
      */
@@ -50,6 +50,11 @@ public class UserCoupon extends BasicEntity<Long> {
      */
     private CouponType type;
 
+    /**
+     * 是否已使用
+     */
+    private Boolean used;
+
     /**
      * 使用起始时间
      */
@@ -75,6 +80,12 @@ public class UserCoupon extends BasicEntity<Long> {
      */
     private UserCouponStatus status;
 
+    /**
+     * 是否已删除
+     */
+    @TableField(typeHandler = DeletedTypeHandler.class)
+    private Boolean deleted;
+
     /**
      * 优惠券
      */

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/UserCouponService.java

@@ -6,6 +6,8 @@ import com.chelvc.cloud.vehicle.server.entity.UserCoupon;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 
+import java.util.List;
+
 /**
  * 优惠券领取业务操作接口
  *
@@ -29,4 +31,11 @@ public interface UserCouponService extends IService<UserCoupon> {
     void changeUserCouponInformFlag(Long userId);
 
     Pagination<UserCouponDTO> selectUserCouponListByUserId(Long userId, Paging paging);
+
+    /**
+     * 关闭用户优惠券
+     *
+     * @param couponIds 优惠券id集合
+     */
+    void closeUserCoupon(List<Long> couponIds);
 }

+ 11 - 12
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/GoodsServiceImpl.java

@@ -1,24 +1,18 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.constant.CategoryType;
 import com.chelvc.cloud.vehicle.api.constant.GoodsStatus;
-import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
-import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
-import com.chelvc.cloud.vehicle.api.dto.FavoriteDTO;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDetailDTO;
-import com.chelvc.cloud.vehicle.api.param.*;
-import com.chelvc.cloud.vehicle.server.copier.CouponCopier;
+import com.chelvc.cloud.vehicle.api.param.CommentQueryParam;
+import com.chelvc.cloud.vehicle.api.param.GoodsModifyParam;
+import com.chelvc.cloud.vehicle.api.param.GoodsPagingParam;
+import com.chelvc.cloud.vehicle.api.param.GoodsQueryParam;
 import com.chelvc.cloud.vehicle.server.copier.GoodsCopier;
 import com.chelvc.cloud.vehicle.server.dao.GoodsMapper;
-import com.chelvc.cloud.vehicle.server.entity.Coupon;
-import com.chelvc.cloud.vehicle.server.entity.Favorite;
 import com.chelvc.cloud.vehicle.server.entity.Goods;
-import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.service.CommentService;
 import com.chelvc.cloud.vehicle.server.service.CouponService;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
@@ -26,7 +20,6 @@ import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
-import com.chelvc.framework.database.context.DatabaseContextHolder;
 import com.chelvc.framework.database.util.PagingUtils;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
@@ -34,6 +27,9 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
+import java.util.List;
+import java.util.Objects;
+
 /**
  * 商品业务操作实现
  *
@@ -112,8 +108,11 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Override
     public Pagination<GoodsDTO> getGoodsPaging(@NonNull GoodsPagingParam param) {
         Page<Goods> page = this.lambdaQuery()
+                .eq(Objects.nonNull(param.getMerchantId()), Goods::getMerchantId, param.getMerchantId())
+                .eq(Objects.nonNull(param.getCategoryId()), Goods::getCategoryId, param.getCategoryId())
+                .eq(Objects.nonNull(param.getStatus()), Goods::getStatus, param.getStatus())
                 .like(StringUtils.nonEmpty(param.getName()), Goods::getName, param.getName())
-                .orderByAsc(Goods::getStatus).page(PagingUtils.convert(param.getPaging()));
+                .orderByDesc(Goods::getCreateTime).page(PagingUtils.convert(param.getPaging()));
         return PagingUtils.convert(page, GoodsCopier.INSTANCE::copying);
     }
 }

+ 22 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserCouponServiceImpl.java

@@ -115,7 +115,7 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
         Page<UserCoupon> page = this.lambdaQuery()
                 .eq(Objects.nonNull(param.getType()), UserCoupon::getType, param.getType().name())
                 .eq(UserCouponStatus.USED.equals(param.getStatus()), UserCoupon::getUsed, 1)
-                .eq(UserCouponStatus.UNUSED.equals(param.getStatus()), UserCoupon::getUsed, 0)
+                .eq(UserCouponStatus.CLAIMED.equals(param.getStatus()), UserCoupon::getUsed, 0)
                 .orderByDesc(UserCoupon::getId).page(PagingUtils.convert(param.getPaging()));
         List<UserCoupon> records = page.getRecords();
         if (CollectionUtils.isEmpty(records)) {
@@ -127,6 +127,19 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
         return PagingUtils.convert(page, userCoupons);
     }
 
+    @Override
+    public Pagination<UserCouponDTO> getCouponClaimPaging(@NonNull UserCouponPagingParam param) {
+        Page<UserCoupon> page = this.baseMapper.getUserCouponPaging(PagingUtils.convert(param.getPaging()), param);
+        List<UserCoupon> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建优惠券领取记录信息
+        List<UserCouponDTO> userCoupons = records.stream().map(this::convert).collect(Collectors.toList());
+        return PagingUtils.convert(page, userCoupons);
+    }
+
     @Override
     public Long claimCoupon(@NonNull Long couponId) {
         Coupon coupon = ResourceUtils.required(couponService.getById(couponId), "优惠券不存在");
@@ -193,6 +206,14 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
         }
     }
 
+    @Override
+    public void closeUserCoupon(List<Long> couponIds) {
+        LambdaUpdateWrapper<UserCoupon> updateWrapper = new LambdaUpdateWrapper<UserCoupon>()
+                .in(UserCoupon::getCouponId, couponIds)
+                .set(UserCoupon::getStatus, UserCouponStatus.CLOSED);
+        this.update(updateWrapper);
+    }
+
     /**
      * 转换优惠券领取记录信息
      *