diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/controller/HomePermissionController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/controller/HomePermissionController.java
new file mode 100644
index 000000000..e3be48b61
--- /dev/null
+++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/controller/HomePermissionController.java
@@ -0,0 +1,389 @@
+package com.jero.modules.home.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.jero.common.api.vo.Result;
+import com.jero.common.constant.CommonConstant;
+import com.jero.common.constant.enums.CutEnum;
+import com.jero.common.system.vo.LoginUser;
+import com.jero.common.util.MD5Util;
+import com.jero.common.util.oConvertUtils;
+import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
+import com.jero.modules.ota.service.IOtaManageApplyEOService;
+import com.jero.modules.system.entity.SysDepartPermission;
+import com.jero.modules.system.entity.SysPermission;
+import com.jero.modules.system.entity.SysPermissionDataRule;
+import com.jero.modules.system.entity.SysRolePermission;
+import com.jero.modules.system.enums.SysPermissionEnum;
+import com.jero.modules.system.mapper.TodoCenterMapper;
+import com.jero.modules.system.model.SysPermissionTree;
+import com.jero.modules.system.model.TreeModel;
+import com.jero.modules.system.service.ISysDepartPermissionService;
+import com.jero.modules.system.service.ISysPermissionDataRuleService;
+import com.jero.modules.system.service.ISysPermissionService;
+import com.jero.modules.system.service.ISysRolePermissionService;
+import com.jero.modules.system.util.PermissionDataUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 菜单权限表 为了做待办中心消息提醒放过来的
+ *
+ *
+ * @Author scott
+ * @since 2018-12-21
+ */
+@Slf4j
+@RestController
+@RequestMapping("/home/permission")
+public class HomePermissionController {
+
+ @Autowired
+ private ISysPermissionService sysPermissionService;
+
+ @Autowired
+ private TodoCenterMapper todoCenterMapper;
+
+ @Autowired
+ private IOtaManageApplyEOService otaManageApplyEOService;
+
+
+
+ /**
+ * 查询用户拥有的菜单权限和按钮权限
+ *
+ * @return
+ */
+ @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET)
+ public Result> getUserPermissionByToken(String cut) {
+ Result result = new Result();
+ try {
+ //直接获取当前用户不适用前端token
+ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if (oConvertUtils.isEmpty(loginUser)) {
+ return Result.error("请登录系统!");
+ }
+ List metaList = sysPermissionService.queryByUser(loginUser.getUsername());
+ //添加首页路由
+ //update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
+ if (!PermissionDataUtil.hasIndexPage(metaList)) {
+ SysPermission indexMenu = sysPermissionService.list(new LambdaQueryWrapper().eq(SysPermission::getName, "首页")).get(0);
+ metaList.add(0, indexMenu);
+ }
+ //update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
+ JSONObject json = new JSONObject();
+ JSONArray menujsonArray = new JSONArray();
+ this.getPermissionJsonArray(menujsonArray, metaList, null, cut);
+ JSONArray authjsonArray = new JSONArray();
+ this.getAuthJsonArray(authjsonArray, metaList);
+ //查询所有的权限
+ LambdaQueryWrapper query = new LambdaQueryWrapper();
+ query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
+ query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2);
+ //query.eq(SysPermission::getStatus, "1");
+ List allAuthList = sysPermissionService.list(query);
+ JSONArray allauthjsonArray = new JSONArray();
+ this.getAllAuthJsonArray(allauthjsonArray, allAuthList);
+ //路由菜单
+ json.put("menu", menujsonArray);
+ //按钮权限(用户拥有的权限集合)
+ json.put("auth", authjsonArray);
+ //全部权限配置集合(按钮权限,访问权限)
+ json.put("allAuth", allauthjsonArray);
+ result.setResult(json);
+ result.success("查询成功");
+ } catch (Exception e) {
+ result.error500("查询失败:" + e.getMessage());
+ log.error(e.getMessage(), e);
+ }
+ return result;
+ }
+
+ /**
+ * 获取菜单JSON数组
+ *
+ * @param jsonArray
+ * @param metaList
+ * @param parentJson
+ */
+ private void getPermissionJsonArray(JSONArray jsonArray, List metaList, JSONObject parentJson, String cut) {
+ for (SysPermission permission : metaList) {
+ if (permission.getMenuType() == null) {
+ continue;
+ }
+ String tempPid = permission.getParentId();
+ JSONObject json = getPermissionJsonObject(permission, cut);
+ if (json == null) {
+ continue;
+ }
+ if (parentJson == null && oConvertUtils.isEmpty(tempPid)) {
+ jsonArray.add(json);
+ if (!permission.isLeaf()) {
+ getPermissionJsonArray(jsonArray, metaList, json, cut);
+ }
+ } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) {
+ // 类型( 0:一级菜单 1:子菜单 2:按钮 )
+ if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) {
+ JSONObject metaJson = parentJson.getJSONObject("meta");
+ if (metaJson.containsKey("permissionList")) {
+ metaJson.getJSONArray("permissionList").add(json);
+ } else {
+ JSONArray permissionList = new JSONArray();
+ permissionList.add(json);
+ metaJson.put("permissionList", permissionList);
+ }
+ // 类型( 0:一级菜单 1:子菜单 2:按钮 )
+ } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) {
+ if (parentJson.containsKey("children")) {
+ parentJson.getJSONArray("children").add(json);
+ } else {
+ JSONArray children = new JSONArray();
+ children.add(json);
+ parentJson.put("children", children);
+ }
+
+ if (!permission.isLeaf()) {
+ getPermissionJsonArray(jsonArray, metaList, json, cut);
+ }
+ }
+ }
+
+ }
+ }
+
+
+ /**
+ * 获取权限JSON数组
+ *
+ * @param jsonArray
+ * @param metaList
+ */
+ private void getAuthJsonArray(JSONArray jsonArray, List metaList) {
+ for (SysPermission permission : metaList) {
+ if (permission.getMenuType() == null) {
+ continue;
+ }
+ JSONObject json = null;
+ if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2) && CommonConstant.STATUS_1.equals(permission.getStatus())) {
+ json = new JSONObject();
+ json.put("action", permission.getPerms());
+ json.put("type", permission.getPermsType());
+ json.put("describe", permission.getName());
+ jsonArray.add(json);
+ }
+ }
+ }
+
+
+ /**
+ * 获取权限JSON数组
+ *
+ * @param jsonArray
+ * @param allList
+ */
+ private void getAllAuthJsonArray(JSONArray jsonArray, List allList) {
+ JSONObject json = null;
+ for (SysPermission permission : allList) {
+ json = new JSONObject();
+ json.put("action", permission.getPerms());
+ json.put("status", permission.getStatus());
+ //1显示2禁用
+ json.put("type", permission.getPermsType());
+ json.put("describe", permission.getName());
+ jsonArray.add(json);
+ }
+ }
+
+
+ /**
+ * 根据菜单配置生成路由json
+ *
+ * @param permission
+ * @return
+ */
+ private JSONObject getPermissionJsonObject(SysPermission permission, String cut) {
+ JSONObject json = new JSONObject();
+ // 类型(0:一级菜单 1:子菜单 2:按钮)
+ if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) {
+ //json.put("action", permission.getPerms());
+ //json.put("type", permission.getPermsType());
+ //json.put("describe", permission.getName());
+ return null;
+ } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) {
+ json.put("id", permission.getId());
+ if (permission.isRoute()) {
+ json.put("route", "1");// 表示生成路由
+ } else {
+ json.put("route", "0");// 表示不生成路由
+ }
+
+ if (isWWWHttpUrl(permission.getUrl())) {
+ json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8"));
+ } else {
+ json.put("path", permission.getUrl());
+ }
+
+ // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)
+ if (oConvertUtils.isNotEmpty(permission.getComponentName())) {
+ json.put("name", permission.getComponentName());
+ } else {
+ json.put("name", urlToRouteName(permission.getUrl()));
+ }
+
+ // 是否隐藏路由,默认都是显示的
+ if (permission.isHidden()) {
+ json.put("hidden", true);
+ }
+ // 聚合路由
+ if (permission.isAlwaysShow()) {
+ json.put("alwaysShow", true);
+ }
+ json.put("component", permission.getComponent());
+ JSONObject meta = new JSONObject();
+ // 由用户设置是否缓存页面 用布尔值
+ if (permission.isKeepAlive()) {
+ meta.put("keepAlive", true);
+ } else {
+ meta.put("keepAlive", false);
+ }
+
+ /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */
+ //外链菜单打开方式
+ if (permission.isInternalOrExternal()) {
+ meta.put("internalOrExternal", true);
+ } else {
+ meta.put("internalOrExternal", false);
+ }
+ /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/
+
+ if (CutEnum.EN.getValue().equals(cut)) {
+ meta.put("title", permission.getMenuEn());
+ } else {
+ meta.put("title", permission.getName());
+ }
+
+ //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842
+ String component = permission.getComponent();
+ if (oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)) {
+ meta.put("componentName", oConvertUtils.getString(permission.getComponentName(), component.substring(component.lastIndexOf("/") + 1)));
+ }
+ //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842
+
+ if (oConvertUtils.isEmpty(permission.getParentId())) {
+ // 一级菜单跳转地址
+ json.put("redirect", permission.getRedirect());
+ if (oConvertUtils.isNotEmpty(permission.getIcon())) {
+ meta.put("icon", permission.getIcon());
+ }
+ } else {
+ if (oConvertUtils.isNotEmpty(permission.getIcon())) {
+ meta.put("icon", permission.getIcon());
+ }
+ }
+ if (isWWWHttpUrl(permission.getUrl())) {
+ meta.put("url", permission.getUrl());
+ }
+
+ LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+ Map params = new HashMap<>();
+ params.put("currentUserId", currentUser.getId());
+
+ List flowTypeList = new ArrayList<>();
+ //项目法规任务
+ if (StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_REGULATION_TASKS.getId())) {
+ flowTypeList.add("1");
+ flowTypeList.add("2");
+ flowTypeList.add("3");
+ flowTypeList.add("4");
+ flowTypeList.add("10");
+ flowTypeList.add("21");
+ params.put("flowTypeList", flowTypeList);
+ //存在待办任务标识,true为有
+ boolean existTaskFlag = false;
+ int result = todoCenterMapper.todoCenterTaskCount(params);
+ if (result > 0) {
+ existTaskFlag = true;
+ }
+ //查询当前登录用户是否有项目法规任务
+ meta.put("existTask", existTaskFlag);
+ }
+ //法规评估任务
+ if (StringUtils.equals(permission.getId(), SysPermissionEnum.REGULATORY_ASSESSMENT_TASKS.getId())) {
+ flowTypeList.add("5");
+ flowTypeList.add("6");
+ params.put("flowTypeList", flowTypeList);
+ int result = todoCenterMapper.todoCenterTaskCount(params);
+ boolean existTaskFlag = false;
+ if (result > 0) {
+ existTaskFlag = true;
+ }
+ meta.put("existTask", existTaskFlag);
+ }
+ //项目参数任务
+ if (StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_PARAMETER_TASKS.getId())) {
+ boolean existTaskFlag = false;
+ existTaskFlag = sysPermissionService.judgeToDo();
+ meta.put("existTask", existTaskFlag);
+ }
+ //OTA任务
+ if (StringUtils.equals(permission.getId(), SysPermissionEnum.OTA_TASKS.getId())) {
+ boolean existTaskFlag = false;
+ List otaList = otaManageApplyEOService.getOtaTodoList(new OtaManageReceiveNsdp());
+ if(!otaList.isEmpty()){
+ existTaskFlag = true;
+ }
+ meta.put("existTask", existTaskFlag);
+ }
+
+ json.put("meta", meta);
+ }
+
+ return json;
+ }
+
+ /**
+ * 判断是否外网URL 例如: http://localhost:8080/jero-boot/swagger-ui.html#/ 支持特殊格式: {{
+ * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段
+ *
+ * @return
+ */
+ private boolean isWWWHttpUrl(String url) {
+ if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName =
+ * isystem-role
+ *
+ * @return
+ */
+ private String urlToRouteName(String url) {
+ if (oConvertUtils.isNotEmpty(url)) {
+ if (url.startsWith("/")) {
+ url = url.substring(1);
+ }
+ url = url.replace("/", "-");
+
+ // 特殊标记
+ url = url.replace(":", "@");
+ return url;
+ } else {
+ return null;
+ }
+ }
+
+}
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml
index 1fb617200..f8349666e 100644
--- a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml
@@ -130,7 +130,7 @@ spring:
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
master:
- url: jdbc:mysql://121.36.69.172:3307/laws_weilai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://121.36.69.172:3307/laws_weilai_20230531?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
# url: jdbc:mysql://127.0.0.1:3306/laws_weilai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: hzwlsoft.com