From 880238957a973ecd9676237672276b0e99d31115 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期一, 29 六月 2020 13:55:28 +0800
Subject: [PATCH] 免单
---
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 234 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 204 insertions(+), 30 deletions(-)
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
index 19f3906..6db986e 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -19,17 +19,25 @@
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.bus.user.UserInfoRegister;
+import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.redpack.RedPackDetail;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
+import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
+import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderGoodsService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
+import com.yeshi.fanli.service.inter.user.UserInfoRegisterService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
@@ -66,6 +74,9 @@
@Resource
private UserInfoService userInfoService;
+
+ @Resource
+ private UserInfoRegisterService userInfoRegisterService;
@Resource
private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
@@ -78,6 +89,13 @@
@Resource
private HongBaoV2CountService hongBaoV2CountService;
+
+ @Resource
+ private CommonOrderGoodsService commonOrderGoodsService;
+
+ @Resource
+ private UserSystemCouponService userSystemCouponService;
+
@Override
public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) {
@@ -93,7 +111,7 @@
public BigDecimal getRewardMoney(Long uid) {
return redPackWinInviteMapper.getRewardMoney(uid);
}
-
+
@Override
@RequestSerializableByKeyService(key = "#teamUid")
@Transactional(rollbackFor = Exception.class)
@@ -103,35 +121,35 @@
return;
// 灏忎簬2.0.5鐗堟湰涓嶅鍔�
- if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+ if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
activeLog.getVersionCode()))
return;
-
+
// 鍚屼竴闃熷憳鍙褰曚竴娆�
int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
- RedPackWinInviteTypeEnum.oneStageReward.name());
+ RedPackWinInviteTypeEnum.zeroStageReward.name());
if (totalReward > 0)
return;
-
+
// 鑾峰緱绾㈠寘
RedPackWinInvite winInvite = new RedPackWinInvite();
winInvite.setUid(bossId);
winInvite.setTeamUid(teamUid);
winInvite.setMoney(new BigDecimal(0));
winInvite.setType(RedPackWinInviteTypeEnum.zeroStageReward);
- winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid));
+ winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.zeroStageReward.name() + ":" + teamUid));
winInvite.setCreateTime(new Date());
winInvite.setUpdateTime(new Date());
redPackWinInviteMapper.insertSelective(winInvite);
}
-
@Override
@RequestSerializableByKeyService(key = "#teamUid")
@Transactional(rollbackFor = Exception.class)
public void inviteSucceedReward(Long teamUid) throws Exception {
// 鏄惁鍦ㄤ笂绾夸箣鍚庣殑閭�璇峰叧绯�
- ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
+ ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
+ TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
if (threeSale == null)
return;
@@ -142,8 +160,13 @@
return;
// 灏忎簬2.0.2鐗堟湰涓嶅鍔�
- if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+ if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
activeLog.getVersionCode()))
+ return;
+
+ int totalRewardZero = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
+ RedPackWinInviteTypeEnum.zeroStageReward.name());
+ if (totalRewardZero <= 0)
return;
// 鍚屼竴闃熷憳濂栧姳涓�娆�
@@ -222,7 +245,8 @@
return;
// 楠岃瘉涓婁笅绾у叧绯�
- ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
+ ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
+ TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
if (threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue())
return;
@@ -252,7 +276,7 @@
* @param orderNo
* @param bossId
*/
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo)
throws Exception {
// 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲�
@@ -305,7 +329,7 @@
* @param orderNo
* @param bossId
*/
- @Transactional(rollbackFor=Exception.class)
+ @Transactional(rollbackFor = Exception.class)
private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo)
throws Exception {
// 浜屻�佷笁闃舵涓嶅彲鍚屾湀
@@ -366,25 +390,24 @@
money, "绮変笣锛堝ソ鍙嬶級瀹屾垚绗笁闃舵杩炵画[绗�" + monthSpace + "涓湀]", new Gson().toJson(dto));
}
-
@Override
public List<RedPackWinProgressVO> getInviteProgressByWorkerId(Long uid, Long tid) {
List<RedPackWinProgressVO> listVO = new ArrayList<RedPackWinProgressVO>();
ThreeSale threeSale = threeSaleSerivce.getNearRelationByBossIdAndWorkerId(uid, tid);
if (threeSale == null || threeSale.getSucceedTime() == null)
return listVO;
-
+
UserInfo userInfo = userInfoService.selectByPKey(tid);
- if (userInfo == null)
+ if (userInfo == null)
return listVO;
-
+
// 濂栧姳璁板綍
List<RedPackWinInvite> listWin = redPackWinInviteMapper.getWinListByBossIdAndTeamUid(uid, tid);
- if (listWin == null || listWin.size() == 0)
+ if (listWin == null || listWin.size() == 0)
return listVO;
-
+
int month = 1;
- for (RedPackWinInvite win: listWin) {
+ for (RedPackWinInvite win : listWin) {
if (win.getType() == RedPackWinInviteTypeEnum.zeroStageReward) {
listVO.add(new RedPackWinProgressVO("鎴愬姛娉ㄥ唽", TimeUtil.formatDate(userInfo.getCreatetime())));
listVO.add(new RedPackWinProgressVO("纭珛閭�璇�", TimeUtil.formatDate(threeSale.getSucceedTime())));
@@ -394,37 +417,188 @@
if (win.getType() == RedPackWinInviteTypeEnum.oneStageReward) {
listVO.add(new RedPackWinProgressVO("绗竴闃舵", time, money.toString()));
continue;
- }
-
+ }
+
if (win.getType() == RedPackWinInviteTypeEnum.twoStageReward) {
listVO.add(new RedPackWinProgressVO("绗簩闃舵", time, money.toString()));
continue;
- }
-
+ }
+
if (win.getType() == RedPackWinInviteTypeEnum.threeStageReward) {
listVO.add(new RedPackWinProgressVO("绗笁闃舵绗�" + month + "涓湀", time, money.toString()));
- month ++;
+ month++;
continue;
}
}
return listVO;
}
-
-
+
@Override
public List<RedPackWinInvite> getWinTopListByBossId(int page, int count, Long uid) {
- return redPackWinInviteMapper.getWinTopListByBossId(count * (page-1), count, uid);
+ return redPackWinInviteMapper.getWinTopListByBossId(count * (page - 1), count, uid);
}
-
-
+
@Override
public long countWinTopListByBossId(Long uid) {
return redPackWinInviteMapper.countWinTopListByBossId(uid);
}
-
+
@Override
public long countTeamNumByTid(Long uid, Long teamUid) {
return redPackWinInviteMapper.countTeamNumByTid(uid, teamUid);
}
+
+
+ @Override
+ public List<RedPackWinInvite> query(long page, int count, String key, String type){
+ return redPackWinInviteMapper.query(count * (page - 1), count, key, type);
+ }
+
+ @Override
+ public long count(String key, String type){
+ Long count = redPackWinInviteMapper.count(key, type);
+ if (count == null) {
+ count = 0L;
+ }
+ return count;
+ }
+
+
+ @Override
+ @RequestSerializableByKeyService(key = "#orderUid")
+ @Transactional(rollbackFor = Exception.class)
+ public void winRedPackByOrder(Long orderUid, String orderNo, Integer source) {
+ if (orderUid == null || StringUtil.isNullOrEmpty(orderNo)) {
+ return;
+ }
+
+ // 娉ㄥ唽鏃堕棿
+ UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
+ if (register == null)
+ return;
+ // 娉ㄥ唽48灏忔椂 + 浠ュ唴
+ long registerTime = register.getCreateTime().getTime();
+
+
+ // 鏄惁瀛樺湪涓婁笅绾у叧绯�
+ ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid);
+ if (threeSale == null)
+ return;
+
+ Long bossId = threeSale.getBoss().getId();
+ if (bossId == null)
+ return;
+
+ // 璇ラ個璇锋槸鍚﹀凡棰嗗彇
+ RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUid(bossId, orderUid);
+ if (threeStage != null)
+ return;
+
+ // 鏌ヨ璁㈠崟
+ List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo);
+ if (list == null || list.size() ==0) {
+ return;
+ }
+
+ // 48灏忔椂鍐呰鍗�
+ long spaceTime = 1000 * 60 * 48;
+ Long succeedTime = threeSale.getSucceedTime();
+ Date thirdCreateTime = list.get(0).getThirdCreateTime();
+ if (thirdCreateTime == null || thirdCreateTime.getTime() > succeedTime + spaceTime) {
+ return;
+ }
+
+ // 鍟嗗搧姣斾緥闄愬埗
+ BigDecimal limitRate = new BigDecimal(redPackConfigService.getValueByKey("goods_reate_limit"));
+ BigDecimal limitPayMent = new BigDecimal(redPackConfigService.getValueByKey("goods_pay_ment_limit"));
+
+ boolean satisfy = false;
+ // 閬嶅巻鏄惁瀛樺湪绗﹀悎鐩稿簲鍟嗗搧
+ for (CommonOrder commonOrder: list) {
+ // 閭�璇峰叧绯讳箣鍚�
+ long downTime = commonOrder.getThirdCreateTime().getTime();
+ if (downTime < threeSale.getCreateTime())
+ continue;
+ // 48灏忔椂闄愬埗
+ if (downTime < registerTime || downTime > registerTime + 1000*60*60*48)
+ continue;
+ // 浠樻閲戦闄愬埗
+ BigDecimal payment = commonOrder.getPayment();
+ if (payment == null || payment.compareTo(limitPayMent) < 0)
+ continue;
+
+ // 鍟嗗搧浣i噾姣斾緥闄愬埗
+ BigDecimal eIncome = commonOrder.geteIncome();
+ BigDecimal settlement = commonOrder.getSettlement();
+ if(eIncome == null || settlement == null) {
+ continue;
+ }
+ BigDecimal rete = MoneyBigDecimalUtil.div(eIncome, settlement);
+ if (rete.compareTo(limitRate) >= 0) {
+ satisfy = true;
+ break;
+ }
+ }
+
+ if (!satisfy) {
+ return;
+ }
+
+ // 鑾峰緱绾㈠寘璁板綍
+ RedPackWinInvite winInvite = new RedPackWinInvite();
+ winInvite.setUid(bossId);
+ winInvite.setTeamUid(orderUid);
+ winInvite.setMoney(null);
+ winInvite.setSource(source);
+ winInvite.setOrderNo(orderNo);
+ winInvite.setCreateTime(new Date());
+ winInvite.setUpdateTime(new Date());
+ winInvite.setType(RedPackWinInviteTypeEnum.inviteDownOrder);
+ winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.inviteDownOrder.name() + ":" + orderUid));
+ redPackWinInviteMapper.insertSelective(winInvite);
+
+
+ // 璧犻�佽喘涔拌�呬竴寮犲厤鍗曞埜
+ try {
+ userSystemCouponService.freeCouponWinBySystem(orderUid, CouponTypeEnum.freeCouponBuy, UserSystemCoupon.SOURCE_EXCHANGE,
+ 1, true, 2);
+ } catch (UserSystemCouponException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ public List<Long> listWinUid(int start, int count) {
+ return redPackWinInviteMapper.listWinUid(start, count);
+ }
+
+
+ @Override
+ public List<RedPackWinInvite> listLastMonthByUid(int start, int count, Long uid) {
+ return redPackWinInviteMapper.listLastMonthByUid(start, count, uid);
+ }
+
+
+ @Override
+ public long countLastMonthByUid(Long uid) {
+ Long count = redPackWinInviteMapper.countLastMonthByUid(uid);
+ if (count == null)
+ count = 0L;
+ return count;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void arriveMoney(Long uid, BigDecimal money, Date date) throws Exception {
+ RedPackDetail detail = RedPackDetailFactory.createByMonth(uid, money, date);
+ redPackBalanceService.addRedPack(uid, money, detail);
+
+ }
+
+
+
}
--
Gitblit v1.8.0