From f4a0f2acc63d7785eab108419a4e16f5f688cb95 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 18 一月 2020 12:06:27 +0800
Subject: [PATCH] 用户注册信息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java |  810 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 480 insertions(+), 330 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java
index 8370794..0f6faa1 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java
@@ -1,6 +1,5 @@
 package com.yeshi.fanli.service.impl.user;
 
-import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -8,11 +7,17 @@
 
 import javax.annotation.Resource;
 
+import org.springframework.context.annotation.Lazy;
 import org.springframework.core.task.TaskExecutor;
 import org.springframework.stereotype.Service;
 
+import com.google.gson.Gson;
 import com.yeshi.fanli.dao.mybatis.user.TokenRecordMapper;
+import com.yeshi.fanli.dto.msg.MsgInviteContentDTO;
 import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
+import com.yeshi.fanli.dto.msg.MsgRedPackGiveContentDTO;
+import com.yeshi.fanli.entity.accept.AcceptData;
+import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinGiveRecord;
 import com.yeshi.fanli.entity.bus.user.TokenRecord;
 import com.yeshi.fanli.entity.bus.user.TokenRecord.TokenTypeEnum;
@@ -20,22 +25,31 @@
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
 import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
 import com.yeshi.fanli.entity.bus.user.UserSystemCouponGiveRecord;
+import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord;
+import com.yeshi.fanli.entity.redpack.RedPackGiveRecord;
+import com.yeshi.fanli.entity.system.SystemCoupon;
 import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
-import com.yeshi.fanli.exception.tlj.UserTaoLiJinOriginException;
+import com.yeshi.fanli.exception.redpack.RedPackGiveRecordException;
 import com.yeshi.fanli.exception.user.TokenRecordException;
 import com.yeshi.fanli.exception.user.UserInfoExtraException;
 import com.yeshi.fanli.log.LogHelper;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.config.SystemCouponService;
+import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
-import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinGiveRecordService;
-import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
+import com.yeshi.fanli.service.inter.redpack.RedPackGiveRecordService;
 import com.yeshi.fanli.service.inter.user.TokenRecordService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponGiveRecordService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
+import com.yeshi.fanli.service.inter.user.integral.IntegralGetService;
+import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TokenUtil;
+import com.yeshi.fanli.util.VersionUtil;
 import com.yeshi.fanli.vo.msg.TokenVO;
 
 @Service
@@ -43,7 +57,7 @@
 
 	@Resource(name = "taskExecutor")
 	private TaskExecutor executor;
-	
+
 	@Resource
 	private TokenRecordMapper tokenRecordMapper;
 
@@ -51,28 +65,40 @@
 	private UserInfoService userInfoService;
 
 	@Resource
+	@Lazy
 	private UserSystemCouponService userSystemCouponService;
 
 	@Resource
 	private ThreeSaleSerivce threeSaleSerivce;
 
 	@Resource
-	private UserTaoLiJinGiveRecordService userTaoLiJinGiveRecordService;
-
-	@Resource
 	private UserInfoExtraService userInfoExtraService;
 
 	@Resource
-	private UserSystemCouponGiveRecordService userSystemCouponGiveRecordService;
-	
+	private UserSystemCouponRecordService userSystemCouponRecordService;
+
 	@Resource
-	private UserTaoLiJinOriginService userTaoLiJinOriginService;
-	
+	private UserSystemCouponGiveRecordService userSystemCouponGiveRecordService;
+
 	@Resource
 	private UserOtherMsgNotificationService userOtherMsgNotificationService;
-	
-	
-	
+
+	@Lazy
+	@Resource
+	private IntegralGetService integralGetService;
+
+	@Resource
+	private SystemCouponService systemCouponService;
+
+	@Resource
+	private UserInviteMsgNotificationService userInviteMsgNotificationService;
+
+	@Resource
+	private RedPackGiveRecordService redPackGiveRecordService;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
 	@Override
 	public void insertSelective(TokenRecord record) {
 		record.setCreateTime(new Date());
@@ -81,27 +107,158 @@
 	}
 
 	@Override
+	public void updateByPrimaryKeySelective(TokenRecord record) {
+		tokenRecordMapper.updateByPrimaryKeySelective(record);
+	}
+
+	@Override
 	public TokenRecord getNearByTypeAndIdentify(String type, String identify) {
 		return tokenRecordMapper.getNearByTypeAndIdentify(type, identify);
 	}
 
 	@Override
