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