admin
2019-11-13 221b5c8d0de3f6b17a00d543503a79c13b28ba12
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;
@@ -174,6 +175,11 @@
   @Resource
   private UserSystemCouponActivateService userSystemCouponActivateService;
   @Resource(name = "producer")
   private Producer producer;
   @Override
   public int insertSelective(UserSystemCoupon record) {
@@ -287,8 +293,11 @@
      userCoupon.setEndTime(endTime);
      userCoupon.setCreateTime(new Date());
      userCoupon.setUpdateTime(new Date());
      // 插入数据库
      insertSelective(userCoupon);
      userSystemCouponMapper.insertSelective(userCoupon);
      if(coupon.getType() == CouponTypeEnum.freeCoupon) {
         userSystemCouponActivateService.addActivateRecord(userCoupon.getId());
      }
      executor.execute(new Runnable() {
         @Override
@@ -875,7 +884,7 @@
         Order order = orderService.findOrderByOrderIdAndType(orderNo, sourceType);
         if (order == null)
            return;
            throw new UserSystemCouponException(1, "该订单不存在");
         /* 奖金计算 以及相关红包信息处理 */
@@ -903,7 +912,8 @@
            }, null);
            System.out.println(result);
         } catch (Exception e) {
            throw new Exception();
            e.printStackTrace();
            throw e;
         }
      }
   }
@@ -2067,7 +2077,20 @@
      }
      tips = tips.replace("{口令}", 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 = new Message(MQTopicName.TOPIC_USER.name(), UserTopicTagEnum.systemCouponDrawback.name(),
            new Gson().toJson(msg).getBytes());
      try {
         producer.send(message);
      } catch (Exception e) {
         throw new UserSystemCouponException(1, "创建赠送信息失败");
      }
      return couponVO;
   }
   private UserSystemCouponVO createUserCouponVOo(UserSystemCoupon userSystemCoupon, SystemCoupon systemCoupon,
@@ -2252,9 +2275,100 @@
      sendBackGiveCoupon(list);
   }
   @Override
   @RequestSerializableByKeyService(key = "#id")
   @Transactional(rollbackFor = Exception.class)
   public void sendBackByGiveId(Long couponId) {
      if (couponId == null)
         return;
      UserSystemCoupon userCoupon = userSystemCouponMapper.selectByPrimaryKey(couponId);
      if (userCoupon == null)
         return;
      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);
      // 口令失效
      tokenRecordService.invalidByCoupon(giveRecord.getId());
      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());