From 8b2191df2f7d94aa299bd43dcbe97c94e5a61bbd Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 20 十一月 2019 14:53:34 +0800
Subject: [PATCH] RocketMQ的消息整改

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |   97 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 69 insertions(+), 28 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 9b91ba3..cf0dac1 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
@@ -21,6 +21,7 @@
 import org.yeshi.utils.entity.DateInfo;
 
 import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.Producer;
 import com.aliyun.openservices.ons.api.SendResult;
 import com.aliyun.openservices.ons.api.transaction.LocalTransactionExecuter;
 import com.aliyun.openservices.ons.api.transaction.TransactionProducer;
@@ -83,6 +84,7 @@
 import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.util.factory.msg.MsgOtherSystemGiveDTOFactory;
+import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
 import com.yeshi.fanli.util.rocketmq.MQTopicName;
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
@@ -174,6 +176,11 @@
 
 	@Resource
 	private UserSystemCouponActivateService userSystemCouponActivateService;
+	
+	@Resource(name = "producer")
+	private Producer producer;
+
+	
 
 	@Override
 	public int insertSelective(UserSystemCoupon record) {
@@ -834,7 +841,7 @@
 			throw new UserSystemCouponException(1, "璁㈠崟淇℃伅鑾峰彇澶辫触");
 
 		// 鐗堟湰鍖哄垎锛�2.0.2
-		if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
+		if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
 			Date thirdCreateTime = orderVO.getThirdCreateTime();
 			if (thirdCreateTime != null) {
 				long downOrderTime = thirdCreateTime.getTime();
@@ -890,8 +897,8 @@
 			UserSystemCouponUseMQMsg mqMsg = new UserSystemCouponUseMQMsg(userSystemCoupon.getId(), order.getOrderId(),
 					sourceType, systemCoupon.getType().name());
 			// 浜嬪姟娑堟伅
-			Message msg = new Message(MQTopicName.TOPIC_USER.name(), UserTopicTagEnum.useSystemCoupon.name(),
-					new Gson().toJson(mqMsg).getBytes());
+			Message msg =MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.useSystemCoupon,
+					mqMsg);
 			try {
 				SendResult result = orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
 					@Override
@@ -2071,7 +2078,20 @@
 		}
 		tips = tips.replace("{鍙d护}", token).replace("{涓嬭浇閾炬帴}", configService.get("app_down_link"));
 
-		return createUserCouponVOo(userSystemCoupon, systemCoupon, giveRecord, tips);
+		UserSystemCouponVO couponVO = createUserCouponVOo(userSystemCoupon, systemCoupon, giveRecord, tips);
+		
+		UserSystemCouponUseMQMsg msg = new UserSystemCouponUseMQMsg();
+		msg.setUserSystemCouponId(id);
+		msg.setCouponType(type.name());
+		Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.systemCouponDrawback,
+				msg);
+		try {
+			producer.send(message);
+		} catch (Exception e) {
+			throw new UserSystemCouponException(1, "鍒涘缓璧犻�佷俊鎭け璐�");
+		}
+		
+		return couponVO;
 	}
 
 	private UserSystemCouponVO createUserCouponVOo(UserSystemCoupon userSystemCoupon, SystemCoupon systemCoupon,
@@ -2258,30 +2278,10 @@
 
 	
 	@Override
-	@RequestSerializableByKeyService(key = "#giveid")
+	@RequestSerializableByKeyService(key = "#id")
 	@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) 
+	public void sendBackByGiveId(Long couponId) {
+		if (couponId == null)
 			return;
 		
 		UserSystemCoupon userCoupon = userSystemCouponMapper.selectByPrimaryKey(couponId);
@@ -2291,6 +2291,23 @@
 		Integer state = userCoupon.getState();
 		if (state != UserSystemCoupon.STATE_IN_USE)
 			return;
+		
+		UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getByCouponId(couponId);
+		if (giveRecord == null)
+			return;
+		
+		if (giveRecord.getState() != null && giveRecord.getState() != UserSystemCouponGiveRecord.STATE_INIT) 
+			return;
+		
+		// 鏇存柊璧犻�佽褰�
+		UserSystemCouponGiveRecord updateRecord = new UserSystemCouponGiveRecord();
+		updateRecord.setId(giveRecord.getId());
+		updateRecord.setState(UserSystemCouponGiveRecord.STATE_OVERDUE);
+		userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateRecord);
+		
+		// 鍙d护澶辨晥
+		tokenRecordService.invalidByCoupon(giveRecord.getId());
+
 
 		Date now = new Date();
 		Date endTime = userCoupon.getEndTime();
@@ -2544,7 +2561,10 @@
 	@RequestSerializableByKeyService(key = "#uid")
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void triggerFreeCouponActivate(Long uid) {
+	public void triggerFreeCouponActivate(Long uid, String orderNo, Integer source) {
+		if (uid == null || source == null || StringUtil.isNullOrEmpty(orderNo)) 
+			return;
+		
 		UserSystemCoupon coupon = userSystemCouponMapper.getNeedActivateCouponByType(uid,
 				CouponTypeEnum.freeCoupon.name());
 		if (coupon == null)
@@ -2552,6 +2572,20 @@
 
 		Long id = coupon.getId();
 		UserSystemCouponActivate couponActivate = userSystemCouponActivateService.selectForUpdate(id);
+		if (couponActivate == null)
+			return;
+		
+		// 楠岃瘉鍚岃鍗曟槸鍚﹀瓨鍦�
+		String key = orderNo + "_" + source;
+		String ordernos = couponActivate.getOrdernos();
+		if (!StringUtil.isNullOrEmpty(ordernos)) {
+			String[] array = ordernos.split(",");
+			if (array != null)
+				for (int i= 0; i < array.length; i ++) {
+					if (array[i].equals(key))
+						return;
+				}
+		}
 
 		// 婵�娲绘暟閲�
 		boolean result = false;
@@ -2565,10 +2599,17 @@
 			state = UserSystemCouponActivate.STATE_END;
 		}
 
+		if (StringUtil.isNullOrEmpty(ordernos)) {
+			ordernos = key;
+		} else {
+			ordernos = ordernos + "," + key;
+		}
+		
 		UserSystemCouponActivate updateActivate = new UserSystemCouponActivate();
 		updateActivate.setId(id);
 		updateActivate.setState(state);
 		updateActivate.setCount(count);
+		updateActivate.setOrdernos(ordernos);
 		updateActivate.setUpdateTime(new Date());
 		userSystemCouponActivateService.updateByPrimaryKeySelective(updateActivate);
 

--
Gitblit v1.8.0