-	public TokenVO discernToken(String token, Long uid) throws TokenRecordException {
+	public TokenRecord getByTypeAndIdentify(String type, String identify) {
+		return tokenRecordMapper.getByTypeAndIdentify(type, identify);
+	}
 
-		// TODO token 楠岃瘉
+	@Override
+	public TokenVO discernToken(String token, Long uid, String platform, String version) throws TokenRecordException {
+		// 瑙f瀽鍙d护
+		String parseToken = TokenUtil.parseToken(token);
+		if (StringUtil.isNullOrEmpty(parseToken))
+			throw new TokenRecordException(1, "鏈彂鐜板彛浠�");
 
-		TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
+		TokenRecord rokenRecord = tokenRecordMapper.getByToken(parseToken);
 		if (rokenRecord == null)
 			throw new TokenRecordException(1, "鍙d护涓嶅瓨鍦�");
-		
+
+		Long uidToken = rokenRecord.getUid();
+		if (uid != null && uidToken != null && uid.longValue() == uidToken.longValue())
+			throw new TokenRecordException(1, "涓嶈兘鑷繁璧犻�佺粰鑷繁");
+
 		Date now = new Date();
 		Date endTimeToken = rokenRecord.getEndTime();
-		if (endTimeToken != null && endTimeToken.getTime() < now.getTime())
-			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-		
 		Integer stateTtoken = rokenRecord.getState();
-		if (stateTtoken != null && stateTtoken == 1)
+		if (endTimeToken != null && endTimeToken.getTime() < now.getTime() || (stateTtoken != null && stateTtoken == 1)
+				|| StringUtil.isNullOrEmpty(rokenRecord.getIdentify()))
 			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+
+		Integer num = 0;
+		Integer type = 0;
+		String money = null;
+		boolean state = false;
+		List<String> tips = new ArrayList<String>();
+		String identify = rokenRecord.getIdentify();
+
+		TokenTypeEnum tokenType = rokenRecord.getType();
+		if (tokenType == TokenTypeEnum.freeCoupon) {
+			type = 10;
+			UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+					.selectByPrimaryKey(Long.parseLong(identify));
+			if (giveRecord == null)
+				throw new TokenRecordException(1, "璧犻�佽褰曚笉瀛樺湪");
+
+			Date endTime = giveRecord.getEndTime();
+			// 鐢ㄦ埛鍒镐俊鎭�
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(giveRecord.getCouponId());
+			if (userCoupon == null || userCoupon.getGive() == null || !userCoupon.getGive())
+				throw new TokenRecordException(1, "鍒镐笉瀛樺湪鎴栭潪璧犻�佺姸鎬�");
+
+			if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE
+					|| (endTime != null && endTime.getTime() < now.getTime())) {
+				tips.add("鍝庡憖锛岃繖寮犲厤鍗曞埜宸插け鏁堜簡锛�");
+			} else if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE) {
+				tips.add("鍝庡憖锛岃繖寮犲厤鍗曞埜宸茶棰嗗彇浜嗭紒");
+			} else if (userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
+				if (uid == null || uid <= 0)
+					throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾鍏嶅崟鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
+
+				state = true;
+				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
+					tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佷汉鐨勭洿鎺ョ矇涓濓紱");
+					tips.add("鑾疯禒鐨勫厤鍗曞埜锛岄渶瑕佹縺娲诲悗鎵嶈兘浣跨敤锛岃鎯呭弬瑙佸厤鍗曞埜婵�娲昏鍒欙紱");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濇煡鐪嬨��");
+				} else {
+					tips.add("鑾疯禒鐨勫厤鍗曞埜锛岄渶瑕佹縺娲诲悗鎵嶈兘浣跨敤锛岃鎯呭弬瑙佸厤鍗曞埜婵�娲昏鍒欙紱");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濇煡鐪嬨��");
+				}
+			} else {
+				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+			}
+		} else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
+			type = 11;
+
+			// 璧犻�佽褰�
+			UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+					.selectByPrimaryKey(Long.parseLong(identify));
+			if (giveRecord == null)
+				throw new TokenRecordException(1, "璧犻�佽褰曚笉瀛樺湪");
+
+			Date endTime = giveRecord.getEndTime();
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(giveRecord.getCouponId());
+			if (userCoupon == null || userCoupon.getGive() == null || !userCoupon.getGive())
+				throw new TokenRecordException(1, "鍒镐笉瀛樺湪鎴栭潪璧犻�佺姸鎬�");
+
+			if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE
+					|| (endTime != null && endTime.getTime() < now.getTime())) {
+				tips.add("鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸插け鏁堜簡锛�");
+			} else if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE) {
+				tips.add("鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸茶棰嗗彇浜嗭紒");
+			} else if (userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
+				if (uid == null || uid <= 0)
+					throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾杩斿埄濂栧姳鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
+
+				state = true;
+				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
+					tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佷汉鐨勭洿鎺ョ矇涓濓紱");
+					tips.add("鏉挎牀蹇渷濂栧姳鍒革紝鍙敤浜庘�滃凡鍒拌处鈥濈殑杩斿埄璁㈠崟锛屽湪杩斿埄鐨勫熀纭�涓婂啀鑾峰緱涓�瀹氭瘮渚嬬殑杩斿埄锛�");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濅腑鏌ョ湅銆�");
+				} else {
+					tips.add("鏉挎牀蹇渷濂栧姳鍒革紝鍙敤浜庘�滃凡鍒拌处鈥濈殑杩斿埄璁㈠崟锛屽湪杩斿埄鐨勫熀纭�涓婂啀鑾峰緱涓�瀹氭瘮渚嬬殑杩斿埄锛�");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濅腑鏌ョ湅銆�");
+				}
+			} else {
+				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+			}
+		} else if (tokenType == TokenTypeEnum.redPack) {
+			if (!VersionUtil.greaterThan_2_0_5(platform, version))
+				throw new TokenRecordException(1, "璇峰崌绾у埌鏈�鏂扮増");
+
+			type = 13;
+			RedPackGiveRecord giveRecord = redPackGiveRecordService.selectByPrimaryKey(Long.parseLong(identify));
+			if (giveRecord == null)
+				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+
+			Date endTime = giveRecord.getEndTime();
+			// 璧犻�侀潰棰�
+			money = giveRecord.getAmount().setScale(2).toString();
+
+			if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE
+					|| (endTime != null && endTime.getTime() < now.getTime())) {
+				tips.add("鍝庡憖锛岃繖涓孩鍖呭凡澶辨晥浜嗭紒");
+			} else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_RECEIVE) {
+				tips.add("鍝庡憖锛岃繖涓孩鍖呭凡琚鍙栦簡锛�");
+			} else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_INIT) {
+				if (uid == null || uid <= 0)
+					throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾绾㈠寘]闇�瑕佺櫥褰曞悗棰嗗彇");
+				state = true;
+				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
+					tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佷汉鐨勭洿鎺ョ矇涓濓紱");
+					tips.add("绾㈠寘鍙彁鐜帮紝鍙喘涔版姌鎵e晢鍝侊紱");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绾㈠寘鈥濅腑鏌ョ湅銆�");
+				} else {
+					tips.add("绾㈠寘鍙彁鐜帮紝鍙喘涔版姌鎵e晢鍝侊紱");
+					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绾㈠寘鈥濅腑鏌ョ湅銆�");
+				}
+			}
+		} else if (tokenType == TokenTypeEnum.taoLiJin) {
+			throw new TokenRecordException(1, "鎺ㄥ箍绾㈠寘鐩稿叧鍔熻兘宸蹭笅绾匡紒");
+		} else {
+			throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
+		}
 
 		String nickName = null;
 		String portrait = null;
