LeafAverageStrategy.java 3.69 KB
package com.zhaoonline.coupen.generator.distribute;

import com.zhaoonline.coupen.bean.*;
import com.zhaoonline.coupen.utils.Utils;
import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by ZhaoOnline<br/>
 * User: yangyoupeng<br/>
 * Date: 2016/12/15<br/>
 * Time: 10:20<br/>
 * Description:此测试适用于。将每一个大红包的金额。按照所需帮拆好友的数目,再划分若干等分
 */
public class LeafAverageStrategy implements  DistributeStrategy {
    private static final String STRATEGY_NAME="iavr";
    AverageStrategy averageStatragy=new AverageStrategy();
    @Override
    public CoupenContext<LeafCoupenEntity,HelpOpenCoupenSeed> distribute(CommonCoupenSeed seed) {
        if(ObjectUtils.isEmpty(seed)){
            return CoupenContext.empty();
        }
        CoupenContext<CommonCoupenEntity,CommonCoupenSeed>  contextOfSeed= averageStatragy.distribute(seed);

        HelpOpenCoupenSeed helpOpenCoupenSeed=null;

        if(contextOfSeed.getSeed() instanceof  HelpOpenCoupenSeed){
            helpOpenCoupenSeed=(HelpOpenCoupenSeed)contextOfSeed.getSeed();
        }
        List<CommonCoupenEntity> coupenListFromSeed=contextOfSeed.getCoupens();

        List<LeafCoupenEntity> newCreatedCoupens=new ArrayList<LeafCoupenEntity>();

        //帮拆的朋友个数
        Integer helperCount=helpOpenCoupenSeed.getHelperCount();

        HelpOpenType helpOpenType=helpOpenCoupenSeed.getHelpOpenType();

        switch (helpOpenType){
            case VALIDE_LAST_TIME:{
                for(CommonCoupenEntity coupenEntity:coupenListFromSeed){
                    LeafCoupenEntity leafCoupenEntity=new LeafCoupenEntity();
                    leafCoupenEntity.setParentCoupen(coupenEntity);
                    leafCoupenEntity.setSeed(helpOpenCoupenSeed);
                    leafCoupenEntity.setAmount(coupenEntity.getAmount());
                    leafCoupenEntity.setCoupenID(generateCoupenID());
                    newCreatedCoupens.add(leafCoupenEntity);
                }
                break;
            }
            case VALIDE_ON_TIME:{
                for(CommonCoupenEntity coupenEntity:coupenListFromSeed){
                    BigDecimal amountPerChildCoupne= amountPerCoupen(coupenEntity.getAmount(),helpOpenCoupenSeed.getHelperCount());
                    for(int i=0;i< helperCount.intValue();i++){
                        LeafCoupenEntity leafCoupenEntity=new LeafCoupenEntity();
                        leafCoupenEntity.setParentCoupen(coupenEntity);
                        leafCoupenEntity.setSeed(helpOpenCoupenSeed);
                        leafCoupenEntity.setAmount(amountPerChildCoupne);
                        leafCoupenEntity.setCoupenID(generateCoupenID());
                        newCreatedCoupens.add(leafCoupenEntity);
                    }
                };
                break;
            }
            default:{
                break;
            }
        }
        CoupenContext<LeafCoupenEntity,HelpOpenCoupenSeed>  newContext= new CoupenContext<LeafCoupenEntity,HelpOpenCoupenSeed>();
        newContext.setCoupens(newCreatedCoupens);
        newContext.setSeed(helpOpenCoupenSeed);
        return newContext;

    }

    /** 计算每个红包的金额
     * @param totalAmount
     * @param divideCount
     * @return
     */
    private BigDecimal amountPerCoupen(BigDecimal totalAmount,Integer divideCount){
        return  totalAmount.divide(new BigDecimal(divideCount),3,BigDecimal.ROUND_HALF_UP);
    }
    @Override
    public String distributeName() {
        return STRATEGY_NAME;
    }

    private String generateCoupenID(){
        return  Utils.getRandomForDate(STRATEGY_NAME);
    }

}