From d1bcc87e41d8d176ce58ee9e27a17ec93d0d7cb2 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 23 八月 2019 11:59:18 +0800
Subject: [PATCH] Merge branch 'mater-1.6.0' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  301 ++++++++++++++++++++++++++-----------------------
 1 files changed, 158 insertions(+), 143 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
index 5db76ad..43b17bc 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -1,7 +1,6 @@
 package com.yeshi.fanli.service.impl.user;
 
 import java.math.BigDecimal;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -17,6 +16,8 @@
 import org.yeshi.utils.DateUtil;
 
 import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
+import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
+import com.yeshi.fanli.entity.bus.msg.MsgOtherDetail.MsgTypeOtherTypeEnum;
 import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.Order;
@@ -62,7 +63,7 @@
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.RedisManager;
 import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.account.UserUtil;
+import com.yeshi.fanli.util.TokenUtil;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
@@ -292,8 +293,6 @@
 			return null;
 		}
 
-		// 鏇存柊杩囨湡鍒�
-		updateCounponInvalid(uid);
 		// 閫�鍥炲埜
 		sendBackTimeOutCoupon(uid);
 		
@@ -555,8 +554,6 @@
 			throw new UserSystemCouponException(1, "鐢ㄦ埛鏈櫥褰�");
 		}
 
-		// 鏇存柊杩囨湡鍒�
-		updateCounponInvalid(uid);
 		// 閫�鍥炲埜
 		sendBackTimeOutCoupon(uid);
 
@@ -582,8 +579,6 @@
 			throw new UserSystemCouponException(1, "鍟嗗搧ID涓虹┖");
 		}
 
-		// 鏇存柊杩囨湡鍒�
-		updateCounponInvalid(uid);
 		// 閫�鍥炲埜
 		sendBackTimeOutCoupon(uid);
 		
@@ -1120,9 +1115,6 @@
 			return;
 		}
 
-		// 楠岃瘉鏄惁澶辨晥
-		updateCounponInvalid(uid);
-
 		// 寰呮椿绂忓埄鍏嶅崟鍒�
 		List<UserSystemCoupon> list = userSystemCouponMapper.getCouponByTypeAndNotActivated(uid, systemCoupon.getId());
 		if (list == null || list.size() == 0) {
@@ -1207,25 +1199,30 @@
 		}
 	}
 
-	@Transactional
 	@Override
