From 616608ec1005bff373bc380ecc3bf02a1063497c Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 19 八月 2019 17:42:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java |  254 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 228 insertions(+), 26 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 f79dcc0..8370794 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,31 +1,38 @@
 package com.yeshi.fanli.service.impl.user;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 import javax.annotation.Resource;
 
+import org.springframework.core.task.TaskExecutor;
 import org.springframework.stereotype.Service;
-import org.yeshi.utils.JsonUtil;
 
 import com.yeshi.fanli.dao.mybatis.user.TokenRecordMapper;
+import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinGiveRecord;
-import com.yeshi.fanli.entity.bus.user.ThreeSale;
 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.system.SystemCoupon.CouponTypeEnum;
+import com.yeshi.fanli.exception.tlj.UserTaoLiJinOriginException;
 import com.yeshi.fanli.exception.user.TokenRecordException;
-import com.yeshi.fanli.exception.user.UserSystemCouponException;
+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.msg.UserOtherMsgNotificationService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinGiveRecordService;
+import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
 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.UserSystemCouponService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.StringUtil;
@@ -34,6 +41,9 @@
 @Service
 public class TokenRecordServiceImpl implements TokenRecordService {
 
+	@Resource(name = "taskExecutor")
+	private TaskExecutor executor;
+	
 	@Resource
 	private TokenRecordMapper tokenRecordMapper;
 
@@ -52,6 +62,17 @@
 	@Resource
 	private UserInfoExtraService userInfoExtraService;
 
+	@Resource
+	private UserSystemCouponGiveRecordService userSystemCouponGiveRecordService;
+	
+	@Resource
+	private UserTaoLiJinOriginService userTaoLiJinOriginService;
+	
+	@Resource
+	private UserOtherMsgNotificationService userOtherMsgNotificationService;
+	
+	
+	
 	@Override
 	public void insertSelective(TokenRecord record) {
 		record.setCreateTime(new Date());
@@ -72,6 +93,15 @@
 		TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
 		if (rokenRecord == null)
 			throw new TokenRecordException(1, "鍙d护涓嶅瓨鍦�");
+		
+		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 nickName = null;
 		String portrait = null;
@@ -94,12 +124,9 @@
 			nickName = nickName.substring(0, 6) + "...";
 		}
 
-		Integer stateTtoken = rokenRecord.getState();
-		if (stateTtoken == 1)
-			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-
 		TokenVO tokenVO = new TokenVO();
-		tokenVO.setNickName(nickName);
+		tokenVO.setToken(token);
+		tokenVO.setNickName(nickName + "璧犻��");
 		tokenVO.setPortrait(portrait);
 
 		String identify = rokenRecord.getIdentify();
@@ -131,6 +158,7 @@
 						throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾鍏嶅崟鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
 
 					state = true;
+					tokenVO.setAmount(1);
 					UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
 					if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
 						tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
@@ -165,6 +193,7 @@
 						throw new TokenRecordException(1001, "娓╅Θ鎻愮ず锛孾杩斿埄濂栧姳鍒竇闇�瑕佺櫥褰曞悗棰嗗彇");
 
 					state = true;
+					tokenVO.setAmount(1);
 					UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
 					if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
 						tips.add("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
@@ -190,7 +219,10 @@
 				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("纭棰嗗彇鍚庯紝浣犲皢鎴愪负璧犻�佽�呯殑涓�绾ч槦鍛橈紱");
@@ -212,7 +244,7 @@
 	}
 
 	@Override
-	public void receiveToken(String token, Long uid) throws TokenRecordException {
+	public String receiveToken(String token, Long uid) throws TokenRecordException {
 		if (uid == null || uid <= 0)
 			throw new TokenRecordException(1, "鐢ㄦ埛鏈櫥褰�");
 
@@ -220,18 +252,34 @@
 			throw new TokenRecordException(1, "鍙d护涓嶈兘涓虹┖");
 
 		TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
-		if (rokenRecord == null || rokenRecord.getState() == 1)
+		if (rokenRecord == null)
 			throw new TokenRecordException(1, "鍙d护宸插け鏁�");
-
+		
+		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护鏍囪瘑涓嶅瓨鍦�");
 		
-		boolean receive = false;
 		
+		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) {
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(Long.parseLong(identify));
+			long couponId = Long.parseLong(identify);
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(couponId);
 			if (userCoupon == null)
 				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
 
@@ -249,21 +297,62 @@
 				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, "棰嗗彇澶辫触");
 				}
 				
-				// 棰嗗彇鎴愬姛
-				receive = true;
+				// 鏇存柊璧犻�佸埜淇℃伅
+				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护宸插け鏁�");
 			}
 
 		} else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
-			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(Long.parseLong(identify));
-
+			long couponId = Long.parseLong(identify);
+			UserSystemCoupon userCoupon = userSystemCouponService.selectByPrimaryKey(couponId);
 			if (userCoupon == null)
 				throw new TokenRecordException(1, "璇ュ埜涓嶅瓨鍦�");
 
@@ -281,13 +370,55 @@
 				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, "棰嗗彇澶辫触");
 				}
-				// 棰嗗彇鎴愬姛
-				receive = true;
+		    	
+		    	// 鏇存柊璧犻�佸埜淇℃伅
+				userSystemCouponService.updateGiveRecord(uid, couponId, CouponTypeEnum.rebatePercentCoupon.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护宸插け鏁�");
 			}
@@ -295,20 +426,91 @@
 			UserTaoLiJinGiveRecord giveRecord = userTaoLiJinGiveRecordService
 					.selectByPrimaryKey(Long.parseLong(identify));
 			if (giveRecord == null || giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE) {
-				throw new TokenRecordException(1, "鍝庡憖锛屽搸鍛�锛屾帹骞跨孩鍖呭凡澶辨晥浜嗭紒");
+				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();
+				}
 			}
 		} else {
 			throw new TokenRecordException(1, "鏃犲搴旂被鍨�");
 		}
-
-		if (receive) 
-			throw new TokenRecordException(1, "棰嗗彇澶辫触鍟�");
 		
-		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
-
+		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;
+	}
+	
 }

--
Gitblit v1.8.0