From 0912f56a392bdf48315747c64ec0c18bf0aa29a6 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 30 六月 2021 19:07:11 +0800
Subject: [PATCH] 礼金红包兼容
---
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 1191 +++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 758 insertions(+), 433 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 c621f1a..71b4f51 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
@@ -1,433 +1,758 @@
-package com.yeshi.fanli.service.impl.redpack;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.DateUtil;
-
-import com.google.gson.Gson;
-import com.yeshi.fanli.dao.mybatis.redpack.RedPackWinInviteMapper;
-import com.yeshi.fanli.dto.msg.MsgRedPackTeamRewardContentDTO;
-import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
-import com.yeshi.fanli.entity.bus.user.ThreeSale;
-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.order.CommonOrder;
-import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
-import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
-import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
-import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
-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.UserInfoService;
-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;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.TimeUtil;
-import com.yeshi.fanli.util.VersionUtil;
-import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
-import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit;
-import com.yeshi.fanli.util.factory.RedPackDetailFactory;
-import com.yeshi.fanli.vo.redpack.RedPackWinProgressVO;
-
-@Service
-public class RedPackWinInviteServiceImpl implements RedPackWinInviteService {
-
- @Resource
- private RedPackWinInviteMapper redPackWinInviteMapper;
-
- @Resource
- private RedPackConfigService redPackConfigService;
-
- @Resource
- private RedPackBalanceService redPackBalanceService;
-
- @Resource
- private CommonOrderService commonOrderService;
-
- @Resource
- private ThreeSaleSerivce threeSaleSerivce;
-
- @Resource
- private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
-
- @Resource
- private UserInfoService userInfoService;
-
- @Resource
- private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
-
- @Resource
- private IntegralTaskRecordService integralTaskRecordService;
-
- @Resource
- private UserActiveLogService userActiveLogService;
-
- @Resource
- private HongBaoV2CountService hongBaoV2CountService;
-
- @Override
- public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) {
- return redPackWinInviteMapper.getRewardList(start, count, uid);
- }
-
- @Override
- public Long countRewardRecord(Long uid) {
- return redPackWinInviteMapper.countRewardRecord(uid);
- }
-
- @Override
- public BigDecimal getRewardMoney(Long uid) {
- return redPackWinInviteMapper.getRewardMoney(uid);
- }
-
- @Override
- @RequestSerializableByKeyService(key = "#teamUid")
- @Transactional(rollbackFor = Exception.class)
- public void initCreateRedPackWin(Long bossId, Long teamUid) {
- UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
- if (activeLog == null)
- return;
-
- // 灏忎簬2.0.5鐗堟湰涓嶅鍔�
- if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
- activeLog.getVersionCode()))
- return;
-
- // 鍚屼竴闃熷憳鍙褰曚竴娆�
- int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
- 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.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));
- if (threeSale == null)
- return;
-
- // 涓婄骇id
- Long bossId = threeSale.getBoss().getId();
- UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
- if (activeLog == null)
- return;
-
- // 灏忎簬2.0.2鐗堟湰涓嶅鍔�
- 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;
-
- // 鍚屼竴闃熷憳濂栧姳涓�娆�
- int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
- RedPackWinInviteTypeEnum.oneStageReward.name());
- if (totalReward > 0)
- return;
-
- // 寤虹珛閭�璇峰叧绯绘椂闂磋秴杩�20澶�
- Long succeedTime = threeSale.getSucceedTime();
- Date endDate = DateUtil.plusDayDate(Constant.ONE_STAGE_LIMIT_DAYS, new Date(succeedTime));
- if (endDate.getTime() < java.lang.System.currentTimeMillis())
- return;
-
- // 缁戝畾鐢佃瘽鍙风爜鍜屽井淇�
- UserInfo userInfo = userInfoService.selectByPKey(teamUid);
- if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone())
- || StringUtil.isNullOrEmpty(userInfo.getWxOpenId()))
- return;
-
- // 鎺堟潈娣樺疂
- UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(teamUid);
- if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid()))
- return;
-
- // 濂藉弸浜х敓涓�绗旇繑鍒╄鍗曪紙鑷喘锛変笖 24 灏忔椂鍐呬笉澶辨晥锛�
- long validOrder = commonOrderService.count24HValidOrderByUid(teamUid, new Date(succeedTime));
- if (validOrder < 1)
- return;
-
- // 濂栧姳閲戦
- BigDecimal money = Constant.ONE_STAGE_MONEY;
-
- // 鑾峰緱绾㈠寘
- RedPackWinInvite winInvite = new RedPackWinInvite();
- winInvite.setCreateTime(new Date());
- winInvite.setUpdateTime(new Date());
- winInvite.setType(RedPackWinInviteTypeEnum.oneStageReward);
- winInvite.setUid(bossId);
- winInvite.setTeamUid(teamUid);
- winInvite.setMoney(money);
- winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid));
- redPackWinInviteMapper.insertSelective(winInvite);
-
- // 澧炲姞绾㈠寘
- redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createInvite(winInvite));
-
- // 娑堟伅
- MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
- dto.setNickName(userInfo.getNickName());
- dto.setPortrait(userInfo.getPortrait());
- userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackOneStageReward, money,
- "绮変笣锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto));
- }
-
- @RequestSerializableByKeyService(key = "#uid")
- @RedPackGetVersionLimit(uid = "#uid")
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void inviteOrderArriveReward(Long uid, Integer source, String orderNo) throws Exception {
- if (uid == null || source == null || StringUtil.isNullOrEmpty(orderNo))
- return;
-
- // 鑾峰彇璁㈠崟瀵瑰簲涓嬪崟浜�
- List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId(source, orderNo);
- if (list == null || list.isEmpty())
- return;
-
- CommonOrder commonOrder = list.get(0);
- if (commonOrder == null || commonOrder.getUserInfo() == null)
- return;
-
- // 涓嬪崟浜篿d
- Long teamUid = commonOrder.getUserInfo().getId();
- if (teamUid == null)
- return;
-
- // 楠岃瘉涓婁笅绾у叧绯�
- ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
- TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
- if (threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue())
- return;
-
- // 绗竴闃舵(楠岃瘉)
- RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid,
- RedPackWinInviteTypeEnum.oneStageReward.name());
- if (oneStage == null)
- return;
-
- // 绗簩闃舵(楠岃瘉)
- RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid,
- RedPackWinInviteTypeEnum.twoStageReward.name());
- if (twoStage == null) {
- twoStageRewardToBoss(uid, teamUid, oneStage.getCreateTime(), source, orderNo);
- return;
- }
-
- // 绗笁闃舵
- threeStageRewardToBoss(uid, teamUid, twoStage.getCreateTime(), source, orderNo);
- }
-
- /**
- * 涓婄骇濂栧姳--绗簩闃舵
- *
- * @param uid
- * @param source
- * @param orderNo
- * @param bossId
- */
- @Transactional(rollbackFor = Exception.class)
- private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo)
- throws Exception {
- // 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲�
- Date endDate = DateUtil.plusDayDate(Constant.TWO_STAGE_LIMIT_DAYS, oneStageTime);
-
- // 缁熻璁㈠崟濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級
- BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUid(bossId, teamUid, endDate);
- if (rewardMoney == null || rewardMoney.compareTo(Constant.TWO_STAGE_ORDER_REWARD_MIN) < 0)
- return;
-
- // 璁$畻濂栧姳
- BigDecimal money = Constant.TWO_STAGE_MONEY_MIN;
- long total = redPackWinInviteMapper.countByUidAndType(bossId, RedPackWinInviteTypeEnum.twoStageReward.name());
- if (total > 0 && total < Constant.TWO_STAGE_MONEY_ADD_NUM) {
- long num = total % Constant.TWO_STAGE_MONEY_ADD_NUM;
- money = MoneyBigDecimalUtil.add(money,
- MoneyBigDecimalUtil.mul(Constant.TWO_STAGE_MONEY_ADD, new BigDecimal(num)));
- }
-
- // 鑾峰緱绾㈠寘璁板綍
- RedPackWinInvite winInvite = new RedPackWinInvite();
- winInvite.setUid(bossId);
- winInvite.setTeamUid(teamUid);
- winInvite.setMoney(money);
- winInvite.setSource(source);
- winInvite.setOrderNo(orderNo);
- winInvite.setCreateTime(new Date());
- winInvite.setUpdateTime(new Date());
- winInvite.setType(RedPackWinInviteTypeEnum.twoStageReward);
- winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.twoStageReward.name() + ":" + teamUid));
- redPackWinInviteMapper.insertSelective(winInvite);
-
- // 4銆佸鍔犵孩鍖�
- redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createIncreaseReward(winInvite));
-
- // 5銆佹秷鎭�
- UserInfo userInfo = userInfoService.selectByPKey(teamUid);
- MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
- dto.setNickName(userInfo.getNickName());
- dto.setPortrait(userInfo.getPortrait());
- userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackTwoStageReward, money,
- "绮変笣锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto));
- }
-
- /**
- * 涓婄骇濂栧姳锛氭鏈堝紑濮嬩骇鐢熸弧瓒虫潯浠剁殑鍒嗕韩璁㈠崟锛堝垎浜鍗曞疄浠樻鈮�10鍏冿級 杩炵画15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級姣忔湀鏈�楂�2鍏�
- *
- * @param uid
- * @param source
- * @param orderNo
- * @param bossId
- */
- @Transactional(rollbackFor = Exception.class)
- private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo)
- throws Exception {
- // 浜屻�佷笁闃舵涓嶅彲鍚屾湀
- if (DateUtil.isSameMonth(twoStageTime, new Date()))
- return;
-
- // 鏄惁宸查鍙栨湰鏈�
- RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUidAndTypeMonth(bossId, teamUid,
- RedPackWinInviteTypeEnum.threeStageReward.name());
- if (threeStage != null)
- return;
-
- // 宸插鍔辨鏁�
- int totalNum = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
- RedPackWinInviteTypeEnum.threeStageReward.name());
- if (totalNum >= Constant.THREE_STAGE_REWARD_MONTH)
- return;
-
- // 鏄惁宸查棿鏂�
- int monthSpace = DateUtil.getMonthSpace(twoStageTime, new Date());
- if (monthSpace != totalNum + 1)
- return;
-
- // 缁熻鏈湀鑾峰緱濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級
- BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUidTheMonth(bossId, teamUid);
- if (rewardMoney == null || rewardMoney.compareTo(Constant.THREE_STAGE_ORDER_REWARD_MIN) < 0)
- return;
-
- // 璁$畻闅忔満濂栧姳
- double randomMoney = Constant.THREE_STAGE_RANDOM_MIN
- + Math.random() * (Constant.THREE_STAGE_RANDOM_MAX - Constant.THREE_STAGE_RANDOM_MIN);
- // 淇濈暀涓や綅灏忔暟
- BigDecimal money = new BigDecimal(randomMoney).setScale(2, BigDecimal.ROUND_HALF_UP);
-
- // 3銆佽幏寰楃孩鍖呰褰�
- RedPackWinInvite winInvite = new RedPackWinInvite();
- winInvite.setCreateTime(new Date());
- winInvite.setUpdateTime(new Date());
- winInvite.setType(RedPackWinInviteTypeEnum.threeStageReward);
- winInvite.setUid(bossId);
- winInvite.setTeamUid(teamUid);
- winInvite.setMoney(money);
- winInvite.setSource(source);
- winInvite.setOrderNo(orderNo);
- winInvite.setIdentifyCode(
- StringUtil.Md5(RedPackWinInviteTypeEnum.threeStageReward.name() + ":" + teamUid + "-" + monthSpace));
- redPackWinInviteMapper.insertSelective(winInvite);
-
- // 4銆佸鍔犵孩鍖�
- redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite));
-
- // 娑堟伅
- UserInfo userInfo = userInfoService.selectByPKey(teamUid);
- MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
- dto.setNickName(userInfo.getNickName());
- dto.setPortrait(userInfo.getPortrait());
- userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackThreeStageReward,
- 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)
- return listVO;
-
- // 濂栧姳璁板綍
- List<RedPackWinInvite> listWin = redPackWinInviteMapper.getWinListByBossIdAndTeamUid(uid, tid);
- if (listWin == null || listWin.size() == 0)
- return listVO;
-
- int month = 1;
- 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())));
- }
- String time = TimeUtil.formatDate(win.getCreateTime());
- BigDecimal money = win.getMoney().setScale(2);
- 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++;
- continue;
- }
- }
- return listVO;
- }
-
- @Override
- public List<RedPackWinInvite> getWinTopListByBossId(int page, int count, Long 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);
- }
-
-}
+package com.yeshi.fanli.service.impl.redpack;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.DateUtil;
+
+import com.google.gson.Gson;
+import com.yeshi.fanli.dao.mybatis.redpack.RedPackWinInviteMapper;
+import com.yeshi.fanli.dto.msg.MsgRedPackTeamRewardContentDTO;
+import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+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.invite.UserInviteMsgNotificationService;
+import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
+import org.yeshi.utils.TimeUtil;
+import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
+import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit;
+import com.yeshi.fanli.util.factory.RedPackDetailFactory;
+import com.yeshi.fanli.vo.redpack.RedPackWinProgressVO;
+
+@Service
+public class RedPackWinInviteServiceImpl implements RedPackWinInviteService {
+
+ @Resource
+ private RedPackWinInviteMapper redPackWinInviteMapper;
+
+ @Resource
+ private RedPackConfigService redPackConfigService;
+
+ @Resource
+ private RedPackBalanceService redPackBalanceService;
+
+ @Resource
+ private CommonOrderService commonOrderService;
+
+ @Resource
+ private ThreeSaleSerivce threeSaleSerivce;
+
+ @Resource
+ private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+ @Resource
+ private UserInfoService userInfoService;
+
+ @Resource
+ private UserInfoRegisterService userInfoRegisterService;
+
+ @Resource
+ private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+
+ @Resource
+ private IntegralTaskRecordService integralTaskRecordService;
+
+ @Resource
+ private UserActiveLogService userActiveLogService;
+
+ @Resource
+ private HongBaoV2CountService hongBaoV2CountService;
+
+ @Resource
+ private CommonOrderGoodsService commonOrderGoodsService;
+
+ @Resource
+ private UserSystemCouponService userSystemCouponService;
+
+ @Resource
+ private UserInviteMsgNotificationService userInviteMsgNotificationService;
+
+
+ @Override
+ public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) {
+ return redPackWinInviteMapper.getRewardList(start, count, uid);
+ }
+
+ @Override
+ public Long countRewardRecord(Long uid) {
+ return redPackWinInviteMapper.countRewardRecord(uid);
+ }
+
+ @Override
+ public BigDecimal getRewardMoney(Long uid) {
+ return redPackWinInviteMapper.getRewardMoney(uid);
+ }
+
+ @Override
+ @RequestSerializableByKeyService(key = "#teamUid")
+ @Transactional(rollbackFor = Exception.class)
+ public void initCreateRedPackWin(Long bossId, Long teamUid) {
+ UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
+ if (activeLog == null)
+ return;
+
+ // 灏忎簬2.0.5鐗堟湰涓嶅鍔�
+ if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+ activeLog.getVersionCode()))
+ return;
+
+ // 鍚屼竴闃熷憳鍙褰曚竴娆�
+ int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
+ 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.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));
+ if (threeSale == null)
+ return;
+
+ // 涓婄骇id
+ Long bossId = threeSale.getBoss().getId();
+ UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
+ if (activeLog == null)
+ return;
+
+ // 灏忎簬2.0.2鐗堟湰涓嶅鍔�
+ 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;
+
+ // 鍚屼竴闃熷憳濂栧姳涓�娆�
+ int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
+ RedPackWinInviteTypeEnum.oneStageReward.name());
+ if (totalReward > 0)
+ return;
+
+ // 寤虹珛閭�璇峰叧绯绘椂闂磋秴杩�20澶�
+ Long succeedTime = threeSale.getSucceedTime();
+ Date endDate = DateUtil.plusDayDate(Constant.ONE_STAGE_LIMIT_DAYS, new Date(succeedTime));
+ if (endDate.getTime() < java.lang.System.currentTimeMillis())
+ return;
+
+ // 缁戝畾鐢佃瘽鍙风爜鍜屽井淇�
+ UserInfo userInfo = userInfoService.selectByPKey(teamUid);
+ if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone())
+ || StringUtil.isNullOrEmpty(userInfo.getWxOpenId()))
+ return;
+
+ // 鎺堟潈娣樺疂
+ UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(teamUid);
+ if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid()))
+ return;
+
+ // 濂藉弸浜х敓涓�绗旇繑鍒╄鍗曪紙鑷喘锛変笖 24 灏忔椂鍐呬笉澶辨晥锛�
+ long validOrder = commonOrderService.count24HValidOrderByUid(teamUid, new Date(succeedTime));
+ if (validOrder < 1)
+ return;
+
+ // 濂栧姳閲戦
+ BigDecimal money = Constant.ONE_STAGE_MONEY;
+
+ // 鑾峰緱绾㈠寘
+ RedPackWinInvite winInvite = new RedPackWinInvite();
+ winInvite.setCreateTime(new Date());
+ winInvite.setUpdateTime(new Date());
+ winInvite.setType(RedPackWinInviteTypeEnum.oneStageReward);
+ winInvite.setUid(bossId);
+ winInvite.setTeamUid(teamUid);
+ winInvite.setMoney(money);
+ winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid));
+ redPackWinInviteMapper.insertSelective(winInvite);
+
+ // 澧炲姞绾㈠寘
+ redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createInvite(winInvite));
+
+ // 娑堟伅
+ MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
+ dto.setNickName(userInfo.getNickName());
+ dto.setPortrait(userInfo.getPortrait());
+ userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackOneStageReward, money,
+ "绮変笣锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto));
+ }
+
+ @RequestSerializableByKeyService(key = "#uid")
+ @RedPackGetVersionLimit(uid = "#uid")
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void inviteOrderArriveReward(Long uid, Integer source, String orderNo) throws Exception {
+ if (uid == null || source == null || StringUtil.isNullOrEmpty(orderNo))
+ return;
+
+ // 鑾峰彇璁㈠崟瀵瑰簲涓嬪崟浜�
+ List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId(source, orderNo);
+ if (list == null || list.isEmpty())
+ return;
+
+ CommonOrder commonOrder = list.get(0);
+ if (commonOrder == null || commonOrder.getUserInfo() == null)
+ return;
+
+ // 涓嬪崟浜篿d
+ Long teamUid = commonOrder.getUserInfo().getId();
+ if (teamUid == null)
+ return;
+
+ // 楠岃瘉涓婁笅绾у叧绯�
+ ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
+ TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
+ if (threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue())
+ return;
+
+ // 绗竴闃舵(楠岃瘉)
+ RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid,
+ RedPackWinInviteTypeEnum.oneStageReward.name());
+ if (oneStage == null)
+ return;
+
+ // 绗簩闃舵(楠岃瘉)
+ RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid,
+ RedPackWinInviteTypeEnum.twoStageReward.name());
+ if (twoStage == null) {
+ twoStageRewardToBoss(uid, teamUid, oneStage.getCreateTime(), source, orderNo);
+ return;
+ }
+
+ // 绗笁闃舵
+ threeStageRewardToBoss(uid, teamUid, twoStage.getCreateTime(), source, orderNo);
+ }
+
+ /**
+ * 涓婄骇濂栧姳--绗簩闃舵
+ *
+ * @param uid
+ * @param source
+ * @param orderNo
+ * @param bossId
+ */
+ @Transactional(rollbackFor = Exception.class)
+ private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo)
+ throws Exception {
+ // 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲�
+ Date endDate = DateUtil.plusDayDate(Constant.TWO_STAGE_LIMIT_DAYS, oneStageTime);
+
+ // 缁熻璁㈠崟濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級
+ BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUid(bossId, teamUid, endDate);
+ if (rewardMoney == null || rewardMoney.compareTo(Constant.TWO_STAGE_ORDER_REWARD_MIN) < 0)
+ return;
+
+ // 璁$畻濂栧姳
+ BigDecimal money = Constant.TWO_STAGE_MONEY_MIN;
+ long total = redPackWinInviteMapper.countByUidAndType(bossId, RedPackWinInviteTypeEnum.twoStageReward.name());
+ if (total > 0 && total < Constant.TWO_STAGE_MONEY_ADD_NUM) {
+ long num = total % Constant.TWO_STAGE_MONEY_ADD_NUM;
+ money = MoneyBigDecimalUtil.add(money,
+ MoneyBigDecimalUtil.mul(Constant.TWO_STAGE_MONEY_ADD, new BigDecimal(num)));
+ }
+
+ // 鑾峰緱绾㈠寘璁板綍
+ RedPackWinInvite winInvite = new RedPackWinInvite();
+ winInvite.setUid(bossId);
+ winInvite.setTeamUid(teamUid);
+ winInvite.setMoney(money);
+ winInvite.setSource(source);
+ winInvite.setOrderNo(orderNo);
+ winInvite.setCreateTime(new Date());
+ winInvite.setUpdateTime(new Date());
+ winInvite.setType(RedPackWinInviteTypeEnum.twoStageReward);
+ winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.twoStageReward.name() + ":" + teamUid));
+ redPackWinInviteMapper.insertSelective(winInvite);
+
+ // 4銆佸鍔犵孩鍖�
+ redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createIncreaseReward(winInvite));
+
+ // 5銆佹秷鎭�
+ UserInfo userInfo = userInfoService.selectByPKey(teamUid);
+ MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
+ dto.setNickName(userInfo.getNickName());
+ dto.setPortrait(userInfo.getPortrait());
+ userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackTwoStageReward, money,
+ "绮変笣锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto));
+ }
+
+ /**
+ * 涓婄骇濂栧姳锛氭鏈堝紑濮嬩骇鐢熸弧瓒虫潯浠剁殑鍒嗕韩璁㈠崟锛堝垎浜鍗曞疄浠樻鈮�10鍏冿級 杩炵画15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級姣忔湀鏈�楂�2鍏�
+ *
+ * @param uid
+ * @param source
+ * @param orderNo
+ * @param bossId
+ */
+ @Transactional(rollbackFor = Exception.class)
+ private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo)
+ throws Exception {
+ // 浜屻�佷笁闃舵涓嶅彲鍚屾湀
+ if (DateUtil.isSameMonth(twoStageTime, new Date()))
+ return;
+
+ // 鏄惁宸查鍙栨湰鏈�
+ RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUidAndTypeMonth(bossId, teamUid,
+ RedPackWinInviteTypeEnum.threeStageReward.name());
+ if (threeStage != null)
+ return;
+
+ // 宸插鍔辨鏁�
+ int totalNum = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
+ RedPackWinInviteTypeEnum.threeStageReward.name());
+ if (totalNum >= Constant.THREE_STAGE_REWARD_MONTH)
+ return;
+
+ // 鏄惁宸查棿鏂�
+ int monthSpace = DateUtil.getMonthSpace(twoStageTime, new Date());
+ if (monthSpace != totalNum + 1)
+ return;
+
+ // 缁熻鏈湀鑾峰緱濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級
+ BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUidTheMonth(bossId, teamUid);
+ if (rewardMoney == null || rewardMoney.compareTo(Constant.THREE_STAGE_ORDER_REWARD_MIN) < 0)
+ return;
+
+ // 璁$畻闅忔満濂栧姳
+ double randomMoney = Constant.THREE_STAGE_RANDOM_MIN
+ + Math.random() * (Constant.THREE_STAGE_RANDOM_MAX - Constant.THREE_STAGE_RANDOM_MIN);
+ // 淇濈暀涓や綅灏忔暟
+ BigDecimal money = new BigDecimal(randomMoney).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ // 3銆佽幏寰楃孩鍖呰褰�
+ RedPackWinInvite winInvite = new RedPackWinInvite();
+ winInvite.setCreateTime(new Date());
+ winInvite.setUpdateTime(new Date());
+ winInvite.setType(RedPackWinInviteTypeEnum.threeStageReward);
+ winInvite.setUid(bossId);
+ winInvite.setTeamUid(teamUid);
+ winInvite.setMoney(money);
+ winInvite.setSource(source);
+ winInvite.setOrderNo(orderNo);
+ winInvite.setIdentifyCode(
+ StringUtil.Md5(RedPackWinInviteTypeEnum.threeStageReward.name() + ":" + teamUid + "-" + monthSpace));
+ redPackWinInviteMapper.insertSelective(winInvite);
+
+ // 4銆佸鍔犵孩鍖�
+ redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite));
+
+ // 娑堟伅
+ UserInfo userInfo = userInfoService.selectByPKey(teamUid);
+ MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO();
+ dto.setNickName(userInfo.getNickName());
+ dto.setPortrait(userInfo.getPortrait());
+ userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackThreeStageReward,
+ 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)
+ return listVO;
+
+ // 濂栧姳璁板綍
+ List<RedPackWinInvite> listWin = redPackWinInviteMapper.getWinListByBossIdAndTeamUid(uid, tid);
+ if (listWin == null || listWin.size() == 0)
+ return listVO;
+
+ int month = 1;
+ 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())));
+ }
+ String time = TimeUtil.formatDate(win.getCreateTime());
+ BigDecimal money = win.getMoney().setScale(2);
+ 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++;
+ continue;
+ }
+ }
+ return listVO;
+ }
+
+ @Override
+ public List<RedPackWinInvite> getWinTopListByBossId(int page, int count, Long 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;
+ }
+ // 楠岃瘉鏄惁鏈鍗�
+ CommonOrder firstOrder = commonOrderService.getFirstOrder(orderUid);
+ if (!firstOrder.getOrderNo().equals(orderNo) || firstOrder.getSourceType() != source)
+ return;
+
+ Date downTime = firstOrder.getThirdCreateTime();
+ // 娉ㄥ唽鏃堕棿
+ UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
+ if (register == null)
+ return;
+ long registerTime = register.getCreateTime().getTime();
+ // 娉ㄥ唽48灏忔椂鍐呬笅鍗曢檺鍒�
+ if (downTime.getTime() < registerTime || downTime.getTime() > registerTime + 1000*60*60*48L)
+ return;
+
+ // 鏄惁瀛樺湪涓婁笅绾у叧绯�
+ 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;
+
+ // 灏忎簬2.1.3鐗堟湰涓嶅鍔�
+ UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
+ if (activeLog == null)
+ return;
+ if (!VersionUtil.greaterThan_2_1_3("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+ activeLog.getVersionCode()))
+ return;
+
+ // 鏌ヨ璁㈠崟
+ List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo);
+ if (list == null || list.size() ==0) {
+ 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) {
+ // 璁㈠崟鏈粨绠�
+ if(commonOrder.getState() != CommonOrder.STATE_JS)
+ continue;
+
+ // 閭�璇峰叧绯讳箣鍚�
+ long thirdTime = commonOrder.getThirdCreateTime().getTime();
+ if (thirdTime < threeSale.getCreateTime())
+ 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.mul(MoneyBigDecimalUtil.div(eIncome, settlement), BigDecimal.valueOf(100)) ;
+ 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);
+
+ // 娑堟伅鎻愰啋
+ UserInfo userInfo = userInfoService.selectByPKey(orderUid);
+ userInviteMsgNotificationService.pullNewRedPack(bossId, userInfo.getNickName(), userInfo.getPortrait());
+ }
+
+ @Override
+ @RequestSerializableByKeyService(key = "#orderUid")
+ public boolean verifyOrder(Long orderUid, String orderNo, Integer source, Date downTime) {
+ boolean satisfy = false;
+ // 娉ㄥ唽鏃堕棿
+ UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
+ if (register == null)
+ return satisfy;
+ // 娉ㄥ唽48灏忔椂 浠ュ唴:鏂颁汉
+ long registerTime = register.getCreateTime().getTime();
+ // 48灏忔椂闄愬埗
+ if (downTime.getTime() > registerTime || downTime.getTime() < registerTime + 1000*60*60*48)
+ return satisfy;
+
+ // 楠岃瘉鏄惁鏈鍗�
+ CommonOrder firstOrder = commonOrderService.getFirstOrder(orderUid);
+ if (!firstOrder.getOrderNo().equals(orderNo) || firstOrder.getSourceType() != source)
+ return satisfy;
+
+ // 鏄惁宸插鍔�
+ List<UserSystemCoupon> coupons = userSystemCouponService.getUserCouponBySource(orderUid, UserSystemCoupon.SOURCE_PULL_NEW);
+ if (coupons != null && coupons.size() > 0) {
+ return satisfy;
+ }
+
+ // 鏄惁瀛樺湪涓婁笅绾у叧绯�
+ ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid);
+ if (threeSale == null)
+ return satisfy;
+ Long bossId = threeSale.getBoss().getId();
+ if (bossId == null)
+ return satisfy;
+
+ // 灏忎簬2.1.3鐗堟湰涓嶅鍔�
+ UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(orderUid);
+ if (activeLog == null)
+ return satisfy;
+ if (!VersionUtil.greaterThan_2_1_3("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+ activeLog.getVersionCode()))
+ return satisfy;
+
+ // 鏌ヨ璁㈠崟
+ List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo);
+ if (list == null || list.size() ==0)
+ return satisfy;
+
+ // 鍟嗗搧姣斾緥闄愬埗
+ BigDecimal limitRate = new BigDecimal(redPackConfigService.getValueByKey("goods_reate_limit"));
+ BigDecimal limitPayMent = new BigDecimal(redPackConfigService.getValueByKey("goods_pay_ment_limit"));
+ // 閬嶅巻鏄惁瀛樺湪绗﹀悎鐩稿簲鍟嗗搧
+ for (CommonOrder commonOrder: list) {
+ // 閭�璇峰叧绯讳箣鍚�
+ long thirdTime = commonOrder.getThirdCreateTime().getTime();
+ if (thirdTime < threeSale.getCreateTime())
+ continue;
+ // 璁㈠崟澶辨晥
+ if(commonOrder.getState() != CommonOrder.STATE_FK && commonOrder.getState() != CommonOrder.STATE_JS)
+ 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;
+ }
+ }
+
+ return satisfy;
+ }
+
+ @Override
+ @RequestSerializableByKeyService(key = "#orderUid")
+ @Transactional(rollbackFor = Exception.class)
+ public void winFreeCoupon(Long orderUid, String orderNo, Integer source, Date downTime) {
+ if (orderUid == null || StringUtil.isNullOrEmpty(orderNo)) {
+ return;
+ }
+
+ // 娉ㄥ唽鏃堕棿
+ UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
+ if (register == null)
+ return;
+ // 娉ㄥ唽48灏忔椂 浠ュ唴:鏂颁汉
+ long registerTime = register.getCreateTime().getTime();
+ // 48灏忔椂闄愬埗
+ if (downTime.getTime() > registerTime || downTime.getTime() < registerTime + 1000*60*60*48)
+ return;
+
+ // 鏄惁宸插鍔�
+ List<UserSystemCoupon> coupons = userSystemCouponService.getUserCouponBySource(orderUid, UserSystemCoupon.SOURCE_PULL_NEW);
+ if (coupons != null && coupons.size() > 0) {
+ return;
+ }
+
+ // 鏌ヨ璁㈠崟
+ List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo);
+ if (list == null || list.size() ==0) {
+ 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) {
+ // 璁㈠崟澶辨晥
+ if(commonOrder.getState() != CommonOrder.STATE_FK && commonOrder.getState() != CommonOrder.STATE_JS)
+ 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;
+ }
+
+ // 璧犻�佽喘涔拌�呬竴寮犲厤鍗曞埜
+ try {
+ userSystemCouponService.freeCouponWinBySystem(orderUid, CouponTypeEnum.freeCoupon,
+ UserSystemCoupon.SOURCE_PULL_NEW, 1, true, 2, 1);
+ } 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