yujian
2019-09-12 0622fc9c8a464a1260ebca4071a2cad9c83a5a9a
fanli/src/main/java/com/yeshi/fanli/service/impl/user/TokenRecordServiceImpl.java
@@ -8,10 +8,12 @@
import javax.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.user.TokenRecordMapper;
import com.yeshi.fanli.dto.msg.MsgInviteContentDTO;
import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinGiveRecord;
import com.yeshi.fanli.entity.bus.user.TokenRecord;
@@ -21,12 +23,16 @@
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.bus.user.UserSystemCouponGiveRecord;
import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinOriginException;
import com.yeshi.fanli.exception.user.TokenRecordException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.integral.IntegralGetService;
import com.yeshi.fanli.service.inter.msg.UserInviteMsgNotificationService;
import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinGiveRecordService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
@@ -54,6 +60,7 @@
   private UserInfoService userInfoService;
   @Resource
   @Lazy
   private UserSystemCouponService userSystemCouponService;
   @Resource
@@ -76,6 +83,17 @@
   @Resource
   private UserOtherMsgNotificationService userOtherMsgNotificationService;
   @Lazy
   @Resource
   private IntegralGetService  integralGetService;
   @Resource
   private SystemCouponService systemCouponService;
   @Resource
   private UserInviteMsgNotificationService userInviteMsgNotificationService;
   @Override
   public void insertSelective(TokenRecord record) {
@@ -102,10 +120,14 @@
      if (StringUtil.isNullOrEmpty(parseToken)) 
         throw new TokenRecordException(1, "未发现口令");
      
      TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
      TokenRecord rokenRecord = tokenRecordMapper.getByToken(parseToken);
      if (rokenRecord == null)
         throw new TokenRecordException(1, "口令不存在");
      Long uidToken = rokenRecord.getUid();
      if (uid != null && uidToken != null && uid.longValue() == uidToken.longValue())
         throw new TokenRecordException(1, "不能自己赠送给自己");
      Date now = new Date();
      Date endTimeToken = rokenRecord.getEndTime();
      Integer stateTtoken = rokenRecord.getState();
@@ -199,20 +221,22 @@
         }
      } else if (tokenType == TokenTypeEnum.taoLiJin) {
         type = 12;
         UserTaoLiJinGiveRecord giveRecord = userTaoLiJinGiveRecordService
               .selectByPrimaryKey(Long.parseLong(identify));
         if (giveRecord == null || giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE) {
         UserTaoLiJinGiveRecord giveRecord = userTaoLiJinGiveRecordService.selectByPrimaryKey(Long.parseLong(identify));
         if (giveRecord == null)
            throw new TokenRecordException(1, "口令已失效");
         BigDecimal amount = giveRecord.getAmount();
         num = Integer.parseInt(amount.setScale(0).toString());
         if(giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_OVERDUE) {
            tips.add("哎呀,推广红包已失效了!");
         } else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_RECEIVE) {
            tips.add("哎呀,推广红包已被领取了!");
         } else if (giveRecord.getState() == UserTaoLiJinGiveRecord.STATE_INIT) {
            if (uid == null || uid <= 0)
               throw new TokenRecordException(1001, "温馨提示,[推广红包]需要登录后领取");
            state = true;
            BigDecimal amount = giveRecord.getAmount();
            num = Integer.parseInt(amount.setScale(0).toString());
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null || StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
               tips.add("确认领取后,你将成为赠送者的一级队员;");
@@ -241,7 +265,7 @@
      }
      if (StringUtil.isNullOrEmpty(nickName))
         nickName = Constant.systemCommonConfig.getDefaultNickName();
         nickName = Constant.systemCommonConfig.getDefaultNickName() + inviteId;
      if (StringUtil.isNullOrEmpty(portrait))
         portrait = Constant.systemCommonConfig.getDefaultPortrait();
@@ -252,7 +276,7 @@
      
      TokenVO tokenVO = new TokenVO();
      tokenVO.setAmount(num);
      tokenVO.setToken(token);
      tokenVO.setToken(parseToken);
      tokenVO.setNickName(nickName + "赠送");
      tokenVO.setPortrait(portrait);
      tokenVO.setTips(tips);
@@ -274,7 +298,11 @@
      TokenRecord rokenRecord = tokenRecordMapper.getByToken(token);
      if (rokenRecord == null)
         throw new TokenRecordException(1, "口令已失效");
      Long uidToken = rokenRecord.getUid();
      if (uidToken != null && uid.longValue() == uidToken.longValue())
         throw new TokenRecordException(1, "不能自己赠送给自己");
      Date now = new Date();
      Date endTimeToken = rokenRecord.getEndTime();
      if (endTimeToken != null && endTimeToken.getTime() < now.getTime())
@@ -311,10 +339,11 @@
         if (userCoupon == null || userCoupon.getGive() == null || !userCoupon.getGive()
               || userCoupon.getState() != UserSystemCoupon.STATE_IN_USE)
            throw new TokenRecordException(1, "该券不存在或非赠送");
         UserSystemCoupon userSystemCoupon= null;
         try {
            userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCoupon.name(),
                  UserSystemCoupon.SOURCE_GIVE);
            userSystemCoupon = userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCoupon.name(),
                  UserSystemCoupon.SOURCE_GIVE, null);
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            throw new TokenRecordException(1, "领取失败");
@@ -340,17 +369,23 @@
         // 更新赠送记录
         UserSystemCouponGiveRecord updateGiveRecord = new UserSystemCouponGiveRecord();
         updateGiveRecord.setId(giveRecord.getId());
         updateGiveRecord.setReceiveUid(uid);
         updateGiveRecord.setReceiveTime(new Date());
         updateGiveRecord.setState(UserSystemCouponGiveRecord.STATE_RECEIVE);
         if (userSystemCoupon != null) {
            updateGiveRecord.setReceiveId(userSystemCoupon.getId());
         }
         userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateGiveRecord);
         integralGetService.addGiveFreeCoupon(giveUid);
         msg = "领取成功[免单券]成功,请到[我的-福利中心]中查看";
         // 消息 + 队员
         executor.execute(new Runnable() {
            @Override
            public void run() {
               SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
               SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
               boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
               String beiZhu = "无";
               if (addTeam)
@@ -365,10 +400,14 @@
               msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
               msgOther.setTitle("赠送免单券");
               msgOther.setGiveType("你赠送的免单券被成功领取");
               msgOther.setReceiveInfo("昵称:  " + userName + " ID:" + uid);
               msgOther.setReceiveInfo("昵称: :" + userName + " ID:" + uid);
               msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
               msgOther.setReceiveTime(sd.format(new Date()));
               userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
               // 激活邀请信息
               if (addTeam)
                   addInviteMsg(uid, giveUid, "免单券");
            }
         });
      } else if (tokenType == TokenTypeEnum.rebatePercentCoupon) {
@@ -387,9 +426,18 @@
               || userCoupon.getState() != UserSystemCoupon.STATE_IN_USE)
            throw new TokenRecordException(1, "该券不存在或非赠送");
         SystemCoupon systemCoupon = userCoupon.getSystemCoupon();
         if (systemCoupon == null)
            throw new TokenRecordException(1, "该券不存在");
         systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
         if (systemCoupon == null)
            throw new TokenRecordException(1, "该券不存在");
         UserSystemCoupon userSystemCoupon= null;
         try {
            userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCoupon.name(),
                  UserSystemCoupon.SOURCE_GIVE);
            userSystemCoupon = userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(),
                  UserSystemCoupon.SOURCE_GIVE, systemCoupon.getPercent());
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            throw new TokenRecordException(1, "领取失败");
@@ -415,17 +463,23 @@
         // 更新赠送记录
         UserSystemCouponGiveRecord updateGiveRecord = new UserSystemCouponGiveRecord();
         updateGiveRecord.setId(giveRecord.getId());
         updateGiveRecord.setReceiveUid(uid);
         updateGiveRecord.setReceiveTime(new Date());
         updateGiveRecord.setState(UserSystemCouponGiveRecord.STATE_RECEIVE);
         if (userSystemCoupon != null) {
            updateGiveRecord.setReceiveId(userSystemCoupon.getId());
         }
         userSystemCouponGiveRecordService.updateByPrimaryKeySelective(updateGiveRecord);
         integralGetService.addGiveRebateCoupon(giveUid);
         msg = "领取成功[返利奖励券]成功,请到[我的-福利中心]中查看";
         // 消息 + 队员
         executor.execute(new Runnable() {
            @Override
            public void run() {
               SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
               SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
               boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
               String beiZhu = "无";
               if (addTeam)
@@ -440,10 +494,14 @@
               msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
               msgOther.setTitle("赠送奖励券");
               msgOther.setGiveType("你赠送的奖励券被成功领取");
               msgOther.setReceiveInfo("昵称:  " + userName + " ID:" + uid);
               msgOther.setReceiveInfo("昵称: " + userName + " ID:" + uid);
               msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
               msgOther.setReceiveTime(sd.format(new Date()));
               userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
               // 激活邀请信息
               if (addTeam)
                   addInviteMsg(uid, giveUid, "返利奖励券");
            }
         });
      } else if (tokenType == TokenTypeEnum.taoLiJin) {
@@ -469,13 +527,15 @@
            updateRecord.setState(UserTaoLiJinGiveRecord.STATE_RECEIVE);
            userTaoLiJinGiveRecordService.updateByPrimaryKeySelective(updateRecord);
            integralGetService.addGiveTaoLiJin(giveUid);
            msg = "领取成功[推广红包]成功,请到[我的-推广红包]中查看";
            // 消息 + 队员
            executor.execute(new Runnable() {
               @Override
               public void run() {
                  SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH.mm");
                  SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
                  boolean addTeam = addInviteTeam(uid, giveUid, userInfoExtra);
                  String beiZhu = "无";
                  if (addTeam)
@@ -487,13 +547,17 @@
                     userName = user.getNickName();
                  MsgOtherGiveContentDTO msgOther = new MsgOtherGiveContentDTO();
                  msgOther.setType(MsgOtherGiveContentDTO.TYEP_COUPON);
                  msgOther.setType(MsgOtherGiveContentDTO.TYEP_TLJ);
                  msgOther.setTitle("赠送推广红包");
                  msgOther.setGiveType("你赠送的推广红包被成功领取");
                  msgOther.setReceiveInfo("昵称:  " + userName + " ID:" + uid);
                  msgOther.setReceiveInfo("昵称:" + userName + " ID:" + uid);
                  msgOther.setGiveTime(sd.format(giveRecord.getGiveTime()));
                  msgOther.setReceiveTime(sd.format(new Date()));
                  userOtherMsgNotificationService.tokenGiveMsg(giveUid, beiZhu, msgOther);
                  // 激活邀请信息
                  if (addTeam)
                      addInviteMsg(uid, giveUid, amount.setScale(2) + "元推广红包");
               }
            });
         } catch (UserTaoLiJinOriginException e) {
@@ -532,5 +596,39 @@
      }
      return invite;
   }
   private void addInviteMsg(Long uid, Long giveUid, String giftName) {
      try {
         UserInfo user = userInfoService.selectByPKey(giveUid);
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         MsgInviteContentDTO msgInvite = new MsgInviteContentDTO();
         msgInvite.setTitle("邀请消息");
         msgInvite.setState("成功激活邀请");
         msgInvite.setCode("你的邀请码:" + userInfoExtra.getInviteCode());
         msgInvite.setInviter("昵称:"+user.getNickName());
         msgInvite.setMode("成功领取邀请人的" + giftName);
         userInviteMsgNotificationService.receiveGift(uid, "邀请关系一旦确立无法更改 ", msgInvite);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
   @Override
   public List<TokenRecord> overdueList(int count) {
      return tokenRecordMapper.overdueList(count);
   }
   @Override
   public void overdue(List<TokenRecord> list) {
      if (list == null || list.size() == 0)
         return;
      Date date = new Date();
      for (TokenRecord tokenRecord: list) {
         tokenRecord.setState(1);
         tokenRecord.setUpdateTime(date);
         tokenRecordMapper.updateByPrimaryKeySelective(tokenRecord);
      }
   }
}