Package com.github.diamond.web.service

Source Code of com.github.diamond.web.service.ProjectService$UserRowMapper

package com.github.diamond.web.service;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.github.diamond.web.model.Project;
import com.github.diamond.web.model.User;

/**
* Create on @2013-7-18 @下午10:51:27
* @author melin
*/
@Service
public class ProjectService {
  @Autowired
  private JdbcTemplate jdbcTemplate;
 
  @Autowired
  private ModuleService moduleService;
 
  @Autowired
  private ConfigService configService;
 
  public List<Project> queryProjects(User user, int offset, int limit) {
    String sql = "SELECT b.ID, b.PROJ_CODE, b.PROJ_NAME, a.USER_NAME, b.OWNER_ID FROM CONF_USER a, CONF_PROJECT b " +
        "WHERE a.ID=b.OWNER_ID AND b.DELETE_FLAG = 0 ";
   
    if(!"admin".equals(user.getUserCode())) {
      sql = sql + " AND b.OWNER_ID = ? ORDER BY b.id asc limit ?,?";
        return jdbcTemplate.query(sql, new ProjectRowMapper(), user.getId(), offset, limit);
    } else
      sql = sql + " ORDER BY b.id asc limit ?,?";
      return jdbcTemplate.query(sql, new ProjectRowMapper(), offset, limit);
  }
 
  public Long queryProjectCount(User user) {
    String sql = "SELECT count(*) FROM CONF_USER a, CONF_PROJECT b " +
        "WHERE a.ID=b.OWNER_ID AND b.DELETE_FLAG = 0 ";
   
    if(!"admin".equals(user.getUserCode())) {
      sql = sql + " AND b.OWNER_ID = ?";
        return jdbcTemplate.queryForObject(sql, Long.class, user.getId());
    } else
      return jdbcTemplate.queryForObject(sql, Long.class);
  }
 
  public long findUserId(String userCode) {
    try {
      String sql = "SELECT ID FROM CONF_USER WHERE USER_CODE = ?";
      long userid = jdbcTemplate.queryForObject(sql, new Object[]{userCode}, Long.class);
      return userid;
    } catch(DataAccessException e) {
      return 0;
    }
  }
 
  /**
   * 检查项目是否存在
   *
   * @param code
   * @return
   */
  public boolean checkProjectExist(String code) {
    String sql = "SELECT COUNT(*) FROM conf_project WHERE proj_code=?";
    int count = jdbcTemplate.queryForObject(sql, Integer.class, code);
    if(count == 1)
      return true;
         
    return false;
  }
 
  @Transactional
  public void saveProject(Project project, String copyCode, User user) {
    String sql = "SELECT MAX(id)+1 FROM conf_project";
    long projId = 1;
    try {
      projId = jdbcTemplate.queryForObject(sql, Long.class);
    } catch(NullPointerException e) {
      ;
    }
    sql = "insert into CONF_PROJECT (ID, PROJ_CODE, PROJ_NAME, OWNER_ID, CREATE_TIME) values (?, ?, ?, ?, ?)";
   
    jdbcTemplate.update(sql, projId, project.getCode(), project.getName(), project.getOwnerId(), new Date());
    this.saveUser(projId, project.getOwnerId(), "development", "test", "build", "production", "admin");
   
    if(StringUtils.isNotBlank(copyCode)) {
      copyProjConfig(projId, copyCode, user.getUserCode());
    }
  }
 
  @Transactional
  public void deleteProject(long id) {
    String sql = "update CONF_PROJECT set DELETE_FLAG = 1 where id = ?";
    jdbcTemplate.update(sql, id);
  }
 
  public List<User> queryUsers(long projectId, int offset, int limit) {
    String sql = "SELECT a.ID, a.USER_CODE, a.USER_NAME FROM conf_user a WHERE a.ID NOT IN " +
        "(SELECT b.USER_ID FROM conf_project_user b WHERE b.PROJ_ID=?) AND a.DELETE_FLAG=0 order by a.ID limit ?,?";
   
    return jdbcTemplate.query(sql, new UserRowMapper(), projectId, offset, limit);
  }
 
  public long queryUserCount(long projectId) {
    String sql = "SELECT count(*) FROM conf_user a WHERE a.ID NOT IN " +
        "(SELECT b.USER_ID FROM conf_project_user b WHERE b.PROJ_ID=?) AND a.DELETE_FLAG=0";
   
    return jdbcTemplate.queryForObject(sql, Long.class, projectId);
  }
 