@@ -115,7 +272,7 @@
 		}
 
 		if (StringUtil.isNullOrEmpty(nickName))
-			nickName = Constant.systemCommonConfig.getDefaultNickName();
+			nickName = Constant.systemCommonConfig.getDefaultNickName() + inviteId;
 
 		if (StringUtil.isNullOrEmpty(portrait))
 			portrait = Constant.systemCommonConfig.getDefaultPortrait();
@@ -125,118 +282,11 @@
 		}
 
 		TokenVO tokenVO = new TokenVO();
-		tokenVO.setToken(token);
+		tokenVO.setAmount(num);
+		tokenVO.setMoney(money);
+		tokenVO.setToken(parseToken);
 		tokenVO.setNickName(nickName + "璧犻��");
 		tokenVO.setPortrait(portrait);
-
-		String identify = rokenRecord.getIdentify();
-		if (StringUtil.isNullOrEmpty(identify))
-			throw new TokenRecordException(1, "鍙d护鏍囪瘑涓嶅瓨鍦�");
-
-		Integer type = 0;
-		boolean state = false;
-		List<String> tips = new ArrayList<String>();
-		TokenTypeEnum tokenType = rokenRecord.getType();
-		if (tokenType == TokenTypeEnum.freeCoupon) {
-			type = 10;
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(Long.parseLong(identify));
-			if (userCoupon == null) {
-				tips.add("鍝庡憖锛岃繖寮犲厤鍗曞埜宸插け鏁堜簡锛�");
-			} else {
-				Boolean give = userCoupon.getGive();
-				if (give == null)
-					give = false;
-
-				if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE) {
-					tips.add("鍝庡憖锛岃繖寮犲厤鍗曞埜宸插け鏁堜簡锛�");
-				} else if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE) {
-					tips.add("鍝庡憖锛岃繖寮犲厤鍗曞埜宸茶棰嗗彇浜嗭紒");
-				} else if (userCoupon.getState() == UserSystemCoupon.STATE_CAN_USE) {
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				} else if (give && userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
-					if (uid == null || uid <= 0)
-						throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾鍏嶅崟鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
-
-					state = true;
-					tokenVO.setAmount(1);
-					UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
-					if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
-						tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
-						tips.add("鑾疯禒鐨勫厤鍗曞埜锛岄渶瑕佹縺娲诲悗鎵嶈兘浣跨敤锛岃鎯呭弬瑙佸厤鍗曞埜婵�娲昏鍒欙紱");
-						tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濇煡鐪嬨��");
-					} else {
-						tips.add("鑾疯禒鐨勫厤鍗曞埜锛岄渶瑕佹縺娲诲悗鎵嶈兘浣跨敤锛岃鎯呭弬瑙佸厤鍗曞埜婵�娲昏鍒欙紱");
-						tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濇煡鐪嬨��");
-					}
-				} else {
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				}
-			}
-		} else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
-			type = 11;
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(Long.parseLong(identify));
-			if (userCoupon == null) {
-
-			} else {
-				Boolean give = userCoupon.getGive();
-				if (give == null)
-					give = false;
-
-				if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE) {
-					tips.add("鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸插け鏁堜簡锛�");
-				} else if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE) {
-					tips.add("鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸茶棰嗗彇浜嗭紒");
-				} else if (userCoupon.getState() == UserSystemCoupon.STATE_CAN_USE) {
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				} else if (give && userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
-					if (uid == null || uid <= 0)
-						throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾杩斿埄濂栧姳鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
-
-					state = true;
-					tokenVO.setAmount(1);
-					UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
-					if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
-						tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
-						tips.add("杩斿埄鍒稿鍔卞埜锛屽彲鐢ㄤ簬鈥滃凡鍒拌处鈥濈殑杩斿埄璁㈠崟锛屽湪杩斿埄鐨勫熀纭�涓婂啀鑾峰緱涓�瀹氭瘮渚嬬殑杩斿埄锛�");
-						tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濅腑鏌ョ湅銆�");
-					} else {
-						tips.add("杩斿埄鍒稿鍔卞埜锛屽彲鐢ㄤ簬鈥滃凡鍒拌处鈥濈殑杩斿埄璁㈠崟锛屽湪杩斿埄鐨勫熀纭�涓婂啀鑾峰緱涓�瀹氭瘮渚嬬殑杩斿埄锛�");
-						tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-绂忓埄涓績鈥濅腑鏌ョ湅銆�");
-					}
-				} else {
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				}
-			}
-		} else if (tokenType == TokenTypeEnum.taoLiJin) {
-			type = 12;
-			UserTaoLiJinGiveRecord giveRecord = userTaoLiJinGiveRecordService
-					.selectByPrimaryKey(Long.parseLong(identify));
-			if (giveRecord == null || giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE) {
-				tips.add("鍝庡憖锛屾帹骞跨孩鍖呭凡澶辨晥浜嗭紒");
-			} else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_RECEIVE) {
-				tips.add("鍝庡憖锛屾帹骞跨孩鍖呭凡琚鍙栦簡锛�");
-			} else {
-				if (uid == null || uid <= 0)
-					throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾鎺ㄥ箍绾㈠寘]闇�瑕佺櫥褰曞悗棰嗗彇");
-
-				BigDecimal amount = giveRecord.getAmount();
-				
-				state = true;
-				tokenVO.setAmount(Integer.parseInt(amount.setScale(0).toString()));
-				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
-				if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
-					tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
-					tips.add("鎺ㄥ箍绾㈠寘锛屽彲鍒嗕韩鐖嗘鍟嗗搧锛岃鍒嗕韩璁㈠崟鎴愬崟鐜囨洿楂橈紱");
-					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-鎺ㄥ箍绾㈠寘鈥濅腑鏌ョ湅銆�");
-				} else {
-					tips.add("鎺ㄥ箍绾㈠寘锛屽彲鍒嗕韩鐖嗘鍟嗗搧锛岃鍒嗕韩璁㈠崟鎴愬崟鐜囨洿楂橈紱");
-					tips.add("鎴愬姛棰嗗彇鍚庯紝璇峰埌鈥滄垜鐨�-鎺ㄥ箍绾㈠寘鈥濅腑鏌ョ湅銆�");
-				}
-			}
-		} else {
-			throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
-		}
-
 		tokenVO.setTips(tips);
 		tokenVO.setState(state);
 		tokenVO.setType(type);
