后端:增加 MyBatis JSONTypeHandler
后端:增加指定商品的促销价格计算 前端:商品详情页,增加促销价格计算
This commit is contained in:
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class BannerBO {
|
||||
public class BannerBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class BannerPageBO {
|
||||
public class BannerPageBO implements Serializable {
|
||||
|
||||
/**
|
||||
* Banner 数组
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class CouponCardBO {
|
||||
public class CouponCardBO implements Serializable {
|
||||
|
||||
// ========== 基本信息 BEGIN ==========
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class CouponCardPageBO {
|
||||
public class CouponCardPageBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 优惠劵数组
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class CouponTemplateBO {
|
||||
public class CouponTemplateBO implements Serializable {
|
||||
|
||||
// ========== 基本信息 BEGIN ==========
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class CouponTemplatePageBO {
|
||||
public class CouponTemplatePageBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 优惠劵(码)数组
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.iocoder.mall.promotion.api.constant.ProductRecommendTypeEnum;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -11,7 +12,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductRecommendBO {
|
||||
public class ProductRecommendBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -10,7 +11,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductRecommendPageBO {
|
||||
public class ProductRecommendPageBO implements Serializable {
|
||||
|
||||
/**
|
||||
* ProductRecommend 数组
|
||||
|
||||
@@ -3,12 +3,12 @@ package cn.iocoder.mall.promotion.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class PromotionActivityBO {
|
||||
public class PromotionActivityBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 活动编号
|
||||
@@ -23,7 +23,7 @@ public class PromotionActivityBO {
|
||||
*
|
||||
* 参见 {@link cn.iocoder.mall.promotion.api.constant.PromotionActivityTypeEnum} 枚举
|
||||
*/
|
||||
private Integer type;
|
||||
private Integer activityType;
|
||||
/**
|
||||
* 活动状态
|
||||
*
|
||||
@@ -31,23 +31,27 @@ public class PromotionActivityBO {
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 匹配的商品 SPU 编号
|
||||
* 限制折扣
|
||||
*/
|
||||
private Set<Integer> spuIds;
|
||||
private TimeLimitedDiscount timeLimitedDiscount;
|
||||
/**
|
||||
* 满减送
|
||||
*/
|
||||
private FullPrivilege fullPrivilege;
|
||||
|
||||
/**
|
||||
* 限制折扣
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class TimeLimitedDiscount {
|
||||
public static class TimeLimitedDiscount implements Serializable {
|
||||
|
||||
/**
|
||||
* 商品折扣
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class Item {
|
||||
public static class Item implements Serializable {
|
||||
|
||||
/**
|
||||
* 商品 SPU 编号
|
||||
@@ -82,14 +86,14 @@ public class PromotionActivityBO {
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class FullPrivilege {
|
||||
public static class FullPrivilege implements Serializable {
|
||||
|
||||
/**
|
||||
* 优惠
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class Privilege {
|
||||
public static class Privilege implements Serializable {
|
||||
|
||||
/**
|
||||
* 满足类型
|
||||
|
||||
@@ -9,8 +9,8 @@ import java.util.Arrays;
|
||||
*/
|
||||
public enum PreferentialTypeEnum implements IntArrayValuable {
|
||||
|
||||
PRICE(1, "代金卷"),
|
||||
DISCOUNT(2, "折扣卷"),
|
||||
PRICE(1, "减价"),
|
||||
DISCOUNT(2, "打折"),
|
||||
;
|
||||
|
||||
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(PreferentialTypeEnum::getValue).toArray();
|
||||
|
||||
@@ -7,10 +7,10 @@ import java.util.Arrays;
|
||||
public enum RangeTypeEnum implements IntArrayValuable {
|
||||
|
||||
ALL(10, "所有可用"),
|
||||
PRODUCT_INCLUDE_PRT(20, "部分商品可用,或指定商品可用"),
|
||||
PRODUCT_EXCLUDE_PRT(21, "部分商品不可用,或指定商品可用"),
|
||||
CATEGORY_INCLUDE_PRT(30, "部分分类可用,或指定分类可用"),
|
||||
CATEGORY_EXCLUDE_PRT(31, "部分分类不可用,或指定分类可用"),
|
||||
PRODUCT_INCLUDE_PART(20, "部分商品可用,或指定商品可用"),
|
||||
PRODUCT_EXCLUDE_PART(21, "部分商品不可用,或指定商品可用"),
|
||||
CATEGORY_INCLUDE_PART(30, "部分分类可用,或指定分类可用"),
|
||||
CATEGORY_EXCLUDE_PART(31, "部分分类不可用,或指定分类可用"),
|
||||
;
|
||||
|
||||
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(RangeTypeEnum::getValue).toArray();
|
||||
|
||||
@@ -16,15 +16,15 @@ public interface ProductRecommendConvert {
|
||||
ProductRecommendConvert INSTANCE = Mappers.getMapper(ProductRecommendConvert.class);
|
||||
|
||||
@Mappings({})
|
||||
ProductRecommendBO convertToBO(ProductRecommendDO banner);
|
||||
ProductRecommendBO convertToBO(ProductRecommendDO recommend);
|
||||
|
||||
@Mappings({})
|
||||
List<ProductRecommendBO> convertToBO(List<ProductRecommendDO> bannerList);
|
||||
List<ProductRecommendBO> convertToBO(List<ProductRecommendDO> recommendList);
|
||||
|
||||
@Mappings({})
|
||||
ProductRecommendDO convert(ProductRecommendAddDTO bannerAddDTO);
|
||||
ProductRecommendDO convert(ProductRecommendAddDTO recommendAddDTO);
|
||||
|
||||
@Mappings({})
|
||||
ProductRecommendDO convert(ProductRecommendUpdateDTO bannerUpdateDTO);
|
||||
ProductRecommendDO convert(ProductRecommendUpdateDTO recommendUpdateDTO);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.iocoder.mall.promotion.biz.convert;
|
||||
|
||||
import cn.iocoder.mall.promotion.api.bo.PromotionActivityBO;
|
||||
import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface PromotionActivityConvert {
|
||||
|
||||
PromotionActivityConvert INSTANCE = Mappers.getMapper(PromotionActivityConvert.class);
|
||||
|
||||
@Mappings({})
|
||||
PromotionActivityBO convertToBO(PromotionActivityDO activity);
|
||||
|
||||
@Mappings({})
|
||||
List<PromotionActivityBO> convertToBO(List<PromotionActivityDO> activityList);
|
||||
|
||||
// @Mappings({})
|
||||
// PromotionActivityDO convert(PromotionActivityAddDTO activityAddDTO);
|
||||
//
|
||||
// @Mappings({})
|
||||
// PromotionActivityDO convert(PromotionActivityUpdateDTO activityUpdateDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package cn.iocoder.mall.promotion.biz.dao;
|
||||
|
||||
import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface PromotionActivityMapper {
|
||||
|
||||
PromotionActivityDO selectById(@Param("id") Integer id);
|
||||
|
||||
List<PromotionActivityDO> selectListByStatus(@Param("statuses")Collection<Integer> statuses);
|
||||
|
||||
void insert(PromotionActivityDO activity);
|
||||
|
||||
}
|
||||
@@ -58,11 +58,11 @@ public class PromotionActivityDO extends BaseDO {
|
||||
/**
|
||||
* 限制折扣字符串,使用 JSON 序列化成字符串存储
|
||||
*/
|
||||
private String timeLimitedDiscount;
|
||||
private TimeLimitedDiscount timeLimitedDiscount;
|
||||
/**
|
||||
* 满减送字符串,使用 JSON 序列化成字符串存储
|
||||
*/
|
||||
private String fullPrivilege;
|
||||
private FullPrivilege fullPrivilege;
|
||||
|
||||
/**
|
||||
* 限制折扣
|
||||
@@ -173,6 +173,10 @@ public class PromotionActivityDO extends BaseDO {
|
||||
* 指定可用商品列表
|
||||
*/
|
||||
private List<Integer> rangeValues;
|
||||
/**
|
||||
* 是否循环
|
||||
*/
|
||||
private Boolean cycled;
|
||||
/**
|
||||
* 优惠数组
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package cn.iocoder.mall.promotion.biz.mybatis;
|
||||
|
||||
import cn.iocoder.common.framework.mybatis.JSONTypeHandler;
|
||||
import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO;
|
||||
|
||||
public class TestHandler extends JSONTypeHandler<PromotionActivityDO.TimeLimitedDiscount> {
|
||||
|
||||
public TestHandler(Class<PromotionActivityDO.TimeLimitedDiscount> clazz) {
|
||||
super(clazz);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package cn.iocoder.mall.promotion.biz.service;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.promotion.api.PromotionActivityService;
|
||||
import cn.iocoder.mall.promotion.api.bo.PromotionActivityBO;
|
||||
import cn.iocoder.mall.promotion.api.constant.PromotionActivityTypeEnum;
|
||||
import cn.iocoder.mall.promotion.api.constant.RangeTypeEnum;
|
||||
import cn.iocoder.mall.promotion.biz.convert.PromotionActivityConvert;
|
||||
import cn.iocoder.mall.promotion.biz.dao.PromotionActivityMapper;
|
||||
import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@Service // 实际上不用添加。添加的原因是,必须 Spring 报错提示
|
||||
@com.alibaba.dubbo.config.annotation.Service(validation = "true")
|
||||
public class PromotionActivityServiceImpl implements PromotionActivityService {
|
||||
|
||||
@Autowired
|
||||
private PromotionActivityMapper promotionActivityMapper;
|
||||
|
||||
@Override
|
||||
public CommonResult<List<PromotionActivityBO>> getPromotionActivityListBySpuId(Integer spuId, Collection<Integer> activityStatuses) {
|
||||
return this.getPromotionActivityListBySpuIds(Collections.singleton(spuId), activityStatuses);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<PromotionActivityBO>> getPromotionActivityListBySpuIds(Collection<Integer> spuIds, Collection<Integer> activityStatuses) {
|
||||
if (spuIds.isEmpty() || activityStatuses.isEmpty()) {
|
||||
return CommonResult.success(Collections.emptyList());
|
||||
}
|
||||
// 查询指定状态的促销活动
|
||||
List<PromotionActivityDO> activityList = promotionActivityMapper.selectListByStatus(activityStatuses);
|
||||
if (activityList.isEmpty()) {
|
||||
return CommonResult.success(Collections.emptyList());
|
||||
}
|
||||
// 匹配商品
|
||||
for (Iterator<PromotionActivityDO> iterator = activityList.iterator(); iterator.hasNext();) {
|
||||
PromotionActivityDO activity = iterator.next();
|
||||
boolean matched = false;
|
||||
for (Integer spuId : spuIds) {
|
||||
if (PromotionActivityTypeEnum.TIME_LIMITED_DISCOUNT.getValue().equals(activity.getActivityType())) {
|
||||
matched = isSpuMatchTimeLimitDiscount(spuId, activity);
|
||||
} else if (PromotionActivityTypeEnum.FULL_PRIVILEGE.getValue().equals(activity.getActivityType())) {
|
||||
matched = isSpuMatchFullPrivilege(spuId, activity);
|
||||
}
|
||||
if (matched) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 不匹配,则进行移除
|
||||
if (!matched) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
// 返回最终结果
|
||||
return CommonResult.success(PromotionActivityConvert.INSTANCE.convertToBO(activityList));
|
||||
}
|
||||
|
||||
private boolean isSpuMatchTimeLimitDiscount(Integer spuId, PromotionActivityDO activity) {
|
||||
Assert.isTrue(PromotionActivityTypeEnum.TIME_LIMITED_DISCOUNT.getValue().equals(activity.getActivityType()),
|
||||
"传入的必须的促销活动必须是限时折扣");
|
||||
return activity.getTimeLimitedDiscount().getItems().stream()
|
||||
.anyMatch(item -> spuId.equals(item.getSpuId()));
|
||||
}
|
||||
|
||||
private boolean isSpuMatchFullPrivilege(Integer spuId, PromotionActivityDO activity) {
|
||||
Assert.isTrue(PromotionActivityTypeEnum.FULL_PRIVILEGE.getValue().equals(activity.getActivityType()),
|
||||
"传入的必须的促销活动必须是满减送");
|
||||
PromotionActivityDO.FullPrivilege fullPrivilege = activity.getFullPrivilege();
|
||||
if (RangeTypeEnum.ALL.getValue().equals(fullPrivilege.getRangeType())) {
|
||||
return true;
|
||||
} else if (RangeTypeEnum.PRODUCT_INCLUDE_PART.getValue().equals(fullPrivilege.getRangeType())) {
|
||||
return fullPrivilege.getRangeValues().contains(spuId);
|
||||
} else {
|
||||
throw new IllegalArgumentException(String.format("促销活动(%s) 可用范围的类型是不正确", activity.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="cn.iocoder.mall.promotion.biz.dao.PromotionActivityMapper">
|
||||
|
||||
<sql id="FIELDS">
|
||||
id, title, activity_type, status, start_time,
|
||||
end_time, invalid_time, delete_time, time_limited_discount, full_privilege,
|
||||
create_time, update_time
|
||||
</sql>
|
||||
|
||||
<resultMap id="PromotionActivityResultMap" type="PromotionActivityDO">
|
||||
<result property="timeLimitedDiscount" column="time_limited_discount" javaType="cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO$TimeLimitedDiscount" typeHandler="cn.iocoder.common.framework.mybatis.JSONTypeHandler"/>
|
||||
<result property="fullPrivilege" column="full_privilege" javaType="cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO$FullPrivilege" typeHandler="cn.iocoder.common.framework.mybatis.JSONTypeHandler"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- <select id="selectListByPidAndStatusOrderBySort" resultType="PromotionActivityDO">-->
|
||||
<!-- SELECT-->
|
||||
<!-- <include refid="FIELDS" />-->
|
||||
<!-- FROM banner-->
|
||||
<!-- WHERE pid = #{pid}-->
|
||||
<!-- AND status = #{status}-->
|
||||
<!-- AND deleted = 0-->
|
||||
<!-- ORDER BY sort ASC-->
|
||||
<!-- </select>-->
|
||||
|
||||
<!-- <select id="selectList" resultType="PromotionActivityDO">-->
|
||||
<!-- SELECT-->
|
||||
<!-- <include refid="FIELDS" />-->
|
||||
<!-- FROM banner-->
|
||||
<!-- WHERE deleted = 0-->
|
||||
<!-- </select>-->
|
||||
|
||||
<select id="selectById" parameterType="Integer" resultMap="PromotionActivityResultMap">
|
||||
SELECT
|
||||
<include refid="FIELDS" />
|
||||
FROM promotion_activity
|
||||
WHERE id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="selectListByStatus" resultMap="PromotionActivityResultMap">
|
||||
SELECT
|
||||
<include refid="FIELDS" />
|
||||
FROM promotion_activity
|
||||
WHERE status IN
|
||||
<foreach item="status" collection="statuses" separator="," open="(" close=")" index="">
|
||||
#{status}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<!-- <select id="selectListByStatus" parameterType="Integer" resultType="PromotionActivityDO">-->
|
||||
<!-- SELECT-->
|
||||
<!-- <include refid="FIELDS" />-->
|
||||
<!-- FROM banner-->
|
||||
<!-- <where>-->
|
||||
<!-- <if test="status != null">-->
|
||||
<!-- status = #{status}-->
|
||||
<!-- </if>-->
|
||||
<!-- AND deleted = 0-->
|
||||
<!-- </where>-->
|
||||
<!-- </select>-->
|
||||
|
||||
<!-- <select id="selectListByTitleLike" resultType="PromotionActivityDO">-->
|
||||
<!-- SELECT-->
|
||||
<!-- <include refid="FIELDS" />-->
|
||||
<!-- FROM banner-->
|
||||
<!-- <where>-->
|
||||
<!-- <if test="title != null">-->
|
||||
<!-- title LIKE "%"#{title}"%"-->
|
||||
<!-- </if>-->
|
||||
<!-- AND deleted = 0-->
|
||||
<!-- </where>-->
|
||||
<!-- LIMIT #{offset}, #{limit}-->
|
||||
<!-- </select>-->
|
||||
|
||||
<!-- <select id="selectCountByTitleLike" resultType="Integer">-->
|
||||
<!-- SELECT-->
|
||||
<!-- COUNT(1)-->
|
||||
<!-- FROM banner-->
|
||||
<!-- <where>-->
|
||||
<!-- <if test="title != null">-->
|
||||
<!-- title LIKE "%"#{title}"%"-->
|
||||
<!-- </if>-->
|
||||
<!-- AND deleted = 0-->
|
||||
<!-- </where>-->
|
||||
<!-- </select>-->
|
||||
|
||||
<insert id="insert" parameterType="PromotionActivityDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
|
||||
INSERT INTO promotion_activity (
|
||||
title, activity_type, status, start_time,
|
||||
end_time, invalid_time, delete_time,
|
||||
time_limited_discount,
|
||||
full_privilege,
|
||||
create_time
|
||||
) VALUES (
|
||||
#{title}, #{activityType}, #{status}, #{startTime},
|
||||
#{endTime}, #{invalidTime}, #{deleteTime},
|
||||
#{timeLimitedDiscount, typeHandler=cn.iocoder.common.framework.mybatis.JSONTypeHandler},
|
||||
#{fullPrivilege, typeHandler=cn.iocoder.common.framework.mybatis.JSONTypeHandler},
|
||||
#{createTime}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- <update id="update" parameterType="PromotionActivityDO">-->
|
||||
<!-- UPDATE banner-->
|
||||
<!-- <set>-->
|
||||
<!-- <if test="title != null">-->
|
||||
<!-- title = #{title},-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="url != null">-->
|
||||
<!-- url = #{url},-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="picUrl != null">-->
|
||||
<!-- pic_url = #{picUrl} ,-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="sort != null">-->
|
||||
<!-- sort = #{sort},-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="status != null">-->
|
||||
<!-- status = #{status},-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="memo != null">-->
|
||||
<!-- memo = #{memo},-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="deleted != null">-->
|
||||
<!-- deleted = #{deleted}-->
|
||||
<!-- </if>-->
|
||||
<!-- </set>-->
|
||||
<!-- WHERE id = #{id}-->
|
||||
<!-- </update>-->
|
||||
|
||||
</mapper>
|
||||
@@ -16,4 +16,4 @@
|
||||
<typeAlias alias="LinkedList" type="java.util.LinkedList"/>
|
||||
</typeAliases>
|
||||
|
||||
</configuration>
|
||||
</configuration>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package cn.iocoder.mall.promotion.biz;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication(scanBasePackages = {"cn.iocoder.mall.promotion"})
|
||||
public class Application {
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package cn.iocoder.mall.promotion.biz.dao;
|
||||
|
||||
import cn.iocoder.common.framework.util.DateUtil;
|
||||
import cn.iocoder.mall.promotion.api.constant.PreferentialTypeEnum;
|
||||
import cn.iocoder.mall.promotion.api.constant.PromotionActivityStatusEnum;
|
||||
import cn.iocoder.mall.promotion.api.constant.PromotionActivityTypeEnum;
|
||||
import cn.iocoder.mall.promotion.api.constant.RangeTypeEnum;
|
||||
import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
|
||||
public class PromotionActivityMapperTest {
|
||||
|
||||
@Autowired
|
||||
private PromotionActivityMapper promotionActivityMapper;
|
||||
|
||||
/**
|
||||
* 插入限时折扣活动
|
||||
*/
|
||||
@Test
|
||||
@Ignore
|
||||
public void testInsert01() {
|
||||
// 创建 PromotionActivityDO 对象
|
||||
PromotionActivityDO activityDO = new PromotionActivityDO();
|
||||
activityDO.setTitle("老板跑路了");
|
||||
activityDO.setActivityType(PromotionActivityTypeEnum.TIME_LIMITED_DISCOUNT.getValue());
|
||||
activityDO.setStatus(PromotionActivityStatusEnum.RUN.getValue());
|
||||
activityDO.setStartTime(new Date());
|
||||
activityDO.setEndTime(DateUtil.addDate(new Date(), Calendar.DAY_OF_YEAR, 100));
|
||||
activityDO.setCreateTime(new Date());
|
||||
// 创建 TimeLimitedDiscount 对象
|
||||
PromotionActivityDO.TimeLimitedDiscount discount = new PromotionActivityDO.TimeLimitedDiscount();
|
||||
discount.setQuota(0);
|
||||
discount.setItems(new ArrayList<>());
|
||||
PromotionActivityDO.TimeLimitedDiscount.Item item01 = new PromotionActivityDO.TimeLimitedDiscount.Item();
|
||||
item01.setSpuId(32);
|
||||
item01.setPreferentialType(PreferentialTypeEnum.DISCOUNT.getValue());
|
||||
item01.setPreferentialValue(40);
|
||||
discount.getItems().add(item01);
|
||||
activityDO.setTimeLimitedDiscount(discount);
|
||||
promotionActivityMapper.insert(activityDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入满减送活动
|
||||
*/
|
||||
@Test
|
||||
public void testInsert02() {
|
||||
// 创建 PromotionActivityDO 对象
|
||||
PromotionActivityDO activityDO = new PromotionActivityDO();
|
||||
activityDO.setTitle("老四赶海");
|
||||
activityDO.setActivityType(PromotionActivityTypeEnum.FULL_PRIVILEGE.getValue());
|
||||
activityDO.setStatus(PromotionActivityStatusEnum.RUN.getValue());
|
||||
activityDO.setStartTime(new Date());
|
||||
activityDO.setEndTime(DateUtil.addDate(new Date(), Calendar.DAY_OF_YEAR, 100));
|
||||
activityDO.setCreateTime(new Date());
|
||||
// 创建 TimeLimitedDiscount 对象
|
||||
PromotionActivityDO.FullPrivilege fullPrivilege = new PromotionActivityDO.FullPrivilege();
|
||||
fullPrivilege.setRangeType(RangeTypeEnum.ALL.getValue());
|
||||
fullPrivilege.setCycled(Boolean.FALSE);
|
||||
fullPrivilege.setPrivileges(new ArrayList<>());
|
||||
PromotionActivityDO.FullPrivilege.Privilege privilege01 = new PromotionActivityDO.FullPrivilege.Privilege();
|
||||
privilege01.setMeetType(1); // TODO 芋艿,硬编码
|
||||
privilege01.setMeetValue(20);
|
||||
privilege01.setPreferentialType(PreferentialTypeEnum.DISCOUNT.getValue());
|
||||
privilege01.setPreferentialValue(80);
|
||||
fullPrivilege.getPrivileges().add(privilege01);
|
||||
activityDO.setFullPrivilege(fullPrivilege);
|
||||
promotionActivityMapper.insert(activityDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询促销活动
|
||||
*/
|
||||
@Test
|
||||
public void testSelectById() {
|
||||
PromotionActivityDO activity01 = promotionActivityMapper.selectById(1);
|
||||
System.out.println(activity01);
|
||||
|
||||
PromotionActivityDO activity02 = promotionActivityMapper.selectById(2);
|
||||
System.out.println(activity02);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package cn.iocoder.mall.promotion.biz;
|
||||
Reference in New Issue
Block a user