package com.ycsoft.sysmanager.component.system; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.beans.BeanUtils; import com.ycsoft.beans.system.SCounty; import com.ycsoft.beans.system.SDept; import com.ycsoft.beans.system.SItemvalue; import com.ycsoft.beans.system.SOptr; import com.ycsoft.beans.system.SOptrResource; import com.ycsoft.beans.system.SOptrRole; import com.ycsoft.beans.system.SRole; import com.ycsoft.beans.system.SRoleResource; import com.ycsoft.beans.system.SSysChange; import com.ycsoft.business.component.config.MemoryComponent; import com.ycsoft.business.dao.system.SCountyDao; import com.ycsoft.business.dao.system.SDeptDao; import com.ycsoft.business.dao.system.SRoleResourceDao; import com.ycsoft.commons.abstracts.BaseComponent; import com.ycsoft.commons.constants.DictKey; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SysChangeType; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.exception.ComponentException; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.DateHelper; import com.ycsoft.commons.helper.MD5; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.commons.store.MemoryDict; import com.ycsoft.commons.tree.TreeBuilder; import com.ycsoft.commons.tree.TreeNode; import com.ycsoft.daos.helper.BeanHelper; import com.ycsoft.sysmanager.dto.system.SOptrDto; /** * 系统管理基础组件(报表会调用) * @author sheng * Oct 19, 2010 9:29:00 PM */ public class BaseSystemComponent extends BaseComponent{ protected SCountyDao sCountyDao; protected SRoleResourceDao sRoleResourceDao; protected SDeptDao sDeptDao; protected MemoryComponent memoryComponent; /** * 保存角色资源表 * @param sRoleResourceDao */ public boolean saveRoleResource(String[] roleIds,String res_id) throws Exception{ return sRoleResourceDao.saveRoleResource(roleIds, res_id); } /** * 删除角色资源表 * @param sRoleResourceDao */ public boolean removeRoleResource(String res_id) throws Exception{ return sRoleResourceDao.removeRoleResource(res_id); } /** * 报表资源分配角色 */ public List<TreeNode> getRepRole(String resource_id) throws Exception { List<SRole> roles = sRoleDao.queryRoleBySystemId("7"); List<SRoleResource> roles2= sRoleResourceDao.getRoleResource(resource_id); List<TreeNode> rt = TreeBuilder.convertToNodes( roles, "role_id", "role_name"); //将县市对应的部门添加至县市的子节点中 for(int j=0;j < roles.size();j++){ rt.get(j).setLeaf( true ); rt.get(j).setChecked(false); for(SRoleResource o:roles2){ if (o.getRole_id().equals(rt.get(j).getId())){ rt.get(j).setChecked(true); break; } } } return rt; } /** * 菜单资源分配给角色 * @param resource_id */ public List<TreeNode> resource2Role(String resource_id) throws Exception { List<SItemvalue> areas = MemoryDict.getDicts(DictKey.AREA); List<SCounty> countys = sCountyDao.findAll(); List<SRole> roles = sRoleDao.findAll(); List<SRoleResource> roles2= sRoleResourceDao.getRoleResource(resource_id); List<TreeNode> at = TreeBuilder.convertToNodes( areas, "item_value", "item_name"); List<TreeNode> ct = TreeBuilder.convertToNodes( countys, "county_id", "county_name"); List<TreeNode> rt = TreeBuilder.convertToNodes( roles, "role_id", "role_name"); //将县市对应的部门添加至县市的子节点中 for(int i=0;i< countys.size() ;i++){ for(int j=0;j < roles.size();j++){ if(countys.get(i).getCounty_id().equals( roles.get(j).getCounty_id())){ rt.get(j).setLeaf( true ); rt.get(j).setChecked(false); for(SRoleResource o:roles2){ if (o.getRole_id().equals(rt.get(j).getId())){ rt.get(j).setChecked(true); break; } } ct.get(i).setChecked(false); ct.get(i).getChildren().add( rt.get(j)); } } if(ct.get(i).getChildren().size() == 0){ ct.get(i).setLeaf( false); ct.get(i).setChecked(false); ct.get(i).setIs_leaf( SystemConstants.BOOLEAN_FALSE ); } } //将区域对应的县市添加至区域的子节点中 for(int i=0;i< areas.size() ;i++){ for(int j=0;j < countys.size();j++){ if(areas.get(i).getItem_value().equals( countys.get(j).getArea_id())){ at.get(i).getChildren().add( ct.get(j)); at.get(i).setChecked(false); } } if(ct.get(i).getChildren().size() == 0){ ct.get(i).setLeaf( false); ct.get(i).setChecked(false); ct.get(i).setIs_leaf( SystemConstants.BOOLEAN_FALSE ); } } return at; } /** * 验证操作员是否已经存在 */ protected boolean validLoginName(String login_name) throws Exception { return !sOptrDao.isOptrToken(login_name); } protected SOptrDto setSaveOptrInfo(SOptrDto newOptr, SOptr currentOptr) throws Exception { SOptrDto optr = new SOptrDto(); BeanUtils.copyProperties(newOptr, optr); SDept dept = new SDept(); if (StringHelper.isNotEmpty(optr.getDept_id())) { dept = sDeptDao.findByKey(optr.getDept_id()); } if (dept != null) { optr.setCounty_id(dept.getCounty_id()); optr.setOld_county_id(dept.getCounty_id()); optr.setArea_id(dept.getArea_id()); } else { throw new ComponentException("该部门不允许建操作员!"); } if (!validLoginName(optr.getLogin_name())) { throw new ComponentException("工号重复!"); } optr.setPassword(MD5.EncodePassword(optr.getPassword())); optr.setOptr_id(sOptrDao.findSequence().toString()); optr.setCreate_time(DateHelper.now()); optr.setStatus(StatusConstants.ACTIVE); optr.setCreator(currentOptr.getLogin_name()); //复制操作员默认登录系统 if(StringHelper.isNotEmpty(newOptr.getCopy_optr_id())){ SOptr copyOptr = sOptrDao.findByKey(newOptr.getCopy_optr_id()); optr.setLogin_sys_id(copyOptr.getLogin_sys_id()); } return optr; } /** * 记录新增操作员异动 * @param doneCode * @param newOptr 前台传值 操作员 * @param saveOptr 新建保存操作员 * @param createOptrId 当前操作员 * @param optrRoleList 新建操作员权限 * @param optrResourceList 新建操作员资源 * @throws Exception */ protected void createSaveOptrChange(int doneCode, SOptrDto newOptr, SOptr saveOptr, String createOptrId, List<SOptrRole> optrRoleList, List<SOptrResource> optrResourceList) throws Exception { Date createTime = new Date(); List<SSysChange> changes = new ArrayList<SSysChange>(); if(newOptr != null){ SSysChange optrChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(), doneCode, saveOptr.getOptr_id(), saveOptr.getOptr_name(), "新增操作员", BeanHelper.beanchange(null, newOptr), createOptrId, createTime); changes.add(optrChange); } // if(saveOptr != null){ // //操作成功刷新数据字典 // List<SItemvalue> datalist = new ArrayList<SItemvalue>(); // SItemvalue val = new SItemvalue(saveOptr.getOptr_name(), saveOptr.getOptr_id()); // val.setItem_key(DictKey.OPTR.toString()); // datalist.add(val); // // MemoryDict.addData(datalist ); // } memoryComponent.addDictSignal(DictKey.OPTR.toString()); if (optrRoleList != null && optrRoleList.size() > 0){ String listchange = BeanHelper.listchange(null,optrRoleList,"role_name",null).replaceFirst("role_name", "role_id"); SSysChange roleChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(), doneCode, saveOptr.getOptr_id(), saveOptr.getOptr_name(), "操作员管理角色清单", listchange, createOptrId, createTime); changes.add(roleChange); } if(optrResourceList!=null && optrResourceList.size() > 0 ){ Map<String, List<SOptrResource>> newOptrResMap = CollectionHelper.converToMap(optrResourceList, "more_or_less"); List<SOptrResource> newAddList = newOptrResMap.get("1"); if(newAddList != null){ String listchange = BeanHelper.listchange(null, newAddList, "res_name", null); if(StringHelper.isNotEmpty(listchange)){ SSysChange resChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(),doneCode, saveOptr.getOptr_id(), saveOptr.getOptr_name(), "操作员管理授予菜单资源", listchange.replaceFirst("res_name", "res_id"),createOptrId, createTime); changes.add(resChange); } } List<SOptrResource> newRemoveList = newOptrResMap.get("0"); if(newRemoveList != null){ String listchange = BeanHelper.listchange(null, newRemoveList, "res_name", null); if(StringHelper.isNotEmpty(listchange)){ SSysChange resChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(),doneCode, saveOptr.getOptr_id(), saveOptr.getOptr_name(), "操作员管理禁用菜单资源", listchange.replaceFirst("res_name", "res_id"),createOptrId, createTime); changes.add(resChange); } } } if(changes.size() > 0) sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()])); } /** * 记录修改操作员异动 * <p>若操作员SOptr信息没变更,oldOptr和newOptr 都传新操作员对象 * @param doneCode * @param oldOptr 旧操作员 * @param newOptr 新操作员 * @param createOptrId 当前操作员ID * @param oldOptrRoleList 旧操作员权限 * @param newRoleList 新操作员权限 * @param oldOptrResourceList 旧操作员资源 * @param newOptrResourceList 新操作员资源 * @throws Exception */ protected void createUpdateOptrChange(int doneCode,SOptr oldOptr, SOptr newOptr,String createOptrId, List<?> oldOptrRoleList, List<?> newRoleList, List<SOptrResource> oldOptrResourceList,List<SOptrResource> newOptrResourceList) throws Exception { Date createTime = new Date(); List<SSysChange> changes = new ArrayList<SSysChange>(); if(oldOptrRoleList == null && newRoleList != null){ oldOptrRoleList = new ArrayList(); }else if(oldOptrRoleList != null && newRoleList == null){ newRoleList = new ArrayList(); } if(oldOptrRoleList != null && newRoleList != null){ String listchange = BeanHelper.listchange( CollectionHelper.converValueToList(oldOptrRoleList, "role_name"), CollectionHelper.converValueToList(newRoleList, "role_name"), null, null); if(StringHelper.isNotEmpty(listchange)){ SSysChange roleChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(), doneCode, newOptr.getOptr_id(), newOptr.getOptr_name(), "操作员管理角色清单", "role_id:"+listchange, createOptrId, createTime); changes.add(roleChange); } } if(oldOptr != null && newOptr != null){ String beanchange = BeanHelper.beanchange(oldOptr,newOptr); if(StringHelper.isNotEmpty(beanchange)){ SSysChange optrChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(), doneCode, newOptr.getOptr_id(), newOptr.getOptr_name(), "操作员基本资料修改", beanchange, createOptrId, createTime); changes.add(optrChange); } } if(oldOptrResourceList == null && newOptrResourceList != null){ oldOptrResourceList = new ArrayList<SOptrResource>(); }else if(oldOptrResourceList != null && newOptrResourceList == null){ newOptrResourceList = new ArrayList<SOptrResource>(); } if(oldOptrResourceList!=null && newOptrResourceList != null ){ Map<String, List<SOptrResource>> newOptrResMap = CollectionHelper.converToMap(newOptrResourceList, "more_or_less"); Map<String, List<SOptrResource>> oldOptrResMap = CollectionHelper.converToMap(oldOptrResourceList, "more_or_less"); List<SOptrResource> newAddList = newOptrResMap.get("1"); List<SOptrResource> oldAddList = oldOptrResMap.get("1"); if(newAddList != null || oldAddList != null){ String listchange = BeanHelper.listchange(oldAddList, newAddList, "res_name", null); if(StringHelper.isNotEmpty(listchange)){ SSysChange resChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(),doneCode, newOptr.getOptr_id(), newOptr.getOptr_name(), "操作员管理授予菜单资源", listchange.replaceFirst("res_name", "res_id"),createOptrId, createTime); changes.add(resChange); } } List<SOptrResource> newRemoveList = newOptrResMap.get("0"); List<SOptrResource> oldRemoveList = oldOptrResMap.get("0"); if(newRemoveList != null || oldRemoveList != null){ String listchange = BeanHelper.listchange(oldRemoveList, newRemoveList, "res_name", null); if(StringHelper.isNotEmpty(listchange)){ SSysChange resChange = new SSysChange(SysChangeType.OPTRCONFIG.toString(),doneCode, newOptr.getOptr_id(), newOptr.getOptr_name(), "操作员管理禁用菜单资源", listchange.replaceFirst("res_name", "res_id"),createOptrId, createTime); changes.add(resChange); } } } if(changes.size() > 0) sSysChangeDao.save(changes.toArray(new SSysChange[changes.size()])); } public void setSCountyDao(SCountyDao countyDao) { sCountyDao = countyDao; } public void setSRoleResourceDao(SRoleResourceDao roleResourceDao) { sRoleResourceDao = roleResourceDao; } public void setSDeptDao(SDeptDao deptDao) { sDeptDao = deptDao; } /** * @param memoryComponent the memoryComponent to set */ public void setMemoryComponent(MemoryComponent memoryComponent) { this.memoryComponent = memoryComponent; } }