@@ -244,7 +294,7 @@
 	}
 
 	@Override
-	public String receiveToken(String token, Long uid) throws TokenRecordException {
+	public String receiveToken(String token, Long uid, AcceptData acceptData) throws TokenRecordException {
 		if (uid == null || uid <= 0)
 			throw new TokenRecordException(1, "鐢ㄦ埛鏈櫥褰�");
 
@@ -254,241 +304,280 @@
 		TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
 		if (rokenRecord == null)
 			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-		
+
+		Long uidToken = rokenRecord.getUid();
+		if (uidToken != null && uid.longValue() == uidToken.longValue())
+			throw new TokenRecordException(1, "涓嶈兘鑷繁璧犻�佺粰鑷繁");
+
 		Date now = new Date();
 		Date endTimeToken = rokenRecord.getEndTime();
 		if (endTimeToken != null && endTimeToken.getTime() < now.getTime())
 			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-		
+
 		Integer stateTtoken = rokenRecord.getState();
 		if (stateTtoken != null && stateTtoken == 1)
 			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-		
+
 		String identify = rokenRecord.getIdentify();
 		if (StringUtil.isNullOrEmpty(identify))
 			throw new TokenRecordException(1, "鍙d护鏍囪瘑涓嶅瓨鍦�");
-		
-		
+
 		Long giveUid = rokenRecord.getUid();
 		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
-		if (userInfoExtra == null) 
+		if (userInfoExtra == null)
 			throw new TokenRecordException(1, "鐢ㄦ埛淇℃伅缂哄け");
-			
-		
+
 		String msg = "棰嗗彇鎴愬姛";
 		TokenTypeEnum tokenType = rokenRecord.getType();
 		if (tokenType == TokenTypeEnum.freeCoupon) {
-			long couponId = Long.parseLong(identify);
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(couponId);
-			if (userCoupon == null)
-				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
+			// 璧犻�佽褰�
+			UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+					.selectByPrimaryKey(Long.parseLong(identify));
+			if (giveRecord == null)
+				throw new TokenRecordException(1, "璧犻�佽褰曚笉瀛樺湪");
 
-			Boolean give = userCoupon.getGive();
-			if (give == null)
-				give = false;
-			
-			if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE)
-				throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犲厤鍗曞埜宸插け鏁堜簡锛�");
-			
-			if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE)
-				throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犲厤鍗曞埜宸茶棰嗗彇浜嗭紒");
-			
-			if (userCoupon.getState() == UserSystemCoupon.STATE_CAN_USE)
-				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-			
-			if (give && userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
-				UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getRecordByUidAndCouponId(giveUid, couponId);
-				if (giveRecord == null ) 
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				
-				Date endTime = giveRecord.getEndTime();
-				if (endTime != null && endTime.getTime() < now.getTime())
-					throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犲厤鍗曞埜宸插け鏁堜簡锛�");
-				
-				try {
-					userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCoupon.name(), UserSystemCoupon.SOURCE_GIVE);
-				} catch (Exception e) {
-					LogHelper.errorDetailInfo(e);
-					throw new TokenRecordException(1, "棰嗗彇澶辫触");
-				}
-				
-				// 鏇存柊璧犻�佸埜淇℃伅
-				userSystemCouponService.updateGiveRecord(uid, couponId, CouponTypeEnum.freeCoupon.name());
-				
-				// 鏇存柊璧犻�佽褰�
-				giveRecord.setReceiveUid(uid);
-				giveRecord.setReceiveTime(new Date());
-				userSystemCouponGiveRecordService.updateByPrimaryKeySelective(giveRecord);
-				
-				msg = "棰嗗彇鎴愬姛[鍏嶅崟鍒竇鎴愬姛锛岃鍒癧鎴戠殑-绂忓埄涓績]涓煡鐪�";
-				// 娑堟伅 + 闃熷憳
-				executor.execute(new Runnable() {
-					@Override
-					public void run() {
-						SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
-						boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
-						String beiZhu = "鏃�";
-						if (addTeam)
-							beiZhu = "棰嗗彇浜哄凡缁忔垚涓轰綘鐨勪竴绾ч槦鍛�";
-						
-						String userName = "鏃�";
-						UserInfo user = userInfoService.selectByPKey(uid);
-						if (user != null && !StringUtil.isNullOrEmpty(user.getNickName()))
-							userName = user.getNickName();
-						
-						MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
-						msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
-						msgOther.setTitle("璧犻�佸厤鍗曞埜");
-						msgOther.setGiveType("浣犺禒閫佺殑鍏嶅崟鍒歌鎴愬姛棰嗗彇");
-						msgOther.setReceiveInfo("鏄电О:  " + userName +" ID:" + uid);
-						msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
-						msgOther.setReceiveTime(sd.format(new Date()));
-						userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
-					}
-				});
-			} else {
-				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+			Date endTime = giveRecord.getEndTime();
+			if (endTime != null && endTime.getTime() < now.getTime())
+				throw new TokenRecordException(1, "璧犻�佽褰曞凡杩囨湡");
+
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(giveRecord.getCouponId());
+			if (userCoupon == null || userCoupon.getGive() == null || !userCoupon.getGive()
+					|| userCoupon.getState() != UserSystemCoupon.STATE_IN_USE)
+				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦ㄦ垨闈炶禒閫�");
+
+			UserSystemCoupon userSystemCoupon = null;
+			try {
+				userSystemCoupon = userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCoupon.name(),
+						UserSystemCoupon.SOURCE_GIVE, null, true);
+			} catch (Exception e) {
+				LogHelper.errorDetailInfo(e);
+				throw new TokenRecordException(1, "棰嗗彇澶辫触");
 			}
 
