From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 1516 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 758 insertions(+), 758 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 6f84731..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,758 +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.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);
-	 
-	}
-	
-	
-
-	
-}
+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