From 0e0eb2b6645d02c0a0a15cb83fc2717875ab12b4 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 24 三月 2020 15:19:39 +0800
Subject: [PATCH] APP更新整改,团队补贴与团队奖励修改
---
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java | 170 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 135 insertions(+), 35 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 d4d5d56..ce58095 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
@@ -37,22 +37,25 @@
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.order.OrderTeamReward;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException;
import com.yeshi.fanli.exception.money.OrderMoneySettleException;
+import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
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.OrderTeamRewardDebtService;
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.OrderTeamRewardService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
@@ -62,7 +65,6 @@
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 {
@@ -114,7 +116,22 @@
@Resource
private HongBaoV2SettleTempService hongBaoV2SettleTempService;
- @Transactional(rollbackFor=Exception.class)
+ @Resource
+ private OrderTeamRewardService orderTeamRewardService;
+
+ @Resource
+ private OrderTeamRewardDebtService orderTeamRewardDebtService;
+
+ // 涓嬬骇琚皝绂侊紝绾㈠寘澶辨晥
+ private void invalidHongBaoForbidden(Long id) {
+ HongBaoV2 updateHongBaoV2 = new HongBaoV2(id);
+ updateHongBaoV2.setState(HongBaoV2.STATE_SHIXIAO);
+ updateHongBaoV2.setBeizhu("灏佺澶辨晥");
+ updateHongBaoV2.setUpdateTime(new Date());
+ hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBaoV2);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
@Override
public void inviteSettleTB(Long uid) throws OrderMoneySettleException {
// 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
@@ -145,6 +162,7 @@
// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+ invalidHongBaoForbidden(item.getId());
hongBaoList.remove(i);
i--;
}
@@ -179,7 +197,7 @@
System.out.println(new Gson().toJson(mqMsg));
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void inviteSettleJD(Long uid) throws OrderMoneySettleException {
// 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
@@ -210,6 +228,7 @@
// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+ invalidHongBaoForbidden(item.getId());
hongBaoList.remove(i);
i--;
}
@@ -238,7 +257,7 @@
}
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void inviteSettlePDD(Long uid) throws OrderMoneySettleException {
// 鏌ヨUID鐨勪竴浜岀骇閭�璇疯禋
@@ -269,6 +288,7 @@
// 涓婄骇鐢ㄦ埛涓嶆槸姝e父鐢ㄦ埛锛岃鍗曞潎涓嶈兘鍒拌处
UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
+ invalidHongBaoForbidden(item.getId());
hongBaoList.remove(i);
i--;
}
@@ -297,7 +317,7 @@
}
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void shareSettleTB(Long uid) throws OrderMoneySettleException {
/**
@@ -342,7 +362,7 @@
}
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void shareSettleJD(Long uid) throws OrderMoneySettleException {
/**
@@ -383,7 +403,7 @@
}
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void shareSettlePDD(Long uid) throws OrderMoneySettleException {
/**
@@ -424,7 +444,7 @@
}
}
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void ziGouSettle(String orderId, int sourceType, String taskKey) throws OrderMoneySettleException {
// 鏌ヨ鍚屼竴璁㈠崟鍙风殑绾㈠寘
@@ -467,6 +487,25 @@
userHongBao.put(uid, new ArrayList<>());
userHongBao.get(uid).add(hb);
}
+ }
+ }
+
+ // 鑾峰彇缁存潈璧勯噾
+ if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
+ try {
+ Map<Long, BigDecimal> userSubMoneyMap = taoBaoWeiQuanDrawBackService.doWeiQuanFanli(orderId, false);
+ if (userSubMoneyMap != null) {
+ for (Iterator<Long> its = userMoney.keySet().iterator(); its.hasNext();) {
+ Long uid = its.next();
+ if (userSubMoneyMap.get(uid) != null) {
+ // 鍑忓幓缁存潈璧勯噾
+ userMoney.put(uid, userMoney.get(uid).subtract(userSubMoneyMap.get(uid)));
+ }
+ }
+ }
+ } catch (Exception e) {
+ LogHelper.errorDetailInfo(e);
+ throw new OrderMoneySettleException(2, "缁存潈璁㈠崟鍑洪敊");
}
}
@@ -521,31 +560,6 @@
userSystemCouponService.updateStateByArrivalAccount(orderId);
} catch (Exception e) {
e.printStackTrace();
- }
-
- // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級
-
- try {
- if (sourceType == Constant.SOURCE_TYPE_TAOBAO)
- taoBaoWeiQuanDrawBackService.doWeiQuanFanli(orderId);
- } catch (TaoBaoWeiQuanException e) {
- if (e.getCode() == TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER) {
- List<TaoBaoOrder> olist = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
- if (olist != null && olist.size() > 0) {
- long time = TimeUtil.convertToTimeTemp(olist.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss");
- olist = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(time, time + 1000 * 2L, 1);
- if (olist != null && olist.size() > 0) {
- for (int i = 0; i < olist.size(); i++) {
- if (!olist.get(i).getOrderId().equalsIgnoreCase(orderId)) {// 鍒犻櫎鏃犲叧璁㈠崟
- olist.remove(i);
- i--;
- }
- }
- taoBaoOrderService.addTaoBaoOrderList(olist);
- }
- }
- } else
- throw new OrderMoneySettleException(e.getCode(), "缁存潈澶勭悊鍑洪敊:" + e.getMsg());
}
// 娣诲姞缁撶畻鏄犲皠
@@ -956,7 +970,7 @@
* @param orderId
* @param sourceType
*/
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
@Override
public void inviteSubsidySettle(Long uid, String taskKey) throws OrderMoneySettleException {
// 鏌ヨkey
@@ -1058,4 +1072,90 @@
}
return debtMoney;
}
+
+ private BigDecimal kouKuanReward(List<OrderTeamReward> rewardList, BigDecimal debtMoney) {
+ BigDecimal average = debtMoney.divide(new BigDecimal(rewardList.size()), 2, RoundingMode.UP);
+ for (int i = 0; i < rewardList.size(); i++) {
+ OrderTeamReward sidy = rewardList.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) {
+ rewardList.remove(i);
+ i--;
+ }
+ }
+ return debtMoney;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void orderTeamRewardSettle(Long uid) throws OrderMoneySettleException {
+ long count = orderTeamRewardService.countCanSettle(uid);
+ if (count <= 0) {
+ return;
+ }
+ int pageSize = 2000;
+ int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
+ // 鏌ヨ鍑洪渶瑕佸埌璐︾殑濂栧姳
+ List<OrderTeamReward> totalList = new ArrayList<>();
+ for (int i = 0; i < page; i++) {
+ List<OrderTeamReward> list = orderTeamRewardService.listCanSettle(uid, i + 1, pageSize);
+ if (list != null && list.size() > 0)
+ totalList.addAll(list);
+ }
+
+ if (totalList.size() > 0) {
+ BigDecimal debtMoney = orderTeamRewardDebtService.getTotalDebtMoney(uid);
+ BigDecimal originalDebtMoney = new BigDecimal(debtMoney.toString());// 鎬荤殑娆犳
+ List<OrderTeamReward> copyRewardList = new ArrayList<>();
+ copyRewardList.addAll(totalList);
+ while (debtMoney.compareTo(new BigDecimal(0)) > 0 && copyRewardList.size() > 0) {// 鏈夋瑺娆撅紝杩樻湁杩樼殑
+ debtMoney = kouKuanReward(copyRewardList, debtMoney);
+ }
+ // 鍋胯繕娆犳閲戦
+ BigDecimal repayMoney = originalDebtMoney.subtract(debtMoney);
+ BigDecimal bannce = null;
+ if (repayMoney.compareTo(new BigDecimal(0)) > 0) {
+ try {
+ bannce = orderTeamRewardDebtService.repayDebtByUid(uid, repayMoney);
+ // 鍓╀綑鐨勮ˉ璐撮噾棰�
+ } catch (OrderTeamRewardDebtException e) {
+ throw new OrderMoneySettleException(2, "杩樻寮傚父");
+ }
+ }
+ if (bannce != null && bannce.compareTo(new BigDecimal(0)) > 0) {
+ // 濡傛灉鏈夎繕鍓╀笅鐨勯挶灏卞姞鍒扮涓�涓笂闈�
+ totalList.get(0).setMoney(totalList.get(0).getMoney().add(bannce));
+ }
+
+ BigDecimal totalMoney = new BigDecimal(0);
+ for (OrderTeamReward reward : totalList) {
+ orderTeamRewardService.settleById(reward.getId(), reward.getMoney());
+ totalMoney = totalMoney.add(reward.getMoney());
+ }
+
+ // 瀹為檯鍒拌处濂栧姳
+ UserMoneyDetail userMoneyDetail = null;
+ try {
+ userMoneyDetail = UserMoneyDetailFactory.createOrderTeamReward(uid, totalMoney, new Date());
+ } catch (UserMoneyDetailException e) {
+ throw new OrderMoneySettleException(1, "璐︽埛鏄庣粏鏋勫缓鍑洪敊");
+ }
+ // 娣诲姞璧勯噾
+ userMoneyService.addUserMoney(uid, totalMoney, userMoneyDetail);
+ // 娣诲姞娑堟伅
+ userMoneyMsgNotificationService.orderTeamReward(uid, new Date(), "绯荤粺鑷姩涓嬪彂", totalMoney,
+ userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
+ }
+
+ }
}
--
Gitblit v1.8.0