admin
2019-10-25 733281fcb5f1ab01e1196b542b7e07b49b3e44c4
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -18,9 +18,15 @@
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.entity.DateInfo;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.transaction.LocalTransactionExecuter;
import com.aliyun.openservices.ons.api.transaction.TransactionProducer;
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.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;
@@ -38,6 +44,8 @@
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.order.HongBaoException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.log.LogHelper;
@@ -70,6 +78,8 @@
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.factory.msg.MsgOtherSystemGiveDTOFactory;
import com.yeshi.fanli.util.rocketmq.MQTagConstant;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.order.CommonOrderVO;
@@ -151,6 +161,9 @@
   @Resource
   private TokenRecordService tokenRecordService;
   @Resource(name = "orderTransactionProducer")
   private TransactionProducer orderTransactionProducer;
   @Override
   public int insertSelective(UserSystemCoupon record) {
@@ -812,7 +825,8 @@
         Date thirdCreateTime = orderVO.getThirdCreateTime();
         if (thirdCreateTime != null) {
            long downOrderTime = thirdCreateTime.getTime();
            long limitDate = Long.parseLong("1573315200000"); // TODO 日期待确定2019-11-10
            long limitDate = Long.parseLong("1573315200000"); // TODO
                                                   // 日期待确定2019-11-10
            if (downOrderTime > limitDate) {
               Date endDay = DateUtil.plusDayDate(4, thirdCreateTime);
               long currentTime = java.lang.System.currentTimeMillis();
@@ -825,7 +839,6 @@
                     if (!valid && dateInfo.getHour() > 0)
                        valid = true;
                     if (!valid && dateInfo.getMinute() > 0) 
                        valid = true;
@@ -861,6 +874,29 @@
         // 提成金额
         BigDecimal money = MoneyBigDecimalUtil.mul(hongBao, percent);
         UserSystemCouponUseMQMsgDTO mqMsg = new UserSystemCouponUseMQMsgDTO(userSystemCoupon.getId(),
               order.getOrderId(), sourceType);
         // 事务消息
         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;
               }
            }
         }, null);
      }
   }
   @Transactional
   private void useRewardCouponCore(UserSystemCoupon userSystemCoupon, BigDecimal money, BigDecimal hongBao, Long uid,
         Order order) throws UserMoneyDetailException {
         // 1、插入红包数据
         HongBaoV2 hongBaoV2 = new HongBaoV2();
         hongBaoV2.setMoney(money);
@@ -879,13 +915,13 @@
         orderHongBaoMapService.addOrderHongBaoMap(hongBaoV2, order);
         // 3.插入资金明细,用户余额
         UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createOrderReward(orderNo, sourceType, money,
               new UserInfo(uid));
      UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createOrderReward(order.getOrderId(),
            order.getOrderType(), money, new UserInfo(uid));
         userMoneyDetailService.addUserMoneyDetail(userMoneyDetail);
         userInfoService.addMoney(new UserInfo(uid), money);
         // 插入资金通知
         userMoneyMsgNotificationService.orderReward(uid, orderNo, sourceType, money,
      userMoneyMsgNotificationService.orderReward(uid, order.getOrderId(), order.getOrderType(), money,
               userInfoService.selectByPKey(uid).getMyHongBao());
         /* 用户券信息状态及记录处理 */
@@ -900,20 +936,19 @@
         // 插入使用券记录
         UserSystemCouponRecord couponRecord = new UserSystemCouponRecord();
         couponRecord.setState(UserSystemCouponRecord.STATE_SUCCESS);
         couponRecord.setGoodSource(sourceType);
         couponRecord.setOrderNo(orderNo);
      couponRecord.setGoodSource(order.getOrderType());
      couponRecord.setOrderNo(order.getOrderId());
         couponRecord.setUserSystemCoupon(userSystemCoupon);
         couponRecord.setCouponType(systemCoupon.getType().name());
      couponRecord.setCouponType(userSystemCoupon.getSystemCoupon().getType().name());
         couponRecord.setCreateTime(date);
         couponRecord.setUpdateTime(date);
         userSystemCouponRecordService.insertSelective(couponRecord);
         // 消息推送
         try {
            userOtherMsgNotificationService.rewardCouponUsed(userSystemCoupon, hongBao, money, orderNo);
         userOtherMsgNotificationService.rewardCouponUsed(userSystemCoupon, hongBao, money, order.getOrderId());
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
         }
      }
   }