fix:部门管理相关代码

This commit is contained in:
zhangzhiqiang
2022-12-12 15:46:47 +08:00
parent 43db0673a4
commit fee8f1f226
8 changed files with 205 additions and 21 deletions

View File

@@ -100,14 +100,14 @@ public class MenuController {
@ApiOperation("查询菜单")
@SaCheckPermission("menu:list")
public ResponseEntity<Object> pageQuery(@RequestParam Map whereJson, Pageable page) throws Exception {
Object system_type = whereJson.get("system_type");
if (system_type!=null && whereJson.get("pid") == null){
JSONObject jsonObject = WQLObject.getWQLObject("sys_dict").query("code = 'system_type' and value = '" + system_type + "'").uniqueResult(0);
if (jsonObject==null || jsonObject.getString("para1") ==null){
throw new BadRequestException("字典表没有配置system_type系统相关参数");
}
whereJson.put("pid",jsonObject.getString("para1"));
}
// Object system_type = whereJson.get("system_type");
// if (system_type!=null && whereJson.get("pid") == null){
// JSONObject jsonObject = WQLObject.getWQLObject("sys_dict").query("code = 'system_type' and value = '" + system_type + "'").uniqueResult(0);
// if (jsonObject==null || jsonObject.getString("para1") ==null){
// throw new BadRequestException("字典表没有配置system_type系统相关参数");
// }
// whereJson.put("pid",jsonObject.getString("para1"));
// }
JSONObject param = JSONObject.parseObject(JSON.toJSONString(whereJson));
JSONObject menuDtoList = menuService.queryAll(param, page);
return new ResponseEntity<>(menuDtoList, HttpStatus.OK);

View File

@@ -5,18 +5,24 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.sso.system.domain.vo.MenuMetaVo;
import org.nl.sso.system.domain.vo.MenuVo;
import org.nl.sso.system.service.MenuService;
import org.nl.sso.system.service.dto.MenuDto;
import org.nl.sso.system.service.menushook.event.CE;
import org.nl.sso.system.service.menushook.event.DE;
import org.nl.sso.system.service.menushook.event.UE;
import org.nl.sso.tools.IdUtil;
import org.nl.sso.tools.SecurityUtils;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,7 +40,12 @@ public class MenuServiceImpl implements MenuService {
@Override
public JSONObject queryAll(JSONObject param, Pageable page) throws Exception {
JSONObject json = WQL.getWO("QSYS_MENU01").addParam("flag", "1").addParam("system_type",param.getString("system_type")).addParam("pid", param.getString("pid")).pageQuery(WqlUtil.getHttpContext(page), "");
param.put("flag", "1");
String blutty = param.getString("blurry");
if (StringUtils.isNotEmpty(blutty)){
param.put("blurry","%"+blutty+"%");
}
JSONObject json = WQL.getWO("QSYS_MENU01").addParamMap(param).pageQuery(WqlUtil.getHttpContext(page), "");
JSONArray content = json.getJSONArray("content");
JSONArray res = new JSONArray();
@@ -139,6 +150,7 @@ public class MenuServiceImpl implements MenuService {
//根节点数据库存为null
if ("0".equals(form.getString("pid"))) {
form.remove("pid");
SpringContextHolder.getApplicationContext().publishEvent(new CE(form));
}
//外链外联菜单
if ("1".equals(form.getString("i_frame"))) {
@@ -191,12 +203,19 @@ public class MenuServiceImpl implements MenuService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(JSONObject form) {
WQLObject menuTab = WQLObject.getWQLObject("sys_menu");
MenuDto newMenu = this.menuJsonToMenuDto(form);
if (newMenu.getMenu_id().equals(newMenu.getPid())) {
WQLObject menuTab = WQLObject.getWQLObject("sys_menu");
if (form.getString("menu_id").equals(form.getString("pid"))) {
throw new BadRequestException("上级不能为自己");
}
//根节点数据库存为null
if ("0".equals(form.getString("pid"))) {
form.put("pid",null);
SpringContextHolder.getApplicationContext().publishEvent(new UE(form));
}else {
SpringContextHolder.getApplicationContext().publishEvent(new DE(Lists.newArrayList(form.getString("menu_id"))));
}
MenuDto newMenu = this.menuJsonToMenuDto(form);
if (newMenu.getI_frame()) {
String http = "http://", https = "https://";
@@ -204,10 +223,7 @@ public class MenuServiceImpl implements MenuService {
throw new BadRequestException("外链必须以http://或者https://开头");
}
}
//根节点数据库存为null
if ("0".equals(form.getString("pid"))) {
form.remove("pid");
}
JSONObject oldMenuJson = menuTab.query("menu_id = '" + form.getString("menu_id") + "'").uniqueResult(0);
MenuDto oldMenu = this.menuJsonToMenuDto(oldMenuJson);
@@ -242,13 +258,17 @@ public class MenuServiceImpl implements MenuService {
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<MenuDto> menuSet) {
List<String> list = new ArrayList<>();
for (MenuDto menu : menuSet) {
// 清理缓存
list.add(menu.getMenu_id());
delCaches(menu.getMenu_id());
// roleService.untiedMenu(menu.getMenu_id());
WQLObject.getWQLObject("sys_menu").delete("menu_id = '" + menu.getMenu_id() + "'");
updateSubCnt(menu.getPid());
}
SpringContextHolder.getApplicationContext().publishEvent(new DE(list));
}
@Override

View File

@@ -0,0 +1,77 @@
package org.nl.sso.system.service.menushook;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.sso.security.dto.CurrentUser;
import org.nl.sso.system.service.dto.MenuDto;
import org.nl.sso.system.service.menushook.event.CE;
import org.nl.sso.system.service.menushook.event.DE;
import org.nl.sso.system.service.menushook.event.SysTypeEvent;
import org.nl.sso.system.service.menushook.event.UE;
import org.nl.sso.tools.IdUtil;
import org.nl.sso.tools.MapOf;
import org.nl.sso.tools.SecurityUtils;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/*
* @author ZZQ
* @Date 2022/12/12 9:29 上午
*/
@Component
public class SysMenuCUDHook implements ApplicationListener<SysTypeEvent> {
private static final String SYNC = "lock";
@Override
@Transactional
public void onApplicationEvent(SysTypeEvent event) {
if (event instanceof CE){
JSONObject menu = (JSONObject)event.getSource();
synchronized (SYNC){
JSONArray arr = WQLObject.getWQLObject("sys_dict").query("code = 'system_type'", "value desc").getResultJSONArray(0);
Integer currentType = 0;
if (arr.size()>0){
currentType = arr.getJSONObject(0).getInteger("value");
}
HashMap map = MapOf.of("dict_id", IdUtil.getLongId()
, "label", menu.get("title")
, "value", currentType + 1
, "para1", menu.get("menu_id")
, "code", "system_type"
,"name","所属系统"
,"create_id", SecurityUtils.getCurrentUserId()
,"create_name",SecurityUtils.getCurrentUsername(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
WQLObject.getWQLObject("sys_dict").insert(map);
menu.put("system_type",currentType+1);
}
}
if (event instanceof UE){
JSONObject menu = (JSONObject)event.getSource();
String pid = menu.getString("menu_id");
JSONArray arr = WQLObject.getWQLObject("sys_dict").query("code = 'system_type'", "value desc").getResultJSONArray(0);
if (!arr.stream().filter(a->pid.equals(((JSONObject)a).getString("para1"))).findAny().isPresent()){
JSONObject dict = arr.getJSONObject(0);
Integer currentType = dict.getInteger("value");
menu.put("system_type",currentType+1);
dict.put("dict_id", IdUtil.getLongId());
dict.put("label",menu.get("title"));
dict.put("value",currentType+1);
dict.put("para1",menu.get("menu_id"));
WQLObject.getWQLObject("sys_dict").insert(dict);
}
}
if (event instanceof DE){
Collection<String> source = (Collection) event.getSource();
String sql = source.stream().collect(Collectors.joining("','"));
WQLObject.getWQLObject("sys_dict").
delete("code = 'system_type' and para1 in ('"+sql+"')");
}
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.sso.system.service.menushook.event;
import com.alibaba.fastjson.JSONObject;
/*
* @author ZZQ
* @Date 2022/12/12 9:31 上午
*/
public class CE extends SysTypeEvent {
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public CE(JSONObject source) {
super(source);
}
}

View File

@@ -0,0 +1,24 @@
package org.nl.sso.system.service.menushook.event;
import com.alibaba.fastjson.JSONObject;
import org.nl.sso.system.service.dto.MenuDto;
import java.util.Collection;
import java.util.Set;
/*
* @author ZZQ
* @Date 2022/12/12 9:31 上午
*/
public class DE extends SysTypeEvent {
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public DE(Collection<String> source) {
super(source);
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.sso.system.service.menushook.event;
import com.alibaba.fastjson.JSONObject;
import org.springframework.context.ApplicationEvent;
/*
* @author ZZQ
* @Date 2022/12/12 9:32 上午
*/
public class SysTypeEvent extends ApplicationEvent {
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public SysTypeEvent(Object source) {
super(source);
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.sso.system.service.menushook.event;
import com.alibaba.fastjson.JSONObject;
/*
* @author ZZQ
* @Date 2022/12/12 9:31 上午
*/
public class UE extends SysTypeEvent {
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public UE(JSONObject source) {
super(source);
}
}

View File

@@ -56,11 +56,14 @@
OPTION 输入.system_type <> ""
system_type = 输入.system_type
ENDOPTION
OPTION 输入.blurry <> ""
title like "%" 输入.blurry "%"
ENDOPTION
OPTION 输入.pid <> ""
OPTION 输入.pid <> ""
pid = 输入.pid
ENDOPTION
OPTION 输入.pid = ""
pid is null
ENDOPTION
OPTION 输入.blurry <> ""
title like 输入.blurry
ENDOPTION
ENDSELECT
ENDPAGEQUERY