From ac70afa4e394626dc03d82def3df1db886bb7c2e Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期四, 12 九月 2024 14:43:59 +0800
Subject: [PATCH] 1.活动优惠券-管理端-类型是首页领取的活动优惠券,发布的时候将已经发布的设置为下架,只能留有一个已发布的优惠券 3.活动优惠券-小程序-新增首页弹窗优惠券-如果领取数量没有超过当前优惠券还可以再次领取,超过领取优惠券的话则不返回数据

---
 src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java              |   10 +++
 src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java |    3 +
 src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java           |    8 ++
 src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java     |   11 +++
 src/main/v2_sql.sql                                                               |   33 +++++++++++
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java       |   19 +++++-
 pom.xml                                                                           |   40 +++++++++++++
 src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java        |    4 +
 src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java  |   26 ++++++++
 src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml                   |   25 ++++++++
 10 files changed, 175 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index c624d4f..d219e73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -266,7 +266,45 @@
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson</artifactId>
-            <version>3.15.6</version>
+            <version>3.15.6</version> <!-- 确保使用与你的 Spring Boot 版本兼容的 Redisson 版本 -->
+        </dependency>
+
+
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+
+        <!--代码生成器依赖-->
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>${freemarker.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>${mybatis-plus.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
 
 
diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java
index a309696..41f0e3d 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java
@@ -25,5 +25,8 @@
     @ApiModelProperty(value = "优惠券状态(COUPON_STATUS)",hidden = true)
     private String status;
 
+    @ApiModelProperty(value = "领取人ID",hidden = true)
+    private String userId;
+
 
 }
diff --git a/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java b/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
index b3132d2..f8b8327 100644
--- a/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
+++ b/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
@@ -61,4 +61,8 @@
     List<CouponTemplateVO> getVipList(@Param("param") QueryCouponDTO dto);
 
     List<CouponTemplateVO> getCouponTemplateVipPage(Page page, @Param("param") QueryCouponDTO dto);
+
+    CouponTemplateVO getHomeActivityEffectAlert(@Param("param") QueryActivityEffectCouponDTO dto);
+
+    void expireHomeActivityCouponTemplate();
 }
diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
index 4efcf6b..a416242 100644
--- a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
+++ b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
@@ -66,6 +66,14 @@
 
     Integer getUserGainCouponRecordAmountById(String couponId,Long customerId);
 
+    /**
+     *
+     * @param couponId
+     * @param userId
+     * @return
+     */
+    Integer getUserGainCouponRecordAmountByUserId(String couponId,String userId);
+
     List<CouponRecordVO> getMineCouponRecordList(QueryMineCouponRecordDTO dto);
 
     /**
@@ -110,4 +118,6 @@
      * @return
      */
     boolean checkUserCouponExists(String couponId, Long customId);
+
+
 }
diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java b/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
index a1b7339..b33de57 100644
--- a/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
+++ b/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
@@ -92,4 +92,12 @@
     List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto);
 
     void exchangeCoupon(ExchangeCouponDTO dto);
+
+    /**
+     * 查询首页弹簧,且当前自己领取过的话则不用展示
+     * @param dto
+     * @return
+     */
+    CouponTemplateVO getHomeActivityEffectAlert(QueryActivityEffectCouponDTO dto);
+
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
index 3a788f3..a5138f9 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
@@ -395,6 +395,17 @@
     }
 
     @Override
+    public Integer getUserGainCouponRecordAmountByUserId(String couponId, String userId) {
+        QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>();
+        queryWrapper.lambda().eq(CouponRecordDO::getDeleted, TrueOrFalseEnum.FALSE.isFlag())
+                .eq(StringUtils.isNotBlank(couponId), CouponRecordDO::getCouponId,couponId)
+                .eq(null!=userId,CouponRecordDO::getUserId,userId)
+        ;
+
+        return baseMapper.selectCount(queryWrapper);
+    }
+
+    @Override
     public List<CouponRecordVO> getMineCouponRecordList(QueryMineCouponRecordDTO dto) {
         checkCouponExpired(dto);
         return couponRecordMapperCustom.getMineCouponRecordList(dto);
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
index 4c11832..1a264ea 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -308,6 +308,15 @@
                 couponRecordService.saveBatch(couponUsageDOList);
             }
         }
