From b674cf50a368d005c9321fcf2989d7aa9a4a05c7 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 30 十月 2019 15:12:31 +0800
Subject: [PATCH] 订单提醒修改

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  148 ++++++++++++++++++++++++++++---------------------
 1 files changed, 84 insertions(+), 64 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 4f3b82c..15ab9f9 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
@@ -12,13 +12,16 @@
 
 import org.springframework.context.annotation.Lazy;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
 import org.yeshi.utils.DateUtil;
 import org.yeshi.utils.entity.DateInfo;
 
 import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.SendResult;
 import com.aliyun.openservices.ons.api.transaction.LocalTransactionExecuter;
 import com.aliyun.openservices.ons.api.transaction.TransactionProducer;
 import com.aliyun.openservices.ons.api.transaction.TransactionStatus;
@@ -160,6 +163,9 @@
 
 	@Resource
 	private TokenRecordService tokenRecordService;
+
+	@Resource(name = "transactionManager")
+	private DataSourceTransactionManager transactionManager;
 
 	@Resource(name = "orderTransactionProducer")
 	private TransactionProducer orderTransactionProducer;
@@ -880,78 +886,92 @@
 			UserSystemCouponUseMQMsgDTO mqMsg = new UserSystemCouponUseMQMsgDTO(userSystemCoupon.getId(),
 					order.getOrderId(), sourceType);
 			// 浜嬪姟娑堟伅
-			Message msg = new Message(MQTopicName.TOPIC_SYSTEM_COUPON_USE.name(),systemCoupon.getType().name(),
+			Message msg = new Message(MQTopicName.TOPIC_SYSTEM_COUPON_USE.name(), systemCoupon.getType().name(),
 					new Gson().toJson(mqMsg).getBytes());
-			orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
-				@Override
-				public TransactionStatus execute(Message arg0, Object arg1) {
-					try {
-						useRewardCouponCore(userSystemCoupon, money, hongBao, uid, order);
-						return TransactionStatus.CommitTransaction;
-					} catch (UserMoneyDetailException e) {
-						return TransactionStatus.RollbackTransaction;
+			try {
+				SendResult result = orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
+					@Override
+					public TransactionStatus execute(Message arg0, Object arg1) {
+						try {
+							useRewardCouponCore(userSystemCoupon, money, hongBao, uid, order);
+							return TransactionStatus.CommitTransaction;
+						} catch (Exception e) {
+							return TransactionStatus.RollbackTransaction;
+						}
 					}
-				}
-			}, null);
-
+				}, null);
+				System.out.println(result);
+			} catch (Exception e) {
+				throw new Exception();
+			}
 		}
 	}
 
 	@Transactional
