package com.zheng.upms.rpc.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zheng.common.annotation.BaseService;
import com.zheng.common.base.BaseServiceImpl;
import com.zheng.upms.dao.mapper.UpmsPermissionMapper;
import com.zheng.upms.dao.mapper.UpmsSystemMapper;
import com.zheng.upms.dao.mapper.UpmsUserPermissionMapper;
import com.zheng.upms.dao.model.*;
import com.zheng.upms.rpc.api.UpmsApiService;
import com.zheng.upms.rpc.api.UpmsPermissionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* UpmsPermissionService实现
* Created by shuzheng on 2017/3/20.
*/
@Service
@Transactional
@BaseService
public class UpmsPermissionServiceImpl extends BaseServiceImpl<UpmsPermissionMapper, UpmsPermission, UpmsPermissionExample> implements UpmsPermissionService {
private static Logger _log = LoggerFactory.getLogger(UpmsPermissionServiceImpl.class);
@Autowired
UpmsSystemMapper upmsSystemMapper;
@Autowired
UpmsPermissionMapper upmsPermissionMapper;
@Autowired
UpmsApiService upmsApiService;
@Autowired
UpmsUserPermissionMapper upmsUserPermissionMapper;
@Override
public JSONArray getTreeByRoleId(Integer roleId) {
// 角色已有权限
List<UpmsRolePermission> rolePermissions = upmsApiService.selectUpmsRolePermisstionByUpmsRoleId(roleId);
JSONArray systems = new JSONArray();
// 系统
UpmsSystemExample upmsSystemExample = new UpmsSystemExample();
upmsSystemExample.createCriteria()
.andStatusEqualTo((byte) 1);
upmsSystemExample.setOrderByClause("orders asc");
List<UpmsSystem> upmsSystems = upmsSystemMapper.selectByExample(upmsSystemExample);
for (UpmsSystem upmsSystem : upmsSystems) {
JSONObject node = new JSONObject();
node.put("id", upmsSystem.getSystemId());
node.put("name", upmsSystem.getTitle());
node.put("nocheck", true);
node.put("open", true);
systems.add(node);
}
if (systems.size() > 0) {
for (Object system: systems) {
UpmsPermissionExample upmsPermissionExample = new UpmsPermissionExample();
upmsPermissionExample.createCriteria()
.andStatusEqualTo((byte) 1)
.andSystemIdEqualTo(((JSONObject) system).getIntValue("id"));
upmsPermissionExample.setOrderByClause("orders asc");
List<UpmsPermission> upmsPermissions = upmsPermissionMapper.selectByExample(upmsPermissionExample);
if (upmsPermissions.size() == 0) continue;
// 目录
JSONArray folders = new JSONArray();
for (UpmsPermission upmsPermission: upmsPermissions) {
if (upmsPermission.getPid().intValue() != 0 || upmsPermission.getType() != 1) continue;
JSONObject node = new JSONObject();
node.put("id", upmsPermission.getPermissionId());
node.put("name", upmsPermission.getName());
node.put("open", true);
for (UpmsRolePermission rolePermission : rolePermissions) {
if (rolePermission.getPermissionId().intValue() == upmsPermission.getPermissionId().intValue()) {
node.put("checked", true);
}
}
folders.add(node);
// 菜单
JSONArray menus = new JSONArray();
for (Object folder : folders) {
for (UpmsPermission upmsPermission2: upmsPermissions) {
if (upmsPermission2.getPid().intValue() != ((JSONObject) folder).getIntValue("id") || upmsPermission2.getType() != 2) continue;
JSONObject node2 = new JSONObject();
node2.put("id", upmsPermission2.getPermissionId());
node2.put("name", upmsPermission2.getName());
node2.put("open", true);
for (UpmsRolePermission rolePermission : rolePermissions) {
if (rolePermission.getPermissionId().intValue() == upmsPermission2.getPermissionId().intValue()) {
node2.put("checked", true);
}
}
menus.add(node2);
// 按钮
JSONArray buttons = new JSONArray();
for (Object menu : menus) {
for (UpmsPermission upmsPermission3: upmsPermissions) {
if (upmsPermission3.getPid().intValue() != ((JSONObject) menu).getIntValue("id") || upmsPermission3.getType() != 3) continue;
JSONObject node3 = new JSONObject();
node3.put("id", upmsPermission3.getPermissionId());
node3.put("name", upmsPermission3.getName());
node3.put("open", true);
for (UpmsRolePermission rolePermission : rolePermissions) {
if (rolePermission.getPermissionId().intValue() == upmsPermission3.getPermissionId().intValue()) {
node3.put("checked", true);
}
}
buttons.add(node3);
}
if (buttons.size() > 0) {
((JSONObject) menu).put("children", buttons);
buttons = new JSONArray();
}
}
}
if (menus.size() > 0) {
((JSONObject) folder).put("children", menus);
menus = new JSONArray();
}
}
}
if (folders.size() > 0) {
((JSONObject) system).put("children", folders);
}
}
}
return systems;
}
@Override
public JSONArray getTreeByUserId(Integer usereId, Byte type) {
// 角色权限
UpmsUserPermissionExample upmsUserPermissionExample = new UpmsUserPermissionExample();
upmsUserPermissionExample.createCriteria()
.andUserIdEqualTo(usereId)
.andTypeEqualTo(type);
List<UpmsUserPermission> upmsUserPermissions = upmsUserPermissionMapper.selectByExample(upmsUserPermissionExample);
JSONArray systems = new JSONArray();
// 系统
UpmsSystemExample upmsSystemExample = new UpmsSystemExample();
upmsSystemExample.createCriteria()
.andStatusEqualTo((byte) 1);
upmsSystemExample.setOrderByClause("orders asc");
List<UpmsSystem> upmsSystems = upmsSystemMapper.selectByExample(upmsSystemExample);
for (UpmsSystem upmsSystem : upmsSystems) {
JSONObject node = new JSONObject();
node.put("id", upmsSystem.getSystemId());
node.put("name", upmsSystem.getTitle());
node.put("nocheck", true);
node.put("open", true);
systems.add(node);
}
if (systems.size() > 0) {
for (Object system: systems) {
UpmsPermissionExample upmsPermissionExample = new UpmsPermissionExample();
upmsPermissionExample.createCriteria()
.andStatusEqualTo((byte) 1)
.andSystemIdEqualTo(((JSONObject) system).getIntValue("id"));
upmsPermissionExample.setOrderByClause("orders asc");
List<UpmsPermission> upmsPermissions = upmsPermissionMapper.selectByExample(upmsPermissionExample);
if (upmsPermissions.size() == 0) continue;
// 目录
JSONArray folders = new JSONArray();
for (UpmsPermission upmsPermission: upmsPermissions) {
if (upmsPermission.getPid().intValue() != 0 || upmsPermission.getType() != 1) continue;
JSONObject node = new JSONObject();
node.put("id", upmsPermission.getPermissionId());
node.put("name", upmsPermission.getName());
node.put("open", true);
for (UpmsUserPermission upmsUserPermission : upmsUserPermissions) {
if (upmsUserPermission.getPermissionId().intValue() == upmsPermission.getPermissionId().intValue()) {
node.put("checked", true);
}
}
folders.add(node);
// 菜单
JSONArray menus = new JSONArray();
for (Object folder : folders) {
for (UpmsPermission upmsPermission2: upmsPermissions) {
if (upmsPermission2.getPid().intValue() != ((JSONObject) folder).getIntValue("id") || upmsPermission2.getType() != 2) continue;
JSONObject node2 = new JSONObject();
node2.put("id", upmsPermission2.getPermissionId());
node2.put("name", upmsPermission2.getName());
node2.put("open", true);
for (UpmsUserPermission upmsUserPermission : upmsUserPermissions) {
if (upmsUserPermission.getPermissionId().intValue() == upmsPermission2.getPermissionId().intValue()) {
node2.put("checked", true);
}
}
menus.add(node2);
// 按钮
JSONArray buttons = new JSONArray();
for (Object menu : menus) {
for (UpmsPermission upmsPermission3: upmsPermissions) {
if (upmsPermission3.getPid().intValue() != ((JSONObject) menu).getIntValue("id") || upmsPermission3.getType() != 3) continue;
JSONObject node3 = new JSONObject();
node3.put("id", upmsPermission3.getPermissionId());
node3.put("name", upmsPermission3.getName());
node3.put("open", true);
for (UpmsUserPermission upmsUserPermission : upmsUserPermissions) {
if (upmsUserPermission.getPermissionId().intValue() == upmsPermission3.getPermissionId().intValue()) {
node3.put("checked", true);
}
}
buttons.add(node3);
}
if (buttons.size() > 0) {
((JSONObject) menu).put("children", buttons);
buttons = new JSONArray();
}
}
}
if (menus.size() > 0) {
((JSONObject) folder).put("children", menus);
menus = new JSONArray();
}
}
}
if (folders.size() > 0) {
((JSONObject) system).put("children", folders);
}
}
}
return systems;
}
}