From fe879975a3e8a0a1aa280fb839e02d159bfbcff8 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 27 八月 2019 18:04:38 +0800
Subject: [PATCH] 金币任务多次获取bug修改

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java |  204 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 179 insertions(+), 25 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java
index 220ef2c..11d78ec 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralExchangeServiceImpl.java
@@ -6,22 +6,30 @@
 
 import javax.annotation.Resource;
 
+import org.springframework.core.task.TaskExecutor;
 import org.springframework.stereotype.Service;
 
 import com.yeshi.fanli.dao.mybatis.integral.IntegralExchangeMapper;
+import com.yeshi.fanli.dto.msg.MsgOtherExchangeContentDTO;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 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.integral.CodePublishRecord;
+import com.yeshi.fanli.entity.integral.IntegralDetail;
 import com.yeshi.fanli.entity.integral.IntegralExchange;
 import com.yeshi.fanli.entity.integral.IntegralExchange.ExchangeTypeEnum;
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.exception.integral.IntegralExchangeException;
 import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.integral.CodePublishRecordService;
+import com.yeshi.fanli.service.inter.integral.IntegralDetailService;
+import com.yeshi.fanli.service.inter.integral.IntegralExchangeRecordService;
 import com.yeshi.fanli.service.inter.integral.IntegralExchangeService;
