Authored by 匡佳华

促销活动update

... ... @@ -3,8 +3,10 @@ package com.yohoufo.dal.promotion;
import com.yohoufo.dal.promotion.model.Activity;
import java.util.List;
public interface IActivityMapper {
Activity selectRunningActivity(Integer currentTime);
List<Activity> selectRunningActivity(Integer currentTime);
}
... ...
... ... @@ -18,11 +18,10 @@
</resultMap>
<select id="selectRunningActivity" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select id, activity_name, label, start_time, end_time, promotion_type, product_limit_type, join_limit_type, join_limit_times, status,business_client
select id, activity_name, label, start_time, end_time, promotion_type, product_limit_type, join_limit_type, join_limit_times, status, business_client
from promotion_activity
where status = 1
and #{currentTime, jdbcType=INTEGER} between start_time and end_time
limit 1;
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -37,7 +37,7 @@ public class ActivityController {
@IgnoreSession
@Cachable(expire = 60)
public ApiResponse getPromotionActivityList(@RequestParam(value = "product_id", required = true) Integer productId,
@RequestParam(value = "business_client", required = false) String businessClient) {
@RequestParam(value = "business_client", required = false, defaultValue = "ufo") String businessClient) {
logger.info("Method:ufo.promotion.activityListForProduct. enter, productId is {}", productId);
List<PromotionActivityRspBo> activityListForProduct = activityService.getActivityListForProduct(productId, businessClient);
logger.info("Method:ufo.promotion.activityListForProduct. out, productId is {}", productId);
... ... @@ -51,6 +51,7 @@ public class ActivityController {
@RequestMapping(params = "method=ufo.promotion.activityListForOrder")
@ResponseBody
@IgnoreSession
@Cachable(expire = 60)
public List<PromotionActivityRspBo> getPromotionActivityDetail() {
logger.info("Method:ufo.promotion.activityListForOrder. enter");
return activityService.getActivityListForOrder();
... ...
... ... @@ -22,10 +22,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class ActivityServiceImpl implements IActivityService {
... ... @@ -53,25 +55,19 @@ public class ActivityServiceImpl implements IActivityService {
@Override
public List<PromotionActivityRspBo> getActivityListForProduct(Integer productId, String businessClient) {
logger.info("getPromotionActivityList: enter. productId is {}, businessClient is {}", productId, businessClient);
//获取当前正在进行中的活动
Activity activity = activityMapper.selectRunningActivity(DateUtil.getCurrentTimeSeconds());
if(activity == null) { // 没有进行中的促销活动
//获取当前正在进行中活动
List<Activity> activityList = activityMapper.selectRunningActivity(DateUtil.getCurrentTimeSeconds());
if(CollectionUtils.isEmpty(activityList)){
logger.info("getPromotionActivityList: no running activity. productId is {}", productId);
return new ArrayList<>();
}
if (BusinessClientEnum.BUSINESS_CLIENT_XIANYU.getName().equals(businessClient)
&& StringUtils.isNotEmpty(activity.getBusinessClient())
&& !activity.getBusinessClient().contains(BusinessClientEnum.BUSINESS_CLIENT_XIANYU.getName())) { // 如果是闲鱼请求,则比较促销活动的类型是否含有闲鱼
logger.info("getPromotionActivityList: no running xianyu activity. productId is {}", productId);
return new ArrayList<>();
} else if (!BusinessClientEnum.BUSINESS_CLIENT_XIANYU.getName().equals(businessClient)
&& StringUtils.isNotEmpty(activity.getBusinessClient())
&& !activity.getBusinessClient().contains(BusinessClientEnum.BUSINESS_CLIENT_UFO.getName())) { // 非闲鱼请求 ,则比较促销活动类型是否含有UFO
logger.info("getPromotionActivityList: no running ufo activity. productId is {}", productId);
//匹配对用购买渠道的活动(同一时间最多两个促销活动,闲鱼,ufo各一个)
List<Activity> businessClientActivityList = activityList.stream().filter(x -> StringUtils.isNotEmpty(x.getBusinessClient()) && x.getBusinessClient().equals(businessClient)).collect(Collectors.toList());
if(CollectionUtils.isEmpty(businessClientActivityList)){
logger.info("getPromotionActivityList: no running activity. productId is {}, businessClient is {}", productId, businessClient);
return new ArrayList<>();
}
Activity activity = businessClientActivityList.get(0);
//判断商品是否符合商品池限制条件(limitType: 1-包含商品池 2-不包含商品池)
ActivityProductScope productScope = activityProductScopeMapper.selectByActivityId(activity.getId());
if(productScope.getProductScopeType().equals(PromotionProductLimitEnum.POOL.getCode())) {
... ... @@ -101,53 +97,55 @@ public class ActivityServiceImpl implements IActivityService {
@Override
public List<PromotionActivityRspBo> getActivityListForOrder() {
logger.info("getPromotionActivityList: enter");
//获取当前正在进行的活动
Activity activity = activityMapper.selectRunningActivity(DateUtil.getCurrentTimeSeconds());
if(activity == null){
logger.info("getPromotionActivityList: no running activity");
//获取当前正在进行的活动,当前时间最多同时存在两个促销活动,ufo/闲鱼各一个
List<Activity> activityList = activityMapper.selectRunningActivity(DateUtil.getCurrentTimeSeconds());
if(CollectionUtils.isEmpty(activityList)){
logger.info("getPromotionActivityList: no running activity ");
return new ArrayList<>();
}
//组装活动详细信息
PromotionActivityRspBo rspBo = new PromotionActivityRspBo();
rspBo.setId(activity.getId());
rspBo.setActivityName(activity.getActivityName());
rspBo.setStartTime(activity.getStartTime());
rspBo.setEndTime(activity.getEndTime());
rspBo.setPromotionType(activity.getPromotionType());
rspBo.setLabel(activity.getLabel());
rspBo.setBusinessClient(activity.getBusinessClient());
List<Integer> productLimitTypeList = new ArrayList<>();
for(String productLimitType : activity.getProductLimitType().split(",")){
productLimitTypeList.add(Integer.valueOf(productLimitType));
}
rspBo.setProductTypeLimitList(productLimitTypeList);
//参与次数过滤条件
PromotionJoinTimeLimitBo joinTimeLimitBo = new PromotionJoinTimeLimitBo();
joinTimeLimitBo.setType(activity.getJoinLimitType());
joinTimeLimitBo.setActivityJoinLimitTime(activity.getJoinLimitTimes());
rspBo.setPromotionJoinTimeLimit(joinTimeLimitBo);
//金额限制条件
ActivityAmountCondition activityAmountCondition = activityAmountConditionMapper.selectByActivityId(activity.getId());
List<PromotionAmountConditionBo> amountConditionBoList = new ArrayList<>();
PromotionAmountConditionBo amountConditionBo = new PromotionAmountConditionBo();
amountConditionBo.setLimitAmount(activityAmountCondition.getLimitAmount());
amountConditionBo.setOfferAmount(activityAmountCondition.getOfferAmount());
amountConditionBo.setOfferMaxLimit(activityAmountCondition.getOfferMaxLimit());
amountConditionBoList.add(amountConditionBo);
rspBo.setPromotionConditionList(amountConditionBoList);
//商品范围限制条件
ActivityProductScope productScope = activityProductScopeMapper.selectByActivityId(activity.getId());
List<PromotionProductScopeBo> productScopeBoList = new ArrayList<>();
PromotionProductScopeBo productScopeBo = new PromotionProductScopeBo();
Integer productScopeType = productScope.getProductScopeType();
productScopeBo.setProductScopeType(productScopeType);
productScopeBo.setLimitType(productScopeType.equals(PromotionProductLimitEnum.ALL.getCode()) ? null : productScope.getLimitType());
productScopeBo.setScopeValue(productScopeType.equals(PromotionProductLimitEnum.ALL.getCode()) ? null : productScope.getLimitValues());
productScopeBoList.add(productScopeBo);
rspBo.setPromotionProductScopeList(productScopeBoList);
logger.info("getPromotionActivityList: end.activityInfo is {}", rspBo);
List<PromotionActivityRspBo> list = new ArrayList<>();
list.add(rspBo);
for(Activity activity: activityList) {
//组装活动详细信息
PromotionActivityRspBo rspBo = new PromotionActivityRspBo();
rspBo.setId(activity.getId());
rspBo.setActivityName(activity.getActivityName());
rspBo.setStartTime(activity.getStartTime());
rspBo.setEndTime(activity.getEndTime());
rspBo.setPromotionType(activity.getPromotionType());
rspBo.setLabel(activity.getLabel());
rspBo.setBusinessClient(activity.getBusinessClient());
List<Integer> productLimitTypeList = new ArrayList<>();
for (String productLimitType : activity.getProductLimitType().split(",")) {
productLimitTypeList.add(Integer.valueOf(productLimitType));
}
rspBo.setProductTypeLimitList(productLimitTypeList);
//参与次数过滤条件
PromotionJoinTimeLimitBo joinTimeLimitBo = new PromotionJoinTimeLimitBo();
joinTimeLimitBo.setType(activity.getJoinLimitType());
joinTimeLimitBo.setActivityJoinLimitTime(activity.getJoinLimitTimes());
rspBo.setPromotionJoinTimeLimit(joinTimeLimitBo);
//金额限制条件
ActivityAmountCondition activityAmountCondition = activityAmountConditionMapper.selectByActivityId(activity.getId());
List<PromotionAmountConditionBo> amountConditionBoList = new ArrayList<>();
PromotionAmountConditionBo amountConditionBo = new PromotionAmountConditionBo();
amountConditionBo.setLimitAmount(activityAmountCondition.getLimitAmount());
amountConditionBo.setOfferAmount(activityAmountCondition.getOfferAmount());
amountConditionBo.setOfferMaxLimit(activityAmountCondition.getOfferMaxLimit());
amountConditionBoList.add(amountConditionBo);
rspBo.setPromotionConditionList(amountConditionBoList);
//商品范围限制条件
ActivityProductScope productScope = activityProductScopeMapper.selectByActivityId(activity.getId());
List<PromotionProductScopeBo> productScopeBoList = new ArrayList<>();
PromotionProductScopeBo productScopeBo = new PromotionProductScopeBo();
Integer productScopeType = productScope.getProductScopeType();
productScopeBo.setProductScopeType(productScopeType);
productScopeBo.setLimitType(productScopeType.equals(PromotionProductLimitEnum.ALL.getCode()) ? null : productScope.getLimitType());
productScopeBo.setScopeValue(productScopeType.equals(PromotionProductLimitEnum.ALL.getCode()) ? null : productScope.getLimitValues());
productScopeBoList.add(productScopeBo);
rspBo.setPromotionProductScopeList(productScopeBoList);
list.add(rspBo);
}
logger.info("getPromotionActivityList: end.activityInfo is {}", list);
return list;
}
... ...