+
+        // 如果是活动优惠券且领取渠道是Home类型的,那么只能设置当前优惠券为激活状态,其他优惠券是激活状态的设置为下架状态
+        if (StringUtils.isNotBlank(couponTemplateDO.getCategory())  && couponTemplateDO.getCategory().equals(CouponCategoryEnum.ACTIVITY.getStatus())
+                && StringUtils.isNotBlank(couponTemplateDO.getGetType()) && couponTemplateDO.getGetType().equals(CouponGetTypeEnum.HOME.getType())
+        ) {
+
+            couponTemplateMapperCustom.expireHomeActivityCouponTemplate();
+        }
+
         return baseMapper.updateById(couponTemplateDO) > 0;
     }
 
@@ -452,6 +461,23 @@
     }
 
     @Override
+    public CouponTemplateVO getHomeActivityEffectAlert(QueryActivityEffectCouponDTO dto) {
+        dto.setUserId(SecurityUtils.getUserId());
+        final CouponTemplateVO homeActivityEffectAlert = couponTemplateMapperCustom.getHomeActivityEffectAlert(dto);
+        if(null!=homeActivityEffectAlert){
+            // 查看当前已经领取了几张
+            final Integer getCnt = couponRecordService.getUserGainCouponRecordAmountByUserId(homeActivityEffectAlert.getId(), SecurityUtils.getUserId());
+            // 如果当前领取的数量小于限制领取的数量的时候,可以再次领取
+            if(null!=homeActivityEffectAlert.getGetLimit() && null!=getCnt
+                   && homeActivityEffectAlert.getGetLimit().compareTo(getCnt)>0){
+                return homeActivityEffectAlert;
+            }
+        }
+
+        return null;
+    }
+
+    @Override
     public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) {
 
         return couponTemplateMapperCustom.getActivityEffectList(dto);
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
index 547b8af..fb33a94 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
@@ -53,16 +53,29 @@
     @Autowired
    CustomerMapper customerMapper;
 
-    @GetMapping("/home/list")
+//    @GetMapping("/home/list")
+//    @ApiOperation(value = "查询-首页弹框", notes = "查询-首页弹框")
+//    public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> homeList(QueryActivityEffectCouponDTO dto) {
+//        // 活动优惠券
+//        dto.setCategory(CouponCategoryEnum.ACTIVITY.getStatus());
+//        // 已经发布
+//        dto.setStatus(CouponStatusEnum.ACTIVE.getStatus());
+//        // 首页弹窗
+//        dto.setGetType(CouponGetTypeEnum.HOME.getType());
+//        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponTemplateService.getActivityEffectList(dto), CouponTemplateAppVO.class));
+//    }
+
+    @GetMapping("/home/alert")
     @ApiOperation(value = "查询-首页弹框", notes = "查询-首页弹框")
-    public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> homeList(QueryActivityEffectCouponDTO dto) {
+    public ResponseEntity<ReturnDataDTO<CouponTemplateVO>> homeAlert(QueryActivityEffectCouponDTO dto) {
         // 活动优惠券
         dto.setCategory(CouponCategoryEnum.ACTIVITY.getStatus());
         // 已经发布
         dto.setStatus(CouponStatusEnum.ACTIVE.getStatus());
         // 首页弹窗
         dto.setGetType(CouponGetTypeEnum.HOME.getType());
-        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponTemplateService.getActivityEffectList(dto), CouponTemplateAppVO.class));
+        // 如果当前人员已经领取过的话,则不返回
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(couponTemplateService.getHomeActivityEffectAlert(dto), CouponTemplateAppVO.class));
     }
 
     @GetMapping("/activy/list")