+			// 鏇存柊鐘舵��
+			Date date = new Date();
+			userCoupon.setId(userCoupon.getId());
+			userCoupon.setState(UserSystemCoupon.STATE_END_USE);
+			userCoupon.setUseTime(date);
+			userCoupon.setUpdateTime(date);
+			userSystemCouponService.updateByPrimaryKeySelective(userCoupon);
+
+			// 鏇存柊浣跨敤璁板綍
+			UserSystemCouponRecord useRecord = userSystemCouponRecordService.getNearByUserCouponId(userCoupon.getId());
+			if (useRecord != null) {
+				UserSystemCouponRecord updateuseRecord = new UserSystemCouponRecord();
+				updateuseRecord.setId(useRecord.getId());
+				updateuseRecord.setState(UserSystemCouponRecord.STATE_SUCCESS);
+				updateuseRecord.setUpdateTime(new Date());
+				userSystemCouponRecordService.updateByPrimaryKeySelective(updateuseRecord);
+			}
+
+			// 鏇存柊璧犻�佽褰�
+			UserSystemCouponGiveRecord updateGiveRecord = new UserSystemCouponGiveRecord();
+			updateGiveRecord.setId(giveRecord.getId());
+			updateGiveRecord.setReceiveUid(uid);
+			updateGiveRecord.setReceiveTime(new Date());
+			updateGiveRecord.setState(UserSystemCouponGiveRecord.STATE_RECEIVE);
+			if (userSystemCoupon != null) {
+				updateGiveRecord.setReceiveId(userSystemCoupon.getId());
+			}
+			userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateGiveRecord);
+
+			integralGetService.addGiveFreeCoupon(giveUid);
+
+			msg = "棰嗗彇鎴愬姛[鍏嶅崟鍒竇鎴愬姛锛岃鍒癧鎴戠殑-绂忓埄涓績]涓煡鐪�";
+			// 娑堟伅 + 闃熷憳
+			executor.execute(new Runnable() {
+				@Override
+				public void run() {
+					SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+					boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
+					String beiZhu = "鏃�";
+					if (addTeam)
+						beiZhu = "棰嗗彇浜哄凡缁忔垚涓轰綘鐨勭洿鎺ョ矇涓�";
+
+					String userName = "鏃�";
+					UserInfo user = userInfoService.selectByPKey(uid);
+					if (user != null && !StringUtil.isNullOrEmpty(user.getNickName()))
+						userName = user.getNickName();
+
+					MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
+					msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
+					msgOther.setTitle("璧犻�佸厤鍗曞埜");
+					msgOther.setGiveType("浣犺禒閫佺殑鍏嶅崟鍒歌鎴愬姛棰嗗彇");
+					msgOther.setReceiveInfo("鏄电О: 锛�" + userName + " ID锛�" + uid);
+					msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
+					msgOther.setReceiveTime(sd.format(new Date()));
+					userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
+
+					// 婵�娲婚個璇蜂俊鎭�
+					if (addTeam)
+						addInviteMsg(uid, giveUid, "鍏嶅崟鍒�");
+				}
+			});
 		} else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