+import com.yeshi.fanli.service.inter.msg.MsgInviteDetailService;
+import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
@@ -35,8 +43,14 @@
 @Service
 public class IntegralExchangeServiceImpl implements IntegralExchangeService {
 
+	@Resource(name = "taskExecutor")
+	private TaskExecutor executor;
+	
 	@Resource
 	private IntegralExchangeMapper integralExchangeMapper;
+	
+	@Resource
+	private ConfigService configService;
 	
 	@Resource
 	private UserInfoExtraService userInfoExtraService;
@@ -59,6 +73,17 @@
 	@Resource
 	private CodePublishRecordService codePublishRecordService;
 	
+	@Resource
+	private IntegralExchangeRecordService integralExchangeRecordService;
+	
+	@Resource
+	private UserOtherMsgNotificationService userOtherMsgNotificationService;
+	
+	@Resource
+	private MsgInviteDetailService msgInviteDetailService;
+	
+	@Resource
+	private IntegralDetailService integralDetailService;
 	
 
 	@Override
@@ -94,10 +119,25 @@
 		exchangeTip.setId(id);
 		ExchangeTypeEnum type = exchange.getType();
 		if (ExchangeTypeEnum.inviteCodeActivate == type) {
-			//exchangeTip.setTip("娉細鍏戞崲鎴愬姛鍚庤鍒扳�滄秷鎭�-绯荤粺娑堟伅鈥濇煡鐪�");
-			//exchangeTip.setGoldCoin(goldCoin + "閲戝竵");
 			exchangeTip.setType(type.name());
 			return exchangeTip;
+		}
+		
+		long exchangeCount = 0;
+		if (ExchangeTypeEnum.freeCouponBuy == type) {
+			exchangeCount = integralExchangeRecordService.countRecordByUid(id, uid, null);
+			if (exchangeCount >= 1) {
+				throw new IntegralExchangeException(1, "鑷喘鍏嶅崟鍒革紝浠呰兘鍏戞崲涓�娆�");
+			}
+		}
+		
+		Integer upperLimit = exchange.getUpperLimit();
+		if (upperLimit != null) { // 鏄惁鏈夐檺鍒舵瘡鏃ユ鏁�
+			Integer today = 1;
+			exchangeCount = integralExchangeRecordService.countRecordByUid(id, uid, today);
+			if (exchangeCount >= upperLimit) {
+				throw new IntegralExchangeException(1, "浠婃棩鍏戞崲宸茶揪涓婇檺");
+			}
 		}
 		
 		Integer goldCoinHas = extraVO.getGoldCoin();
@@ -120,10 +160,10 @@
 			exchangeTip.setInviteCode(extraVO.getInviteCode());
 			exchangeTip.setTip("鍏戞崲鎴愬姛鍚庯紝灏嗗彂甯冧簬鈥滄縺娲婚個璇风爜鍏戞崲鍔熻兘涓�濓紝闇�婵�娲婚個璇风殑鐢ㄦ埛鍙敤閲戝竵鍏戞崲锛屾湰娆″睍绀烘湁鏁堟湡涓�3澶┿��");
 		} else if (ExchangeTypeEnum.taoLiJin == type) {
-			exchangeTip.setName(exchange.getAmount() + "鍏冩帹骞跨孩鍖�");
+			exchangeTip.setName(exchange.getAmount().setScale(0) + "鍏冩帹骞跨孩鍖�");
 			exchangeTip.setTip("娉�:鍏戞崲鎴愬姛鍚庤鍒扳�滄垜鐨�-鎺ㄥ箍绾㈠寘鈥濅腑鏌ョ湅");
 		} else if (ExchangeTypeEnum.cash == type) {	
-			exchangeTip.setName(exchange.getAmount() + "鍏冪幇閲戠孩鍖�");
+			exchangeTip.setName(exchange.getAmount().setScale(0) + "鍏冪幇閲戠孩鍖�");
 			exchangeTip.setTip("娉細鍏戞崲鎴愬姛鍚庤鍒扳�滄垜鐨�-璐︽埛浣欓鈥濅腑鏌ョ湅");
 		} else {
 			throw new IntegralExchangeException(1, "鍏戞崲鏂瑰紡涓嶅瓨鍦�");
@@ -150,36 +190,71 @@
 		if (exchange == null)
 			throw new IntegralExchangeException(1, "鍏戞崲鏂瑰紡涓嶅瓨鍦�");
 
+		ExchangeTypeEnum type = exchange.getType();
+		
+		long exchangeCount = 0;
+		if (ExchangeTypeEnum.freeCouponBuy == type) {
+			exchangeCount = integralExchangeRecordService.countRecordByUid(id, uid, null);
+			if (exchangeCount >= 1) {
+				throw new IntegralExchangeException(1, "鑷喘鍏嶅崟鍒革紝浠呰兘鍏戞崲涓�娆�");
+			}
+		}
+		
+		Integer upperLimit = exchange.getUpperLimit();
+		if (upperLimit != null) {  // 鏄惁鏈夐檺鍒舵瘡鏃ユ鏁�
+			Integer today = 1;
+			exchangeCount = integralExchangeRecordService.countRecordByUid(id, uid, today);
+			if (exchangeCount >= upperLimit) {
+				throw new IntegralExchangeException(1, "鍏戞崲宸茶揪涓婇檺");
+			}
+		}
+		
 		Integer goldCoin = exchange.getGoldCoin();
 		Integer goldCoinHas = extraVO.getGoldCoin();
 		if (goldCoin.intValue() > goldCoinHas.intValue()) {
 			throw new IntegralExchangeException(1, "褰撳墠璐︽埛涓彲鐢ㄩ噾甯佷笉瓒筹紝鏃犳硶鍏戞崲璇ュ鍝侊紒");
 		}
 		
+		String thing = "";
+		String thingNum = "";
+		int couponNews = 0;
+		boolean once = false; // 鍏戞崲涓�娆℃槸鍚︽秷澶�
 		try {
-			ExchangeTypeEnum type = exchange.getType();
 			if (ExchangeTypeEnum.freeCouponBuy == type) {
-				// 鑷喘鍏嶅崟鍒�
-				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, false, null);
+				thing = "鑷喘鍏嶅崟鍒�";
+				thingNum = "1寮�";
+				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, null);
+				once = true; 
+				couponNews = 1;
 			} else if (ExchangeTypeEnum.freeCouponGive == type) {
-				// 璧犻�佸厤鍗曞埜
-				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, true, null);
+				thing = "璧犻�佸厤鍗曞埜";
+				thingNum = "1寮�";
+				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, null);
+				couponNews = 1;
 			} else if (ExchangeTypeEnum.rebatePercentCoupon == type) {
-				// 濂栧姳鍏嶅崟鍒�
-				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, true,
-						new BigDecimal(10));
+				thing = "濂栧姳鍏嶅崟鍒�";
+				thingNum = "3澶�";
+				String percent = configService.get("exchange_rebate_percent");
+				userSystemCouponService.exchangeCoupon(uid, type.name(), UserSystemCoupon.SOURCE_EXCHANGE, new BigDecimal(percent));
+				couponNews = 1;
 			} else if (ExchangeTypeEnum.inviteCodePublish == type) {
-				// 閭�璇风爜鍙戝竷
+				thing = "閭�璇风爜鍙戝竷鍗�";
+				thingNum = "1缁�";
 				if(codePublishRecordService.countValidRecord(uid) > 0)
 					throw new IntegralExchangeException(1, "涓夊ぉ涔嬪唴涓嶅彲閲嶅鍏戞崲");
 				codePublishRecordService.publishInviteCode(uid);
+				
+				exchange.setNeedJump(true);
+				exchange.setBtnName("鍘绘煡鐪�");
 			} else if (ExchangeTypeEnum.taoLiJin == type) {
-				// 鎺ㄥ箍绾㈠寘
+				thing = "鎺ㄥ箍绾㈠寘";
+				thingNum = exchange.getAmount() + "鍏�";
 				userTaoLiJinOriginService.exchangeMoney(uid, exchange.getAmount());
 			} else if (ExchangeTypeEnum.cash == type) {
-				// 鐜伴噾绾㈠寘
+				thing = "鐜伴噾绾㈠寘";
 				BigDecimal money = exchange.getAmount();
-
+				thingNum = money + "鍏�";
+				
 				// 1銆佹彃鍏ョ孩鍖呮暟鎹�
 				HongBaoV2 hongBaoV2 = new HongBaoV2();
 				hongBaoV2.setMoney(money);
@@ -201,23 +276,60 @@
 				throw new IntegralExchangeException(1, "鍏戞崲鏂瑰紡涓嶅瓨鍦�");
 			}
 			
