admin
2019-10-30 b674cf50a368d005c9321fcf2989d7aa9a4a05c7
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -48,7 +48,6 @@
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;
@@ -69,6 +68,7 @@
import com.yeshi.fanli.service.inter.user.TokenRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponActivateService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponGiveRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
@@ -81,7 +81,6 @@
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;
@@ -170,6 +169,10 @@
   @Resource(name = "orderTransactionProducer")
   private TransactionProducer orderTransactionProducer;
   @Resource
   private UserSystemCouponActivateService userSystemCouponActivateService;
   @Override
   public int insertSelective(UserSystemCoupon record) {
@@ -1721,7 +1724,7 @@
   @Transactional
   @Override
   public List<UserSystemCouponVO> getCouponList(long start, int count, Long uid)
   public List<UserSystemCouponVO> getCouponList(AcceptData acceptData, long start, int count, Long uid)
         throws UserSystemCouponException, Exception {
      // 过期券
@@ -1816,15 +1819,12 @@
                  listTip.add("满足条件后,系统将自动激活,并在消息-其它消息中提醒。");
                  userCouponVO.setTips(listTip);
                  userCouponVO.setPopup(true);
                  // 验证是否已累计3单
                  executor.execute(new Runnable() {
                     @Override
                     public void run() {
                        freeCouponActivate(userCouponVO.getId(), uid, userCouponVO.getCreateTime());
                     }
                  });
                  // 统计待激活数量
                  if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
                     int activateCount = userSystemCouponActivateService.getActivateCount(userCouponVO.getId());
                     String activateNum = configService.get("free_coupon_activate_num");
                     userCouponVO.setCouponEffect("(" + activateCount + "/"+ Integer.parseInt(activateNum) +")待激活");
                  }
               } else if (CouponTypeEnum.welfareFreeCoupon == type) {
                  jumpBtn = new HashMap<String, Object>();
                  if (inviteCode != null && inviteCode.trim().length() > 0) {
@@ -2099,80 +2099,6 @@
      return userCouponVO;
   }
   /**
    * 免单券激活
    *
    * @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 HH:mm:ss");
            if (endDay != null && endDay.trim().length() > 0) {
               endDay += " 23:59:59";
            }
            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
@@ -2516,4 +2442,78 @@
      return userSystemCouponMapper.getFreeCouponByType(uid, type);
   }
   @Override
   @Transactional
   public void activateFreeCoupon(Long uid) {
      List<UserSystemCoupon> list = userSystemCouponMapper.getNeedActivateFreeCouponByType(uid, CouponTypeEnum.freeCoupon.name());
      if (list == null || list.size() == 0)
         return;
      UserSystemCoupon coupon = list.get(0);
      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; // 券类型不匹配
      // 添加激活数量
      String activateNum = configService.get("free_coupon_activate_num");
      boolean activate = userSystemCouponActivateService.addActivateCount(coupon.getId(), Integer.parseInt(activateNum));
      // 激活券
      if (activate) {
         try {
            Integer expiryDay = systemCoupon.getExpiryDay();
            String endDay = DateUtil.plusDay(expiryDay - 1, nowDate);
            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 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(coupon.getId());
            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() + "天内产生" + activateNum + "笔已到账返利订单");
            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);
         }
      }
   }
}