-	private void useRewardCouponCore(UserSystemCoupon userSystemCoupon, BigDecimal money, BigDecimal hongBao, Long uid,
-			Order order) throws UserMoneyDetailException {
-		// 1銆佹彃鍏ョ孩鍖呮暟鎹�
-		HongBaoV2 hongBaoV2 = new HongBaoV2();
-		hongBaoV2.setMoney(money);
-		hongBaoV2.setType(HongBaoV2.TYPE_COUPON);
-		hongBaoV2.setState(HongBaoV2.STATE_YILINGQU);
-		hongBaoV2.setVersion(2);
-		hongBaoV2.setCreateTime(new Date());
-		hongBaoV2.setUpdateTime(new Date());
-		hongBaoV2.setUserInfo(new UserInfo(uid));
-		hongBaoV2.setPreGetTime(new Date());
-		hongBaoV2.setGetTime(new Date());
-
-		hongBaoV2Service.insertSelective(hongBaoV2);
-
-		// 2.鎻掑叆鍏宠仈
-		orderHongBaoMapService.addOrderHongBaoMap(hongBaoV2, order);
-
-		// 3.鎻掑叆璧勯噾鏄庣粏,鐢ㄦ埛浣欓
-		UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createOrderReward(order.getOrderId(),
-				order.getOrderType(), money, new UserInfo(uid));
-		userMoneyDetailService.addUserMoneyDetail(userMoneyDetail);
-		userInfoService.addMoney(new UserInfo(uid), money);
-
-		// 鎻掑叆璧勯噾閫氱煡
-		userMoneyMsgNotificationService.orderReward(uid, order.getOrderId(), order.getOrderType(), money,
-				userInfoService.selectByPKey(uid).getMyHongBao());
-
-		/* 鐢ㄦ埛鍒镐俊鎭姸鎬佸強璁板綍澶勭悊 */
-
-		Date date = new Date();
-		// 鏇存柊鍒哥姸鎬侊細宸蹭娇鐢�
-		userSystemCoupon.setState(UserSystemCoupon.STATE_END_USE);
-		userSystemCoupon.setUseTime(date);
-		userSystemCoupon.setUpdateTime(date);
-		userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
-
-		// 鎻掑叆浣跨敤鍒歌褰�
-		UserSystemCouponRecord couponRecord = new UserSystemCouponRecord();
-		couponRecord.setState(UserSystemCouponRecord.STATE_SUCCESS);
-		couponRecord.setGoodSource(order.getOrderType());
-		couponRecord.setOrderNo(order.getOrderId());
-		couponRecord.setUserSystemCoupon(userSystemCoupon);
-		couponRecord.setCouponType(userSystemCoupon.getSystemCoupon().getType().name());
-		couponRecord.setCreateTime(date);
-		couponRecord.setUpdateTime(date);
-		userSystemCouponRecordService.insertSelective(couponRecord);
-
-		// 娑堟伅鎺ㄩ��
+	public void useRewardCouponCore(UserSystemCoupon userSystemCoupon, BigDecimal money, BigDecimal hongBao, Long uid,
+			Order order) throws Exception {
+		org.springframework.transaction.TransactionStatus transactionStatus = transactionManager
+				.getTransaction(new DefaultTransactionDefinition());
 		try {
-			userOtherMsgNotificationService.rewardCouponUsed(userSystemCoupon, hongBao, money, order.getOrderId());
+			// 1銆佹彃鍏ョ孩鍖呮暟鎹�
+			HongBaoV2 hongBaoV2 = new HongBaoV2();
+			hongBaoV2.setMoney(money);
+			hongBaoV2.setType(HongBaoV2.TYPE_COUPON);
+			hongBaoV2.setState(HongBaoV2.STATE_YILINGQU);
+			hongBaoV2.setVersion(2);
+			hongBaoV2.setCreateTime(new Date());
+			hongBaoV2.setUpdateTime(new Date());
+			hongBaoV2.setUserInfo(new UserInfo(uid));
+			hongBaoV2.setPreGetTime(new Date());
+			hongBaoV2.setGetTime(new Date());
+
+			hongBaoV2Service.insertSelective(hongBaoV2);
+
+			// 2.鎻掑叆鍏宠仈
+			orderHongBaoMapService.addOrderHongBaoMap(hongBaoV2, order);
+
+			// 3.鎻掑叆璧勯噾鏄庣粏,鐢ㄦ埛浣欓
+			UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createOrderReward(order.getOrderId(),
+					order.getOrderType(), money, new UserInfo(uid));
+			userMoneyDetailService.addUserMoneyDetail(userMoneyDetail);
+			userInfoService.addMoney(new UserInfo(uid), money);
+
+			/* 鐢ㄦ埛鍒镐俊鎭姸鎬佸強璁板綍澶勭悊 */
+
+			Date date = new Date();
+			// 鏇存柊鍒哥姸鎬侊細宸蹭娇鐢�
+			userSystemCoupon.setState(UserSystemCoupon.STATE_END_USE);
+			userSystemCoupon.setUseTime(date);
+			userSystemCoupon.setUpdateTime(date);
+			userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
+
+			SystemCoupon coupon = systemCouponService.selectByPrimaryKey(userSystemCoupon.getSystemCoupon().getId());
+
+			// 鎻掑叆浣跨敤鍒歌褰�
+			UserSystemCouponRecord couponRecord = new UserSystemCouponRecord();
+			couponRecord.setState(UserSystemCouponRecord.STATE_SUCCESS);
+			couponRecord.setGoodSource(order.getOrderType());
+			couponRecord.setOrderNo(order.getOrderId());
+			couponRecord.setUserSystemCoupon(userSystemCoupon);
+			couponRecord.setCouponType(coupon.getType().name());
+			couponRecord.setCreateTime(date);
+			couponRecord.setUpdateTime(date);
+			userSystemCouponRecordService.insertSelective(couponRecord);
+
+			// 鎻掑叆璧勯噾閫氱煡
+			userMoneyMsgNotificationService.orderReward(uid, order.getOrderId(), order.getOrderType(), money,
+					userInfoService.selectByPKey(uid).getMyHongBao());
+			// 娑堟伅鎺ㄩ��
+			try {
+				userOtherMsgNotificationService.rewardCouponUsed(userSystemCoupon, hongBao, money, order.getOrderId());
+			} catch (Exception e) {
+				LogHelper.errorDetailInfo(e);
+			}
+			transactionManager.commit(transactionStatus);
 		} catch (Exception e) {
-			LogHelper.errorDetailInfo(e);
+			e.printStackTrace();
+			transactionManager.rollback(transactionStatus);
+			throw new Exception();
 		}
 
 	}

--
Gitblit v1.8.0