1.活动优惠券-管理端-类型是首页领取的活动优惠券,发布的时候将已经发布的设置为下架,只能留有一个已发布的优惠券
3.活动优惠券-小程序-新增首页弹窗优惠券-如果领取数量没有超过当前优惠券还可以再次领取,超过领取优惠券的话则不返回数据
已修改9个文件
已添加1个文件
179 ■■■■■ 文件已修改
pom.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/v2_sql.sql 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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;
}
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();
}
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);
}
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);
}
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);
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);
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")
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 *
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;