From 48077e8c704216f38939cfbf1702f45d7190801d Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期二, 12 十一月 2019 15:26:39 +0800
Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  137 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 117 insertions(+), 20 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 c7d8963..9b91ba3 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
@@ -27,9 +27,10 @@
 import com.aliyun.openservices.ons.api.transaction.TransactionStatus;
 import com.google.gson.Gson;
 import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
+import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
+import com.yeshi.fanli.dto.mq.user.body.UserSystemCouponUseMQMsg;
 import com.yeshi.fanli.dto.msg.MsgOtherCouponActivateDTO;
 import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
-import com.yeshi.fanli.dto.user.coupon.UserSystemCouponUseMQMsgDTO;
 import com.yeshi.fanli.entity.accept.AcceptData;
 import com.yeshi.fanli.entity.bus.msg.MsgOtherDetail.MsgTypeOtherTypeEnum;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
@@ -170,10 +171,9 @@
 
 	@Resource(name = "orderTransactionProducer")
 	private TransactionProducer orderTransactionProducer;
-	
+
 	@Resource
 	private UserSystemCouponActivateService userSystemCouponActivateService;
-	
 
 	@Override
 	public int insertSelective(UserSystemCoupon record) {
@@ -887,10 +887,10 @@
 			// 鎻愭垚閲戦
 			BigDecimal money = MoneyBigDecimalUtil.mul(hongBao, percent);
 
-			UserSystemCouponUseMQMsgDTO mqMsg = new UserSystemCouponUseMQMsgDTO(userSystemCoupon.getId(),
-					order.getOrderId(), sourceType);
+			UserSystemCouponUseMQMsg mqMsg = new UserSystemCouponUseMQMsg(userSystemCoupon.getId(), order.getOrderId(),
+					sourceType, systemCoupon.getType().name());
 			// 浜嬪姟娑堟伅
-			Message msg = new Message(MQTopicName.TOPIC_SYSTEM_COUPON_USE.name(), systemCoupon.getType().name(),
+			Message msg = new Message(MQTopicName.TOPIC_USER.name(), UserTopicTagEnum.useSystemCoupon.name(),
 					new Gson().toJson(mqMsg).getBytes());
 			try {
 				SendResult result = orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
@@ -906,7 +906,8 @@
 				}, null);
 				System.out.println(result);
 			} catch (Exception e) {
-				throw new Exception();
+				e.printStackTrace();
+				throw e;
 			}
 		}
 	}
@@ -1827,7 +1828,8 @@
 						if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
 							int activateCount = userSystemCouponActivateService.getActivateCount(userCouponVO.getId());
 							String activateNum = configService.get("free_coupon_activate_num");
-							userCouponVO.setCouponEffect("(" + activateCount + "/"+ Integer.parseInt(activateNum) +")寰呮縺娲�");
+							userCouponVO.setCouponEffect(
+									"(" + activateCount + "/" + Integer.parseInt(activateNum) + ")寰呮縺娲�");
 						}
 					} else if (CouponTypeEnum.welfareFreeCoupon == type) {
 						jumpBtn = new HashMap<String, Object>();
@@ -2103,7 +2105,6 @@
 		return userCouponVO;
 	}
 
-
 	@Transactional
 	@Override
 	public void updateInvalidSate(Long uid) {
@@ -2255,9 +2256,103 @@
 		sendBackGiveCoupon(list);
 	}
 