-			long couponId = Long.parseLong(identify);
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(couponId);
-			if (userCoupon == null)
+			// 璧犻�佽褰�
+			UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+					.selectByPrimaryKey(Long.parseLong(identify));
+			if (giveRecord == null)
+				throw new TokenRecordException(1, "璧犻�佽褰曚笉瀛樺湪");
+
+			Date endTime = giveRecord.getEndTime();
+			if (endTime != null && endTime.getTime() < now.getTime())
+				throw new TokenRecordException(1, "璧犻�佽褰曞凡杩囨湡");
+
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(giveRecord.getCouponId());
+			if (userCoupon == null || userCoupon.getGive() == null || !userCoupon.getGive()
+					|| userCoupon.getState() != UserSystemCoupon.STATE_IN_USE)
+				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦ㄦ垨闈炶禒閫�");
+
+			SystemCoupon systemCoupon = userCoupon.getSystemCoupon();
+			if (systemCoupon == null)
 				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
 
-			Boolean give = userCoupon.getGive();
-			if (give == null)
-				give = false;
+			systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
+			if (systemCoupon == null)
+				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
 
-			if (userCoupon.getState() == UserSystemCoupon.STATE_OVERDUE)
-				throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸插け鏁堜簡锛�");
-			
-			if (userCoupon.getState() == UserSystemCoupon.STATE_END_USE) 
-				throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸茶棰嗗彇浜嗭紒");
-			
-			if (userCoupon.getState() == UserSystemCoupon.STATE_CAN_USE)
-				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-			
-		    if (give && userCoupon.getState() == UserSystemCoupon.STATE_IN_USE) {
-		    	UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getRecordByUidAndCouponId(giveUid, couponId);
-				if (giveRecord == null ) 
-					throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-				
-				Date endTime = giveRecord.getEndTime();
-				if (endTime != null && endTime.getTime() < now.getTime())
-					throw new TokenRecordException(1, "鍝庡憖锛岃繖寮犺繑鍒╁鍔卞埜宸插け鏁堜簡锛�");
-		    	
-		    	try {
-					userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(), UserSystemCoupon.SOURCE_GIVE);
-				} catch (Exception e) {
-					LogHelper.errorDetailInfo(e);
-					throw new TokenRecordException(1, "棰嗗彇澶辫触");
+			UserSystemCoupon userSystemCoupon = null;
+			try {
+				userSystemCoupon = userSystemCouponService.insertUserCoupon(uid,
+						CouponTypeEnum.rebatePercentCoupon.name(), UserSystemCoupon.SOURCE_GIVE,
+						systemCoupon.getPercent(), true);
+			} catch (Exception e) {
+				LogHelper.errorDetailInfo(e);
+				throw new TokenRecordException(1, "棰嗗彇澶辫触");
+			}
+
+			// 鏇存柊鐘舵��
+			Date date = new Date();
+			userCoupon.setId(userCoupon.getId());
+			userCoupon.setState(UserSystemCoupon.STATE_END_USE);
+			userCoupon.setUseTime(date);
+			userCoupon.setUpdateTime(date);
+			userSystemCouponService.updateByPrimaryKeySelective(userCoupon);
+
+			// 鏇存柊浣跨敤璁板綍
+			UserSystemCouponRecord useRecord = userSystemCouponRecordService.getNearByUserCouponId(userCoupon.getId());
+			if (useRecord != null) {
+				UserSystemCouponRecord updateuseRecord = new UserSystemCouponRecord();
+				updateuseRecord.setId(useRecord.getId());
+				updateuseRecord.setState(UserSystemCouponRecord.STATE_SUCCESS);
+				updateuseRecord.setUpdateTime(new Date());
+				userSystemCouponRecordService.updateByPrimaryKeySelective(updateuseRecord);
+			}
+
+			// 鏇存柊璧犻�佽褰�
+			UserSystemCouponGiveRecord updateGiveRecord = new UserSystemCouponGiveRecord();
+			updateGiveRecord.setId(giveRecord.getId());
+			updateGiveRecord.setReceiveUid(uid);
+			updateGiveRecord.setReceiveTime(new Date());
+			updateGiveRecord.setState(UserSystemCouponGiveRecord.STATE_RECEIVE);
+			if (userSystemCoupon != null) {
+				updateGiveRecord.setReceiveId(userSystemCoupon.getId());
+			}
+			userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateGiveRecord);
+
+			integralGetService.addGiveRebateCoupon(giveUid);
+
+			msg = "棰嗗彇鎴愬姛[杩斿埄濂栧姳鍒竇鎴愬姛锛岃鍒癧鎴戠殑-绂忓埄涓績]涓煡鐪�";
+			// 娑堟伅 + 闃熷憳
+			executor.execute(new Runnable() {
+
+				@Override
+				public void run() {
+					SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+					boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
+					String beiZhu = "鏃�";
+					if (addTeam)
+						beiZhu = "棰嗗彇浜哄凡缁忔垚涓轰綘鐨勭洿鎺ョ矇涓�";
+
+					String userName = "鏃�";
+					UserInfo user = userInfoService.selectByPKey(uid);
+					if (user != null && !StringUtil.isNullOrEmpty(user.getNickName()))
+						userName = user.getNickName();
+
+					MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
+					msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
+					msgOther.setTitle("璧犻�佸鍔卞埜");
+					msgOther.setGiveType("浣犺禒閫佺殑濂栧姳鍒歌鎴愬姛棰嗗彇");
+					msgOther.setReceiveInfo("鏄电О锛� " + userName + " ID锛�" + uid);
+					msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
+					msgOther.setReceiveTime(sd.format(new Date()));
+					userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
+
+					// 婵�娲婚個璇蜂俊鎭�
+					if (addTeam)
+						addInviteMsg(uid, giveUid, "杩斿埄濂栧姳鍒�");
 				}
-		    	
-		    	// 鏇存柊璧犻�佸埜淇℃伅
-				userSystemCouponService.updateGiveRecord(uid, couponId, CouponTypeEnum.rebatePercentCoupon.name());
-				
-				// 鏇存柊璧犻�佽褰�
-				giveRecord.setReceiveUid(uid);
-				giveRecord.setReceiveTime(new Date());
-				userSystemCouponGiveRecordService.updateByPrimaryKeySelective(giveRecord);
-				
-				msg = "棰嗗彇鎴愬姛[杩斿埄濂栧姳鍒竇鎴愬姛锛岃鍒癧鎴戠殑-绂忓埄涓績]涓煡鐪�";
+			});
+		} else if (tokenType == TokenTypeEnum.redPack) {
+			if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
+				throw new TokenRecordException(1, "璇峰崌绾у埌鏈�鏂扮増");
+
+			try {
+				msg = "棰嗗彇绾㈠寘鎴愬姛锛岃鍒癧鎴戠殑-绾㈠寘]涓煡鐪�";
+				// 棰嗗彇绾㈠寘銆佹洿鏂拌褰�
+				RedPackGiveRecord giveRecord = redPackGiveRecordService.receiveFriendsGive(uid,
+						Long.parseLong(identify));
 				// 娑堟伅 + 闃熷憳
 				executor.execute(new Runnable() {
 					@Override
 					public void run() {
-						SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
+						SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
 						boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
+
 						String beiZhu = "鏃�";
-						if (addTeam)
-							beiZhu = "棰嗗彇浜哄凡缁忔垚涓轰綘鐨勪竴绾ч槦鍛�";
-						
+						String giveBeiZhu = "鏃�";
+						if (addTeam) {
+							beiZhu = "浣犲凡鎴愪负璧犻�佷汉鐨勭洿鎺ョ矇涓�";
+							giveBeiZhu = "棰嗗彇浜哄凡鎴愪负浣犵殑鐩存帴绮変笣";
+							// 婵�娲婚個璇蜂俊鎭�
+							addInviteMsg(uid, giveUid, giveRecord.getAmount().setScale(2) + "鍏冪孩鍖�");
+						}
+
+						// 棰嗗彇浜烘秷鎭�
+						String giveUserName = "鏃�";
+						UserInfo giveuser = userInfoService.selectByPKey(giveUid);
+						if (giveuser != null && !StringUtil.isNullOrEmpty(giveuser.getNickName()))
+							giveUserName = giveuser.getNickName();
+						MsgRedPackGiveContentDTO dto = new MsgRedPackGiveContentDTO();
+						dto.setTitle("绾㈠寘棰嗗彇");
+						dto.setUserInfo("鏄电О锛�" + giveUserName + " ID锛�" + giveUid);
+						dto.setTime(sd.format(giveRecord.getGiveTime()));
+						dto.setMoney("楼" + giveRecord.getAmount().setScale(2));
+						userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackReceiveOff,
+								new Gson().toJson(dto), beiZhu);
+
+						// 璧犻�佷汉娑堟伅
 						String userName = "鏃�";
 						UserInfo user = userInfoService.selectByPKey(uid);
 						if (user != null && !StringUtil.isNullOrEmpty(user.getNickName()))
 							userName = user.getNickName();
-						
-						MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
-						msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
-						msgOther.setTitle("璧犻�佸鍔卞埜");
-						msgOther.setGiveType("浣犺禒閫佺殑濂栧姳鍒歌鎴愬姛棰嗗彇");
-						msgOther.setReceiveInfo("鏄电О:  " + userName +" ID:" + uid);
-						msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
-						msgOther.setReceiveTime(sd.format(new Date()));
-						userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
+						MsgRedPackGiveContentDTO givedto = new MsgRedPackGiveContentDTO();
+						givedto.setTitle("绾㈠寘璧犻��");
+						givedto.setUserInfo("鏄电О锛�" + userName + " ID锛�" + uid);
+						givedto.setTime(sd.format(new Date()));
+						givedto.setMoney("楼" + giveRecord.getAmount().setScale(2));
+						userMoneyMsgNotificationService.redPackMsg(giveUid, MsgTypeMoneyTypeEnum.redPackGiveOff,
+								new Gson().toJson(givedto), giveBeiZhu);
 					}
 				});
-			} else {
-				throw new TokenRecordException(1, "鍙d护宸插け鏁�");
+			} catch (RedPackGiveRecordException e) {
+				throw new TokenRecordException(1, e.getMsg());
 			}
 		} else if (tokenType == TokenTypeEnum.taoLiJin) {
-			UserTaoLiJinGiveRecord giveRecord = userTaoLiJinGiveRecordService
-					.selectByPrimaryKey(Long.parseLong(identify));
-			if (giveRecord == null || giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE) {
-				throw new TokenRecordException(1, "鍝庡憖锛屾帹骞跨孩鍖呭凡澶辨晥浜嗭紒");
-			} else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_RECEIVE) {
-				throw new TokenRecordException(1, "鍝庡憖锛屾帹骞跨孩鍖呭凡琚鍙栦簡锛�");
-			} else {
-				Date endTime = giveRecord.getEndTime();
-				if (endTime != null && endTime.getTime() < now.getTime())
-					throw new TokenRecordException(1, "鍝庡憖锛屾帹骞跨孩鍖呭凡澶辨晥浜嗭紒");
-				
-				BigDecimal amount = giveRecord.getAmount();
-				try {
-					// 棰嗗彇
-					userTaoLiJinOriginService.receiveFriendsGive(uid, amount);
-					
-					// 鏇存柊璁板綍
-					UserTaoLiJinGiveRecord updateRecord = new UserTaoLiJinGiveRecord();
-					updateRecord.setId(Long.parseLong(identify));
-					updateRecord.setReceiveTime(new Date());
-					updateRecord.setReceiveUid(uid);
-					updateRecord.setState(UserTaoLiJinGiveRecord.STATE_RECEIVE);
-					userTaoLiJinGiveRecordService.updateByPrimaryKeySelective(updateRecord);
-					
-					msg = "棰嗗彇鎴愬姛[鎺ㄥ箍绾㈠寘]鎴愬姛锛岃鍒癧鎴戠殑-鎺ㄥ箍绾㈠寘]涓煡鐪�";
-					
-					// 娑堟伅 + 闃熷憳
-					executor.execute(new Runnable() {
-						@Override
-						public void run() {
-							SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
-							boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
-							String beiZhu = "鏃�";
-							if (addTeam)
-								beiZhu = "棰嗗彇浜哄凡缁忔垚涓轰綘鐨勪竴绾ч槦鍛�";
-							
-							String userName = "鏃�";
-							UserInfo user = userInfoService.selectByPKey(uid);
-							if (user != null && !StringUtil.isNullOrEmpty(user.getNickName()))
-								userName = user.getNickName();
-							
-							MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
-							msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
-							msgOther.setTitle("璧犻�佹帹骞跨孩鍖�");
-							msgOther.setGiveType("浣犺禒閫佺殑鎺ㄥ箍绾㈠寘琚垚鍔熼鍙�");
-							msgOther.setReceiveInfo("鏄电О:  " + userName +" ID:" + uid);
-							msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
-							msgOther.setReceiveTime(sd.format(new Date()));
-							userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
-						}
-					});
-					
-				} catch (UserTaoLiJinOriginException e) {
-					e.printStackTrace();
-				}
-			}
+			throw new TokenRecordException(1, "鎺ㄥ箍绾㈠寘鐩稿叧鍔熻兘宸蹭笅绾匡紒");
 		} else {
 			throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
 		}