+			exchangeCount ++;
 			String progress = exchange.getProgress();
 			if (!StringUtil.isNullOrEmpty(progress))
-				progress = progress.replace("{宸插厬鎹", 1 + "").replace("{涓婇檺鏁皚", exchange.getUpperLimit() + "");
+				progress = progress.replace("{宸插厬鎹",exchangeCount + "").replace("{涓婇檺鏁皚", exchange.getUpperLimit() + "");
 			exchange.setProgress(progress);
 			
-			// 鏇存柊閲戝竵
+			// 鍓╀綑閲戝竵
+			int surplus = goldCoinHas.intValue() - goldCoin.intValue();
+			exchange.setUserGoldCoin(surplus + "鏋�");
+			
+			// 鏇存柊閲戝竵 + 绂忓埄涓績娑堟伅鏁�
+			if (extraVO.getCouponNews() != null && extraVO.getCouponNews() > 0) 
+				couponNews = couponNews + extraVO.getCouponNews();
+			
 			UserInfoExtraVO extraUpdate = new UserInfoExtraVO();
 			extraUpdate.setId(extraVO.getId());
-			extraUpdate.setGoldCoin(goldCoinHas.intValue() - goldCoin.intValue());
+			extraUpdate.setGoldCoin(surplus);
+			extraUpdate.setCouponNews(couponNews);
 			userInfoExtraService.saveUserInfoExtra(extraUpdate);
+			
+			// 娣诲姞鍏戞崲璁板綍
+			integralExchangeRecordService.addExchangeRecord(id, uid);
+			
+			// 鍔犲叆鏄庣粏
+			IntegralDetail detail = new IntegralDetail();
+			detail.setUid(uid);
+			detail.setTitle("閲戝竵鍏戞崲-" + thing + "-" + thingNum);
+			detail.setMoney(-goldCoin);
+			detail.setCreateTime(new Date());
+			integralDetailService.insertSelective(detail);
+			
+			// 娑堟伅 
+			final String things = thing;
+			executor.execute(new Runnable() {
+				@Override
+				public void run() {
+					MsgOtherExchangeContentDTO msgOther = new MsgOtherExchangeContentDTO();
+					msgOther.setState("閲戝竵鍏戞崲鎴愬姛");
+					msgOther.setExpend(goldCoin + "閲戝竵");
+					msgOther.setTotalGold(surplus + "閲戝竵");
+					msgOther.setThing(things);
+					userOtherMsgNotificationService.exchangeMsg(uid, "", msgOther);
+				}
+			});
+			
+			if (once) // 鍏戞崲涔嬪悗娑堝け
+				exchange = null;
+			
 			return exchange;
 		} catch (Exception e) {
 			LogHelper.errorDetailInfo(e);
 			throw new IntegralExchangeException(1, "鍏戞崲寮傚父");
 		}
 	}