+	
+	@Override
+	@RequestSerializableByKeyService(key = "#giveid")
+	@Transactional(rollbackFor = Exception.class)
+	public void sendBackByGiveId(Long giveid) {
+		if (giveid == null)
+			return;
+		
+		UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.selectByPrimaryKey(giveid);
+		if (giveRecord == null)
+			return;
+		
+		if (giveRecord.getState() != null && giveRecord.getState() != UserSystemCouponGiveRecord.STATE_INIT) 
+			return;
+		
+		// 鏇存柊璧犻�佽褰�
+		UserSystemCouponGiveRecord updateRecord = new UserSystemCouponGiveRecord();
+		updateRecord.setId(giveid);
+		updateRecord.setState(UserSystemCouponGiveRecord.STATE_OVERDUE);
+		userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateRecord);
+		
+		// 鍙d护澶辨晥
+		tokenRecordService.invalidByCoupon(giveid);
+
+		Long couponId = giveRecord.getCouponId();
+		if (couponId == null) 
+			return;
+		
+		UserSystemCoupon userCoupon = userSystemCouponMapper.selectByPrimaryKey(couponId);
+		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;
+		}
+
+		// 閫�鍥炲埜
+		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.updateByPrimaryKeySelective(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)
+			return;
+
+		// 閫�鍥炴秷鎭�
+		String couponName = systemCoupon.getName();
+		if (CouponTypeEnum.freeCouponGive == systemCoupon.getType()) {
+			couponName = "鍏嶅崟鍒�";
+		} else if (CouponTypeEnum.rebatePercentCoupon == systemCoupon.getType()) {
+			couponName = "濂栧姳鍒�";
+		}
+
+		String beiZhu = "璇峰埌鎴戠殑-绂忓埄涓績鏌ョ湅";
+		SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+		MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
+		msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
+		msgOther.setTitle(couponName + "閫�鍥�");
+		msgOther.setGiveType("浣犺禒閫佺殑" + couponName + "鏈鎴愬姛棰嗗彇");
+		msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
+		msgOther.setReturnTime(sd.format(new Date()));
+		userOtherMsgNotificationService.tokenGiveMsg(giveRecord.getGiveUid(), beiZhu, msgOther);
+	}
+	
+	
 	@Override
 	public void sendBackGiveCoupon(List<UserSystemCouponGiveRecord> overdueList) {
 		for (UserSystemCouponGiveRecord record : overdueList) {
+			if (record.getState() != null && record.getState() != UserSystemCouponGiveRecord.STATE_INIT) 
+				continue;
+			
 			// 鏇存柊璧犻�佽褰�
 			UserSystemCouponGiveRecord updateRecord = new UserSystemCouponGiveRecord();
 			updateRecord.setId(record.getId());
@@ -2446,45 +2541,46 @@
 		return userSystemCouponMapper.getFreeCouponByType(uid, type);
 	}
 
-	
 	@RequestSerializableByKeyService(key = "#uid")
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void triggerFreeCouponActivate(Long uid) {
-		UserSystemCoupon coupon = userSystemCouponMapper.getNeedActivateCouponByType(uid, CouponTypeEnum.freeCoupon.name());
+		UserSystemCoupon coupon = userSystemCouponMapper.getNeedActivateCouponByType(uid,
+				CouponTypeEnum.freeCoupon.name());
 		if (coupon == null)
 			return;
 
 		Long id = coupon.getId();
 		UserSystemCouponActivate couponActivate = userSystemCouponActivateService.selectForUpdate(id);
-		
+
 		// 婵�娲绘暟閲�
 		boolean result = false;
 		int limitNum = Integer.parseInt(configService.get("free_coupon_activate_num"));
-		
+
 		Integer state = couponActivate.getState();
 		int count = couponActivate.getCount();
 		count++;
-		if(count >= limitNum) {
+		if (count >= limitNum) {
 			result = true;
 			state = UserSystemCouponActivate.STATE_END;
 		}
-			
+
 		UserSystemCouponActivate updateActivate = new UserSystemCouponActivate();
 		updateActivate.setId(id);
 		updateActivate.setState(state);
 		updateActivate.setCount(count);
 		updateActivate.setUpdateTime(new Date());
 		userSystemCouponActivateService.updateByPrimaryKeySelective(updateActivate);
-		
+
 		// 婵�娲诲鍔卞埜
 		if (result) {
 			activateFreeCoupon(coupon, limitNum);
 		}
 	}
-	
+
 	/**
 	 * 婵�娲诲埜
+	 * 
 	 * @param coupon
 	 * @param activateNum
 	 */
@@ -2493,7 +2589,7 @@
 		try {
 			Date nowDate = new Date();
 			SystemCoupon systemCoupon = coupon.getSystemCoupon();
-			
+
 			Integer expiryDay = systemCoupon.getExpiryDay();
 			String endDay = DateUtil.plusDay(expiryDay - 1, nowDate);
 			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -2509,12 +2605,13 @@
 			userCoupon.setStartTime(nowDate);
 			userCoupon.setUpdateTime(new Date());
 			userSystemCouponMapper.updateByPrimaryKeySelective(userCoupon);
-			
+
 			// 娑堟伅
 			executor.execute(new Runnable() {
 				@Override
 				public void run() {
-					UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getByReceiveId(coupon.getId());
+					UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+							.getByReceiveId(coupon.getId());
 					if (giveRecord == null)
 						return;
 

--
Gitblit v1.8.0