From a1cc60298bd8b9cbddb29ad7c5e8e59ea1ee790c Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 16 四月 2020 11:42:20 +0800
Subject: [PATCH] 分享订单到账消息调整
---
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java | 513 ++++++++++++++++----------------------------------------
1 files changed, 147 insertions(+), 366 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 e054f1c..dba80bb 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,9 +1,7 @@
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;
import java.util.HashMap;
import java.util.HashSet;
@@ -30,39 +28,38 @@
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg;
+import com.yeshi.fanli.dto.mq.order.body.TeamRewardPreRecieveMQMsg;
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.TaoBaoOrder;
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.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;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
-import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
@Service
public class OrderMoneySettleServiceImpl implements OrderMoneySettleService {
@@ -97,24 +94,24 @@
@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) {
HongBaoV2 updateHongBaoV2 = new HongBaoV2(id);
updateHongBaoV2.setState(HongBaoV2.STATE_SHIXIAO);
@@ -125,7 +122,7 @@
@Transactional(rollbackFor = Exception.class)
@Override
- public void inviteSettleTB(Long uid) throws OrderMoneySettleException {
+ public void inviteSettleTB(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
// 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
int sourceType = Constant.SOURCE_TYPE_TAOBAO;
List<Integer> types = new ArrayList<>();
@@ -133,13 +130,82 @@
types.add(HongBaoV2.TYPE_ERJI);
types.add(HongBaoV2.TYPE_SHARE_YIJI);
types.add(HongBaoV2.TYPE_SHARE_ERJI);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
List<HongBaoV2> hongBaoList = new ArrayList<>();
// 1000鏉℃暟鎹负1椤�
int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
for (int i = 0; i < page; i++) {
List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
+ maxPregetTime, i * 1000, 1000);
+ if (tempHongBaoList != null && tempHongBaoList.size() > 0)
+ hongBaoList.addAll(tempHongBaoList);
+ }
+
+ for (int i = 0; i < hongBaoList.size(); i++) {
+ HongBaoV2 item = hongBaoList.get(i);
+ if (item != null && item.getParent() != null) {
+ if (item != null) {
+ HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(item.getParent().getId());
+ if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {
+ CommonOrder co = hongBaoOrder.getCommonOrder();
+ // 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
+ UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
+ if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+ invalidHongBaoForbidden(item.getId());
+ hongBaoList.remove(i);
+ i--;
+ }
+ }
+ }
+ }
+ }
+
+ String taskKey = getTaskKey(uid);
+
+ TeamRewardPreRecieveMQMsg mqMsg = new TeamRewardPreRecieveMQMsg(taskKey, uid, sourceType, maxPregetTime,
+ new Date());
+
+ Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg);
+
+ msg.setKey(taskKey);
+ // 娣诲姞浜嬪姟娑堟伅
+ try {
+ orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
+ @Override
+ public TransactionStatus execute(Message arg0, Object arg1) {
+ try {
+ fanliInvite(hongBaoList, uid, Constant.SOURCE_TYPE_TAOBAO, taskKey, maxPregetTime);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return TransactionStatus.RollbackTransaction;
+ }
+ return TransactionStatus.CommitTransaction;
+ }
+ }, null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ LogHelper.mqError(e.getMessage(), msg.getTopic(), msg.getTag(), new Gson().toJson(mqMsg));
+ }
+ System.out.println(new Gson().toJson(mqMsg));
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void inviteSettleJD(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
+ // 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
+ int sourceType = Constant.SOURCE_TYPE_JD;
+ List<Integer> types = new ArrayList<>();
+ types.add(HongBaoV2.TYPE_YIJI);
+ types.add(HongBaoV2.TYPE_ERJI);
+ types.add(HongBaoV2.TYPE_SHARE_YIJI);
+ types.add(HongBaoV2.TYPE_SHARE_ERJI);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
+ List<HongBaoV2> hongBaoList = new ArrayList<>();
+ // 1000鏉℃暟鎹负1椤�
+ int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
+ for (int i = 0; i < page; i++) {
+ List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
+ maxPregetTime, i * 1000, 1000);
if (tempHongBaoList != null && tempHongBaoList.size() > 0)
hongBaoList.addAll(tempHongBaoList);
}
@@ -164,11 +230,11 @@
}
// 閭�璇疯禋鍒拌处浜嬪姟娑堟伅
- OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
- sourceType, null, null, new Date(), 0);
- Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg);
String taskKey = getTaskKey(uid);
+ TeamRewardPreRecieveMQMsg mqMsg = new TeamRewardPreRecieveMQMsg(taskKey, uid, sourceType, maxPregetTime,
+ new Date());
+ Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg);
msg.setKey(taskKey);
// 娣诲姞浜嬪姟娑堟伅
try {
@@ -176,8 +242,9 @@
@Override
public TransactionStatus execute(Message arg0, Object arg1) {
try {
- fanliInviteTB(hongBaoList, uid, taskKey);
- } catch (TaoBaoWeiQuanException e) {
+ fanliInvite(hongBaoList, uid, sourceType, taskKey, maxPregetTime);
+ } catch (Exception e) {
+ e.printStackTrace();
return TransactionStatus.RollbackTransaction;
}
return TransactionStatus.CommitTransaction;
@@ -186,72 +253,11 @@
} catch (Exception e) {
LogHelper.mqError(e.getMessage(), msg.getTopic(), msg.getTag(), new Gson().toJson(mqMsg));
}
- System.out.println(new Gson().toJson(mqMsg));
}
@Transactional(rollbackFor = Exception.class)
@Override
- public void inviteSettleJD(Long uid) throws OrderMoneySettleException {
- // 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
- int sourceType = Constant.SOURCE_TYPE_JD;
- List<Integer> types = new ArrayList<>();
- types.add(HongBaoV2.TYPE_YIJI);
- types.add(HongBaoV2.TYPE_ERJI);
- types.add(HongBaoV2.TYPE_SHARE_YIJI);
- types.add(HongBaoV2.TYPE_SHARE_ERJI);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
- List<HongBaoV2> hongBaoList = new ArrayList<>();
- // 1000鏉℃暟鎹负1椤�
- int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
- for (int i = 0; i < page; i++) {
- List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
- if (tempHongBaoList != null && tempHongBaoList.size() > 0)
- hongBaoList.addAll(tempHongBaoList);
- }
-
- for (int i = 0; i < hongBaoList.size(); i++) {
- HongBaoV2 item = hongBaoList.get(i);
- if (item != null && item.getParent() != null) {
- if (item != null) {
- HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(item.getParent().getId());
- if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {
- CommonOrder co = hongBaoOrder.getCommonOrder();
- // 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
- UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
- if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
- invalidHongBaoForbidden(item.getId());
- hongBaoList.remove(i);
- i--;
- }
- }
- }
- }
- }
-
- // 閭�璇疯禋鍒拌处浜嬪姟娑堟伅
- OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
- sourceType, null, null, new Date(), 0);
- Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg);
- String taskKey = getTaskKey(uid);
- msg.setKey(taskKey);
- // 娣诲姞浜嬪姟娑堟伅
- try {
- orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
- @Override
- public TransactionStatus execute(Message arg0, Object arg1) {
- fanliInviteOther(hongBaoList, uid, sourceType, taskKey);
- return TransactionStatus.CommitTransaction;
- }
- }, null);
- } catch (Exception e) {
- LogHelper.mqError(e.getMessage(), msg.getTopic(), msg.getTag(), new Gson().toJson(mqMsg));
- }
- }
-
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void inviteSettlePDD(Long uid) throws OrderMoneySettleException {
+ public void inviteSettlePDD(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
// 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
int sourceType = Constant.SOURCE_TYPE_PDD;
List<Integer> types = new ArrayList<>();
@@ -259,13 +265,13 @@
types.add(HongBaoV2.TYPE_ERJI);
types.add(HongBaoV2.TYPE_SHARE_YIJI);
types.add(HongBaoV2.TYPE_SHARE_ERJI);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
List<HongBaoV2> hongBaoList = new ArrayList<>();
// 1000鏉℃暟鎹负1椤�
int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
for (int i = 0; i < page; i++) {
List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
+ maxPregetTime, i * 1000, 1000);
if (tempHongBaoList != null && tempHongBaoList.size() > 0)
hongBaoList.addAll(tempHongBaoList);
}
@@ -290,17 +296,21 @@
}
// 閭�璇疯禋鍒拌处浜嬪姟娑堟伅
- OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_INVITE, uid,
- sourceType, null, null, new Date(), 0);
- Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg);
String taskKey = getTaskKey(uid);
+ TeamRewardPreRecieveMQMsg mqMsg = new TeamRewardPreRecieveMQMsg(taskKey, uid, sourceType, maxPregetTime,
+ new Date());
+ Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.teamRewardPreRecieved, mqMsg);
msg.setKey(taskKey);
// 娣诲姞浜嬪姟娑堟伅
try {
orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
@Override
public TransactionStatus execute(Message arg0, Object arg1) {
- fanliInviteOther(hongBaoList, uid, sourceType, taskKey);
+ try {
+ fanliInvite(hongBaoList, uid, sourceType, taskKey, maxPregetTime);
+ } catch (Exception e) {
+ return TransactionStatus.RollbackTransaction;
+ }
return TransactionStatus.CommitTransaction;
}
}, null);
@@ -311,7 +321,7 @@
@Transactional(rollbackFor = Exception.class)
@Override
- public void shareSettleTB(Long uid) throws OrderMoneySettleException {
+ public void shareSettleTB(Long uid,Date maxPregetTime) throws OrderMoneySettleException {
/**
* 澶勭悊鍒嗕韩璧�
*/
@@ -320,13 +330,13 @@
// 鏌ヨUID鐨勫垎浜禋璁㈠崟
types.add(HongBaoV2.TYPE_SHARE_GOODS);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
List<HongBaoV2> hongBaoList = new ArrayList<>();
// 1000鏉℃暟鎹负1椤�
int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
for (int i = 0; i < page; i++) {
List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
+ maxPregetTime, i * 1000, 1000);
if (tempHongBaoList != null && tempHongBaoList.size() > 0)
hongBaoList.addAll(tempHongBaoList);
}
@@ -336,6 +346,7 @@
Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg);
String taskKey = getTaskKey(uid);
msg.setKey(taskKey);
+
// 娣诲姞浜嬪姟娑堟伅
try {
orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
@@ -356,7 +367,7 @@
@Transactional(rollbackFor = Exception.class)
@Override
- public void shareSettleJD(Long uid) throws OrderMoneySettleException {
+ public void shareSettleJD(Long uid,Date maxPregetTime) throws OrderMoneySettleException {
/**
* 澶勭悊鍒嗕韩璧�
*/
@@ -365,13 +376,13 @@
// 鏌ヨUID鐨勫垎浜禋璁㈠崟
types.add(HongBaoV2.TYPE_SHARE_GOODS);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
List<HongBaoV2> hongBaoList = new ArrayList<>();
// 1000鏉℃暟鎹负1椤�
int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
for (int i = 0; i < page; i++) {
List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
+ maxPregetTime, i * 1000, 1000);
if (tempHongBaoList != null && tempHongBaoList.size() > 0)
hongBaoList.addAll(tempHongBaoList);
}
@@ -397,7 +408,7 @@
@Transactional(rollbackFor = Exception.class)
@Override
- public void shareSettlePDD(Long uid) throws OrderMoneySettleException {
+ public void shareSettlePDD(Long uid,Date maxPregetTime) throws OrderMoneySettleException {
/**
* 澶勭悊鍒嗕韩璧�
*/
@@ -406,13 +417,13 @@
// 鏌ヨUID鐨勫垎浜禋璁㈠崟
types.add(HongBaoV2.TYPE_SHARE_GOODS);
- long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType);
+ long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid, sourceType, maxPregetTime);
List<HongBaoV2> hongBaoList = new ArrayList<>();
// 1000鏉℃暟鎹负1椤�
int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1);
for (int i = 0; i < page; i++) {
List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, sourceType,
- i * 1000, 1000);
+ maxPregetTime, i * 1000, 1000);
if (tempHongBaoList != null && tempHongBaoList.size() > 0)
hongBaoList.addAll(tempHongBaoList);
}
@@ -544,8 +555,9 @@
UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
// 鏂扮増閫氱煡
+
userMoneyMsgNotificationService.fanliOrderReceived(uid, orderId, sourceType, userGoodsCount.get(uid), money,
- user.getMyHongBao());
+ user.getMyHongBao(), orderList.get(0).getThirdCreateTime());
}
// 閫氱煡鍏嶅崟鍒拌处
try {
@@ -582,106 +594,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, Date maxPreGetTime)
+ 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 +608,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 +630,14 @@
// 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());
+ // 鑾峰彇褰撳墠鐨勬湀浠�
+ teamRewardManager.addToEincome(uid, maxPreGetTime, invitemoney, sourceType);
}
hongBaoV2SettleTempService.addTemp(hbIdList, key);
@@ -749,7 +645,8 @@
// 鎵�鏈夌殑杩斿埄鍒拌处绾㈠寘ID
for (Long hongBaoId : hbIdList) {
try {
- HongBaoRecieveCMQManager.getInstance().addHongBaoRecieveMsg(hongBaoId);
+ if (Constant.ENABLE_MQ)
+ HongBaoRecieveCMQManager.getInstance().addHongBaoRecieveMsg(hongBaoId);
} catch (Exception e) {
LogHelper.errorDetailInfo(e);
}
@@ -809,22 +706,8 @@
if (sharemoney.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.countShareOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_JS,
- minDate, maxDate, Constant.SOURCE_TYPE_TAOBAO);
- long weiQuanCount = hongBaoV2Mapper.countShareOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_WQ,
- minDate, maxDate, Constant.SOURCE_TYPE_TAOBAO);
-
UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, Constant.SOURCE_TYPE_TAOBAO,
- (int) validCount, (int) weiQuanCount, sharemoney, new Date());
+ sharemoney, new Date());
// 娣诲姞璧勯噾
userMoneyService.addUserMoney(uid, sharemoney, userMoneyDetail);
@@ -842,7 +725,8 @@
// 鏂扮増閫氱煡
userMoneyMsgNotificationService.shareOrderReceived(uid, Constant.SOURCE_TYPE_TAOBAO, shareOrders.size(),
- shareGoodsCount, sharemoney, userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+ shareGoodsCount, sharemoney, userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao(), null,
+ null);
for (String orderId : drawBackOrders)
taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId);
@@ -907,22 +791,8 @@
if (sharemoney.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.countShareOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_JS,
- minDate, maxDate, sourceType);
- long weiQuanCount = hongBaoV2Mapper.countShareOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_WQ,
- minDate, maxDate, sourceType);
-
- UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, sourceType, (int) validCount,
- (int) weiQuanCount, sharemoney, new Date());
+ UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, sourceType, sharemoney,
+ new Date());
// 娣诲姞璧勯噾
userMoneyService.addUserMoney(uid, sharemoney, userMoneyDetail);
@@ -940,8 +810,8 @@
// 鏂扮増閫氱煡
userMoneyMsgNotificationService.shareOrderReceived(uid, Constant.SOURCE_TYPE_TAOBAO, shareOrders.size(),
- shareGoodsCount, sharemoney, userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
-
+ shareGoodsCount, sharemoney, userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao(), null,
+ null);
}
hongBaoV2SettleTempService.addTemp(recieveHongBaoIds, key);
@@ -961,107 +831,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, Date maxPreGetTime)
+ throws OrderMoneySettleException, TeamEincomeRecordException, ParamsException {
+ teamSubsidyManager.addToTeamEincome(uid, taskKey, maxPreGetTime);
}
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