diff --git a/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml b/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
index 618568f..7ce2dbb 100644
--- a/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
+++ b/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
@@ -56,6 +56,9 @@
             #{item}
         </foreach>
     </update>
+    <update id="expireHomeActivityCouponTemplate">
+        update t_coupon_template set status='expired'  where  category='activity' and get_type='home' and status='active'
+    </update>
 
     <select id="getCouponTemplatePage" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
         <include refid="QuerySql2"/>
@@ -113,6 +116,28 @@
     <select id="getCouponTemplateVipPage" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
         <include refid="QuerySqlVip" />
     </select>
+    <select id="getHomeActivityEffectAlert" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
+        SELECT *
+        FROM t_coupon_template t
+        WHERE t.deleted = FALSE
+
+        <if test="param.category != null and param.category != '' and param.category == 'activity' ">
+            AND t.get_start_date &lt;= NOW()
+            AND NOW() &lt;= t.get_end_date
+        </if>
+
+        <if test="param.category != null and param.category != ''">
+            AND t.category =  #{param.category}
+        </if>
+        <if test="param.status != null and param.status != ''">
+            AND t.status =  #{param.status}
+        </if>
+        <if test="param.getType != null and param.getType != ''">
+            AND t.get_type =  #{param.getType}
+        </if>
+        ORDER BY t.create_time DESC
+        limit 1
+    </select>
 
     <sql id="QueryPointSql">
         select *
diff --git a/src/main/v2_sql.sql b/src/main/v2_sql.sql
new file mode 100644
index 0000000..815b293
--- /dev/null
+++ b/src/main/v2_sql.sql
@@ -0,0 +1,33 @@
+CREATE TABLE `flower`.`t_coupon_template`  (
+  `id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
+  `coupon_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '优惠券代码(唯一)',
+  `coupon_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '优惠券名称',
+  `coupon_description` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '优惠券描述(使用规则)',
+  `coupon_amount` int(11) NULL DEFAULT NULL COMMENT '发放数量',
+  `coupon_discount_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '优惠券类型(COUPON_TYPE)满减和无门槛',
+  `coupon_discount_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '优惠券面值  折扣值(百分比或金额)',
+  `min_order_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '使用条件,最小订单金额(可选)=》使用条件',
+  `max_discount_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大折扣金额(可选,仅对百分比折扣类型适用)',
+  `get_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '领取渠道(COUPON_GET_TYPE)首页弹窗、活动入口、领券中心',
+  `get_user_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '领取用户类型(COUPON_GET_USER_TYPE)全部用户,指定用户',
+  `get_start_date` datetime NULL DEFAULT NULL COMMENT '领取开始时间',
+  `get_end_date` datetime NULL DEFAULT NULL COMMENT '领取结束时间',
+  `get_limit` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '每人限领',
+  `usage_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '使用时间类型(COUPON_USAGE_TYPE)与领取时间一致、固定时间、领取后有效',
+  `usage_time_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '领取后有效类型(COUPON_USAGE_TIME_TYPE)天、小时、分钟',
+  `usage_time_num` int(11) NULL DEFAULT NULL COMMENT '领取后有效时间整数,比如90(天,小时,分钟)',
+  `usage_limit` int(11) NULL DEFAULT NULL COMMENT '使用次数限制',
+  `usage_per_user` int(11) NULL DEFAULT NULL COMMENT '每个用户的使用次数限制',
+  `usage_start_date` datetime NULL DEFAULT NULL COMMENT '使用开始时间',
+  `usage_end_date` datetime NULL DEFAULT NULL COMMENT '使用结束时间',
+  `status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'active' COMMENT '优惠券状态(COUPON_STATUS)',
+  `vip_flag` tinyint(4) NULL DEFAULT 0 COMMENT '会员标志',
+  `vip_grade` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会员等级',
+  `create_by` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+  `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_by` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+  `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
+  `deleted` tinyint(4) NULL DEFAULT 0 COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `coupon_code`(`coupon_code`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
\ No newline at end of file

--
Gitblit v1.9.3