package com.jetsum.esale.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.jetsum.core.orm.entity.Page;
import com.jetsum.esale.dao.ModuleDao;
import com.jetsum.esale.entity.Module;
import com.jetsum.esale.service.ModuleService;
import com.jetsum.esale.service.RoleService;
@Component
@Transactional
public class ModuleServiceImpl implements ModuleService {
private ModuleDao moduleDao;
private RoleService roleService;
@Autowired
public void setModuleDao(ModuleDao moduleDao) {
this.moduleDao = moduleDao;
}
@Autowired
public void setRoleService(RoleService roleService) {
this.roleService = roleService;
}
@Override
public Module getModule(String id) {
return moduleDao.get(id);
}
@Override
public Page<Module> queryModuleByPage(Map<String, Object> map, int pageNo, int pageSize) {
Page<Module> page = new Page<Module>();
page.pageNo(pageNo).pageSize(pageSize).autoCount(true).orderBy("id");
return moduleDao.findPage(page, map);
}
@Override
public Page<Module> queryModuleByOrderPage(Map<String, Object> map, int pageNo, int pageSize,String orderBy,String order) {
Page<Module> page = new Page<Module>();
page.pageNo(pageNo).pageSize(pageSize).autoCount(true).orderBy(orderBy).setOrder(order);
return moduleDao.findPage(page, map);
}
@Override
public void saveOrUpdateModule(Module module) {
moduleDao.saveOrUpdate(module);
moduleDao.flush();
}
@Override
public void deleteModule(String id) {
moduleDao.delete(id);
moduleDao.flush();
}
@Override
public void deleteModuleByIds(String ids) {
moduleDao.batchExecute("delete Module where id in (?)", ids);
moduleDao.flush();
}
@Override
public void updateDataStatus(Module module, Integer dataStatus) {
moduleDao.updateDataStatus(module, dataStatus);
}
@Override
public void batchUpdateDataStatus(String ids, Integer dataStatus) {
moduleDao.batchUpdateDataStatus(ids, dataStatus);
}
@Override
public List<Module> getModuleTree(String tenantId, String parentId, Integer dataStatus, Integer display, Integer isIsvModule) {
List<Module> moduleList = this.getModuleByParentId(tenantId, parentId, dataStatus, display, isIsvModule);
for(Module module : moduleList){
module.setNodes(this.getModuleTree(tenantId, module.getId(), dataStatus, display, isIsvModule));
}
return moduleList;
}
@SuppressWarnings("unchecked")
@Override
public List<Module> getModuleByParentId(String tenantId, String parentId, Integer dataStatus, Integer alwaysDisplay, Integer isIsvModule) {
return moduleDao
.getSession()
.createQuery("from Module where tenantId=? and dataStatus=? and parentId=? and alwaysDisplay=? and isIsvModule=? order by sort")
.setParameter(0, tenantId).setParameter(1, dataStatus).setParameter(2, parentId).setParameter(3, alwaysDisplay).setParameter(4, isIsvModule).list();
}
@Override
public void updateModuleOrder(Module module) {
moduleDao.getSession().createQuery("update Module set sort=? where id=?").setParameter(0,module.getSort()).setParameter(1, module.getId()).executeUpdate();
}
@SuppressWarnings("unchecked")
@Override
public List<Module> getModuleTreeByRole(String tenantId, String parentId, Integer dataStatus, String display, String roleId) {
String sql = "select a.* from esale_tb_module as a join esale_tb_module_role as b on a.id = b.module_id where"
+ " b.role_id in("
+ roleId
+ ") and a.tenant_id='"
+ tenantId
+ "' and a.data_status='"
+ dataStatus
+ "' and a.parent_id='"
+ parentId
+ "' and a.always_display='"
+ display
+ "' order by a.sort";
List<Module> moduleList = moduleDao.getSession().createSQLQuery(sql).addEntity(Module.class).list();
if(moduleList!=null && moduleList.size()>0){
for(Module module : moduleList){
module.setNodes(getModuleTreeByRole(tenantId, module.getId(), dataStatus, display, roleId));
}
}
return moduleList;
}
@SuppressWarnings("unchecked")
@Override
public List<Module> getModuleByTenantId(String tenantId,
Integer dataStatus, String display) {
return moduleDao
.getSession()
.createQuery("from Module where tenantId=? and dataStatus=? and alwaysDisplay=? order by sort")
.setParameter(0, tenantId).setParameter(1, dataStatus).setParameter(2, display).list();
}
@Override
public List<Module> getModuleCheckedTree(String tenantId,
Integer dataStatus, Integer display, List<Module> roleModule, String parentId, Integer isIsvModule) {
List<Module> moduleList = this.getModuleByParentId(tenantId, parentId, dataStatus, display, isIsvModule);
for(Module module : moduleList){
for(Module moduleRole : roleModule){
if(module.getId().equals(moduleRole.getId())){
module.setIsChecked(true);
}
}
module.setNodes(this.getModuleCheckedTree(tenantId, dataStatus, display, roleModule, module.getId(), isIsvModule));
}
return moduleList;
}
}
package com.jetsum.esale.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jetsum.config.setting.SystemConfig;
import com.jetsum.core.web.AbstractControllerByTenant;
import com.jetsum.esale.entity.Module;
import com.jetsum.esale.entity.Role;
import com.jetsum.esale.service.ModuleService;
import com.jetsum.esale.service.RoleService;
import com.jetsum.util.json.JsonUtil;
@Controller
@RequestMapping(value="/role")
public class RoleController extends AbstractControllerByTenant {
private RoleService roleService;
@Autowired
public void setRoleService(RoleService roleService) {
this.roleService = roleService;
}
private ModuleService moduleService;
@Autowired
public void setModuleService(ModuleService moduleService) {
this.moduleService = moduleService;
}
@RequestMapping(value="/listRole")
public Map<String, Object> listRole(HttpServletRequest request) {
HttpSession session = request.getSession();
Map<String, Object> queryPar = setCurrentListReqUrl(request, session);//活动历史查询参数
Map<String, Object> queryMap = getQueryParameter(request);//获得当前查询参数
//设置查询条件
String page = setPage(request, queryPar);
String pagesize = setPageSize(request, queryPar);
String order = setOrder(request, queryPar);
String orderBy = setOrderBy(request, queryPar);
setQueryMap(request, queryPar, queryMap);//设置查询条件
setBaseQueryMap(request, queryMap);//设置基本查询条件
//附件查询参数在此设置
saveQueryPar(session, queryPar, queryMap, page, pagesize, order,orderBy);//保存本次查询参数
//查询并返回结果集
Map<String,Object> resultMap = new HashMap<String,Object>();
resultMap.putAll(queryMap);
resultMap.put("pageInfo", roleService.queryRoleByOrderPage(queryMap, Integer.parseInt(page), Integer.parseInt(pagesize), orderBy, order));
resultMap.put("queryOrder",order);
resultMap.put("queryOrderBy",orderBy);
return resultMap;
}
@Override
protected Map<String, String> getQueryParameterType() {
Map<String,String> map = new HashMap<String,String>();
return map;
}
@RequestMapping(value="/getRole")
public Map<String, Object> getRole(HttpServletRequest request,Role role) {
Map<String, Object> map = new HashMap<String, Object>();
if (StringUtils.isEmpty(role.getId())) {
map.put("role", new Role());
return map;
}
role = roleService.getRole(role.getId());
if (role == null) role = new Role();
map.put("role", role);
return map;
}
@RequestMapping(value="/editRole")
public Map<String, Object> editRole(HttpServletRequest request,Role role) {
Map<String, Object> map = new HashMap<String, Object>();
String tenantId = SystemConfig.getTenantId(request);
Integer dataStatus = SystemConfig.DATA_VAILD;
//所有模块树
List<Module> moduleTree = moduleService.getModuleTree(tenantId, "0", dataStatus, 1, 0);
map.put("moduleTree", JsonUtil.javaToJsonStr(moduleTree, "roles"));
if (StringUtils.isEmpty(role.getId())) {
map.put("role", new Role());
return map;
}
role = roleService.getRole(role.getId());
List<Module> roleModules = roleService.getRole(role.getId()).getModules();
List<Module> moduleAll = moduleService.getModuleCheckedTree(tenantId, dataStatus, 1, roleModules, "0", 0);
map.put("moduleTree", JsonUtil.javaToJsonStr(moduleAll, "roles"));
List<Module> modules = role.getModules();
StringBuffer sb = new StringBuffer();
for(Module md : modules){
sb.append(md.getId()).append(",");
}
map.put("checkedNodesId", sb.toString());
map.put("role", role);
return map;
}
@RequestMapping(value="/saveRole")
public String saveRole(HttpServletRequest request,Role role) {
String tenantId = SystemConfig.getTenantId(request);
if (StringUtils.isEmpty(role.getId())) {
role.setId(null);
}
String moduleIds = request.getParameter("checkedNodesId");
List<Module> modules = new ArrayList<Module>();
if(StringUtils.isNotEmpty(moduleIds)){
String[] mids = moduleIds.split(",");
for(int i=0; i<mids.length; i++){
Module md = new Module();
md.setId(mids[i]);
modules.add(md);
}
}
role.setModules(modules);
role.setTenantId(tenantId);
role.setDataStatus(SystemConfig.DATA_VAILD);
roleService.saveOrUpdateRole(role);
return "redirect:listRole.do";
}
@RequestMapping(value="/deleteRole")
public String deleteRole(HttpServletRequest request,Role role) {
Role propertyName = roleService.getRole(role.getId());
roleService.updateDataStatus(propertyName, SystemConfig.DATA_INVAILD);
return "redirect:listRole.do";
}
@RequestMapping(value="/deleteRoleByIds")
public String deleteRoleByIds(String ids) {
roleService.batchUpdateDataStatus(ids,SystemConfig.DATA_INVAILD);
return "redirect:listRole.do";
}
/**
* 根据角色ID获取角色的模块
* @param request
* @param roleId
* @return
*/
@RequestMapping(value="/getRoleModuleIsChecked")
@ResponseBody
public String getRoleModuleIsChecked(HttpServletRequest request, String roleId){
String tenantId = SystemConfig.getTenantId(request);
Integer dataStatus = SystemConfig.DATA_VAILD;
List<Module> roleModules = roleService.getRole(roleId).getModules();
List<Module> moduleAll = moduleService.getModuleCheckedTree(tenantId, dataStatus, 1, roleModules, "0", 0);
return JsonUtil.javaToJsonStr(moduleAll, "roles");
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/jetsum-tags.tld" prefix="jetsum" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<jetsum:override name="title">修改</jetsum:override>
<jetsum:override name="css">
<style type="text/css">
label.error {
float: none;
color: red;
padding-left: .5em;
}
</style>
</jetsum:override>
<jetsum:override name="script">
<script type="text/javascript" src="js/jquery.ztree-2.6.min.js"></script>
<script type="text/javascript">
$(function() {
$('#save').button().click(function() {
$('#RoleForm').submit();
});
$('#cancel').button().click(function() {
history.back();
});
$('#selectModule').button().click(function() {
$('#moduleTreeDiv').dialog({
height : 350,
widht : 350,
modal : true,
buttons: {
" 保存 ": function() {
saveRoleModule();
},
" 关闭 ": function() {
$(this).dialog( "close" );
}
}
});
});
});
//保存角色
function saveRoleModule(){
var idStr="";
$(zTreeObj.getCheckedNodes()).each(function(i){
idStr+=this.id;
if(i<zTreeObj.getCheckedNodes().length-1){
idStr+=",";
}
});
$("#checkedNodesId").val(idStr);
$('#moduleTreeDiv').dialog("close");
}
</script>
</jetsum:override>
<jetsum:override name="body">
<form id="RoleForm" action="saveRole.do" method="post">
<input type="hidden" id="id" name="id" value="${role.id}">
<table class="t2" width="100%">
<thead>
<tr>
<th colspan="2"><h2 align="center">编辑信息</h2></th>
</tr>
</thead>
<tbody>
<tr>
<th width="120">角色名称:</th>
<td>
<jetsum:input css="text" type="text" id="name" name="name" value="${role.name}" formId="RoleForm"></jetsum:input>
</td>
</tr>
<tr>
<th width="120">角色描述:</th>
<td>
<jetsum:input css="text" type="textarea" id="roleDescription" name="roleDescription" value="${role.roleDescription}" formId="RoleForm"></jetsum:input>
</td>
</tr>
<tr>
<th width="120">访问权限:</th>
<td>
<input type="button" id="selectModule" name="selectModule" value="设置权限" class="btn"/>
<input type="hidden" id="checkedNodesId" name="checkedNodesId" value="${checkedNodesId}"/>
<div id="moduleTreeDiv" title="选择权限" style="display: none;">
<jetsum:tree data="${moduleTree}" treeName="zTreeObj" panelId="moduleTree" treeNodeParentKey="parentId" nodesCol="nodes" rootPID="0" checkable="true" checkStyle="checkbox" checkedCol="isChecked">
<jetsum:treeCallBack>
</jetsum:treeCallBack>
</jetsum:tree>
</div>
</td>
</tr>
<tr>
<th width="120">角色状态:</th>
<td>
<c:choose>
<c:when test="${role.isState eq 0}">
<input type="radio" id="alwaysDisplay" name="alwaysDisplay" value="1"/>开启
<input type="radio" id="alwaysDisplay" name="alwaysDisplay" value="0" checked="checked"/>关闭
</c:when>
<c:otherwise>
<input type="radio" id="alwaysDisplay" name="alwaysDisplay" value="1" checked="checked"/>开启
<input type="radio" id="alwaysDisplay" name="alwaysDisplay" value="0"/>关闭
</c:otherwise>
</c:choose>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2" >
<input type="button" class="btn" id="save" value="保存">
<input type="button" class="btn" id="cancel" value="返回">
</td>
</tr>
</tfoot>
</table>
</form>
</jetsum:override>
<jsp:include page="/common/EditZtreev2page.jsp" />