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 | 195 +++++++++++++++++++++++++----------------------- 1 files changed, 100 insertions(+), 95 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 cfe8bdb..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,28 +13,27 @@ 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; import com.yeshi.fanli.service.inter.money.UserMoneyService; +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.MoneyBigDecimalUtil; +import com.yeshi.fanli.service.manger.money.TeamEincomeManager; import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; /** * 鍥㈤槦鍒嗙孩绠$悊 @@ -45,7 +44,13 @@ public class TeamDividentsManager { @Resource + private TeamDividentsSourceManager teamDividentsSourceManager; + + @Resource private TeamDividentsSourceOrderService teamDividentsSourceOrderService; + + @Resource + private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService; @Resource private TeamDividentsSourceUserService teamDividentsSourceUserService; @@ -65,6 +70,12 @@ @Resource private UserMoneyService userMoneyService; + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private TeamEincomeManager teamEincomeManager; + /** * 寮�濮嬪垎绾� * @Title: startDividents @@ -77,47 +88,41 @@ public void startDividents(Long sourceUid) throws ParamsException { String day = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"); Date preSendTime = new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd")); + startDividents(sourceUid, preSendTime); + } + + @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()); } } - // 鏌ヨ鍑哄彲浠ュ弬涓庡垎绾㈢殑鐢ㄦ埛 - List<ThreeSale> threeSalesList = threeSaleSerivce.getMyBossDeepList(sourceUid); - 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 - && (tus.getLevel() == UserLevelEnum.highVIP || tus.getLevel() == UserLevelEnum.superVIP)) { - // TODO 闇�瑕佸垽鏂洟闃熺殑瓒呯骇浼氬憳涓庨珮绾т細鍛� - 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); @@ -126,29 +131,6 @@ teamDividentsSourceUser.setTargetUid(uid); teamDividentsSourceUserService.addTeamDividentsSourceUser(teamDividentsSourceUser); } - } - - // 璁$畻骞冲潎鍒嗙孩 - 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)); - } - return null; } /** @@ -161,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; } @@ -177,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()); @@ -201,12 +184,10 @@ record.setUid(uid); teamDividentsRecordService.addTeamDividentsRecord(record); - UserMoneyDetail detail = UserMoneyDetailFactory.createOrderTeamDividents(uid, money, new Date()); - // 澧炲姞璧勯噾 - userMoneyService.addUserMoney(uid, money, detail); - - // TODO 鍔犲叆閫氱煡 - + // 鏈夊垎绾㈡墠鏄剧ず璧勯噾鏄庣粏 + if (money.compareTo(new BigDecimal(0)) > 0) { + teamEincomeManager.addTeamDividents(uid, preSendTime, money); + } } /** @@ -223,41 +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"); - List<TeamDividentsSourceUser> list = teamDividentsSourceUserService - .listBySourceUidAndDay(sourceOrder.getUid(), day); - // 璁$畻姣忎釜浜虹殑姣斾緥 - BigDecimal total = new BigDecimal(0); - for (TeamDividentsSourceUser su : list) { - total = total.add(su.getMoney()); + List<TeamDividentsSourceOrderUserMap> mapList = teamDividentsSourceOrderUserMapService + .listBySourceOrderId(order.getId()); + if (mapList == null || mapList.size() == 0) + return; + + 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, "璁㈠崟缁存潈"); } - } } -- Gitblit v1.8.0