  public List<User> queryProjUsers(long projectId) {
    String sql = "SELECT a.ID, a.USER_CODE, a.USER_NAME FROM conf_user a WHERE a.ID IN " +
        "(SELECT b.USER_ID FROM conf_project_user b WHERE b.PROJ_ID=?) AND a.DELETE_FLAG=0";
   
    List<User> users = jdbcTemplate.query(sql, new UserRowMapper(), projectId);
   
    for(User user : users) {
      sql = "SELECT c.ROLE_CODE FROM conf_project_user_role c WHERE c.PROJ_ID = ?  AND c.USER_ID = ?";
      List<String> roles = jdbcTemplate.queryForList(sql, String.class, projectId, user.getId());
      user.setRoles(roles);
    }
   
    return users;
  }
 
  public List<String> queryRoles(long projectId, long userId) {
    String sql = "SELECT a.ROLE_CODE FROM conf_project_user_role a WHERE a.PROJ_ID=? AND a.USER_ID=? ORDER BY a.ROLE_CODE";
    return jdbcTemplate.queryForList(sql, String.class, projectId, userId);
  }
 
  @Transactional
  public void saveUser(long projectId, long userId, String development, String test, String build, String production, String admin) {
    String sql = "insert into CONF_PROJECT_USER (PROJ_ID, USER_ID) values (?, ?)";
    jdbcTemplate.update(sql, projectId, userId);
   
    sql = "insert into CONF_PROJECT_USER_ROLE (PROJ_ID, USER_ID, ROLE_CODE) values (?, ?, ?)";
    if(StringUtils.isNotBlank(admin)) {
      jdbcTemplate.update(sql, projectId, userId, "admin");
      //如果拥有admin权限,自动添加development、test、build、production
      development = "development";
      test = "test";
      build = "build";
      production = "production";
    }
    if(StringUtils.isNotBlank(development)) {
      jdbcTemplate.update(sql, projectId, userId, "development");
    }
    if(StringUtils.isNotBlank(test)) {
      jdbcTemplate.update(sql, projectId, userId, "test");
    }
    if(StringUtils.isNotBlank(build)) {
      jdbcTemplate.update(sql, projectId, userId, "build");
    }
    if(StringUtils.isNotBlank(production)) {
      jdbcTemplate.update(sql, projectId, userId, "production");
    }
  }
 
  @Transactional
  public void deleteUser(long projectId, long userId) {
    String sql = "delete from CONF_PROJECT_USER_ROLE where PROJ_ID = ? and USER_ID = ?";
    jdbcTemplate.update(sql, projectId, userId);
    sql = "delete from CONF_PROJECT_USER where PROJ_ID = ? and USER_ID = ?";
    jdbcTemplate.update(sql, projectId, userId);
  }
 
  /**
   * 查询用户所拥有的项目
   *
   * @param userId
   */
  public List<Project> queryProjectForUser(User user, int offset, int limit) {
    if("admin".equals(user.getUserCode())) {
      String sql = "SELECT distinct b.ID, b.PROJ_CODE, b.PROJ_NAME FROM CONF_PROJECT_USER a, CONF_PROJECT b " +
          "WHERE a.PROJ_ID = b.ID AND b.DELETE_FLAG = 0 order by b.ID desc limit ?, ?";
      List<Project> projects = jdbcTemplate.query(sql, new RowMapper<Project>() {
 
        public Project mapRow(ResultSet rs, int rowNum) throws SQLException,
            DataAccessException {
          Project project = new Project();
          project.setId(rs.getLong(1));
          project.setCode(rs.getString(2));
          project.setName(rs.getString(3));
          return project;
        }
      }, offset, limit);
      return projects;
    } else {
      String sql = "SELECT distinct b.ID, b.PROJ_CODE, b.PROJ_NAME FROM CONF_PROJECT_USER a, CONF_PROJECT b " +
          "WHERE a.PROJ_ID = b.ID and a.USER_ID=? AND b.DELETE_FLAG = 0 order by b.ID desc limit ?, ?";
      List<Project> projects = jdbcTemplate.query(sql, new RowMapper<Project>() {
 
        public Project mapRow(ResultSet rs, int rowNum) throws SQLException,
            DataAccessException {
          Project project = new Project();
          project.setId(rs.getLong(1));
          project.setCode(rs.getString(2));
          project.setName(rs.getString(3));
          return project;
        }
      }, user.getId(), offset, limit);
      return projects;
    }
  }
 
