From 52a5a39966f303be57876d817561597b8c0dc6c7 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 11 四月 2020 18:17:30 +0800 Subject: [PATCH] 团队收益相关规则修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java | 304 +++++++++----------------------------------------- 1 files changed, 55 insertions(+), 249 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java index 88133fd..6d7a272 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java @@ -1,7 +1,6 @@ package com.yeshi.fanli.service.impl.order; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -32,30 +31,31 @@ import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.money.TeamRewardDebt; import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; -import com.yeshi.fanli.entity.order.HongBaoV2SettleTemp; -import com.yeshi.fanli.entity.order.InviteOrderSubsidy; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; -import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException; +import com.yeshi.fanli.exception.ParamsException; import com.yeshi.fanli.exception.money.OrderMoneySettleException; +import com.yeshi.fanli.exception.money.TeamEincomeRecordException; +import com.yeshi.fanli.exception.money.TeamRewardDebtException; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService; import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService; -import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService; +import com.yeshi.fanli.service.inter.money.TeamRewardDebtService; import com.yeshi.fanli.service.inter.money.UserMoneyService; import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService; import com.yeshi.fanli.service.inter.order.CommonOrderService; -import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService; import com.yeshi.fanli.service.inter.order.OrderMoneySettleService; -import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; +import com.yeshi.fanli.service.manger.money.TeamEincomeManager; +import com.yeshi.fanli.service.manger.order.TeamRewardManager; +import com.yeshi.fanli.service.manger.order.TeamSubsidyManager; import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.cmq.HongBaoRecieveCMQManager; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; @@ -95,22 +95,22 @@ @Resource private UserSystemCouponService userSystemCouponService; - @Resource - private TaoBaoOrderService taoBaoOrderService; - @Resource(name = "orderTransactionProducer") private TransactionProducer orderTransactionProducer; // 閭�璇疯ˉ璐� @Resource - private InviteOrderSubsidyService inviteOrderSubsidyService; - - @Resource - private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService; - - @Resource private HongBaoV2SettleTempService hongBaoV2SettleTempService; + + @Resource + private TeamRewardDebtService teamRewardDebtService; + + @Resource + private TeamRewardManager teamRewardManager; + + @Resource + private TeamSubsidyManager teamSubsidyManager; // 涓嬬骇琚皝绂侊紝绾㈠寘澶辨晥 private void invalidHongBaoForbidden(Long id) { @@ -165,7 +165,7 @@ OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid, sourceType, null, null, new Date(), 0); - Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg); String taskKey = getTaskKey(uid); msg.setKey(taskKey); // 娣诲姞浜嬪姟娑堟伅 @@ -174,8 +174,8 @@ @Override public TransactionStatus execute(Message arg0, Object arg1) { try { - fanliInviteTB(hongBaoList, uid, taskKey); - } catch (TaoBaoWeiQuanException e) { + fanliInvite(hongBaoList, uid, Constant.SOURCE_TYPE_TAOBAO, taskKey); + } catch (Exception e) { return TransactionStatus.RollbackTransaction; } return TransactionStatus.CommitTransaction; @@ -230,7 +230,7 @@ // 閭�璇疯禋鍒拌处浜嬪姟娑堟伅 OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid, sourceType, null, null, new Date(), 0); - Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg); String taskKey = getTaskKey(uid); msg.setKey(taskKey); // 娣诲姞浜嬪姟娑堟伅 @@ -238,7 +238,12 @@ orderTransactionProducer.send(msg, new LocalTransactionExecuter() { @Override public TransactionStatus execute(Message arg0, Object arg1) { - fanliInviteOther(hongBaoList, uid, sourceType, taskKey); + try { + fanliInvite(hongBaoList, uid, sourceType, taskKey); + } catch (Exception e) { + e.printStackTrace(); + return TransactionStatus.RollbackTransaction; + } return TransactionStatus.CommitTransaction; } }, null); @@ -290,7 +295,7 @@ // 閭�璇疯禋鍒拌处浜嬪姟娑堟伅 OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid, sourceType, null, null, new Date(), 0); - Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg); String taskKey = getTaskKey(uid); msg.setKey(taskKey); // 娣诲姞浜嬪姟娑堟伅 @@ -298,7 +303,11 @@ orderTransactionProducer.send(msg, new LocalTransactionExecuter() { @Override public TransactionStatus execute(Message arg0, Object arg1) { - fanliInviteOther(hongBaoList, uid, sourceType, taskKey); + try { + fanliInvite(hongBaoList, uid, sourceType, taskKey); + } catch (Exception e) { + return TransactionStatus.RollbackTransaction; + } return TransactionStatus.CommitTransaction; } }, null); @@ -582,106 +591,12 @@ return hongBao; } - @Transactional(rollbackFor = Exception.class) - private void fanliInviteTB(List<HongBaoV2> hongBaoList, Long uid, String key) throws TaoBaoWeiQuanException { - List<Long> hbIdList = new ArrayList<>(); - BigDecimal invitemoney = new BigDecimal(0); - Set<String> inviteOrders = new HashSet<>(); - int inviteGoodsCount = 0; - - // 闇�瑕佸垽鏂��娆剧殑璁㈠崟鍙� - Set<String> drawBackOrders = new HashSet<String>(); - for (HongBaoV2 hongBao : hongBaoList) { - hongBao = filterWeiQuanINGHongBao(hongBao); - if (hongBao == null) - continue; - - hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); - if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) { - invitemoney = invitemoney.add(hongBao.getMoney()); - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hongBao.getId()); - updateHongBao.setGetTime(new Date()); - updateHongBao.setState(HongBaoV2.STATE_YILINGQU); - updateHongBao.setUpdateTime(new Date()); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hongBao.getId()); - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId()); - inviteGoodsCount += hongBaoOrder.getCommonOrder().getCount(); - inviteOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - - Date balanceTime = hongBaoOrder.getCommonOrder().getSettleTime(); - if (balanceTime != null - && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) - drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - } - } - } - - // 閭�璇疯禋鍒拌处 - if (invitemoney.compareTo(new BigDecimal(0)) > 0) { - - // 娣诲姞鏂扮増璇︽儏璁板綍 - try { - // 鏌ヨ閭�璇疯禋鐨勬湁鏁堣鍗曪紝澶辨晥璁㈠崟锛岀淮鏉冭鍗� - Calendar ca = Calendar.getInstance(); - Date maxDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - ca.add(Calendar.MONTH, -1); - - Date minDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - long validCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_JS, - minDate, maxDate, Constant.SOURCE_TYPE_TAOBAO); - long weiQuanCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_WQ, - minDate, maxDate, Constant.SOURCE_TYPE_TAOBAO); - - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, Constant.SOURCE_TYPE_TAOBAO, - (int) validCount, (int) weiQuanCount, invitemoney, new Date()); - - // 澧炲姞璧勯噾 - userMoneyService.addUserMoney(uid, invitemoney, userMoneyDetail); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId()); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.inviteOrderReceived(uid, Constant.SOURCE_TYPE_TAOBAO, inviteOrders.size(), - inviteGoodsCount, invitemoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); - for (String orderId : drawBackOrders) - taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); - } - - try { - hongBaoV2SettleTempService.addTemp(hbIdList, key); - } catch (Exception e1) { - throw new TaoBaoWeiQuanException(200, "鎻掑叆杩斿埄涓存椂琛ㄥ嚭閿�"); - } - - // 鎵�鏈夌殑杩斿埄鍒拌处绾㈠寘ID - for (Long hongBaoId : hbIdList) { - try { - HongBaoRecieveCMQManager.getInstance().addHongBaoRecieveMsg(hongBaoId); - } catch (Exception e) { - LogHelper.errorDetailInfo(e); - } - } - } - @Transactional - private void fanliInviteOther(List<HongBaoV2> hongBaoList, Long uid, int sourceType, String key) { + private void fanliInvite(List<HongBaoV2> hongBaoList, Long uid, int sourceType, String key) + throws TeamEincomeRecordException, ParamsException, TeamRewardDebtException { List<Long> hbIdList = new ArrayList<>(); BigDecimal invitemoney = new BigDecimal(0); Set<String> inviteOrders = new HashSet<>(); - int inviteGoodsCount = 0; // 闇�瑕佸垽鏂��娆剧殑璁㈠崟鍙� for (HongBaoV2 hongBao : hongBaoList) { @@ -690,7 +605,16 @@ continue; hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) { - invitemoney = invitemoney.add(hongBao.getMoney()); + TeamRewardDebt debt = teamRewardDebtService.selectBySourceId(hongBao.getId()); + BigDecimal money = hongBao.getMoney(); + if (debt != null && debt.getLeftMoney().compareTo(new BigDecimal(0)) > 0 + && money.compareTo(debt.getLeftMoney()) >= 0) { + money = money.subtract(debt.getLeftMoney()); + // 杩橀挶 + teamRewardDebtService.repayDebt(debt.getId(), debt.getLeftMoney()); + } + + invitemoney = invitemoney.add(money); HongBaoV2 updateHongBao = new HongBaoV2(); updateHongBao.setId(hongBao.getId()); updateHongBao.setGetTime(new Date()); @@ -703,45 +627,17 @@ // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId()); - inviteGoodsCount += hongBaoOrder.getCommonOrder().getCount(); inviteOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); } } // 閭�璇疯禋鍒拌处 if (invitemoney.compareTo(new BigDecimal(0)) > 0) { - // 娣诲姞鏂扮増璇︽儏璁板綍 - try { - // 鏌ヨ閭�璇疯禋鐨勬湁鏁堣鍗曪紝澶辨晥璁㈠崟锛岀淮鏉冭鍗� - Calendar ca = Calendar.getInstance(); - Date maxDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - ca.add(Calendar.MONTH, -1); - - Date minDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - long validCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_JS, - minDate, maxDate, sourceType); - long weiQuanCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_WQ, - minDate, maxDate, sourceType); - - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, sourceType, (int) validCount, - (int) weiQuanCount, invitemoney, new Date()); - - // 澧炲姞璧勯噾 - userMoneyService.addUserMoney(uid, invitemoney, userMoneyDetail); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId()); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.inviteOrderReceived(uid, sourceType, inviteOrders.size(), inviteGoodsCount, - invitemoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); + Calendar ca = Calendar.getInstance(); + Date date = new Date(TimeUtil.convertToTimeTemp( + ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")); + // 鑾峰彇褰撳墠鐨勬湀浠� + teamRewardManager.addToEincome(uid, date, invitemoney, sourceType); } hongBaoV2SettleTempService.addTemp(hbIdList, key); @@ -962,108 +858,18 @@ * * @param orderId * @param sourceType + * @throws ParamsException + * @throws TeamEincomeRecordException */ @Transactional(rollbackFor = Exception.class) @Override - public void inviteSubsidySettle(Long uid, String taskKey) throws OrderMoneySettleException { - // 鏌ヨkey - List<HongBaoV2SettleTemp> list = hongBaoV2SettleTempService.listByKey(taskKey); - if (list != null && list.size() > 0) { - - Integer sourceType = null; - List<InviteOrderSubsidy> subsidyList = new ArrayList<>(); - for (HongBaoV2SettleTemp temp : list) { - Long hongBaoId = temp.getHongBaoId(); - HongBaoV2 hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBaoId); - if (hongBao != null) - sourceType = hongBao.getOrderType(); - if (hongBao.getParent() != null) - hongBao = hongBao.getParent(); - HongBaoOrder order = hongBaoOrderMapper.selectByHongBaoId(hongBao.getId()); - if (order != null && order.getCommonOrder() != null) { - InviteOrderSubsidy subSidy = inviteOrderSubsidyService.getByOrderNoAndTypeForUpdate(uid, - order.getCommonOrder().getOrderNo(), order.getCommonOrder().getSourceType()); - if (subSidy != null && subSidy.getState() == InviteOrderSubsidy.STATE_VALID) { - subsidyList.add(subSidy); - } - } - } - - if (sourceType == null) - throw new OrderMoneySettleException(1, "璁㈠崟绫诲瀷鏈幏鍙栧埌"); - - if (subsidyList.size() > 0) { - BigDecimal debtMoney = inviteOrderSubsidyDebtService.getTotalDebtMoney(uid); - BigDecimal originalDebtMoney = new BigDecimal(debtMoney.toString());// 鎬荤殑娆犳 - List<InviteOrderSubsidy> copySubsidyList = new ArrayList<>(); - copySubsidyList.addAll(subsidyList); - while (debtMoney.compareTo(new BigDecimal(0)) > 0 && copySubsidyList.size() > 0) {// 鏈夋瑺娆撅紝杩樻湁杩樼殑 - debtMoney = kouKuan(copySubsidyList, debtMoney); - } - // 杩樻 - BigDecimal repayMoney = originalDebtMoney.subtract(debtMoney); - BigDecimal bannce = null; - if (repayMoney.compareTo(new BigDecimal(0)) > 0) { - try { - bannce = inviteOrderSubsidyDebtService.repayDebtByUid(uid, repayMoney); - // 鍓╀綑鐨勮ˉ璐撮噾棰� - } catch (InviteOrderSubsidyDebtException e) { - throw new OrderMoneySettleException(2, "杩樻寮傚父"); - } - } - if (bannce != null && bannce.compareTo(new BigDecimal(0)) > 0) { - // 濡傛灉鏈夎繕鍓╀笅鐨勯挶灏卞姞鍒扮涓�涓笂闈� - subsidyList.get(0).setMoney(subsidyList.get(0).getMoney().add(bannce)); - } - - BigDecimal totalMoney = new BigDecimal(0); - for (InviteOrderSubsidy subsidy : subsidyList) { - inviteOrderSubsidyService.settleById(subsidy.getId(), subsidy.getMoney()); - totalMoney = totalMoney.add(subsidy.getMoney()); - } - - // 鍒拌处 - UserMoneyDetail userMoneyDetail = null; - try { - userMoneyDetail = UserMoneyDetailFactory.createInviteSubsidy(uid, sourceType, totalMoney, - new Date()); - } catch (UserMoneyDetailException e) { - throw new OrderMoneySettleException(1, "璐︽埛鏄庣粏鏋勫缓鍑洪敊"); - } - // 娣诲姞璧勯噾 - userMoneyService.addUserMoney(uid, totalMoney, userMoneyDetail); - // 娣诲姞娑堟伅 - userMoneyMsgNotificationService.inviteOrderSubSidy(uid, new Date(), "绯荤粺鑷姩涓嬪彂", totalMoney, - userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao()); - } - } + public void inviteSubsidySettle(Long uid, String taskKey) + throws OrderMoneySettleException, TeamEincomeRecordException, ParamsException { + teamSubsidyManager.addToTeamEincome(uid, taskKey); } private String getTaskKey(Long uid) { return uid + "-" + UUID.randomUUID().toString(); - } - - private BigDecimal kouKuan(List<InviteOrderSubsidy> subsidyList, BigDecimal debtMoney) { - BigDecimal average = debtMoney.divide(new BigDecimal(subsidyList.size()), 2, RoundingMode.UP); - for (int i = 0; i < subsidyList.size(); i++) { - InviteOrderSubsidy sidy = subsidyList.get(i); - BigDecimal subMoney = null; - if (average.compareTo(sidy.getMoney()) >= 0) { - subMoney = sidy.getMoney(); - } else { - subMoney = average; - } - if (subMoney.compareTo(debtMoney) > 0) - subMoney = debtMoney; - debtMoney = debtMoney.subtract(subMoney); - sidy.setMoney(sidy.getMoney().subtract(subMoney)); - - if (sidy.getMoney().compareTo(new BigDecimal(0)) == 0) { - subsidyList.remove(i); - i--; - } - } - return debtMoney; } } -- Gitblit v1.8.0