From ec60e757d358636dcac1589c44a66f3e276fe58c Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期一, 29 六月 2020 14:41:42 +0800
Subject: [PATCH] 拉新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java |  366 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 333 insertions(+), 33 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 59fa6f8..eaeedc7 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -19,17 +19,25 @@
 import com.yeshi.fanli.entity.bus.user.UserActiveLog;
 import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.bus.user.UserInfoRegister;
+import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
 import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.redpack.RedPackDetail;
 import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
 import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
+import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
+import com.yeshi.fanli.exception.user.UserSystemCouponException;
 import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
 import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderGoodsService;
 import com.yeshi.fanli.service.inter.order.CommonOrderService;
 import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
 import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
 import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
 import com.yeshi.fanli.service.inter.user.UserActiveLogService;
+import com.yeshi.fanli.service.inter.user.UserInfoRegisterService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
 import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
@@ -66,6 +74,9 @@
 
 	@Resource
 	private UserInfoService userInfoService;
+	
+	@Resource
+	private UserInfoRegisterService userInfoRegisterService;
 
 	@Resource
 	private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
@@ -78,6 +89,13 @@
 
 	@Resource
 	private HongBaoV2CountService hongBaoV2CountService;
+	
+	@Resource
+	private CommonOrderGoodsService commonOrderGoodsService;
+	
+	@Resource
+	private UserSystemCouponService userSystemCouponService;
+	
 
 	@Override
 	public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) {
@@ -93,7 +111,7 @@
 	public BigDecimal getRewardMoney(Long uid) {
 		return redPackWinInviteMapper.getRewardMoney(uid);
 	}
-	
+
 	@Override
 	@RequestSerializableByKeyService(key = "#teamUid")
 	@Transactional(rollbackFor = Exception.class)
@@ -103,35 +121,35 @@
 			return;
 
 		// 灏忎簬2.0.5鐗堟湰涓嶅鍔�
-		if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+		if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
 				activeLog.getVersionCode()))
 			return;
-		
+
 		// 鍚屼竴闃熷憳鍙褰曚竴娆�
 		int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
-				RedPackWinInviteTypeEnum.oneStageReward.name());
+				RedPackWinInviteTypeEnum.zeroStageReward.name());
 		if (totalReward > 0)
 			return;
-				
+
 		// 鑾峰緱绾㈠寘
 		RedPackWinInvite winInvite = new RedPackWinInvite();
 		winInvite.setUid(bossId);
 		winInvite.setTeamUid(teamUid);
 		winInvite.setMoney(new BigDecimal(0));
 		winInvite.setType(RedPackWinInviteTypeEnum.zeroStageReward);
-		winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid));
+		winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.zeroStageReward.name() + ":" + teamUid));
 		winInvite.setCreateTime(new Date());
 		winInvite.setUpdateTime(new Date());
 		redPackWinInviteMapper.insertSelective(winInvite);
 	}
-	
 
 	@Override
 	@RequestSerializableByKeyService(key = "#teamUid")
 	@Transactional(rollbackFor = Exception.class)
 	public void inviteSucceedReward(Long teamUid) throws Exception {
 		// 鏄惁鍦ㄤ笂绾夸箣鍚庣殑閭�璇峰叧绯�
-		ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
+		ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
+				TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
 		if (threeSale == null)
 			return;
 
@@ -142,8 +160,13 @@
 			return;
 
 		// 灏忎簬2.0.2鐗堟湰涓嶅鍔�
-		if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
+		if (!VersionUtil.greaterThan_2_0_5("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
 				activeLog.getVersionCode()))
+			return;
+
+		int totalRewardZero = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid,
+				RedPackWinInviteTypeEnum.zeroStageReward.name());
+		if (totalRewardZero <= 0)
 			return;
 
 		// 鍚屼竴闃熷憳濂栧姳涓�娆�
@@ -196,7 +219,7 @@
 		dto.setNickName(userInfo.getNickName());
 		dto.setPortrait(userInfo.getPortrait());
 		userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackOneStageReward, money,