-	public void updateCounponInvalid(Long uid) {
-		List<UserSystemCoupon> list = userSystemCouponMapper.getCounponNowInvalid(uid);
+	public List<UserSystemCoupon> getCounponNowInvalid(int count) {
+		return userSystemCouponMapper.getCounponNowInvalid(count);
+	}
+	
+
+	@Override
+	public void updateCounponInvalid(List<UserSystemCoupon> list) {
 		if (list == null || list.size() == 0) {
 			return;
 		}
 
 		for (UserSystemCoupon userSystemCoupon : list) {
-			// 鏇存柊鍒稿凡杩囨湡
+			UserSystemCoupon userCoupon = new UserSystemCoupon();
+			userCoupon.setUpdateTime(new Date());
 			userSystemCoupon.setState(UserSystemCoupon.STATE_OVERDUE);
 			userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
 
-			SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
-			if (systemCoupon == null) {
+			SystemCoupon baseCoupon = userSystemCoupon.getSystemCoupon();
+			if (baseCoupon == null) {
 				continue;
 			}
-
-			SystemCoupon baseCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
+			
+			baseCoupon = systemCouponService.selectByPrimaryKey(baseCoupon.getId());
 			if (baseCoupon == null || baseCoupon.getId() == null) {
 				continue;
 			}
@@ -1238,8 +1235,11 @@
 					userOtherMsgNotificationService.freeSheetCouponAlreadyOutOfDate(userSystemCoupon);
 				} else if (baseCoupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
 					userOtherMsgNotificationService.rewardCouponAlreadyOutOfDate(userSystemCoupon);
+				}else if (baseCoupon.getType() == CouponTypeEnum.freeCouponBuy) {
+					userOtherMsgNotificationService.outOfDate(userSystemCoupon, MsgTypeOtherTypeEnum.freeCouponBuy);
+				} else if (baseCoupon.getType() == CouponTypeEnum.freeCouponGive) {
+					userOtherMsgNotificationService.outOfDate(userSystemCoupon, MsgTypeOtherTypeEnum.freeCouponGive);
 				}
-
 			} catch (Exception e) {
 				try {
 					LogHelper.errorDetailInfo(e);
@@ -1254,7 +1254,7 @@
 	@Override
 	public void sendBackTimeOutCoupon(Long uid) {
 		// 瓒呰繃10鍒嗛挓   鏈鍖归厤鐨勫埜
-		List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid,600L);
+		List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid, 600L);
 		if (list == null || list.size() == 0) {
 			return;
 		}
@@ -1266,32 +1266,9 @@
 			userSystemCouponRecordService.updateByPrimaryKeySelective(couponRecord);
 
 			UserSystemCoupon userSystemCoupon = couponRecord.getUserSystemCoupon();
-
-			int expiryDay = 15;
-
-			SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
-			SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
-			if (coupon != null) {
-				expiryDay = coupon.getExpiryDay();
-			}
-
-			// 缁撴潫鏃ユ湡
-			Date endTime = null;
-			try {
-				// 浠婂ぉ鍦ㄥ唴  鍑忓幓涓�澶�
-				String endDay = DateUtil.plusDay(expiryDay - 1, new Date());
-				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-				endTime = format.parse(endDay);
-			} catch (ParseException e) {
-				e.printStackTrace();
-			}
 			// 鐘舵�佸垵濮嬪寲
 			userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
 			userSystemCoupon.setUseTime(null);
-
-			// 鏈夋晥鏈熸椂闂撮噸鏂板畾涔�
-			userSystemCoupon.setStartTime(new Date());
-			userSystemCoupon.setEndTime(endTime);
 			userSystemCoupon.setUpdateTime(new Date());
 			userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
 		}
@@ -1378,42 +1355,50 @@
 	 * 
 	 * @param userSystemCoupon
 	 */
-	public void sendBackCoupon(UserSystemCoupon userSystemCoupon, UserSystemCouponRecord record) throws Exception {
-
-		int expiryDay = 15;
-
-		SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
-		SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
-		if (coupon != null) {
-			expiryDay = coupon.getExpiryDay();
+	public void sendBackCoupon(UserSystemCoupon userCoupon, UserSystemCouponRecord record) throws Exception {
+		if (userCoupon == null)
+			return;
+			
+		Integer state = userCoupon.getState();
+		if (state != UserSystemCoupon.STATE_IN_USE) 
+			return;
+		
+		Date now = new Date();
+		Date endTime = userCoupon.getEndTime();
+		if (endTime != null && endTime.getTime() < now.getTime()) {
+			// 杩囨湡
+			List<UserSystemCoupon> list = new ArrayList<UserSystemCoupon>();
+			list.add(userCoupon);
+			updateCounponInvalid(list);
+			return;
 		}
-
-		// 缁撴潫鏃ユ湡
-		Date endTime = null;
-		try {
-			// 浠婂ぉ鍦ㄥ唴  鍑忓幓涓�澶�
-			String endDay = DateUtil.plusDay(expiryDay - 1, new Date());
-			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-			endTime = format.parse(endDay);
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-		// 鐘舵�佸垵濮嬪寲
-		userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
+		
+		// 閫�鍥炲埜
+		UserSystemCoupon userSystemCoupon = new UserSystemCoupon();
+		userSystemCoupon.setId(userCoupon.getId());
+		userSystemCoupon.setGive(false);
 		userSystemCoupon.setUseTime(null);
-		// 鏈夋晥鏈熸椂闂撮噸鏂板畾涔�
-		userSystemCoupon.setStartTime(new Date());
-		userSystemCoupon.setEndTime(endTime);
-
+		userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
 		userSystemCoupon.setUpdateTime(new Date());
-
 		userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
-
-		if (CouponTypeEnum.welfareFreeCoupon.name().equals(record.getCouponType())) {
-			userOtherMsgNotificationService.welfareCouponDrawBack(userSystemCoupon, record.getOrderNo());
-		} else if (CouponTypeEnum.freeCoupon.name().equals(record.getCouponType())) {
-			userOtherMsgNotificationService.freeSheetCouponDrawBack(userSystemCoupon, record.getOrderNo());
+		
+		// 浣跨敤璁板綍
+		if  (record != null) {
+			UserSystemCouponRecord useRecordUpdate = new UserSystemCouponRecord();
+			useRecordUpdate.setId(record.getId());
+			useRecordUpdate.setState(UserSystemCouponRecord.STATE_WAIT_TIME_OUT);
+			useRecordUpdate.setUpdateTime(new Date());
+			userSystemCouponRecordService.updateByPrimaryKeySelective(useRecordUpdate);
+			
+			if (CouponTypeEnum.welfareFreeCoupon.name().equals(record.getCouponType())) {
+				userOtherMsgNotificationService.welfareCouponDrawBack(userSystemCoupon, record.getOrderNo());
+			} else if (CouponTypeEnum.freeCoupon.name().equals(record.getCouponType())) {
+				userOtherMsgNotificationService.freeSheetCouponDrawBack(userSystemCoupon, record.getOrderNo());
+			} else if (CouponTypeEnum.freeCouponBuy.name().equals(record.getCouponType())) {
+				userOtherMsgNotificationService.couponDrawBack(userSystemCoupon, record.getOrderNo(), MsgTypeOtherTypeEnum.freeCouponBuy);
+			}
 		}
+		
 	}
 
 	@Override
@@ -1699,8 +1684,6 @@
 	@Override
 	public List<UserSystemCouponVO> getCouponList(long start, int count, Long uid)
 			throws UserSystemCouponException, Exception {
-		// 鏇存柊杩囨湡鍒�
-		updateCounponInvalid(uid);
 		// 閫�鍥炲埜
 		sendBackTimeOutCoupon(uid);
 
@@ -1748,7 +1731,7 @@
 				userCouponVO.setCouponPicture(systemCoupon.getPicture());
 			}
 
-			if (UserSystemCoupon.STATE_CAN_USE == state) {
+			if (UserSystemCoupon.STATE_CAN_USE == state || UserSystemCoupon.STATE_IN_USE == state) {
 				int differentDays = 0;
 				if (endTime != null && startTime != null) {
 					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -1848,12 +1831,19 @@
 							}
 							tips = tips.replace("{鍙d护}", tokenRecord.getToken()).replace("{涓嬭浇閾炬帴}", configService.get("app_down_link"));
 						}
+						
+						Date endTimeGive = record.getEndTime();
+						if (endTimeGive != null) {
+							Map<String, Object> remainDays = new HashMap<String, Object>();
+							remainDays.put("content", "鍓╀綑" + DateUtil.dateDiff2(new Date(), endTimeGive) + "杩囨湡");
+							remainDays.put("fontColor", "#F14242");
+							userCouponVO.setRemainDays(remainDays);
+						}
 					}
 				} else {
 					tips = "";
 				}
 				userCouponVO.setGiveTips(tips);
-				
 			} else if (UserSystemCoupon.STATE_END_USE == state) {
 				if (give && CouponTypeEnum.freeCouponGive == type) {
 					userCouponVO.setState(UserSystemCoupon.STATE_GIVE_END);
@@ -1926,52 +1916,31 @@
 		}
 		
 		
-		Long giveRecordId = null;
 		Date nowDate = new Date();
-		
 		// 鎻掑叆璧犻�佽褰�
-		try {
-			UserSystemCouponGiveRecord giveRecord = new UserSystemCouponGiveRecord();
-			giveRecord.setCouponId(id);
-			giveRecord.setGiveUid(uid);
-			giveRecord.setGiveTime(nowDate);
-			giveRecord.setEndTime(DateUtil.plusDayDate(Constant.GIVE_DAYS, nowDate));
-			userSystemCouponGiveRecordService.insertSelective(giveRecord);
-			giveRecordId = giveRecord.getId();
-		} catch (Exception e) {
-			LogHelper.errorDetailInfo(e);
-			throw new UserSystemCouponException(1, "璧犻�佽褰曞垱寤哄け璐�");
-		}
+		UserSystemCouponGiveRecord giveRecord = new UserSystemCouponGiveRecord();
+		giveRecord.setCouponId(id);
+		giveRecord.setGiveUid(uid);
+		giveRecord.setGiveTime(nowDate);
+		giveRecord.setEndTime(DateUtil.plusDayDate(Constant.GIVE_DAYS, nowDate));
+		userSystemCouponGiveRecordService.insertSelective(giveRecord);
 		
-		String token = null;
-		for (int i = 0; i < 5; i++) {
-			try {
-				// TODO 鍙d护鐢熸垚瑙勫垯寰呭畾
-				long num = 10000 + (long) (Math.random() * 10000);
-				token = UserUtil.getInviteCode(num);
-				
-				TokenRecord tokenRecord = new TokenRecord();
-				tokenRecord.setUid(uid);
-				tokenRecord.setIdentify(giveRecordId+"");
-				tokenRecord.setType(tokenTypeEnum);
-				tokenRecord.setStartTime(nowDate);
-				tokenRecord.setEndTime(DateUtil.plusDayDate(Constant.TOKEN_DAYS, nowDate));
-				tokenRecord.setToken(token);
-				tokenRecord.setState(0);
-				tokenRecordService.insertSelective(tokenRecord);
-			} catch (Exception e) {
-				LogHelper.errorDetailInfo(e);
-				token = null;
-			}
+		// 鍒涘缓璁板綍
+		TokenRecord tokenRecord = new TokenRecord();
+		tokenRecord.setUid(uid);
+		tokenRecord.setIdentify(giveRecord.getId()+"");
+		tokenRecord.setType(tokenTypeEnum);
+		tokenRecord.setStartTime(nowDate);
+		tokenRecord.setEndTime(DateUtil.plusDayDate(Constant.TOKEN_DAYS, nowDate));
+		tokenRecord.setState(0);
+		tokenRecordService.insertSelective(tokenRecord);
+		
+		// 鍒涘缓鍙d护
+		String token = TokenUtil.createToken(tokenRecord.getId());
+		tokenRecord.setToken(token);
+		tokenRecordService.updateByPrimaryKeySelective(tokenRecord);
 			
-			if(!StringUtil.isNullOrEmpty(token)) {
-				break;
-			}
-		}
-			
-		if(StringUtil.isNullOrEmpty(token))
-			throw new UserSystemCouponException(1, "鍙d护鐢熸垚澶辫触");
-			
+		// 鍒哥姸鎬�
 		userSystemCoupon.setState(UserSystemCoupon.STATE_IN_USE);
 		userSystemCoupon.setGive(true);
 		userSystemCoupon.setUpdateTime(nowDate);
@@ -1996,29 +1965,75 @@
 
 	
 	@Override
-	public void sendBackGive(Long id) {
-		UserSystemCoupon userSystemCoupon = userSystemCouponMapper.selectByPrimaryKey(id);
-		if (userSystemCoupon == null)
-			return;
-		
-		Integer state = userSystemCoupon.getState();
-		if (state != UserSystemCoupon.STATE_IN_USE) 
-			return;
-		
-		Date now = new Date();
-		Date endTime = userSystemCoupon.getEndTime();
-		if (endTime != null && endTime.getTime() < now.getTime()) {
+	public void sendBackGiveCoupon(List<UserSystemCouponGiveRecord> overdueList) {
+		for (UserSystemCouponGiveRecord record: overdueList) {
+			// 鏇存柊璧犻�佽褰�
+			UserSystemCouponGiveRecord updateRecord = new UserSystemCouponGiveRecord();
+			updateRecord.setId(record.getId());
+			updateRecord.setState(UserSystemCouponGiveRecord.STATE_OVERDUE);
+			userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateRecord);
 			
-			// TODO 杩囨湡
-			return;
+			// 鏇存柊鍒镐俊鎭�
+			Long couponId = record.getCouponId();
+			if (couponId == null) {
+				continue;
+			}
+			
+			// 鍒稿垪琛�
+			UserSystemCoupon userCoupon = userSystemCouponMapper.selectByPrimaryKey(couponId);
+			if (userCoupon == null)
+				continue;
+				
+			Integer state = userCoupon.getState();
+			if (state != UserSystemCoupon.STATE_IN_USE) 
+				return;
+			
+			Date now = new Date();
+			Date endTime = userCoupon.getEndTime();
+			if (endTime != null && endTime.getTime() < now.getTime()) {
+				List<UserSystemCoupon> list = new ArrayList<UserSystemCoupon>();
+				list.add(userCoupon);
+				updateCounponInvalid(list);
+				continue;
+			}
+			
+			// 閫�鍥炲埜
+			UserSystemCoupon userSystemCoupon = new UserSystemCoupon();
+			userSystemCoupon.setId(userCoupon.getId());
+			userSystemCoupon.setGive(false);
+			userSystemCoupon.setUseTime(null);
+			userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
+			userSystemCoupon.setUpdateTime(new Date());
+			userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
+			
+			// 浣跨敤璁板綍
+			UserSystemCouponRecord useRecord = userSystemCouponRecordService.getNearByUserCouponId(couponId);
+			if  (useRecord != null) {
+				UserSystemCouponRecord useRecordUpdate = new UserSystemCouponRecord();
+				useRecordUpdate.setId(useRecord.getId());
+				useRecordUpdate.setState(UserSystemCouponRecord.STATE_WAIT_TIME_OUT);
+				useRecordUpdate.setUpdateTime(new Date());
+				userSystemCouponRecordService.updateByPrimaryKeySelective(useRecordUpdate);
+			}
+			
+			SystemCoupon systemCoupon = userCoupon.getSystemCoupon();
+			if (systemCoupon != null) 
+				systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
+			
+			if (systemCoupon == null)
+				continue;
+			
+			// 閫�鍥炴秷鎭�
+			String beiZhu = "璇峰埌鎴戠殑-绂忓埄涓績鏌ョ湅";
+			SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
+			MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
+			msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
+			msgOther.setTitle("璧犻��" + systemCoupon.getName() + "閫�鍥�");
+			msgOther.setGiveType("浣犺禒閫佺殑"+ systemCoupon.getName() + "鏈鎴愬姛棰嗗彇");
+			msgOther.setGiveTime(sd.format(record.getGiveTime()));
+			msgOther.setReturnTime(sd.format(new Date()));
+			userOtherMsgNotificationService.tokenGiveMsg(record.getGiveUid(), beiZhu, msgOther);
 		}
-			
-		userSystemCoupon.setGive(false);
-		userSystemCoupon.setUseTime(null);
-		userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
-		userSystemCoupon.setUpdateTime(new Date());
-		userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
-
-		// TODO 娑堟伅
 	}
+
 }

--
Gitblit v1.8.0