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/user/TokenRecordServiceImpl.java | 1218 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 550 insertions(+), 668 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 96dfaef..45eaf7f 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,668 +1,550 @@
-package com.yeshi.fanli.service.impl.user;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-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;
-import com.yeshi.fanli.entity.bus.user.UserInfo;
-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.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.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.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
-public class TokenRecordServiceImpl implements TokenRecordService {
-
-	@Resource(name = "taskExecutor")
-	private TaskExecutor executor;
-
-	@Resource
-	private TokenRecordMapper tokenRecordMapper;
-
-	@Resource
-	private UserInfoService userInfoService;
-
-	@Resource
-	@Lazy
-	private UserSystemCouponService userSystemCouponService;
-
-	@Resource
-	private ThreeSaleSerivce threeSaleSerivce;
-
-	@Resource
-	private UserInfoExtraService userInfoExtraService;
-
-	@Resource
-	private UserSystemCouponRecordService userSystemCouponRecordService;
-
-	@Resource
-	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());
-		record.setUpdateTime(new Date());
-		tokenRecordMapper.insertSelective(record);
-	}
-
-	
-	@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, AcceptData acceptData) throws TokenRecordException {
-		// 瑙f瀽鍙d护
-		String parseToken = TokenUtil.parseToken(token);
-		if (StringUtil.isNullOrEmpty(parseToken)) 
-			throw new TokenRecordException(1, "鏈彂鐜板彛浠�");
-		
-		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();
-		Integer stateTtoken = rokenRecord.getState();
-		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_1(acceptData.getPlatform(), acceptData.getVersion()))
-				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;
-		Long inviteId = rokenRecord.getUid();
-		if (inviteId != null) {
-			UserInfo inviteUser = userInfoService.selectByPKey(inviteId);
-			if (inviteUser != null) {
-				nickName = inviteUser.getNickName();
-				portrait = inviteUser.getPortrait();
-			}
-		}
-
-		if (StringUtil.isNullOrEmpty(nickName))
-			nickName = Constant.systemCommonConfig.getDefaultNickName() + inviteId;
-
-		if (StringUtil.isNullOrEmpty(portrait))
-			portrait = Constant.systemCommonConfig.getDefaultPortrait();
-
-		if (nickName.length() > 6) {
-			nickName = nickName.substring(0, 6) + "...";
-		}
-		
-		TokenVO tokenVO = new TokenVO();
-		tokenVO.setAmount(num);
-		tokenVO.setMoney(money);
-		tokenVO.setToken(parseToken);
-		tokenVO.setNickName(nickName + "璧犻��");
-		tokenVO.setPortrait(portrait);
-		tokenVO.setTips(tips);
-		tokenVO.setState(state);
-		tokenVO.setType(type);
-		return tokenVO;
-	}
-	
-	
-
-	@Override
-	public String receiveToken(String token, Long uid, AcceptData acceptData) throws TokenRecordException {
-		if (uid == null || uid <= 0)
-			throw new TokenRecordException(1, "鐢ㄦ埛鏈櫥褰�");
-
-		if (StringUtil.isNullOrEmpty(token))
-			throw new TokenRecordException(1, "鍙d护涓嶈兘涓虹┖");
-
-		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)
-			throw new TokenRecordException(1, "鐢ㄦ埛淇℃伅缂哄け");
-
-		String msg = "棰嗗彇鎴愬姛";
-		TokenTypeEnum tokenType = rokenRecord.getType();
-		if (tokenType == TokenTypeEnum.freeCoupon) {
-			// 璧犻�佽褰�
-			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, "璇ュ埜涓嶅瓨鍦ㄦ垨闈炶禒閫�");
-			
-			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) {
-			// 璧犻�佽褰�
-			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, "璇ュ埜涓嶅瓨鍦�");
-			
-			systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
-			if (systemCoupon == null)
-				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, "杩斿埄濂栧姳鍒�");
-				}
-			});
-		} else if (tokenType == TokenTypeEnum.redPack) {
-			if(!VersionUtil.greaterThan_2_1(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");
-						boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
-						
-						String 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();
-						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);
-					}
-				});
-			} catch (RedPackGiveRecordException e) {
-				throw new TokenRecordException(1, e.getMsg());
-			}
-		} else if (tokenType == TokenTypeEnum.taoLiJin) {
-			throw new TokenRecordException(1, "鎺ㄥ箍绾㈠寘鐩稿叧鍔熻兘宸蹭笅绾匡紒");
-		} else {
-			throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
-		}
-
-		return msg;
-	}
-
-	/**
-	 * 鏈縺娲婚個璇风爜锛� 涓婁笅绾у叧绯荤‘绔�
-	 * 
-	 * @param uid
-	 * @param giveUid
-	 * @param userInfoExtra
-	 * @return
-	 */
-	public boolean addInviteTeam(Long uid, Long giveUid, UserInfoExtra userInfoExtra) {
-		boolean invite = false;
-		if (StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
-			UserInfoExtra userInfoExtraGive = userInfoExtraService.getUserInfoExtra(giveUid);
-			if (userInfoExtraGive != null) {
-				String inviteCode = userInfoExtraGive.getInviteCode();
-				if (!StringUtil.isNullOrEmpty(inviteCode)) {
-					try {
-						userInfoExtraService.activateInviteCode(uid, inviteCode);
-						invite = true;
-					} catch (UserInfoExtraException e) {
-						e.printStackTrace();
-					}
-				}
-			}
-		}
-		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) {
-			Integer state = tokenRecord.getState();
-			if (state != null && state == 0) 
-				continue;
-			
-			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());
-	}
-}
+package com.yeshi.fanli.service.impl.user;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.entity.config.SystemConfigKeyEnum;
+import com.yeshi.fanli.service.inter.config.SystemConfigService;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dao.mybatis.user.TokenRecordMapper;
+import com.yeshi.fanli.entity.accept.AcceptData;
+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;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+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.user.TokenRecordException;
+import com.yeshi.fanli.exception.user.UserInfoExtraException;
+import com.yeshi.fanli.log.LogHelper;
+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.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
+public class TokenRecordServiceImpl implements TokenRecordService {
+
+    @Resource(name = "taskExecutor")
+    private TaskExecutor executor;
+
+    @Resource
+    private TokenRecordMapper tokenRecordMapper;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    @Lazy
+    private UserSystemCouponService userSystemCouponService;
+
+    @Resource
+    private ThreeSaleSerivce threeSaleSerivce;
+
+    @Resource
+    private UserInfoExtraService userInfoExtraService;
+
+    @Resource
+    private UserSystemCouponRecordService userSystemCouponRecordService;
+
+    @Resource
+    private UserSystemCouponGiveRecordService userSystemCouponGiveRecordService;
+
+    @Resource
+    private UserOtherMsgNotificationService userOtherMsgNotificationService;
+
+    @Lazy
+    @Resource
+    private IntegralGetService integralGetService;
+
+    @Resource
+    private SystemCouponService systemCouponService;
+
+    @Resource
+    private RedPackGiveRecordService redPackGiveRecordService;
+
+    @Resource
+    private SystemConfigService systemConfigService;
+
+    @Override
+    public void insertSelective(TokenRecord record) {
+        record.setCreateTime(new Date());
+        record.setUpdateTime(new Date());
+        tokenRecordMapper.insertSelective(record);
+    }
+
+    @Override
+    public void updateByPrimaryKeySelective(TokenRecord record) {
+        tokenRecordMapper.updateByPrimaryKeySelective(record);
+    }
+
+    @Override
+    public TokenRecord getNearByTypeAndIdentify(String type, String identify) {
+        return tokenRecordMapper.getNearByTypeAndIdentify(type, identify);
+    }
+
+    @Override
+    public TokenRecord getByTypeAndIdentify(String type, String identify) {
+        return tokenRecordMapper.getByTypeAndIdentify(type, identify);
+    }
+
+    @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(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();
+        Integer stateTtoken = rokenRecord.getState();
+        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;
+        Long inviteId = rokenRecord.getUid();
+        if (inviteId != null) {
+            UserInfo inviteUser = userInfoService.selectByPKey(inviteId);
+            if (inviteUser != null) {
+                nickName = inviteUser.getNickName();
+                portrait = inviteUser.getPortrait();
+            }
+        }
+
+        SystemEnum system = userInfoService.getUserSystem(rokenRecord.getUid());
+
+        if (StringUtil.isNullOrEmpty(nickName))
+            nickName = systemConfigService.getValueCache(SystemConfigKeyEnum.defaultNickNamePrefix, system) + inviteId;
+
+        if (StringUtil.isNullOrEmpty(portrait))
+            portrait = systemConfigService.getValueCache(SystemConfigKeyEnum.defaultPortrait, system);
+
+        if (nickName.length() > 6) {
+            nickName = nickName.substring(0, 6) + "...";
+        }
+
+        TokenVO tokenVO = new TokenVO();
+        tokenVO.setAmount(num);
+        tokenVO.setMoney(money);
+        tokenVO.setToken(parseToken);
+        tokenVO.setNickName(nickName + "璧犻��");
+        tokenVO.setPortrait(portrait);
+        tokenVO.setTips(tips);
+        tokenVO.setState(state);
+        tokenVO.setType(type);
+        return tokenVO;
+    }
+
+    @Override
+    public String receiveToken(String token, Long uid, AcceptData acceptData) throws TokenRecordException {
+        if (uid == null || uid <= 0)
+            throw new TokenRecordException(1, "鐢ㄦ埛鏈櫥褰�");
+
+        if (StringUtil.isNullOrEmpty(token))
+            throw new TokenRecordException(1, "鍙d护涓嶈兘涓虹┖");
+
+        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)
+            throw new TokenRecordException(1, "鐢ㄦ埛淇℃伅缂哄け");
+
+        String msg = "棰嗗彇鎴愬姛";
+        TokenTypeEnum tokenType = rokenRecord.getType();
+        if (tokenType == TokenTypeEnum.freeCoupon) {
+            // 璧犻�佽褰�
+            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, "璇ュ埜涓嶅瓨鍦ㄦ垨闈炶禒閫�");
+
+            UserSystemCoupon userSystemCoupon = null;
+            try {
+                userSystemCoupon = userSystemCouponService.freeCouponWin(uid, CouponTypeEnum.freeCoupon,
+                        UserSystemCoupon.SOURCE_GIVE, 1, 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() {
+                    addInviteTeam(uid, giveUid, userInfoExtra);
+                }
+            });
+        } else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
+            // 璧犻�佽褰�
+            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, "璇ュ埜涓嶅瓨鍦�");
+
+            systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
+            if (systemCoupon == null)
+                throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
+
+            UserSystemCoupon userSystemCoupon = null;
+            try {
+                userSystemCoupon = userSystemCouponService.rewardCouponWin(uid, UserSystemCoupon.SOURCE_GIVE, 1, true,
+                        systemCoupon.getPercent());
+            } 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() {
+                    addInviteTeam(uid, giveUid, userInfoExtra);
+                }
+            });
+        } else if (tokenType == TokenTypeEnum.redPack) {
+            if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
+                throw new TokenRecordException(1, "璇峰崌绾у埌鏈�鏂扮増");
+
+            msg = "棰嗗彇绾㈠寘鎴愬姛锛岃鍒癧鎴戠殑-绾㈠寘]涓煡鐪�";
+            // 娑堟伅 + 闃熷憳
+            executor.execute(new Runnable() {
+                @Override
+                public void run() {
+                    addInviteTeam(uid, giveUid, userInfoExtra);
+                }
+            });
+        } else if (tokenType == TokenTypeEnum.taoLiJin) {
+            throw new TokenRecordException(1, "鎺ㄥ箍绾㈠寘鐩稿叧鍔熻兘宸蹭笅绾匡紒");
+        } else {
+            throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
+        }
+
+        return msg;
+    }
+
+    /**
+     * 鏈縺娲婚個璇风爜锛� 涓婁笅绾у叧绯荤‘绔�
+     *
+     * @param uid
+     * @param giveUid
+     * @param userInfoExtra
+     * @return
+     */
+    public boolean addInviteTeam(Long uid, Long giveUid, UserInfoExtra userInfoExtra) {
+        boolean invite = false;
+        if (StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
+            UserInfoExtra userInfoExtraGive = userInfoExtraService.getUserInfoExtra(giveUid);
+            if (userInfoExtraGive != null) {
+                String inviteCode = userInfoExtraGive.getInviteCode();
+                if (!StringUtil.isNullOrEmpty(inviteCode)) {
+                    try {
+                        userInfoExtraService.activateInviteCode(uid, inviteCode);
+                        invite = true;
+                    } catch (UserInfoExtraException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return invite;
+    }
+
+
+    @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