package com.hehenian.manager.modules.sys.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import com.hehenian.manager.commons.Pagination;
import com.hehenian.manager.modules.sys.dao.ModuleDao;
import com.hehenian.manager.modules.sys.model.Module;
import com.hehenian.manager.modules.sys.model.Resources;
@Repository("moduleDao")
public class ModuleDaoImpl implements ModuleDao, InitializingBean {
@Resource
protected NamedParameterJdbcTemplate userNameJdbcTemplate;
private Map<String,Module> moduleMap;
@Override
public int insertModule(Module module) {
String sql = "insert into Module(module,name,moduleDesc,createTime) values(?,?,?,now())";
int ret=userNameJdbcTemplate.getJdbcOperations().update(
sql,
new Object[] { module.getModule(), module.getName(),
module.getModuleDesc() });
//重新加载所有模块
reload();
return ret;
}
@Override
public int updateModule(Module module) {
StringBuilder sql=new StringBuilder("update Module set ");
List<Object> args=new ArrayList<Object>();
if(StringUtils.isNotBlank(module.getModule())){
sql.append(" module=? ,");
args.add(module.getModule());
}
if(StringUtils.isNotBlank(module.getName())){
sql.append(" name=? ,");
args.add(module.getName());
}
if(StringUtils.isNotBlank(module.getModuleDesc())){
sql.append(" moduleDesc=?,");
args.add(module.getModuleDesc());
}
sql.setLength(sql.length()-1);
sql.append(" where id=").append(module.getId());
int ret=userNameJdbcTemplate.getJdbcOperations().update(sql.toString(), args.toArray());
//重新加载所有模块
reload();
return ret;
}
@Override
public int deleteModule(int id) {
String sql = "delete from Module where id = ?";
int ret=userNameJdbcTemplate.getJdbcOperations().update(sql,
new Object[] { id });
//重新加载
reload();
return ret;
}
@Override
public List<Module> getUserModules(int userId) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r.id RID,r.name NAME,r.resourceStr RESOURCESTR,r.module MODULE,r.icon ICON FROM Resources r ")
.append("INNER JOIN AuthorityResources ar ")
.append("ON r.id=ar.resourceId and r.resoucetype='menu' ")
.append("INNER JOIN RolesAuthority ra ")
.append("ON ra.authorityId=ar.authorityId ")
.append("INNER JOIN UsersRoles ur ")
.append("ON ra.roleId=ur.roleId WHERE userId=?");
List<Map<String,Object>> datas=userNameJdbcTemplate.getJdbcOperations().queryForList(sql.toString(), userId);
Map<String,Module> userModules=new HashMap<String,Module>();
Map<Integer,Boolean> resourcesMap=new HashMap<Integer,Boolean>();
for(Map<String,Object> data:datas){
String module=data.get("MODULE").toString();
Module m=userModules.get(module);
if(m==null){
m=moduleMap.get(module);
if(m==null){
return new ArrayList<Module>();
}
try {
m=m.clone();
userModules.put(module, m);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
if(m==null){
continue;
}
if("SYS".equals(module)){
m.setOrder(-1);
}
Integer resourceId=Integer.parseInt(data.get("RID").toString());
if(resourcesMap.get(resourceId)!=null){
continue;
}
resourcesMap.put(resourceId, true);
Resources r=new Resources();
r.setId(resourceId);
r.setName(data.get("NAME").toString());
String url=data.get("RESOURCESTR").toString();
r.setResourceStr(url);
r.setModule(module);
r.setIcon(data.get("ICON").toString());
if("/menuAdmin/userAdmin.html".equals(url)){
r.setOrder(1);
}else if("/menuAdmin/rolesIndex.html".equals(url)){
r.setOrder(2);
}else if("/authority/authorityIndex.html".equals(url)){
r.setOrder(3);
}else{
r.setOrder(999);
}
m.getResources().add(r);
}
return new ArrayList<Module>(userModules.values());
}
//
// @Resource
// public void setVerifyR0NameJdbcTemplate(
// NamedParameterJdbcTemplate verifyR0NameJdbcTemplate) {
// this.userNameJdbcTemplate = verifyR0NameJdbcTemplate;
// reload();
// }
@Override
public void afterPropertiesSet() throws Exception {
reload();
}
@Override
public Pagination<Module> getAllModules(Pagination<Module> page) {
page.setRows(new ArrayList<Module>(moduleMap.values()));
return page;
}
private void reload(){
if(moduleMap!=null){
moduleMap.clear();
}else{
moduleMap=new HashMap<String,Module>();
}
String sql="select id,module,name,moduleDesc from Module ";
List<Map<String,Object>> datas=userNameJdbcTemplate.getJdbcOperations().queryForList(sql);
for(Map<String,Object> data:datas){
Module module=new Module();
int id=Integer.parseInt(data.get("id").toString());
String moduleStr=data.get("module").toString();
module.setId(id);
module.setName(data.get("name").toString());
module.setModule(moduleStr);
Object desc=data.get("moduleDesc");
module.setModuleDesc(desc==null?"":desc.toString());
moduleMap.put(moduleStr, module);
}
}
@Override
public List<Module> getAllModules() {
return new ArrayList<Module>(moduleMap.values());
}
@Override
public Module getModuleById(int moduleId) {
String sql = "select id,module,name,moduleDesc,createTime from Module where id=?";
return userNameJdbcTemplate.getJdbcOperations().queryForObject(sql,new Object[]{moduleId},new RowMapper<Module>(){
@Override
public Module mapRow(ResultSet rs, int arg1) throws SQLException {
Module module=new Module();
module.setId(rs.getInt("id"));
module.setModule(rs.getString("module"));
module.setName(rs.getString("name"));
module.setModuleDesc(rs.getString("moduleDesc"));
module.setCreateTime(rs.getDate("createTime"));
return module;
}
});
}
}