Package com.taobao.zeus.store.mysql

Source Code of com.taobao.zeus.store.mysql.MysqlFollowManager

package com.taobao.zeus.store.mysql;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.taobao.zeus.model.ZeusFollow;
import com.taobao.zeus.store.FollowManager;
import com.taobao.zeus.store.GroupBean;
import com.taobao.zeus.store.GroupManager;
import com.taobao.zeus.store.JobBean;
import com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence;
import com.taobao.zeus.store.mysql.persistence.ZeusUser;
import com.taobao.zeus.store.mysql.tool.PersistenceAndBeanConvert;
@SuppressWarnings("unchecked")
public class MysqlFollowManager extends HibernateDaoSupport implements FollowManager{

 
  @Override
  public List<ZeusFollow> findAllTypeFollows(final String uid) {
    List<ZeusFollowPersistence> list= (List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where uid=?");
        query.setParameter(0, uid);
        return query.list();
      }
    });
   
    List<ZeusFollow> result=new ArrayList<ZeusFollow>();
    if(list!=null){
      for(ZeusFollowPersistence persist:list){
        result.add(PersistenceAndBeanConvert.convert(persist));
      }
    }
    return result;
  }

  @Override
  public List<ZeusFollow> findFollowedGroups(final String uid) {
    List<ZeusFollowPersistence> list=  (List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
     
      @Override
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where type="+ZeusFollow.GroupType+" uid=?");
        query.setParameter(0, uid);
        return query.list();
      }
    });
    List<ZeusFollow> result=new ArrayList<ZeusFollow>();
    if(list!=null){
      for(ZeusFollowPersistence persist:list){
        result.add(PersistenceAndBeanConvert.convert(persist));
      }
    }
    return result;
  }

  @Override
  public List<ZeusFollow> findFollowedJobs(final String uid) {
    List<ZeusFollowPersistence> list=  (List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
     
      @Override
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where type="+ZeusFollow.JobType+" and uid=?");
        query.setParameter(0, uid);
        return query.list();
      }
    });
    List<ZeusFollow> result=new ArrayList<ZeusFollow>();
    if(list!=null){
      for(ZeusFollowPersistence persist:list){
        result.add(PersistenceAndBeanConvert.convert(persist));
      }
    }
    return result;
  }

  @Override
  public List<ZeusFollow> findJobFollowers(final String jobId) {
    List<ZeusFollowPersistence> list=  (List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where type="+ZeusFollow.JobType+" and targetId=?");
        query.setParameter(0, Long.valueOf(jobId));
        return query.list();
      }
    });
    List<ZeusFollow> result=new ArrayList<ZeusFollow>();
    if(list!=null){
      for(ZeusFollowPersistence persist:list){
        result.add(PersistenceAndBeanConvert.convert(persist));
      }
    }
    return result;
  }

  @Override
  public List<ZeusFollow> findGroupFollowers(final List<String> groupIds) {
    List<ZeusFollowPersistence> list= (List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        if(groupIds.isEmpty()){
          return Collections.emptyList();
        }
        List<Long> ids=new ArrayList<Long>();
        for(String group:groupIds){
          ids.add(Long.valueOf(group));
        }
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where type="+ZeusFollow.GroupType+" and targetId in (:list)");
        query.setParameterList("list", ids);
        return query.list();
      }
    });
    List<ZeusFollow> result=new ArrayList<ZeusFollow>();
    if(list!=null){
      for(ZeusFollowPersistence persist:list){
        result.add(PersistenceAndBeanConvert.convert(persist));
      }
    }
    return result;
  }

  @Override
  public ZeusFollow addFollow(final String uid, final Integer type, final String targetId) {
    List<ZeusFollowPersistence> list=(List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where uid=? and type=? and targetId=?");
        query.setParameter(0, uid);
        query.setParameter(1, type);
        query.setParameter(2, Long.valueOf(targetId));
        return query.list();
      }
    });
    if(list!=null && !list.isEmpty()){
      ZeusFollow zf=PersistenceAndBeanConvert.convert(list.get(0));
      return zf;
    }
    ZeusFollowPersistence persist=new ZeusFollowPersistence();
    persist.setGmtCreate(new Date());
    persist.setGmtModified(new Date());
    persist.setTargetId(Long.valueOf(targetId));
    persist.setType(type);
    persist.setUid(uid);
    getHibernateTemplate().save(persist);
   
    return PersistenceAndBeanConvert.convert(persist);
  }

  @Override
  public void deleteFollow(final String uid, final Integer type, final String targetId) {
    List<ZeusFollowPersistence> list=(List<ZeusFollowPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusFollowPersistence where uid=? and type=? and targetId=?");
        query.setParameter(0, uid);
        query.setParameter(1, type);
        query.setParameter(2, Long.valueOf(targetId));
        return query.list();
      }
    });
    if(list!=null && !list.isEmpty()){
      for(ZeusFollowPersistence persist:list){
        getHibernateTemplate().delete(persist);
      }
    }
  }
  @Autowired
  @Qualifier("groupManager")
  private GroupManager groupManager;
  @Override
  public List<String> findActualJobFollowers(String jobId) {
    List<ZeusFollow> jobFollows=findJobFollowers(jobId);
    JobBean jobBean=groupManager.getUpstreamJobBean(jobId);
   
    List<String> groupIds=new ArrayList<String>();
    GroupBean gb=jobBean.getGroupBean();
    while(gb!=null){
      groupIds.add(gb.getGroupDescriptor().getId());
      gb=gb.getParentGroupBean();
    }
    List<ZeusFollow> groupFollows=findGroupFollowers(groupIds);
   
    List<String> follows=new ArrayList<String>();
    //任务创建人自动纳入消息通知人员名单
    follows.add(jobBean.getJobDescriptor().getOwner());
    for(ZeusFollow zf:jobFollows){
      if(!follows.contains(zf.getUid())){
        follows.add(zf.getUid());
      }
    }
    for(ZeusFollow zf:groupFollows){
      if(!follows.contains(zf.getUid())){
        follows.add(zf.getUid());
      }
    }
    return follows;
  }

}
TOP

Related Classes of com.taobao.zeus.store.mysql.MysqlFollowManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.