  /**
   * 查询用户所拥有的项目数量
   *
   * @param userId
   */
  public long queryProjectCountForUser(User user) {
    if("admin".equals(user.getUserCode())) {
      String sql = "select count(*) from (SELECT distinct b.ID FROM CONF_PROJECT_USER a, CONF_PROJECT b " +
          "WHERE a.PROJ_ID = b.ID AND b.DELETE_FLAG = 0) as proj";
      return jdbcTemplate.queryForObject(sql, Long.class);
    } else {
      String sql = "select count(*) from (SELECT distinct b.ID FROM CONF_PROJECT_USER a, CONF_PROJECT b " +
          "WHERE a.PROJ_ID = b.ID and a.USER_ID=? AND b.DELETE_FLAG = 0) as proj";
      return jdbcTemplate.queryForObject(sql, Long.class, user.getId());
    }
  }
 
  /**
   * 增加配置项时,增加版本号
   * @param projectId
   */
  @Transactional
  public void updateVersion(Long projectId) {
    String sql = "update CONF_PROJECT set DEVELOPMENT_VERSION=DEVELOPMENT_VERSION+1,PRODUCTION_VERSION=PRODUCTION_VERSION+1," +
        "TEST_VERSION=TEST_VERSION+1 where ID=?";
    jdbcTemplate.update(sql, projectId);
  }
 
  /**
   * 增加配置项时,增加版本号
   * @param projectId
   */
  @Transactional
  public void updateVersion(Long projectId, String type) {
    if("development".equals(type)) {
      String sql = "update CONF_PROJECT set DEVELOPMENT_VERSION=DEVELOPMENT_VERSION+1 where ID=?";
      jdbcTemplate.update(sql, projectId);
    } else if("production".equals(type)) {
      String sql = "update CONF_PROJECT set PRODUCTION_VERSION=PRODUCTION_VERSION+1 where ID=?";
      jdbcTemplate.update(sql, projectId);
    } else if("test".equals(type)) {
      String sql = "update CONF_PROJECT set TEST_VERSION=TEST_VERSION+1 where ID=?";
      jdbcTemplate.update(sql, projectId);
    }
  }
 
  public   Map<String, Object> queryProject(Long projectId) {
    String sql = "select * from CONF_PROJECT where ID=?";
    return jdbcTemplate.queryForMap(sql, projectId);
  }
 
  private void copyProjConfig(long projId, String projCode, String userCode) {
    String sql = "SELECT b.MODULE_ID, b.MODULE_NAME FROM conf_project a, conf_project_module b "
        + "WHERE a.ID = b.PROJ_ID AND a.PROJ_CODE = ?";
    List<Map<String, Object>> modules = jdbcTemplate.queryForList(sql, projCode);
   
    for(Map<String, Object> module : modules) {
      long moduleId = moduleService.save(projId, (String)module.get("MODULE_NAME"));
      sql = "SELECT b.CONFIG_KEY, b.CONFIG_VALUE, b.CONFIG_DESC FROM conf_project a, conf_project_config b "
          + "WHERE a.ID = b.PROJECT_ID AND a.PROJ_CODE=? AND b.MODULE_ID = ?";
      List<Map<String, Object>> configs = jdbcTemplate.queryForList(sql, projCode, module.get("MODULE_ID"));
     
      for(Map<String, Object> conf : configs) {
        configService.insertConfig((String)conf.get("CONFIG_KEY"), (String)conf.get("CONFIG_VALUE"), (String)conf.get("CONFIG_DESC"),
            projId, moduleId, userCode);
      }
    }
  }
 
  private class ProjectRowMapper implements RowMapper<Project> {

    public Project mapRow(ResultSet rs, int rowNum) throws SQLException,
        DataAccessException {
      Project project = new Project();
      project.setId(rs.getLong(1));
      project.setCode(rs.getString(2));
      project.setName(rs.getString(3));
      project.setUserName(rs.getString(4));
      project.setOwnerId(rs.getLong(5));
      return project;
    }
  }
 
  private class UserRowMapper implements RowMapper<User> {

    public User mapRow(ResultSet rs, int rowNum) throws SQLException,
        DataAccessException {
      User user = new User();
      user.setId(rs.getLong(1));
      user.setUserCode(rs.getString(2));
      user.setUserName(rs.getString(3));
      return user;
    }
  }
}
TOP

Related Classes of com.github.diamond.web.service.ProjectService$UserRowMapper

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.