-				"闃熷憳锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto));
+				"绮変笣锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto));
 	}
 
 	@RequestSerializableByKeyService(key = "#uid")
@@ -222,7 +245,8 @@
 			return;
 
 		// 楠岃瘉涓婁笅绾у叧绯�
-		ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
+		ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid,
+				TimeUtil.convertDateToTemp(Constant.RED_PACK_ONLINE_TIME));
 		if (threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue())
 			return;
 
@@ -252,7 +276,7 @@
 	 * @param orderNo
 	 * @param bossId
 	 */
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo)
 			throws Exception {
 		// 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲�
@@ -294,7 +318,7 @@
 		dto.setNickName(userInfo.getNickName());
 		dto.setPortrait(userInfo.getPortrait());
 		userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackTwoStageReward, money,
-				"闃熷憳锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto));
+				"绮変笣锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto));
 	}
 
 	/**
@@ -305,7 +329,7 @@
 	 * @param orderNo
 	 * @param bossId
 	 */
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo)
 			throws Exception {
 		// 浜屻�佷笁闃舵涓嶅彲鍚屾湀
@@ -363,28 +387,27 @@
 		dto.setNickName(userInfo.getNickName());
 		dto.setPortrait(userInfo.getPortrait());
 		userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackThreeStageReward,
-				money, "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗笁闃舵杩炵画[绗�" + monthSpace + "涓湀]", new Gson().toJson(dto));
+				money, "绮変笣锛堝ソ鍙嬶級瀹屾垚绗笁闃舵杩炵画[绗�" + monthSpace + "涓湀]", new Gson().toJson(dto));
 	}
 
-	
 	@Override
 	public List<RedPackWinProgressVO> getInviteProgressByWorkerId(Long uid, Long tid) {
 		List<RedPackWinProgressVO> listVO = new ArrayList<RedPackWinProgressVO>();
 		ThreeSale threeSale = threeSaleSerivce.getNearRelationByBossIdAndWorkerId(uid, tid);
 		if (threeSale == null || threeSale.getSucceedTime() == null)
 			return listVO;
-		
+
 		UserInfo userInfo = userInfoService.selectByPKey(tid);
-		if (userInfo == null) 
+		if (userInfo == null)
 			return listVO;
-		
+
 		// 濂栧姳璁板綍
 		List<RedPackWinInvite> listWin = redPackWinInviteMapper.getWinListByBossIdAndTeamUid(uid, tid);
-		if (listWin == null || listWin.size() == 0) 
+		if (listWin == null || listWin.size() == 0)
 			return listVO;
-		
+
 		int month = 1;
-		for (RedPackWinInvite win: listWin) {
+		for (RedPackWinInvite win : listWin) {
 			if (win.getType() == RedPackWinInviteTypeEnum.zeroStageReward) {
 				listVO.add(new RedPackWinProgressVO("鎴愬姛娉ㄥ唽", TimeUtil.formatDate(userInfo.getCreatetime())));
 				listVO.add(new RedPackWinProgressVO("纭珛閭�璇�", TimeUtil.formatDate(threeSale.getSucceedTime())));
@@ -394,37 +417,314 @@
 			if (win.getType() == RedPackWinInviteTypeEnum.oneStageReward) {
 				listVO.add(new RedPackWinProgressVO("绗竴闃舵", time, money.toString()));
 				continue;
-			} 
-			
+			}
+
 			if (win.getType() == RedPackWinInviteTypeEnum.twoStageReward) {
 				listVO.add(new RedPackWinProgressVO("绗簩闃舵", time, money.toString()));
 				continue;
-			} 
-			
+			}
+
 			if (win.getType() == RedPackWinInviteTypeEnum.threeStageReward) {
 				listVO.add(new RedPackWinProgressVO("绗笁闃舵绗�" + month + "涓湀", time, money.toString()));
-				month ++;
+				month++;
 				continue;
 			}
 		}
 		return listVO;
 	}
