yujian
2020-06-29 880238957a973ecd9676237672276b0e99d31115
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.impl.user;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -317,6 +318,97 @@
      return userSystemCoupon;
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public UserSystemCoupon freeCouponWinBySystem(Long uid, CouponTypeEnum typeEnum, String source, int num, boolean notify,
         Integer expiryDay) throws UserSystemCouponException, Exception {
      if (typeEnum == null || uid == null || StringUtil.isNullOrEmpty(source) || num < 1) {
         throw new UserSystemCouponException(1, "参数不正确");
      }
      SystemCoupon coupon = systemCouponService.getCouponByType(typeEnum.name());
      if (coupon == null) {
         throw new UserSystemCouponException(1, "券类型不正确");
      }
      // 激活状态
      int stateActivated = 0;
      // 自购免单券、赠送免单券可直接使用
      if (coupon.getType() == CouponTypeEnum.freeCouponBuy || coupon.getType() == CouponTypeEnum.freeCouponGive) {
         stateActivated = 1;
      }
      // 有效时长
      if (expiryDay == null) {
         if (stateActivated == 0)
            expiryDay = coupon.getActivateDay();
         if (expiryDay == null || expiryDay == 0)
            expiryDay = coupon.getExpiryDay();
      }
      // 计算结束日期
      Date nowTime = new Date();
      String endDay = DateUtil.plusDay(expiryDay - 1, nowTime);
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      if (endDay != null && endDay.trim().length() > 0) {
         endDay += " 23:59:59";
      }
      Date endTime = format.parse(endDay);
      UserSystemCoupon userSystemCoupon = null;
      for (int i = 0; i < num; i++) {
         UserSystemCoupon userCoupon = new UserSystemCoupon();
         userCoupon.setUid(uid);
         userCoupon.setSource(source);
         userCoupon.setSystemCoupon(coupon);
         userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
         userCoupon.setStateActivated(stateActivated);
         userCoupon.setStartTime(nowTime);
         userCoupon.setEndTime(endTime);
         userCoupon.setCreateTime(nowTime);
         userCoupon.setUpdateTime(nowTime);
         userSystemCouponMapper.insertSelective(userCoupon);
         // 需要激活券
         if (typeEnum == CouponTypeEnum.freeCoupon) {
            userSystemCouponActivateService.addActivateRecord(userCoupon.getId());
         }
         if (num == 1) {
            userSystemCoupon = userCoupon;
         }
      }
      executor.execute(new Runnable() {
         @Override
         public void run() {
            if (notify) { // 消息推送
               try {
                  userOtherMsgNotificationService.freeCouponWinMsg(uid, typeEnum.getDesc(), source, num, "成功获得",
                        nowTime, endTime);
               } catch (Exception e) {
                  e.printStackTrace();
               }
            }
            // 福利中心红点
            UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
            if (extra != null) {
               UserInfoExtra updateExtra = new UserInfoExtra();
               updateExtra.setId(extra.getId());
               if (extra.getCouponNews() == null) {
                  updateExtra.setCouponNews(1);
               } else {
                  updateExtra.setCouponNews(extra.getCouponNews() + 1);
               }
               userInfoExtraService.updateByPrimaryKeySelective(updateExtra);
            }
         }
      });
      return userSystemCoupon;
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public UserSystemCoupon rewardCouponWin(Long uid, String source, int num, boolean notify, BigDecimal percent)
@@ -550,27 +642,24 @@
   }
   @Override
   public List<UserSystemCouponVO> getEnableListByCouponId(Long uid, Integer activated, List<SystemCoupon> couponList)
         throws UserSystemCouponException, Exception {
   public List<UserSystemCouponVO> getEnableListByCouponId(Long uid, Integer activated, List<SystemCoupon> couponList) {
      List<Long> listCouponId = new ArrayList<Long>();
      for (SystemCoupon systemCoupon : couponList) {
         listCouponId.add(systemCoupon.getId());
      }
      List<UserSystemCouponVO> listVO = userSystemCouponMapper.getEnableListByCouponId(uid, activated, listCouponId);
      if (listVO == null || listVO.size() == 0) {
         return null;
      }
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
      SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
      for (UserSystemCouponVO userCouponVO : listVO) {
         SystemCoupon systemCoupon = userCouponVO.getSystemCoupon();
         if (systemCoupon == null) {
            continue; // 券信息不完整
         }
         for (SystemCoupon coupon : couponList) {
            if (coupon.getId().equals(systemCoupon.getId()) || coupon.getId() == systemCoupon.getId()) {
               systemCoupon = coupon;
@@ -596,11 +685,15 @@
         Date startTime = userCouponVO.getStartTime();
         Date endTime = userCouponVO.getEndTime();
         if (endTime != null && startTime != null) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            couponTerm = couponTerm + sdf.format(startTime) + "-" + sdf.format(endTime);
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
            differentDays = DateUtil.daysBetween(sdf2.format(new Date()), sdf2.format(endTime)) + 1;
            try {
               differentDays = DateUtil.daysBetween(sdf2.format(new Date()), sdf2.format(endTime)) + 1;
            } catch (ParseException e) {
               e.printStackTrace();
            }
            if (differentDays < 0) {
               differentDays = 0;
            }
@@ -679,6 +772,24 @@
   @Transactional(rollbackFor = Exception.class)
   @Override
   public List<UserSystemCouponVO> getFreeCouponList(Long uid) {
      // 过期券
      updateInvalidSate(uid);
      // 退回券
      sendBackTimeOutCoupon(uid);
      // 商品相关的券
      List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
      if (couponList == null || couponList.size() == 0) {
         return null;
      }
      return getEnableListByCouponId(uid, null, couponList);
   }
   @Transactional(rollbackFor = Exception.class)
   @Override
   public List<UserSystemCouponVO> getGoodsCouponList(Long uid, Long auctionId)
         throws UserSystemCouponException, Exception {
@@ -728,7 +839,7 @@
      return list;
   }
   @Override
   public long countUsableFreeCouponForBuy(Long uid) {
      if (uid == null)
@@ -952,6 +1063,7 @@
      }
      BigDecimal hongBao = orderVO.getHongBao();
      // 红包状态
      Integer hongBaoState = orderVO.getHongBaoState();
      // 红包类型
@@ -964,6 +1076,11 @@
         if (order == null)
            throw new UserSystemCouponException(1, "该订单不存在");
         // 使用奖励券 金额额限制
         if (hongBao.compareTo(Constant.REWARD_COUPON_LIMIT_MONEY) > 0){
            throw new UserSystemCouponException(1, "该订单不能使用奖励券");
         }
         /* 奖金计算 以及相关红包信息处理 */
         // 转换成小数点
@@ -1564,7 +1681,7 @@
      if (couponType == CouponTypeEnum.freeCoupon.name()) {
         stateActivated = 0; //
      } else if (couponType == CouponTypeEnum.welfareFreeCoupon.name()
            && threeSaleSerivce.countSuccessFirstTeam(uid) <= 0) {
            && threeSaleSerivce.countFirstTeam(uid) <= 0) {
         stateActivated = 0; // 无下级队员 --待激活
      }
@@ -2487,4 +2604,5 @@
      }
   }
}