From 744594ef1a2f530fc3e86ea9dc48b62247f79420 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 19 五月 2020 17:13:23 +0800 Subject: [PATCH] 饿了么绘图,添加口碑 --- fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamDividentsManager.java | 242 +++++++++++++++++------------------------------- 1 files changed, 86 insertions(+), 156 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamDividentsManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamDividentsManager.java index 6a14fc8..bb3638c 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamDividentsManager.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamDividentsManager.java @@ -13,16 +13,14 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import com.yeshi.fanli.entity.bus.user.ThreeSale; -import com.yeshi.fanli.entity.bus.user.vip.TeamUserLevelStatistic; -import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; -import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.entity.order.dividents.TeamDividentsDebt; import com.yeshi.fanli.entity.order.dividents.TeamDividentsRecord; import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder; +import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap; import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceUser; import com.yeshi.fanli.exception.ParamsException; import com.yeshi.fanli.exception.money.TeamDividentsDebtException; +import com.yeshi.fanli.exception.money.TeamEincomeRecordException; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.exception.order.dividents.TeamDividentsRecordException; import com.yeshi.fanli.service.inter.money.TeamDividentsDebtService; @@ -30,13 +28,12 @@ import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsRecordService; import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService; +import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService; import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceUserService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.user.vip.TeamUserLevelStatisticService; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import com.yeshi.fanli.service.manger.money.TeamEincomeManager; import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; /** * 鍥㈤槦鍒嗙孩绠$悊 @@ -47,7 +44,13 @@ public class TeamDividentsManager { @Resource + private TeamDividentsSourceManager teamDividentsSourceManager; + + @Resource private TeamDividentsSourceOrderService teamDividentsSourceOrderService; + + @Resource + private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService; @Resource private TeamDividentsSourceUserService teamDividentsSourceUserService; @@ -70,6 +73,9 @@ @Resource private HongBaoManageService hongBaoManageService; + @Resource + private TeamEincomeManager teamEincomeManager; + /** * 寮�濮嬪垎绾� * @Title: startDividents @@ -85,91 +91,38 @@ startDividents(sourceUid, preSendTime); } - // 鏄惁鍙互鍒嗙孩 - private boolean isCanDividents(TeamUserLevelStatistic tus) { - if (Constant.IS_TEST) - return true; - - if (tus != null && (tus.getLevel() == UserLevelEnum.highVIP || tus.getLevel() == UserLevelEnum.superVIP - || tus.getLevel() == UserLevelEnum.tearcher)) { - if (tus.getLevel() == UserLevelEnum.highVIP) { - int vipFirstCount = tus.getNormalFirstCount() + tus.getHighFirstCount() + tus.getSuperFirstCount() - + tus.getTearcherFirstCount(); - if (vipFirstCount >= 3)// 鐩存帴绮変笣鏅�氫細鍛樼瓑绾т互涓婄殑鐢ㄦ埛>=3 - return true; - } else if (tus.getLevel() == UserLevelEnum.superVIP) { - int firstCount = tus.getSuperFirstCount() + tus.getTearcherFirstCount(); - int secondCount = tus.getNormalSecondCount() + tus.getHighSecondCount() + tus.getSuperSecondCount() - + tus.getTearcherSecondCount(); - if (firstCount >= 3 && secondCount >= 3) {// 鐩存帴绮変笣瓒呯骇浼氬憳绛夌骇浠ヤ笂鐨勭敤鎴�>=3 - // 闂存帴绮変笣鏅�氫細鍛樹互涓婄瓑绾�>=3 - return true; - } - } else { - int firstCount = tus.getSuperFirstCount() + tus.getTearcherFirstCount(); - int secondCount = tus.getHighSecondCount() + tus.getSuperSecondCount() + tus.getTearcherSecondCount(); - if (firstCount >= 3 && secondCount >= 3) {// 鐩存帴绮変笣瓒呯骇浼氬憳绛夌骇浠ヤ笂鐨勭敤鎴�>=3 - // 闂存帴绮変笣楂樼骇浼氬憳浠ヤ笂绛夌骇>=3 - return true; - } - } - } - return false; - } - @Transactional(rollbackFor = Exception.class) public void startDividents(Long sourceUid, Date preSendTime) throws ParamsException { String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd"); // 鏌ヨ鍑哄彲鐢ㄤ簬鍒嗙孩鐨勭敤鎴风殑鎬婚噾棰� - long count = teamDividentsSourceOrderService.countCanSendByUidAndPreSendTime(sourceUid, preSendTime); + long count = teamDividentsSourceOrderUserMapService.countCanSend(sourceUid, preSendTime); int pageSize = 1000; int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); - List<TeamDividentsSourceOrder> totalList = new ArrayList<>(); + List<TeamDividentsSourceOrderUserMap> totalList = new ArrayList<>(); for (int p = 0; p < page; p++) { - List<TeamDividentsSourceOrder> list = teamDividentsSourceOrderService - .listCanSendByUidAndPreSendTime(sourceUid, preSendTime, p + 1, pageSize); + List<TeamDividentsSourceOrderUserMap> list = teamDividentsSourceOrderUserMapService.listCanSend(sourceUid, + preSendTime, p + 1, pageSize); if (list != null && list.size() > 0) totalList.addAll(list); } - BigDecimal totalMoney = new BigDecimal(0); + Map<Long, BigDecimal> moneyMap = new HashMap<>(); - for (TeamDividentsSourceOrder order : totalList) { - TeamDividentsSourceOrder sourceOrder = teamDividentsSourceOrderService + for (TeamDividentsSourceOrderUserMap order : totalList) { + TeamDividentsSourceOrderUserMap map = teamDividentsSourceOrderUserMapService .selectByPrimaryKeyForUpdate(order.getId()); - if (sourceOrder != null && sourceOrder.getState() == TeamDividentsSourceOrder.STATE_CAN_SEND) { - totalMoney = totalMoney.add(sourceOrder.getMoney()); - teamDividentsSourceOrderService.send(sourceOrder.getId()); + if (map != null && map.getState() == TeamDividentsSourceOrderUserMap.STATE_JS) { + // 璁$畻鍒嗙孩瀵瑰簲鐨勮祫閲� + if (moneyMap.get(map.getTargetUid()) == null) + moneyMap.put(map.getTargetUid(), new BigDecimal(0)); + moneyMap.put(map.getTargetUid(), moneyMap.get(map.getTargetUid()).add(map.getMoney())); + teamDividentsSourceOrderUserMapService.send(map.getId()); } } - // 鍒嗙孩閲戦涓�0鐨勪笉鍙備笌 - if (totalMoney.compareTo(new BigDecimal(0)) <= 0) - return; - - // 鏌ヨ鍑哄彲浠ュ弬涓庡垎绾㈢殑鐢ㄦ埛 - List<ThreeSale> threeSalesList = threeSaleSerivce.getMyBossDeepList(sourceUid); - if (threeSalesList == null) - return; - - Map<Long, UserLevelEnum> uidLevel = new HashMap<Long, UserLevelEnum>(); - for (ThreeSale ts : threeSalesList) { - if (ts.getBoss() != null) { - TeamUserLevelStatistic tus = teamUserLevelStatisticService.selectByUid(ts.getBoss().getId()); - if (tus == null) - teamUserLevelStatisticService.initData(ts.getBoss().getId()); - tus = teamUserLevelStatisticService.selectByUid(ts.getBoss().getId()); - - if (isCanDividents(tus)) { - uidLevel.put(tus.getId(), tus.getLevel()); - } - } - } - - BigDecimal perDivident = computePerDivident(uidLevel, totalMoney); - for (Iterator<Long> its = uidLevel.keySet().iterator(); its.hasNext();) { + for (Iterator<Long> its = moneyMap.keySet().iterator(); its.hasNext();) { Long uid = its.next(); - BigDecimal dividents = computeUserDivident(perDivident, uidLevel.get(uid)); + BigDecimal dividents = moneyMap.get(uid).setScale(2, BigDecimal.ROUND_DOWN); // 灏嗚祫閲戝垎閰嶅埌鍙備笌鍒嗙孩鐨勭敤鎴� TeamDividentsSourceUser teamDividentsSourceUser = new TeamDividentsSourceUser(); teamDividentsSourceUser.setDay(day); @@ -178,33 +131,6 @@ teamDividentsSourceUser.setTargetUid(uid); teamDividentsSourceUserService.addTeamDividentsSourceUser(teamDividentsSourceUser); } - // if (1 / 0 > 0) - // return; - } - - // 璁$畻骞冲潎鍒嗙孩 - private BigDecimal computePerDivident(Map<Long, UserLevelEnum> uidLevels, BigDecimal totalMoney) { - int count = 0; - for (Iterator<Long> its = uidLevels.keySet().iterator(); its.hasNext();) { - Long uid = its.next(); - if (uidLevels.get(uid) == UserLevelEnum.highVIP) { - count += 1; - } else if (uidLevels.get(uid) == UserLevelEnum.superVIP) { - count += 2; - } - } - return MoneyBigDecimalUtil.div(totalMoney, new BigDecimal(count)); - } - - private BigDecimal computeUserDivident(BigDecimal perDivident, UserLevelEnum userLevel) { - if (userLevel == UserLevelEnum.highVIP) { - return perDivident; - } else if (userLevel == UserLevelEnum.superVIP) { - return MoneyBigDecimalUtil.mul(perDivident, new BigDecimal(2)); - } else if (userLevel == UserLevelEnum.tearcher) { - return MoneyBigDecimalUtil.mul(perDivident, new BigDecimal(2)); - } - return null; } /** @@ -217,7 +143,7 @@ */ public boolean isSourceUserComupteFinish(String day) { Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd")); - long count = teamDividentsSourceOrderService.countCanSendByUidAndPreSendTime(null, preSendTime); + long count = teamDividentsSourceOrderUserMapService.countCanSend(null, preSendTime); return count == 0; } @@ -233,11 +159,12 @@ * @throws */ @Transactional(rollbackFor = Exception.class) - public void addDividents(Long uid, String day) - throws TeamDividentsRecordException, TeamDividentsDebtException, UserMoneyDetailException, ParamsException { + public void addToTeamEincome(Long uid, Date preSendTime) throws TeamDividentsRecordException, + TeamDividentsDebtException, UserMoneyDetailException, ParamsException, TeamEincomeRecordException { + String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd"); BigDecimal money = teamDividentsSourceUserService.sumMoneyByUidAndDay(uid, day); // 鏌ヨ闇�瑕佹墸闄ょ殑璧勯噾 - List<TeamDividentsDebt> list = teamDividentsDebtService.listNeedRepayDebt(uid, 1, 1000); + List<TeamDividentsDebt> list = teamDividentsDebtService.listNeedRepayDebt(uid, preSendTime, 1, 1000); for (TeamDividentsDebt debt : list) { if (money.subtract(debt.getLeftMoney()).compareTo(new BigDecimal(0)) >= 0) {// 杩樻湁閽辫繕 money = money.subtract(debt.getLeftMoney()); @@ -259,12 +186,8 @@ // 鏈夊垎绾㈡墠鏄剧ず璧勯噾鏄庣粏 if (money.compareTo(new BigDecimal(0)) > 0) { - UserMoneyDetail detail = UserMoneyDetailFactory.createOrderTeamDividents(uid, money, new Date()); - // 澧炲姞璧勯噾 - userMoneyService.addUserMoney(uid, money, detail); - // TODO 鍔犲叆閫氱煡 + teamEincomeManager.addTeamDividents(uid, preSendTime, money); } - } /** @@ -281,58 +204,65 @@ @Transactional(rollbackFor = Exception.class) public void weiQuan(String orderNo, int sourceType) throws TeamDividentsDebtException { // 鏌ヨ璁㈠崟鏄惁宸茬粡鍒嗙孩 - TeamDividentsSourceOrder sourceOrder = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, - sourceType); - if (sourceOrder == null) - return; - if (sourceOrder.getState() == TeamDividentsSourceOrder.STATE_INVALID) + TeamDividentsSourceOrder order = teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType); + if (order == null) return; - if (sourceOrder.getState() == TeamDividentsSourceOrder.STATE_ALREADY_SEND) {// 宸茬粡鍙戦�侊紝闇�瑕佸弬涓庡垎绾㈢殑浜哄垎鎽� - BigDecimal money = sourceOrder.getMoney(); - // 鏌ヨ鍙備笌杩欎竴鍗曞垎绾㈢殑浜� - String day = TimeUtil.getGernalTime(sourceOrder.getSendTime().getTime(), "yyyy-MM-dd"); - if (Constant.IS_TEST) - day = TimeUtil.getGernalTime(sourceOrder.getPreSendTime().getTime(), "yyyy-MM-dd"); + List<TeamDividentsSourceOrderUserMap> mapList = teamDividentsSourceOrderUserMapService + .listBySourceOrderId(order.getId()); + if (mapList == null || mapList.size() == 0) + return; - List<TeamDividentsSourceUser> list = teamDividentsSourceUserService - .listBySourceUidAndDay(sourceOrder.getUid(), day); - // 璁$畻姣忎釜浜虹殑姣斾緥 - BigDecimal total = new BigDecimal(0); - for (TeamDividentsSourceUser su : list) { - total = total.add(su.getMoney()); + int state = mapList.get(0).getState(); + + if (state == TeamDividentsSourceOrderUserMap.STATE_SX) + return; + + if (state == TeamDividentsSourceOrderUserMap.STATE_YILINGQU) {// 宸茬粡鍙戦�侊紝闇�瑕佸弬涓庡垎绾㈢殑浜哄垎鎽� + + // 鎸塙ID灏佽缁熻璧勯噾 + Map<Long, TeamDividentsSourceOrderUserMap> orderUserMap = new HashMap<>(); + for (TeamDividentsSourceOrderUserMap map : mapList) { + if (orderUserMap.get(map.getTargetUid()) == null) + orderUserMap.put(map.getTargetUid(), map); + else { + TeamDividentsSourceOrderUserMap oldMap = orderUserMap.get(map.getTargetUid()); + oldMap.setMoney(map.getMoney().add(oldMap.getMoney())); + orderUserMap.put(map.getTargetUid(), oldMap); + } } - for (TeamDividentsSourceUser su : list) { - BigDecimal debtMoney = MoneyBigDecimalUtil.divUp(money.multiply(su.getMoney()), total); - // 闇�瑕佸伩杩樼殑璧勯噾 - TeamDividentsDebt debt = new TeamDividentsDebt(); - debt.setLeftMoney(debtMoney); - debt.setOriginMoney(debtMoney); - debt.setOrderNo(orderNo); - debt.setSourceType(sourceType); - debt.setUid(su.getTargetUid()); - // 鍔犲叆寰呭伩杩樿褰� - teamDividentsDebtService.addDebt(debt); + for (Iterator<Long> its = orderUserMap.keySet().iterator(); its.hasNext();) { + Long uid = its.next(); + TeamDividentsSourceOrderUserMap map = orderUserMap.get(uid); + + String day = TimeUtil.getGernalTime(map.getPreSendTime().getTime(), "yyyy-MM-dd"); + // 鏌ヨ鏈鎬诲叡鐨勮繑鍒� + TeamDividentsSourceUser sourceUser = teamDividentsSourceUserService + .selectBySourceUidAndDayAndUid(map.getSourceUid(), map.getTargetUid(), day); + if (sourceUser != null) { + // 涓嶈兘鍑虹幇鍊掓瑺涓�鍒嗙殑鎯呭喌 + BigDecimal debtMoney = map.getMoney().setScale(2, BigDecimal.ROUND_UP); + if (debtMoney.compareTo(sourceUser.getMoney()) > 0) + debtMoney = sourceUser.getMoney(); + + // 闇�瑕佸伩杩樼殑璧勯噾 + TeamDividentsDebt debt = new TeamDividentsDebt(); + debt.setLeftMoney(debtMoney); + debt.setOriginMoney(debtMoney); + debt.setOrderNo(orderNo); + debt.setSourceType(sourceType); + debt.setUid(map.getTargetUid()); + // 鍔犲叆寰呭伩杩樿褰� + teamDividentsDebtService.addDebt(debt); + } + } - } else if (sourceOrder.getState() == TeamDividentsSourceOrder.STATE_CAN_SEND) { - teamDividentsSourceOrderService.invalidOrder(orderNo, sourceType, "璁㈠崟缁存潈"); + + } else if (order.getState() == TeamDividentsSourceOrderUserMap.STATE_JS + || order.getState() == TeamDividentsSourceOrderUserMap.STATE_FK) { + teamDividentsSourceManager.invalidByOrder(orderNo, sourceType, "璁㈠崟缁存潈"); } - - } - - /** - * 鑾峰彇婧愯鍗曢渶瑕佸弬涓庡垎绾㈢殑姣斾緥 - * @Title: getSourceOrderDividentsRate - * @Description: - * @param level - * @return - * BigDecimal 杩斿洖绫诲瀷 - * @throws - */ - public BigDecimal getSourceOrderDividentsRate(UserLevelEnum level) { - String rate = hongBaoManageService.get("team_source_order_dividents_" + level.getLevel()); - return new BigDecimal(rate); } } -- Gitblit v1.8.0