-	
-	
+
 	@Override
 	public List<RedPackWinInvite> getWinTopListByBossId(int page, int count, Long uid) {
-		return redPackWinInviteMapper.getWinTopListByBossId(count * (page-1), count, uid);
+		return redPackWinInviteMapper.getWinTopListByBossId(count * (page - 1), count, uid);
 	}
-	
-	
+
 	@Override
 	public long countWinTopListByBossId(Long uid) {
 		return redPackWinInviteMapper.countWinTopListByBossId(uid);
 	}
-	
+
 	@Override
 	public long countTeamNumByTid(Long uid, Long teamUid) {
 		return redPackWinInviteMapper.countTeamNumByTid(uid, teamUid);
 	}
+
+	
+	@Override
+	public List<RedPackWinInvite> query(long page, int count, String key, String type){
+		return redPackWinInviteMapper.query(count * (page - 1), count, key, type);
+	}
+	
+	@Override
+	public long count(String key, String type){
+		Long count = redPackWinInviteMapper.count(key, type);
+		if (count == null) {
+			count = 0L;
+		}
+		return count;
+	}
+	
+
+	@Override
+	@RequestSerializableByKeyService(key = "#orderUid")
+	@Transactional(rollbackFor = Exception.class)
+	public void winRedPackByOrder(Long orderUid, String orderNo, Integer source, 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;
+		
+		// 鏄惁瀛樺湪涓婁笅绾у叧绯�
+		ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid);
+		if (threeSale == null)
+			return;
+		Long bossId = threeSale.getBoss().getId();
+		if (bossId == 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;
+		
+		// 璇ラ個璇锋槸鍚﹀凡娣诲姞
+		RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUid(bossId, orderUid);
+		if (threeStage != null)
+			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) {
+			// 閭�璇峰叧绯讳箣鍚�
+			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.div(eIncome, settlement);
+			if (rete.compareTo(limitRate) >= 0) {
+				satisfy = true;
+				break;
+			}
+		}
+		
+		if (!satisfy) {
+			return;
+		}
+		
+		// 鑾峰緱绾㈠寘璁板綍
+		RedPackWinInvite winInvite = new RedPackWinInvite();
+		winInvite.setUid(bossId);
+		winInvite.setTeamUid(orderUid);
+		winInvite.setMoney(null);
+		winInvite.setSource(source);
+		winInvite.setOrderNo(orderNo);
+		winInvite.setCreateTime(new Date());
+		winInvite.setUpdateTime(new Date());
+		winInvite.setType(RedPackWinInviteTypeEnum.inviteDownOrder);
+		winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.inviteDownOrder.name() + ":" + orderUid));
+		redPackWinInviteMapper.insertSelective(winInvite);
+	}
+	
+	@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;
+		
+		// 鏄惁宸插鍔�
+		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;
+			// 浠樻閲戦闄愬埗
+			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) {
+			// 浠樻閲戦闄愬埗
+			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.freeCouponBuy, 
+					UserSystemCoupon.SOURCE_PULL_NEW, 1, true, 2);
+		} catch (UserSystemCouponException e) {
+			e.printStackTrace();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@Override
+	public List<Long> listWinUid(int start, int count) {
+		return redPackWinInviteMapper.listWinUid(start, count);
+	}
+	
+	
+	@Override
+	public List<RedPackWinInvite> listLastMonthByUid(int start, int count, Long uid) {
+		return redPackWinInviteMapper.listLastMonthByUid(start, count, uid);
+	}
+	
+	
+	@Override
+	public long countLastMonthByUid(Long uid) {
+		Long count = redPackWinInviteMapper.countLastMonthByUid(uid);
+		if (count == null)
+			count = 0L;
+		return count;
+	}
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void arriveMoney(Long uid, BigDecimal money, Date date) throws Exception {
+		RedPackDetail detail = RedPackDetailFactory.createByMonth(uid, money, date);
+		redPackBalanceService.addRedPack(uid, money, detail);
+	 
+	}
+	
+	
+
 	
 }

--
Gitblit v1.8.0