yujian
2019-08-29 e1dcef9d29c8de98c603cd4880f6b272c23f1cc0
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -16,6 +16,7 @@
import org.yeshi.utils.DateUtil;
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.entity.bus.msg.MsgOtherDetail.MsgTypeOtherTypeEnum;
import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
@@ -196,7 +197,7 @@
   @Override
   @Transactional
   public void insertUserCoupon(Long uid, String couponType, String source, BigDecimal percent)
   public UserSystemCoupon insertUserCoupon(Long uid, String couponType, String source, BigDecimal percent)
         throws UserSystemCouponException, Exception {
      if (couponType == null || uid == null) {
@@ -212,7 +213,7 @@
         // 随机奖励券
         if (percent == null || percent.compareTo(new BigDecimal(0)) < 1) {
            randomRewardCoupon(1, uid, source);
            return;
            return null;
         }  else {
            coupon = systemCouponService.getCouponByTypeAndPercent(couponType, percent);
         }
@@ -299,6 +300,8 @@
            e1.printStackTrace();
         }
      }
      return userCoupon;
   }
   @Transactional
@@ -1612,7 +1615,10 @@
      
      // 退回券
      sendBackTimeOutCoupon(uid);
      // 赠送的退回
      sendBackGiveUser(uid);
      
      List<UserSystemCouponVO> listVO = userSystemCouponMapper.getUserCouponVOList(start, count, uid);
      if (listVO == null || listVO.size() == 0) {
@@ -1697,6 +1703,15 @@
                  listTip.add("满足条件后,系统将自动激活,并在消息-其它消息中提醒。");
                  userCouponVO.setTips(listTip);
                  userCouponVO.setPopup(true);
                  // 验证是否已累计3单
                  executor.execute(new Runnable() {
                     @Override
                     public void run() {
                        freeCouponActivate(userCouponVO.getId(), uid, userCouponVO.getCreateTime());
                     }
                  });
               } else if (CouponTypeEnum.welfareFreeCoupon == type) {
                  jumpBtn = new HashMap<String, Object>();
                  if (inviteCode != null && inviteCode.trim().length() > 0) {
@@ -1710,7 +1725,11 @@
         if (UserSystemCoupon.STATE_IN_USE == state && (CouponTypeEnum.freeCouponBuy == type
               || CouponTypeEnum.freeCoupon == type || CouponTypeEnum.welfareFreeCoupon == type)) {
            userCouponVO.setInUseExplain(configService.get("free_coupon_using-help"));
            List<String> listTip = new ArrayList<String>();
            listTip.add("系统正在判断是否符合免单需求;");
            listTip.add("系统正在同步淘宝订单;");
            listTip.add("未使用成功的免单券会原路退回。");
            userCouponVO.setTipsUsing(listTip);
         }
         // 是否已赠送
@@ -1965,6 +1984,80 @@
   }
   
   /**
    * 免单券激活
    * @param uid
    */
   public void freeCouponActivate(Long id,Long uid, Date date) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      long count = commonOrderCountService.countValidOrderByDate(uid, sdf.format(date));
      String activateNum = configService.get("free_coupon_activate_num");
      int num = Integer.parseInt(activateNum);
      if (count >= num) {
         UserSystemCoupon coupon = userSystemCouponMapper.selectByPrimaryKey(id);
         if (coupon == null || coupon.getState() != UserSystemCoupon.STATE_CAN_USE
               || coupon.getStateActivated() != 0)
            return;
         Date nowDate = new Date();
         Date endTime2 = coupon.getEndTime();
         if (endTime2 != null && endTime2.getTime() <= nowDate.getTime())
            return;
         SystemCoupon systemCoupon = coupon.getSystemCoupon();
         if (systemCoupon == null)
            return;
         systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
         if (systemCoupon == null || systemCoupon.getType() != CouponTypeEnum.freeCoupon)
            return;
         try {
            Integer expiryDay =  systemCoupon.getExpiryDay();
            String endDay = DateUtil.plusDay(expiryDay - 1, nowDate);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Date endTime = format.parse(endDay);
            UserSystemCoupon userCoupon = new UserSystemCoupon();
            userCoupon.setId(coupon.getId());
            userCoupon.setStateActivated(1);
            userCoupon.setEndTime(endTime);
            userCoupon.setStartTime(nowDate);
            userCoupon.setUpdateTime(new Date());
            userSystemCouponMapper.updateByPrimaryKeySelective(userCoupon);
            // 赠送记录
            UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getByReceiveId(id);
            if (giveRecord == null)
               return;
            Long giveUid = giveRecord.getGiveUid();
            UserInfo userInfo = userInfoService.selectByPKey(giveUid);
            if (userInfo == null)
               return;
            String beiZhu = "请到我的-福利中心中查看";
            SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            MsgOtherCouponActivateDTO msgOther = new MsgOtherCouponActivateDTO();
            msgOther.setTitle("免单券激活");
            msgOther.setType("免单券系统已自动激活");
            msgOther.setExplain("满足"+ systemCoupon.getActivateDay() +"天内产生"+ num +"笔已到账返利订单");
            msgOther.setGiveUser("昵称:"+ userInfo.getNickName() +" ID:" + giveUid);
            msgOther.setReceiveTime(sd.format(giveRecord.getReceiveTime()));
            msgOther.setValidityTime(expiryDay + "天");
            userOtherMsgNotificationService.giveCouponActivateMsg(uid, beiZhu, msgOther);
         } catch (Exception e) {
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
         }
      }
   }
   @Transactional
   @Override
   public void updateInvalidSate(Long uid) {
@@ -2098,6 +2191,16 @@
   }
   
   @Transactional
   @Override
   public void sendBackGiveUser(Long uid) {
      List<UserSystemCouponGiveRecord> list =userSystemCouponGiveRecordService.overdueListByUser(uid);
      if (list == null || list.size() == 0) {
         return;
      }
      sendBackGiveCoupon(list);
   }
   @Override
   public void sendBackGiveCoupon(List<UserSystemCouponGiveRecord> overdueList) {
      for (UserSystemCouponGiveRecord record: overdueList) {
@@ -2160,14 +2263,17 @@
         
         // 退回消息
         String couponName = systemCoupon.getName();
         if (CouponTypeEnum.freeCouponGive == systemCoupon.getType())
         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.setTitle(couponName + "退回");
         msgOther.setGiveType("你赠送的"+ couponName + "未被成功领取");
         msgOther.setGiveTime(sd.format(record.getGiveTime()));
         msgOther.setReturnTime(sd.format(new Date()));