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 | 856 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 456 insertions(+), 400 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 9585a92..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,400 +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 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; - - @Override - public BigDecimal computeBaseFanliMoney(CommonOrder order) { - return getBaseCommission(order); - } - - @Override - public BigDecimal computeBaseShareMoney(CommonOrder order) { - return getBaseCommission(order); - } - - 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) { - BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime()); - 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) { - - BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime()) - .add(getOfficialSubsidyRate(order.getThirdCreateTime(), - getCommonUserLevel(order.getThirdCreateTime(), userLevel), false)); - 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) { - BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime()) - .add(getOfficialSubsidyRate(order.getThirdCreateTime(), - getCommonUserLevel(order.getThirdCreateTime(), userLevel), true)); - - 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) { - BigDecimal rate = null; - if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) { - rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 1).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()); - if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ) - return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)), - new BigDecimal(100)); - else if (order.getEstimate() != null) - return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)), - new BigDecimal(100)); - } - - return null; - } - - @Override - public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer, - List<UserTeamLevel> bossLevelList) { - BigDecimal rate = null; - if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) { - rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2).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()); - if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ) - return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)), - new BigDecimal(100)); - else if (order.getEstimate() != null) - return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)), - new BigDecimal(100)); - } - - return null; - } - - /** - * 鑾峰彇瀹樻柟琛ヨ创姣斾緥 - * @Title: getOfficialSubsidyRate - * @Description: - * @param date - * @param userLevel - * @param share - * @return - * BigDecimal 杩斿洖绫诲瀷 - * @throws - */ - private BigDecimal getOfficialSubsidyRate(Date date, UserLevelEnum userLevel, boolean share) { - 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")); - else - rate = new BigDecimal(hongBaoManageService.get(key)); - return rate; - } - - private BigDecimal getRateByLevel(UserLevelEnum level, Date date) { - BigDecimal baseRate = hongBaoManageService.getBaseFanliRateCache( - TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH")); - - BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false); - - return baseRate.add(subsidyRate); - } - - @Override - public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date, - int deep) { - 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()); - } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) { - rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime()); - } else { - BigDecimal bossRate = getRateByLevel(boss.getLevel(), date); - BigDecimal buyerRate = getRateByLevel(buyerLevel, date); - 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); - BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 1).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()); - 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()); - 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()); - else { - rate = null; - } - } - // 鏋佸樊璁$畻娉� - if (rate == null) { - rate = getRateByLevel(boss.getLevel(), date).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) { - if (bossLevelList == null || bossLevelList.size() < 3) - return null; - - UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1); - if (firstBoss == null) - return null; - UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2); - if (secondBoss == null) - return null; - - BigDecimal buyerRate = getRateByLevel(buyerLevel, date); - - 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); - 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) { - 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()); - BigDecimal vipTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_super", - date.getTime()); - - 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()))); - break; - } - } - - return rateList; - } - - @Override - public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money, - List<UserTeamLevel> bossLevelList, Date date) { - // TODO Auto-generated method stub - return null; - } - - private BigDecimal getFanliRate(Date time, UserLevelEnum userLevel) { - BigDecimal rate = hongBaoManageService - .getBaseFanliRateCache(TimeUtil - .convertToTimeTemp(TimeUtil.getGernalTime(time.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH")) - .add(getOfficialSubsidyRate(time, getCommonUserLevel(time, userLevel), false)); - - if (userLevel == UserLevelEnum.normalVIP) - rate = new BigDecimal("61"); - return rate; - } - - @Override - public ConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel) { - BigDecimal fanLiRate = getFanliRate(new Date(), userLevel); - BigDecimal shareRate = fanLiRate; - ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE, - getFanliRate(new Date(), UserLevelEnum.superVIP)); - if (VersionUtil.greaterThan_2_0_5(platform, version)) { - paramsDTO.setMaxRewardRate(null); - } - return paramsDTO; - } - - @Override - public ConfigParamsDTO getShowComputeRate(String platform, String version) { - return getShowComputeRate(platform, version, UserLevelEnum.daRen); - } - -} +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