yujian
2019-01-22 88b54772dbcf5ecab1e2316e4e4626ac901b8908
fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java
@@ -28,9 +28,11 @@
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.exception.ThreeSaleException;
import com.yeshi.fanli.service.inter.config.InviteGetMoneyService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.msg.UserInviteMsgNotificationService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
@@ -52,12 +54,12 @@
   @Resource
   private UserInfoMapper userInfoMapper;
   @Resource
   private ThreeSaleMapper threeSaleMapper;
   
   @Resource
   private UserInviteMsgNotificationService userInviteMsgNotificationService;
   public UserInfo getBoss(final long uid) {
      return (UserInfo) dao.excute(new HibernateCallback<UserInfo>() {
@@ -92,26 +94,83 @@
   }
   @Transactional
   public void bind(UserInfo invitee, UserInfo inviter) {
      ThreeSale threeSale = new ThreeSale();
      threeSale.setBoss(inviter);
      threeSale.setWorker(invitee);
      threeSale.setState(false);
      threeSale.setCreateTime(System.currentTimeMillis());
      dao.save(threeSale);
   public void bind(UserInfo invitee, UserInfo inviter) throws ThreeSaleException {
      if (invitee == null || inviter == null)
         throw new ThreeSaleException(1, "用户信息为空");
      if (invitee.getId() == null)// 该用户还不存在
      {
         // 保存用户
         UserInfo inviteeUser = userInfoService.addUser(invitee, Constant.APPID);
         if (inviteeUser == null)
            throw new ThreeSaleException(2, "创建用户失败");
         // 保存关系
         ThreeSale threeSale = new ThreeSale();
         threeSale.setBoss(inviter);
         threeSale.setCreateTime(java.lang.System.currentTimeMillis());
         threeSale.setExpire(ThreeSale.EXPIRE_NORMAL);
         threeSale.setState(false);
         threeSale.setUpdateTime(java.lang.System.currentTimeMillis());
         threeSale.setWorker(inviteeUser);
         threeSaleMapper.insertSelective(threeSale);
         //创建通知
         userInviteMsgNotificationService.inviteScan(inviter.getId(), threeSale);
      } else {// 是已经存在的用户
         // 用户已经存在我们的用户库中
         if (invitee.getLastLoginTime() == null || invitee.getLastLoginTime() == 0L) {
            // 用户未登录
            int outOfDateCount = 0;// 过期数量
            // 查询邀请关系
            List<ThreeSale> list = listByWorkerId(invitee.getId());
            if (list != null && list.size() > 0) {
               for (ThreeSale ts : list) {
                  if (!ts.getState() && ts.getExpire() == ThreeSale.EXPIRE_OUTOFDATE) {
                     outOfDateCount++;
                  }
               }
               // 全部是失效状态
               if (outOfDateCount == list.size()) {
                  // 可以确定关系
                  ThreeSale threeSale = new ThreeSale();
                  threeSale.setBoss(inviter);
                  threeSale.setCreateTime(java.lang.System.currentTimeMillis());
                  threeSale.setExpire(ThreeSale.EXPIRE_NORMAL);
                  threeSale.setState(false);
                  threeSale.setUpdateTime(java.lang.System.currentTimeMillis());
                  threeSale.setWorker(invitee);
                  threeSaleMapper.insertSelective(threeSale);
                  userInviteMsgNotificationService.inviteScan(inviter.getId(), threeSale);
                  // threeSaleSerivce.bind(invitee, inviter);
               } else {
                  // 还存在有效的邀请,则不做处理
               }
            } else {
               // 用户未登录,又不存在邀请关系,不做处理
            }
         } else {
            // 已经登录,不做处理
         }
      }
   }
   @Transactional
   public void effective(UserInfo invitee) {
      List<ThreeSale> list = dao.list("from ThreeSale ts where ts.worker.id = ? ",
      List<ThreeSale> list = dao.list("from ThreeSale ts where ts.worker.id = ? and ts.state=0 and ts.expire=0",
            new Serializable[] { invitee.getId() });
      if (list.size() > 0) {
         ThreeSale threeSale = list.get(0);
         UserInfo inviter = threeSale.getBoss();
         threeSale.setState(true);
         threeSale.setSucceedTime(System.currentTimeMillis());
         dao.update(threeSale);
         if (inviter != null)
            reComputeUserRank(inviter.getId());
         //通知
         userInviteMsgNotificationService.inviteSuccess(inviter.getId(), threeSale);
         // }
         // });
      }
@@ -279,44 +338,42 @@
   }
   @Override
   public List<ThreeSale> queryMyFirstTeamList(int start, int count, String key, Long bossId){
   public List<ThreeSale> queryMyFirstTeamList(int start, int count, String key, Long bossId) {
      return threeSaleMapper.queryMyFirstTeamList(start, count, key, bossId);
   }
   @Override
   public long queryCountMyFirstTeamList(String key, Long bossId){
   public long queryCountMyFirstTeamList(String key, Long bossId) {
      return threeSaleMapper.queryCountMyFirstTeamList(key, bossId);
   }
   @Override
   public List<ThreeSale> queryMySecondTeamList(int start, int count, String key, Long bossId){
   public List<ThreeSale> queryMySecondTeamList(int start, int count, String key, Long bossId) {
      return threeSaleMapper.queryMySecondTeamList(start, count, key, bossId);
   }
   @Override
   public long queryCountMySecondTeamList(String key, Long bossId){
   public long queryCountMySecondTeamList(String key, Long bossId) {
      return threeSaleMapper.queryCountMySecondTeamList(key, bossId);
   }
   @Override
   public int deleteByPrimaryKey(Long id){
   public int deleteByPrimaryKey(Long id) {
      return threeSaleMapper.deleteByPrimaryKey(id);
   }
   @Override
   public  List<Long> queryLongTimeFailed(int daysNum){
   public List<Long> queryLongTimeFailed(int daysNum) {
      return threeSaleMapper.queryLongTimeFailed(daysNum);
   }
   @Override
   public List<ThreeSale> queryLongTimeSuccess(int daysNum){
   public List<ThreeSale> queryLongTimeSuccess(int daysNum) {
      return threeSaleMapper.queryLongTimeSuccess(daysNum);
   }
   @Override
   public int updateExpire(List<Long> list){
   public int updateExpire(List<Long> list) {
      return threeSaleMapper.updateExpire(list);
   }
@@ -371,19 +428,17 @@
   public long countSecondTeam(Long uid, Integer state) {
      return threeSaleMapper.countSecondTeam(uid, state);
   }
   @Override
   public ThreeSale getMyBoss(Long uid) {
      return threeSaleMapper.getMyBoss(uid);
   }
   @Override
   public ThreeSale selectByPrimaryKey(Long id) {
      return threeSaleMapper.selectByPrimaryKey(id);
   }
   @Override
   public List<ThreeSale> listbyIdAndBossId(Long id, Long uid, Integer expire) {
      return threeSaleMapper.listbyIdAndBossId(id, uid, expire);
@@ -391,14 +446,14 @@
   @Override
   public JSONObject getMyFirstTeam(long start, int count, Long uid) {
      List<ThreeSale> list = threeSaleMapper.listFirstTeam(start, count, uid);
      if (list == null) {
         list = new ArrayList<ThreeSale>();
      }
      long countTotal = threeSaleMapper.countFirstTeam(uid, null);
      return organizeTeam(countTotal, list);
   }
@@ -408,122 +463,169 @@
      if (list == null) {
         list = new ArrayList<ThreeSale>();
      }
      long countTotal = threeSaleMapper.countSecondTeam(uid, null);
      return organizeTeam(countTotal, list);
   }
   public JSONObject organizeTeam(long count, List<ThreeSale> list) {
      JSONObject result = new JSONObject();
      JSONArray resultArray  = new JSONArray();
      for (ThreeSale threeSale: list) {
      JSONArray resultArray = new JSONArray();
      for (ThreeSale threeSale : list) {
         JSONObject object = new JSONObject();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         SimpleDateFormat sdf = new SimpleDateFormat("MM.dd HH:mm");
         SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
         SimpleDateFormat formatYears = new SimpleDateFormat("yyyy");
         Date todayTime = new Date();
         // 邀请id
         object.put("inviteId", threeSale.getId());
         // 加入队列时间
         Long createTime = threeSale.getCreateTime();
         Date inviteTime = new Date(createTime);
         object.put("inviteTime", sdf.format(inviteTime) + "加入");
         String nickName = null;
         object.put("inviteTime", format.format(inviteTime) + " 加入");
         String memoName = "";
         ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo();
         if (threeSaleExtraInfo != null) {
            if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) {
               memoName = threeSaleExtraInfo.getNickname();
            }
         }
         object.put("memoName", memoName);
         String nickName = "";
         String portrait = "";
         Long lastLoginTime = null;
         String portrait = null;
         Long workerId = null;
         UserInfo worker = threeSale.getWorker();
         if (worker != null) {
            workerId = worker.getId();
            portrait = worker.getPortrait();
            lastLoginTime = worker.getLastLoginTime();
            nickName = worker.getNickName();
         }
         object.put("workerId", workerId);
         object.put("nickName", nickName);
         object.put("portrait", portrait);
         int type = 0;
         int state = 0;
         String fontColor1 = "#888888";
         String fontColor2 = "#F14242";
         JSONArray array  = new JSONArray();
         JSONArray array = new JSONArray();
         if (threeSale.getState()) {
            type = 1;
            state = 1;
            if (lastLoginTime == null) {
               lastLoginTime = threeSale.getCreateTime();
            }
            JSONArray array1 = new JSONArray();
            array1.add(fontColor1);
            array1.add("最近登陆" + sdf.format(lastLoginTime));
            array.add(array1);
         } else if ( threeSale.getExpire()!= null && (threeSale.getExpire() == 1 || threeSale.getExpire().equals(1))) {
            type = 2;
            JSONArray array1 = new JSONArray();
            array1.add(fontColor1);
            array1.add("已经脱离邀请关系");
            array.add(array1);
            JSONObject contentJson = new JSONObject();
            contentJson.put("color", fontColor1);
            if (formatYears.format(todayTime).equals(formatYears.format(lastLoginTime))) {
               // 本年
               contentJson.put("content", "最近登录 " + sdf.format(lastLoginTime));
            } else {
               // 往年
               contentJson.put("content", "最近登录 " + format.format(lastLoginTime));
            }
            array.add(contentJson);
         } else if (threeSale.getExpire() != null
               && (threeSale.getExpire() == 1 || threeSale.getExpire().equals(1))) {
            state = 2;
            JSONObject contentJson = new JSONObject();
            contentJson.put("color", fontColor1);
            contentJson.put("content", "已经脱离邀请关系");
            array.add(contentJson);
         } else {
            type = 0;
            state = 0;
            Calendar c = Calendar.getInstance();
            c.setTime(inviteTime);
            c.add(Calendar.DAY_OF_MONTH, 60);// 邀请不超过60天
            Date todayTime = new Date();
            long days =  (c.getTimeInMillis() -todayTime.getTime()) / (1000*3600*24);
            long days = (c.getTimeInMillis() - todayTime.getTime()) / (1000 * 3600 * 24);
            if (days < 0) {
               days = 0;
            }
            JSONArray array1 = new JSONArray();
            array1.add(fontColor1);
            array1.add("将于");
            JSONArray array2 = new JSONArray();
            array2.add(fontColor2);
            array2.add(days+"天 ");
            JSONArray array3 = new JSONArray();
            array3.add(fontColor1);
            array3.add("后脱离邀请关系");
            array.add(array1);
            array.add(array2);
            array.add(array3);
            JSONObject contentJson1 = new JSONObject();
            contentJson1.put("color", fontColor1);
            contentJson1.put("content", "将于");
            JSONObject contentJson2 = new JSONObject();
            contentJson2.put("color", fontColor2);
            contentJson2.put("content", days + "天");
            JSONObject contentJson3 = new JSONObject();
            contentJson3.put("color", fontColor1);
            contentJson3.put("content", "后脱离邀请关系");
            array.add(contentJson1);
            array.add(contentJson2);
            array.add(contentJson3);
         }
         object.put("type", type);
         object.put("state", state);
         object.put("recentMsg", array);
         ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo();
         if (threeSaleExtraInfo != null) {
            if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) {
               nickName = threeSaleExtraInfo.getNickname();
            }
         }
         object.put("nickName", nickName);
         resultArray.add(object);
      }
      result.put("count", count);
      result.put("result_list", resultArray);
      return result;
   }
   @Override
   public List<ThreeSale> listByWorkerId(Long workerId) {
      return threeSaleMapper.listByWorkerId(workerId);
   }
   
   
   @Override
   public int getSuccessRelationshipNum(Long uid) {
      return threeSaleMapper.getSuccessRelationshipNum(uid);
   }
   @Override
   @Transactional
   public void bindRelationshipByInviteCode(UserInfo invitee, UserInfo inviter) throws ThreeSaleException {
      if (invitee == null || inviter == null)
         throw new ThreeSaleException(1, "用户信息为空");
      // 获取有效的邀请关系
      ThreeSale threeSale =
            threeSaleMapper.getRelationshipByBossIdAndWorkerId(inviter.getId(), invitee.getId());
      if (threeSale != null) {
         // 有效关系--生效
         threeSale.setState(true);
         threeSale.setExpire(ThreeSale.EXPIRE_NORMAL);
         threeSale.setSucceedTime(java.lang.System.currentTimeMillis());
         threeSale.setUpdateTime(java.lang.System.currentTimeMillis());
         threeSaleMapper.updateByPrimaryKeySelective(threeSale);
      } else {
         // 新建立确定关系
         threeSale = new ThreeSale();
         threeSale.setBoss(inviter);
         threeSale.setWorker(invitee);
         threeSale.setState(true);
         threeSale.setExpire(ThreeSale.EXPIRE_NORMAL);
         threeSale.setSucceedTime(java.lang.System.currentTimeMillis());
         threeSale.setCreateTime(java.lang.System.currentTimeMillis());
         threeSale.setUpdateTime(java.lang.System.currentTimeMillis());
         threeSaleMapper.insertSelective(threeSale);
      }
   }
}