-	
 	
 	
 	@Override
@@ -262,7 +374,7 @@
 	
 	
 	@Override
-	public void exchangeInviteCode(Long uid, Long id) throws IntegralExchangeException {
+	public String exchangeInviteCode(Long uid, Long id) throws IntegralExchangeException {
 		if (uid == null || uid <= 0)
 			throw new IntegralExchangeException(1, "鐢ㄦ埛鏈櫥褰�");
 
@@ -286,19 +398,61 @@
 
 		Integer goldCoin = exchange.getGoldCoin();
 		Integer goldCoinHas = extraVO.getGoldCoin();
-		if (goldCoin.intValue() > goldCoinHas.intValue()) {
+		if (goldCoin.intValue() > goldCoinHas.intValue())
 			throw new IntegralExchangeException(1, "褰撳墠璐︽埛涓彲鐢ㄩ噾甯佷笉瓒筹紝鏃犳硶鍏戞崲璇ュ鍝侊紒");
-		} 
+		 
 		
 		try {
 			UserInfoExtraVO inviteExtra = userInfoExtraService.getInfoExtraVOByUid(record.getUid());
 			if (inviteExtra == null || StringUtil.isNullOrEmpty(inviteExtra.getInviteCode()))
 				throw new IntegralExchangeException(1, "鍏戞崲澶辫触锛岃鐢ㄦ埛閭�璇风爜涓嶅瓨鍦�");
 			
-			userInfoExtraService.activateInviteCode(uid, inviteExtra.getInviteCode());
+			String inviteCode = inviteExtra.getInviteCode();
+			
+			// 鍓╀綑閲戝竵
+			int surplus = goldCoinHas.intValue() - goldCoin.intValue();
+			
+			// 鏇存柊閲戝竵
+			UserInfoExtraVO extraUpdate = new UserInfoExtraVO();
+			extraUpdate.setId(extraVO.getId());
+			extraUpdate.setGoldCoin(surplus);
+			userInfoExtraService.saveUserInfoExtra(extraUpdate);
+			
+			// 鍔犲叆鏄庣粏
+			IntegralDetail detail = new IntegralDetail();
+			detail.setUid(uid);
+			detail.setTitle("閲戝竵鍏戞崲-閭�璇风爜婵�娲诲崱-1缁�");
+			detail.setMoney(-goldCoin);
+			detail.setCreateTime(new Date());
+			integralDetailService.insertSelective(detail);
+						
+			// 娣诲姞鍏戞崲璁板綍
+			integralExchangeRecordService.addExchangeRecord(id, uid);
+			
+			// 娑堟伅 
+			executor.execute(new Runnable() {
+				@Override
+				public void run() {
+					UserInfo userInfo = userInfoService.selectByPKey(record.getUid());
+					if (userInfo == null)
+						return;
+					
+					String beizu = "閭�璇蜂汉锛�" + userInfo.getNickName() + "锛岄個璇风爜锛�" + inviteCode;
+					
+					MsgOtherExchangeContentDTO msgOther = new MsgOtherExchangeContentDTO();
+					msgOther.setState("閲戝竵鍏戞崲鎴愬姛");
+					msgOther.setExpend(goldCoin + "閲戝竵");
+					msgOther.setTotalGold(surplus + "閲戝竵");
+					msgOther.setThing("閭�璇风爜婵�娲诲崱");
+					
+					userOtherMsgNotificationService.exchangeMsg(uid, beizu, msgOther);
+				}
+			});
+			
+			return inviteCode;
 		} catch (Exception e) {
 			LogHelper.errorDetailInfo(e);
-			throw new IntegralExchangeException(1, "鍏戞崲寮傚父");
+			throw new IntegralExchangeException(1, "鍏戞崲澶辫触");
 		}
 	}
 }

--
Gitblit v1.8.0