package com.ycsoft.report.component.system; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Component; import com.ycsoft.beans.system.SDataRightType; import com.ycsoft.beans.system.SOptr; import com.ycsoft.beans.system.SRole; import com.ycsoft.beans.system.SSubSystem; import com.ycsoft.business.dao.system.SDataRightTypeDao; import com.ycsoft.business.dao.system.SOptrDao; import com.ycsoft.business.dao.system.SOptrRoleDao; import com.ycsoft.business.dao.system.SResourceDao; import com.ycsoft.business.dao.system.SRoleDao; import com.ycsoft.business.dao.system.SSubSystemDao; import com.ycsoft.commons.abstracts.BaseComponent; import com.ycsoft.commons.exception.ReportException; import com.ycsoft.commons.helper.MD5; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.report.commons.ReportConstants; import com.ycsoft.report.commons.SystemConfig; import com.ycsoft.report.dao.config.QueryRepDao; import com.ycsoft.report.dao.keycon.QueryKeyValueDao; import com.ycsoft.report.dto.RepDataRight; import com.ycsoft.report.dto.RepResourceDto; import com.ycsoft.report.query.datarole.BaseDataControl; import com.ycsoft.report.query.datarole.DataRoleInit; import com.ycsoft.report.query.datarole.FuncType; import com.ycsoft.report.query.key.Impl.QueryKeyValue; import com.ycsoft.sysmanager.dto.system.SResourceDto; import com.ycsoft.sysmanager.dto.system.SRoleDto; /** * * 首页显示的管理器 * @author hh * @date Dec 29, 2009 4:02:49 PM */ @Component public class IndexComponent extends BaseComponent{ private SOptrDao sOptrDao ; private SResourceDao sResourceDao; private SRoleDao sRoleDao; private SSubSystemDao sSubSystemDao; private SOptrRoleDao sOptrRoleDao; private SDataRightTypeDao sDataRightTypeDao; private QueryKeyValueDao queryKeyValueDao; private DataRoleInit dataControl; private QueryRepDao queryRepDao; public SOptr queryOptrByloginname(String loginname) throws ReportException{ try { return queryRepDao.querySOptrByloginname(loginname); } catch (JDBCException e) { throw new ReportException(e,e.getSQL()); } } public void setQueryRepDao(QueryRepDao queryRepDao) { this.queryRepDao = queryRepDao; } /** * 报表数据权限初始化 * @param optr * @param session * @throws ReportException */ public void initDataRole(SOptr optr,HttpSession session) throws ReportException{ session.setAttribute(ReportConstants.SESSION_DATA_ROLE, dataControl.setDataRole(optr)); } /** * 获取数据权限限制内容 */ protected String queryReportDataRightCon(String optrId,String dataRightType)throws ReportException { try { List<SRole> roleList = sRoleDao.queryByOptrId(optrId,dataRightType); for (SRole role : roleList) { if (StringHelper.isNotEmpty(role.getData_right_level())) return null; else if (StringHelper.isNotEmpty(role.getRule_str())) { return role.getRule_str().replaceAll("\"", "'"); } } return null; } catch (JDBCException e) { throw new ReportException(e); } } public Map<String,RepDataRight> queryRepRoleDataMap(SOptr optr)throws Exception{ Map<String,RepDataRight> map=new HashMap<String,RepDataRight>(); for(String datarighttype:SystemConfig.getDataRightTypeList()){ String sql=queryReportDataRightCon(optr.getOptr_id(),datarighttype); if(StringHelper.isNotEmpty(sql)){ RepDataRight o=new RepDataRight(); o.setKey(datarighttype); o.setSql(sql); SDataRightType dataRight = sDataRightTypeDao.findByKey(datarighttype); String datavaluesql="select "+dataRight.getResult_column()+","+dataRight.getSelect_column() +" from "+dataRight.getTable_name()+" where "+sql; String datavalue=""; List<QueryKeyValue> list=queryKeyValueDao.findList(ReportConstants.DATABASE_SYSTEM, datavaluesql); for(int i=0;i<list.size();i++){ QueryKeyValue value=list.get(i); datavalue=datavalue+(i==0?"":"','")+ value.getId(); } o.setValue(datavalue); map.put(datarighttype, o); } } return map; } /** * 查询所有子系统定义信息 * @return * @throws Exception */ public List<SSubSystem> queryAllSubSystem(SOptr optr) throws Exception { return sSubSystemDao.queryAllSubSystem(optr); } public List<SRoleDto> getSubSystemByOptrId(String optrId) throws Exception { List<SRoleDto> list = sOptrRoleDao.queryOptrRole(optrId); if (list.size()>0) { for (int i = list.size() - 1; i >= 0; i--) { boolean ck = false; if (StringHelper.isEmpty(list.get(i).getSub_system_id())) { ck = true; } if (ck) { list.remove(i); } } }else{ throw new Exception("操作员的配置存在问题,角色中不存在子系统!"); } return list; } /** * 修改操作员密码 */ public boolean updateOptrData(String optrId,String password,String subSystemId) throws Exception{ SOptr soptr = new SOptr(); soptr.setOptr_id(optrId); int sues = -1; if (StringHelper.isNotEmpty(password)) { soptr.setPassword(MD5.EncodePassword(password)); } if (StringHelper.isNotEmpty(subSystemId)) { soptr.setLogin_sys_id(subSystemId); } sues = sOptrDao.update(soptr)[0]; if (sues>=0 || sues == -2){ return true; } return false ; } /** * 检查指定的操作员是否存在 * @param optr */ public SOptr checkOptrExists(SOptr optr)throws Exception{ if (null == optr) { return null; } SOptr _o = sOptrDao.isExists(optr.getLogin_name(), optr.getPassword()); if (null == _o) { return null; } return _o; } /** * 根据子系统id 返回对应的url,找不到返回空字符 * @param sysId * @return */ public SSubSystem querySubSystem(String sysId) throws JDBCException { return sSubSystemDao.findByKey(sysId); } /** * 取一个操作员的报表权限 * @param optr * @return * @throws ReportException */ public Integer queryRepRole(SOptr optr) throws ReportException{ try { Integer rep_role = null; SRole srole = sRoleDao.queryRepByOptrId( optr.getOptr_id()); if(optr.getLogin_name().equals("admin")) rep_role=0; else if(srole!=null) rep_role=SystemConfig.getRepDataLevel().get(srole.getData_right_level()).getItem_idx(); else rep_role=4; return rep_role; } catch (JDBCException e) { throw new ReportException(e); } } /** * 获取一个操作员对应system_key_map * @param optr * @return */ public Map<String, String> queryRepOptrSystemKeyMap(SOptr optr){ Map<String, String> systemmap = new HashMap<String, String>(); systemmap.put("#webareaid#", optr.getArea_id()); systemmap.put("#webcountyid#", optr.getCounty_id()); systemmap.put("#webdeptid#", optr.getDept_id()); systemmap.put("#weboptrid#", optr.getOptr_id()); return systemmap; } /** * 加载报表专用的资源菜单 * @param optr * @param sub_system_id * @return * @throws Exception */ public List<RepResourceDto> loadRepTabResource(SOptr optr,String sub_system_id)throws Exception{ List<RepResourceDto> list=queryRepDao.queryRepResources(optr,sub_system_id); if(BaseDataControl.getRole().hasFunc(FuncType.EDITREP)) for(RepResourceDto dto:list) dto.setRes_name(dto.getRes_name()+"_"+dto.getSort_num()); return list; } /** * 加载资源菜单 * @throws Exception */ public List<SResourceDto> loadTabResource(SOptr optr,String sub_system_id)throws Exception{ List<SResourceDto> list=sResourceDao.queryResourcesByOptr(optr,sub_system_id); if(BaseDataControl.getRole().hasFunc(FuncType.EDITREP)) for(SResourceDto dto:list) dto.setRes_name(dto.getRes_name()+"_"+dto.getSort_num()); return list; } public List<RepResourceDto> loadTabResourceID(SOptr optr,String sub_system_id)throws Exception{ List<RepResourceDto> list=queryRepDao.queryRepResources(optr,sub_system_id); for(RepResourceDto dto:list) dto.setRes_name(dto.getRes_name()+'('+dto.getRes_id()+')'); return list ; } public List<SResourceDto> queryResourcesByResType(String optrId,String subSystemId,String resType) throws Exception { return queryRepDao.queryResourcesByResType(optrId, subSystemId, resType); } public SOptrDao getSOptrDao() { return sOptrDao; } public void setSOptrDao(SOptrDao optrDao) { sOptrDao = optrDao; } public SResourceDao getSResourceDao() { return sResourceDao; } public void setSResourceDao(SResourceDao resourceDao) { sResourceDao = resourceDao; } public SRoleDao getSRoleDao() { return sRoleDao; } public void setSRoleDao(SRoleDao roleDao) { sRoleDao = roleDao; } public void setSSubSystemDao(SSubSystemDao subSystemDao) { sSubSystemDao = subSystemDao; } public void setQueryKeyValueDao(QueryKeyValueDao queryKeyValueDao) { this.queryKeyValueDao = queryKeyValueDao; } public void setSDataRightTypeDao(SDataRightTypeDao dataRightTypeDao) { sDataRightTypeDao = dataRightTypeDao; } public SOptrRoleDao getSOptrRoleDao() { return sOptrRoleDao; } public void setSOptrRoleDao(SOptrRoleDao optrRoleDao) { sOptrRoleDao = optrRoleDao; } public DataRoleInit getDataControl() { return dataControl; } public void setDataControl(DataRoleInit dataControl) { this.dataControl = dataControl; } }