From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java |  873 ++++++++++++++++++++++++++++++---------------------------
 1 files changed, 456 insertions(+), 417 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java
index 0e9e894..c3020ec 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java
@@ -1,417 +1,456 @@
-package com.yeshi.fanli.service.impl.order;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import com.yeshi.fanli.entity.SystemEnum;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import org.springframework.stereotype.Service;
-
-import com.yeshi.fanli.dto.ConfigParamsDTO;
-import com.yeshi.fanli.dto.order.UserTeamLevel;
-import com.yeshi.fanli.dto.order.UserTeamRate;
-import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
-import com.yeshi.fanli.entity.order.CommonOrder;
-import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
-import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.TimeUtil;
-import com.yeshi.fanli.util.VersionUtil;
-import com.yeshi.fanli.util.user.UserLevelUtil;
-
-@Service
-public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
-
-    @Resource
-    private HongBaoManageService hongBaoManageService;
-
-    @Resource
-    private UserInfoService userInfoService;
-
-    @Override
-    public BigDecimal computeBaseFanliMoney(CommonOrder order) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        return getBaseCommission(order,system);
-    }
-
-    @Override
-    public BigDecimal computeBaseShareMoney(CommonOrder order) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        return getBaseCommission(order,system);
-    }
-
-    private UserLevelEnum getCommonUserLevel(Date time, UserLevelEnum userLevel) {
-        if (userLevel == null)
-            return UserLevelEnum.daRen;
-        if (time.getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
-            return UserLevelUtil.getOldLevel(userLevel);
-        else
-            return userLevel;
-    }
-
-    // 鑾峰彇鍩虹浣i噾
-    private BigDecimal getBaseCommission(CommonOrder order, SystemEnum system) {
-        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system);
-        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
-        else if (order.getEstimate() != null)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
-        else
-            return null;
-    }
-
-    @Override
-    public BigDecimal computeFanliMoney(CommonOrder order, UserLevelEnum userLevel) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(),system)
-                .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
-                        getCommonUserLevel(order.getThirdCreateTime(), userLevel), false,system));
-        if (userLevel == UserLevelEnum.normalVIP) {
-            rate = new BigDecimal("61");
-        }
-
-        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
-        else if (order.getEstimate() != null)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
-        else
-            return null;
-    }
-
-    @Override
-    public BigDecimal computeShareMoney(CommonOrder order, UserLevelEnum userLevel) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(),system)
-                .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
-                        getCommonUserLevel(order.getThirdCreateTime(), userLevel), true,system));
-
-        if (userLevel == UserLevelEnum.normalVIP) {
-            rate = new BigDecimal("61");
-        }
-
-        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
-        else if (order.getEstimate() != null)
-            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
-        else
-            return null;
-    }
-
-    @Override
-    public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer,
-                                              List<UserTeamLevel> bossLevelList) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        BigDecimal rate = null;
-        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
-            rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 1,system).getRate();
-            if (rate == null)
-                return null;
-            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
-            else if (order.getEstimate() != null)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
-        } else {// 鑰佺殑杩斿埄姣斾緥
-            rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_6", order.getThirdCreateTime().getTime(),system);
-            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order,system)),
-                        new BigDecimal(100));
-            else if (order.getEstimate() != null)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order,system)),
-                        new BigDecimal(100));
-        }
-
-        return null;
-    }
-
-    @Override
-    public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer,
-                                               List<UserTeamLevel> bossLevelList) {
-        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
-        BigDecimal rate = null;
-        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
-            rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2,system).getRate();
-            if (rate == null)
-                return null;
-            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
-            else if (order.getEstimate() != null)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
-        } else {// 鑰佺殑杩斿埄姣斾緥
-            rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_7", order.getThirdCreateTime().getTime(),system);
-            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order,system)),
-                        new BigDecimal(100));
-            else if (order.getEstimate() != null)
-                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order,system)),
-                        new BigDecimal(100));
-        }
-
-        return null;
-    }
-
-    /**
-     * 鑾峰彇瀹樻柟琛ヨ创姣斾緥
-     *
-     * @param date
-     * @param userLevel
-     * @param share
-     * @return BigDecimal 杩斿洖绫诲瀷
-     * @throws
-     * @Title: getOfficialSubsidyRate
-     * @Description:
-     */
-    private BigDecimal getOfficialSubsidyRate(Date date, UserLevelEnum userLevel, boolean share,SystemEnum system) {
-        String key = null;
-        if (share)
-            key = String.format("official_subsidy_share_%s", userLevel.getLevel());
-        else
-            key = String.format("official_subsidy_zigou_%s", userLevel.getLevel());
-        BigDecimal rate = null;
-        if (date != null)
-            rate = hongBaoManageService.getByKeyAndMaxTimeCache(key, TimeUtil
-                    .convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"),system);
-        else
-            rate = new BigDecimal(hongBaoManageService.get(key,system));
-        return rate;
-    }
-
-    private BigDecimal getRateByLevel(UserLevelEnum level, Date date,SystemEnum system) {
-        BigDecimal baseRate = hongBaoManageService.getBaseFanliRateCache(
-                TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"),system);
-
-        BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false,system);
-
-        return baseRate.add(subsidyRate);
-    }
-
-    @Override
-    public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date,
-                                          int deep,SystemEnum system) {
-        if (deep == 1) {// 鐩存帴閭�璇蜂汉濂栭噾
-            UserTeamLevel boss = bossLevelList.get(0);
-            BigDecimal rate = null;
-            if (bossLevelList == null || bossLevelList.size() < 1)
-                return null;
-
-            if (buyerLevel == UserLevelEnum.daRen && boss.getLevel() == UserLevelEnum.daRen) {
-                rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(),system);
-            } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) {
-                rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(),system);
-            } else {
-                BigDecimal bossRate = getRateByLevel(boss.getLevel(), date,system);
-                BigDecimal buyerRate = getRateByLevel(buyerLevel, date,system);
-                rate = bossRate.subtract(buyerRate);
-                if (rate.compareTo(new BigDecimal(0)) < 0)
-                    rate = new BigDecimal(0);
-            }
-
-            return new UserTeamRate(boss.getUid(), boss.getLevel(), rate);
-
-        } else if (deep == 2) {// 闂存帴閭�璇蜂汉濂栭噾
-            if (bossLevelList == null || bossLevelList.size() < 2)
-                return null;
-
-            BigDecimal buyerRate = getRateByLevel(buyerLevel, date,system);
-            BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 1,system).getRate();
-
-            UserTeamLevel boss = bossLevelList.get(1);
-            UserTeamLevel firstBoss = bossLevelList.get(0);
-            BigDecimal rate = null;
-            if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.daRen) {
-                if (boss.getLevel() == UserLevelEnum.daRen)
-                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(),system);
-                else {
-                    rate = null;
-                }
-            } else if (buyerLevel == UserLevelEnum.normalVIP && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
-                if (boss.getLevel() == UserLevelEnum.normalVIP)
-                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(),system);
-                else {
-                    rate = null;
-                }
-            } else if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
-                if (boss.getLevel() == UserLevelEnum.normalVIP)
-                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(),system);
-                else {
-                    rate = null;
-                }
-            }
-            // 鏋佸樊璁$畻娉�
-            if (rate == null) {
-                rate = getRateByLevel(boss.getLevel(), date,system).subtract(buyerRate).subtract(firstRate);
-                if (rate.compareTo(new BigDecimal(0)) < 0)
-                    rate = new BigDecimal(0);
-            }
-
-            return new UserTeamRate(boss.getUid(), boss.getLevel(), rate);
-        } else
-            return null;
-    }
-
-    @Override
-    public List<UserTeamRate> getTeamRewardMoreThan2LevelRates(UserLevelEnum buyerLevel,
-                                                               List<UserTeamLevel> bossLevelList, Date date,SystemEnum system) {
-        if (bossLevelList == null || bossLevelList.size() < 3)
-            return null;
-
-        UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1,system);
-        if (firstBoss == null)
-            return null;
-        UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2,system);
-        if (secondBoss == null)
-            return null;
-
-        BigDecimal buyerRate = getRateByLevel(buyerLevel, date,system);
-
-        BigDecimal totalRate = firstBoss.getRate().add(secondBoss.getRate()).add(buyerRate);
-
-        List<UserTeamRate> rateList = new ArrayList<>();
-
-        for (int i = 2; i < bossLevelList.size(); i++) {
-            BigDecimal rate = getRateByLevel(bossLevelList.get(i).getLevel(), date,system);
-            if (rate.compareTo(totalRate) > 0) {
-                BigDecimal subRate = rate.subtract(totalRate);
-                totalRate = subRate.add(totalRate);// 绱鍒嗘垚姣斾緥
-                rateList.add(new UserTeamRate(bossLevelList.get(i).getUid(), bossLevelList.get(i).getLevel(), subRate));
-            }
-        }
-
-        return rateList;
-    }
-
-    // 鍥㈤槦鍒嗙孩
-    @Override
-    public List<UserTeamRate> getTeamDividentsRates(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList,
-                                                    Date date,SystemEnum system) {
-        List<UserTeamRate> rateList = new ArrayList<>();
-
-        List<UserTeamLevel> levelList = new ArrayList<>();
-        levelList.add(new UserTeamLevel(null, buyerLevel));
-        levelList.addAll(bossLevelList);
-        UserLevelEnum maxLevel = buyerLevel;
-
-        List<UserTeamLevel> vipList = new ArrayList<>();
-        List<UserTeamLevel> highList = new ArrayList<>();
-
-        for (int i = 1; i < levelList.size(); i++) {
-            if (maxLevel.getLevel() <= levelList.get(i).getLevel().getLevel()) {
-                maxLevel = levelList.get(i).getLevel();
-                if (levelList.get(i).getLevel() == UserLevelEnum.highVIP)
-                    highList.add(levelList.get(i));
-                else if (levelList.get(i).getLevel() == UserLevelEnum.superVIP) {
-                    vipList.add(levelList.get(i));
-                }
-            }
-        }
-
-        if (vipList.size() >= 4) {// 鏈�澶氬垎4绾�
-            vipList = vipList.subList(0, 4);
-        }
-
-        if (highList.size() >= 4) {// 鏈�澶氬垎4绾�
-            highList = highList.subList(0, 4);
-        }
-
-        BigDecimal highTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_high",
-                date.getTime(),system);
-        BigDecimal vipTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_super",
-                date.getTime(),system);
-
-        if (vipList.size() > 0 && highList.size() > 0) {
-
-        } else if (vipList.size() == 0) {
-            highTotalRate = highTotalRate.add(vipTotalRate);
-        } else {
-            vipTotalRate = highTotalRate.add(vipTotalRate);
-        }
-
-        // 楂樼骇浼氬憳鍒嗙孩
-        if (highList.size() > 0) {
-            int count = 0;
-            for (int i = 0; i < highList.size(); i++) {
-                count += (4 - i);
-            }
-
-            BigDecimal per = MoneyBigDecimalUtil.div(highTotalRate, new BigDecimal(count), 4);
-            for (int i = 0; i < highList.size(); i++) {
-                BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4);
-                rateList.add(new UserTeamRate(highList.get(i), rate));
-            }
-        }
-
-        // 瓒呯骇浼氬憳鍒嗙孩
-        if (vipList.size() > 0) {
-            int count = 0;
-            for (int i = 0; i < vipList.size(); i++) {
-                count += (4 - i);
-            }
-
-            BigDecimal per = MoneyBigDecimalUtil.div(vipTotalRate, new BigDecimal(count), 4);
-
-            for (int i = 0; i < vipList.size(); i++) {
-                BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4);
-                rateList.add(new UserTeamRate(vipList.get(i), rate));
-            }
-
-        }
-
-        // 瀵煎笀鍒嗙孩
-        for (UserTeamLevel level : bossLevelList) {
-            if (level.getLevel() == UserLevelEnum.tearcher) {
-                rateList.add(new UserTeamRate(level,
-                        hongBaoManageService.getByKeyAndMaxTime("dividents_rate_tearcher", date.getTime(),system)));
-                break;
-            }
-        }
-
-        return rateList;
-    }
-
-    @Override
-    public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money,
-                                           List<UserTeamLevel> bossLevelList, Date date,SystemEnum system) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    private BigDecimal getFanliRate(Date time, UserLevelEnum userLevel,SystemEnum system) {
-        BigDecimal rate = hongBaoManageService
-                .getBaseFanliRateCache(TimeUtil
-                        .convertToTimeTemp(TimeUtil.getGernalTime(time.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"),system)
-                .add(getOfficialSubsidyRate(time, getCommonUserLevel(time, userLevel), false,system));
-
-        if (userLevel == UserLevelEnum.normalVIP)
-            rate = new BigDecimal("61");
-        return rate;
-    }
-
-    @Override
-    public ConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel,SystemEnum system) {
-        BigDecimal fanLiRate = getFanliRate(new Date(), userLevel,system);
-        BigDecimal shareRate = fanLiRate;
-        ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,
-                getFanliRate(new Date(), UserLevelEnum.superVIP,system));
-        if (VersionUtil.greaterThan_2_0_5(platform, version)) {
-            paramsDTO.setMaxRewardRate(null);
-        }
-        return paramsDTO;
-    }
-
-    @Override
-    public ConfigParamsDTO getShowComputeRate(String platform, String version,SystemEnum system) {
-        return getShowComputeRate(platform, version, UserLevelEnum.daRen,system);
-    }
-
-    @Override
-    public BigDecimal getFanliRate(UserLevelEnum userLevel, Date date,SystemEnum system) {
-        BigDecimal rate = hongBaoManageService.getBaseFanliRate(date.getTime(),system)
-                .add(getOfficialSubsidyRate(date, getCommonUserLevel(date, userLevel), false,system));
-        return rate;
-    }
-
-}
+package com.yeshi.fanli.service.impl.order;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.lijin.manager.UserLijinMnager;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
+import com.yeshi.fanli.dto.order.UserTeamLevel;
+import com.yeshi.fanli.dto.order.UserTeamRate;
+import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
+import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import org.yeshi.utils.TimeUtil;
+import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.util.user.UserLevelUtil;
+
+@Service
+public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
+
+    @Resource
+    private HongBaoManageService hongBaoManageService;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private UserLijinMnager userLijinMnager;
+
+    @Override
+    public BigDecimal computeBaseFanliMoney(CommonOrder order) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        return getBaseCommission(order, system);
+    }
+
+    @Override
+    public BigDecimal computeBaseShareMoney(CommonOrder order) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        return getBaseCommission(order, system);
+    }
+
+    private UserLevelEnum getCommonUserLevel(Date time, UserLevelEnum userLevel) {
+        if (userLevel == null)
+            return UserLevelEnum.daRen;
+        if (time.getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
+            return UserLevelUtil.getOldLevel(userLevel);
+        else
+            return userLevel;
+    }
+
+    // 鑾峰彇鍩虹浣i噾
+    private BigDecimal getBaseCommission(CommonOrder order, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system);
+        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
+        else if (order.getEstimate() != null)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
+        else
+            return null;
+    }
+
+    @Override
+    public BigDecimal computeFanliMoney(CommonOrder order, UserLevelEnum userLevel) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        BigDecimal rate = null;
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            rate = userLijinMnager.getUserFanliRate(order.getUserInfo().getId(), order.getThirdCreateTime());
+        } else {
+            rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system)
+                    .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
+                            getCommonUserLevel(order.getThirdCreateTime(), userLevel), false, system));
+            if (userLevel == UserLevelEnum.normalVIP) {
+                rate = new BigDecimal("61");
+            }
+        }
+
+
+        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
+        else if (order.getEstimate() != null)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
+        else
+            return null;
+    }
+
+    @Override
+    public BigDecimal computeShareMoney(CommonOrder order, UserLevelEnum userLevel) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system)
+                .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
+                        getCommonUserLevel(order.getThirdCreateTime(), userLevel), true, system));
+        if (userLevel == UserLevelEnum.normalVIP) {
+            rate = new BigDecimal("61");
+        }
+
+
+        if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
+        else if (order.getEstimate() != null)
+            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
+        else
+            return null;
+    }
+
+    @Override
+    public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer,
+                                              List<UserTeamLevel> bossLevelList) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal rate = null;
+        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
+            rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 1, system).getRate();
+            if (rate == null)
+                return null;
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
+        } else {// 鑰佺殑杩斿埄姣斾緥
+            rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_6", order.getThirdCreateTime().getTime(), system);
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+        }
+
+        return null;
+    }
+
+    @Override
+    public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer,
+                                               List<UserTeamLevel> bossLevelList) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal rate = null;
+        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
+            UserTeamRate teamRate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2, system);
+            if (teamRate != null) {
+                rate = teamRate.getRate();
+            }
+            if (rate == null)
+                return null;
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
+        } else {// 鑰佺殑杩斿埄姣斾緥
+            rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_7", order.getThirdCreateTime().getTime(), system);
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+        }
+
+        return null;
+    }
+
+    /**
+     * 鑾峰彇瀹樻柟琛ヨ创姣斾緥
+     *
+     * @param date
+     * @param userLevel
+     * @param share
+     * @return BigDecimal 杩斿洖绫诲瀷
+     * @throws
+     * @Title: getOfficialSubsidyRate
+     * @Description:
+     */
+    private BigDecimal getOfficialSubsidyRate(Date date, UserLevelEnum userLevel, boolean share, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        String key = null;
+        if (share)
+            key = String.format("official_subsidy_share_%s", userLevel.getLevel());
+        else
+            key = String.format("official_subsidy_zigou_%s", userLevel.getLevel());
+        BigDecimal rate = null;
+        if (date != null)
+            rate = hongBaoManageService.getByKeyAndMaxTimeCache(key, TimeUtil
+                    .convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system);
+        else
+            rate = new BigDecimal(hongBaoManageService.get(key, system));
+        return rate;
+    }
+
+    private BigDecimal getRateByLevel(UserLevelEnum level, Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal baseRate = hongBaoManageService.getBaseFanliRateCache(
+                TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system);
+
+        BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false, system);
+
+        return baseRate.add(subsidyRate);
+    }
+
+    @Override
+    public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date,
+                                          int deep, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        if (deep == 1) {// 鐩存帴閭�璇蜂汉濂栭噾
+            UserTeamLevel boss = bossLevelList.get(0);
+            BigDecimal rate = null;
+            if (bossLevelList == null || bossLevelList.size() < 1)
+                return null;
+
+            if (buyerLevel == UserLevelEnum.daRen && boss.getLevel() == UserLevelEnum.daRen) {
+                rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(), system);
+            } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) {
+                rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(), system);
+            } else {
+                BigDecimal bossRate = getRateByLevel(boss.getLevel(), date, system);
+                BigDecimal buyerRate = getRateByLevel(buyerLevel, date, system);
+                rate = bossRate.subtract(buyerRate);
+                if (rate.compareTo(new BigDecimal(0)) < 0)
+                    rate = new BigDecimal(0);
+            }
+
+            return new UserTeamRate(boss.getUid(), boss.getLevel(), rate);
+
+        } else if (deep == 2) {// 闂存帴閭�璇蜂汉濂栭噾
+            if (bossLevelList == null || bossLevelList.size() < 2)
+                return null;
+
+            BigDecimal buyerRate = getRateByLevel(buyerLevel, date, system);
+            BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 1, system).getRate();
+
+            UserTeamLevel boss = bossLevelList.get(1);
+            UserTeamLevel firstBoss = bossLevelList.get(0);
+            BigDecimal rate = null;
+            if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.daRen) {
+                if (boss.getLevel() == UserLevelEnum.daRen)
+                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            } else if (buyerLevel == UserLevelEnum.normalVIP && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
+                if (boss.getLevel() == UserLevelEnum.normalVIP)
+                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            } else if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
+                if (boss.getLevel() == UserLevelEnum.normalVIP)
+                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            }
+            // 鏋佸樊璁$畻娉�
+            if (rate == null) {
+                rate = getRateByLevel(boss.getLevel(), date, system).subtract(buyerRate).subtract(firstRate);
+                if (rate.compareTo(new BigDecimal(0)) < 0)
+                    rate = new BigDecimal(0);
+            }
+
+            return new UserTeamRate(boss.getUid(), boss.getLevel(), rate);
+        } else
+            return null;
+    }
+
+    @Override
+    public List<UserTeamRate> getTeamRewardMoreThan2LevelRates(UserLevelEnum buyerLevel,
+                                                               List<UserTeamLevel> bossLevelList, Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        if (bossLevelList == null || bossLevelList.size() < 3)
+            return null;
+
+        UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1, system);
+        if (firstBoss == null)
+            return null;
+        UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2, system);
+        if (secondBoss == null)
+            return null;
+
+        BigDecimal buyerRate = getRateByLevel(buyerLevel, date, system);
+
+        BigDecimal totalRate = firstBoss.getRate().add(secondBoss.getRate()).add(buyerRate);
+
+        List<UserTeamRate> rateList = new ArrayList<>();
+
+        for (int i = 2; i < bossLevelList.size(); i++) {
+            BigDecimal rate = getRateByLevel(bossLevelList.get(i).getLevel(), date, system);
+            if (rate.compareTo(totalRate) > 0) {
+                BigDecimal subRate = rate.subtract(totalRate);
+                totalRate = subRate.add(totalRate);// 绱鍒嗘垚姣斾緥
+                rateList.add(new UserTeamRate(bossLevelList.get(i).getUid(), bossLevelList.get(i).getLevel(), subRate));
+            }
+        }
+
+        return rateList;
+    }
+
+    // 鍥㈤槦鍒嗙孩
+    @Override
+    public List<UserTeamRate> getTeamDividentsRates(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList,
+                                                    Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        List<UserTeamRate> rateList = new ArrayList<>();
+
+        List<UserTeamLevel> levelList = new ArrayList<>();
+        levelList.add(new UserTeamLevel(null, buyerLevel));
+        levelList.addAll(bossLevelList);
+        UserLevelEnum maxLevel = buyerLevel;
+
+        List<UserTeamLevel> vipList = new ArrayList<>();
+        List<UserTeamLevel> highList = new ArrayList<>();
+
+        for (int i = 1; i < levelList.size(); i++) {
+            if (maxLevel.getLevel() <= levelList.get(i).getLevel().getLevel()) {
+                maxLevel = levelList.get(i).getLevel();
+                if (levelList.get(i).getLevel() == UserLevelEnum.highVIP)
+                    highList.add(levelList.get(i));
+                else if (levelList.get(i).getLevel() == UserLevelEnum.superVIP) {
+                    vipList.add(levelList.get(i));
+                }
+            }
+        }
+
+        if (vipList.size() >= 4) {// 鏈�澶氬垎4绾�
+            vipList = vipList.subList(0, 4);
+        }
+
+        if (highList.size() >= 4) {// 鏈�澶氬垎4绾�
+            highList = highList.subList(0, 4);
+        }
+
+        BigDecimal highTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_high",
+                date.getTime(), system);
+        BigDecimal vipTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_super",
+                date.getTime(), system);
+
+        if (vipList.size() > 0 && highList.size() > 0) {
+
+        } else if (vipList.size() == 0) {
+            highTotalRate = highTotalRate.add(vipTotalRate);
+        } else {
+            vipTotalRate = highTotalRate.add(vipTotalRate);
+        }
+
+        // 楂樼骇浼氬憳鍒嗙孩
+        if (highList.size() > 0) {
+            int count = 0;
+            for (int i = 0; i < highList.size(); i++) {
+                count += (4 - i);
+            }
+
+            BigDecimal per = MoneyBigDecimalUtil.div(highTotalRate, new BigDecimal(count), 4);
+            for (int i = 0; i < highList.size(); i++) {
+                BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4);
+                rateList.add(new UserTeamRate(highList.get(i), rate));
+            }
+        }
+
+        // 瓒呯骇浼氬憳鍒嗙孩
+        if (vipList.size() > 0) {
+            int count = 0;
+            for (int i = 0; i < vipList.size(); i++) {
+                count += (4 - i);
+            }
+
+            BigDecimal per = MoneyBigDecimalUtil.div(vipTotalRate, new BigDecimal(count), 4);
+
+            for (int i = 0; i < vipList.size(); i++) {
+                BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4);
+                rateList.add(new UserTeamRate(vipList.get(i), rate));
+            }
+
+        }
+
+        // 瀵煎笀鍒嗙孩
+        for (UserTeamLevel level : bossLevelList) {
+            if (level.getLevel() == UserLevelEnum.tearcher) {
+                rateList.add(new UserTeamRate(level,
+                        hongBaoManageService.getByKeyAndMaxTime("dividents_rate_tearcher", date.getTime(), system)));
+                break;
+            }
+        }
+
+        return rateList;
+    }
+
+    @Override
+    public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money,
+                                           List<UserTeamLevel> bossLevelList, Date date, SystemEnum system) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    private BigDecimal getFanliRate(Date time, UserLevelEnum userLevel, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService
+                .getBaseFanliRateCache(TimeUtil
+                        .convertToTimeTemp(TimeUtil.getGernalTime(time.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system)
+                .add(getOfficialSubsidyRate(time, getCommonUserLevel(time, userLevel), false, system));
+
+        if (userLevel == UserLevelEnum.normalVIP)
+            rate = new BigDecimal("61");
+        return rate;
+    }
+
+    @Override
+    public GoodsMoneyConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel, SystemEnum system) {
+        BigDecimal fanLiRate = getFanliRate(new Date(), userLevel, system);
+        BigDecimal shareRate = fanLiRate;
+        GoodsMoneyConfigParamsDTO paramsDTO = new GoodsMoneyConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,
+                getFanliRate(new Date(), UserLevelEnum.superVIP, system));
+        if (VersionUtil.greaterThan_2_0_5(platform, version)) {
+            paramsDTO.setMaxRewardRate(null);
+        }
+        return paramsDTO;
+    }
+
+    @Override
+    public GoodsMoneyConfigParamsDTO getShowComputeRate(String platform, String version, SystemEnum system) {
+        return getShowComputeRate(platform, version, UserLevelEnum.daRen, system);
+    }
+
+    @Override
+    public BigDecimal getFanliRate(UserLevelEnum userLevel, Date date, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(date.getTime(), system)
+                .add(getOfficialSubsidyRate(date, getCommonUserLevel(date, userLevel), false, system));
+        return rate;
+    }
+
+}

--
Gitblit v1.8.0