-		
+
 		return msg;
 	}
-	
-	
+
 	/**
-	 *     鏈縺娲婚個璇风爜锛� 涓婁笅绾у叧绯荤‘绔�
+	 * 鏈縺娲婚個璇风爜锛� 涓婁笅绾у叧绯荤‘绔�
+	 * 
 	 * @param uid
 	 * @param giveUid
 	 * @param userInfoExtra
@@ -498,9 +587,9 @@
 		boolean invite = false;
 		if (StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
 			UserInfoExtra userInfoExtraGive = userInfoExtraService.getUserInfoExtra(giveUid);
-			if (userInfoExtraGive != null ) {
+			if (userInfoExtraGive != null) {
 				String inviteCode = userInfoExtraGive.getInviteCode();
-				if(!StringUtil.isNullOrEmpty(inviteCode)) {
+				if (!StringUtil.isNullOrEmpty(inviteCode)) {
 					try {
 						userInfoExtraService.activateInviteCode(uid, inviteCode);
 						invite = true;
@@ -512,5 +601,66 @@
 		}
 		return invite;
 	}
-	
+
+	private void addInviteMsg(Long uid, Long giveUid, String giftName) {
+		try {
+			UserInfo user = userInfoService.selectByPKey(giveUid);
+			UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+
+			String inviteCode = null;
+			if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
+				inviteCode = userInfoExtra.getInviteCodeVip();
+			} else {
+				inviteCode = userInfoExtra.getInviteCode();
+			}
+
+			MsgInviteContentDTO msgInvite = new MsgInviteContentDTO();
+			msgInvite.setTitle("閭�璇锋秷鎭�");
+			msgInvite.setState("鎴愬姛婵�娲婚個璇�");
+			msgInvite.setCode("浣犵殑閭�璇风爜锛�" + inviteCode);
+			msgInvite.setInviter("鏄电О锛�" + user.getNickName());
+			msgInvite.setMode("鎴愬姛棰嗗彇閭�璇蜂汉鐨�" + giftName);
+			userInviteMsgNotificationService.receiveGift(uid, "閭�璇峰叧绯讳竴鏃︾‘绔嬫棤娉曟洿鏀� ", msgInvite);
+		} catch (Exception e) {
+			LogHelper.errorDetailInfo(e);
+		}
+	}
+
+	@Override
+	public List<TokenRecord> overdueList(int count) {
+		return tokenRecordMapper.overdueList(count);
+	}
+
+	@Override
+	public void overdue(List<TokenRecord> list) {
+		if (list == null || list.size() == 0)
+			return;
+		Date date = new Date();
+		for (TokenRecord tokenRecord : list) {
+			tokenRecord.setState(1);
+			tokenRecord.setUpdateTime(date);
+			tokenRecordMapper.updateByPrimaryKeySelective(tokenRecord);
+		}
+	}
+
+	@Override
+	public void invalidByRedPack(Long id) {
+		if (id == null)
+			return;
+
+		List<String> list = new ArrayList<String>();
+		list.add(TokenTypeEnum.redPack.name());
+		tokenRecordMapper.invalidByTypeAndIdentify(list, id.toString());
+	}
+
+	@Override
+	public void invalidByCoupon(Long id) {
+		if (id == null)
+			return;
+
+		List<String> list = new ArrayList<String>();
+		list.add(TokenTypeEnum.freeCoupon.name());
+		list.add(TokenTypeEnum.rebatePercentCoupon.name());
+		tokenRecordMapper.invalidByTypeAndIdentify(list, id.toString());
+	}
 }

--
Gitblit v1.8.0