pudongliang пре 5 година
родитељ
комит
0ea62cd838

+ 27 - 0
fw-sample-admin/src/main/java/com/mokasz/sample/admin/controller/HomeController.java

@@ -1,7 +1,9 @@
 package com.mokasz.sample.admin.controller;
 package com.mokasz.sample.admin.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.mokasz.sample.common.exception.CommonBizException;
 import com.mokasz.sample.common.exception.CommonBizException;
 import com.mokasz.sample.common.model.ApiResponse;
 import com.mokasz.sample.common.model.ApiResponse;
+import com.mokasz.sample.manager.SpaceClient;
 import com.xxl.sso.core.conf.Conf;
 import com.xxl.sso.core.conf.Conf;
 import com.xxl.sso.core.login.SsoWebLoginHelper;
 import com.xxl.sso.core.login.SsoWebLoginHelper;
 import com.xxl.sso.core.user.XxlSsoUser;
 import com.xxl.sso.core.user.XxlSsoUser;
@@ -9,11 +11,17 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.CookieValue;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -28,6 +36,11 @@ public class HomeController {
 
 
     @Value("${xxl.sso.server}")
     @Value("${xxl.sso.server}")
     private String ssoLoginUrl;
     private String ssoLoginUrl;
+    @Value("${space.system.id}")
+    private Integer systemId;
+
+    @Autowired
+    private SpaceClient spaceClient;
 
 
 
 
     @ApiOperation(value = "获取登陆用户信息")
     @ApiOperation(value = "获取登陆用户信息")
@@ -48,4 +61,18 @@ public class HomeController {
         return ApiResponse.ok(ssoLoginUrl);
         return ApiResponse.ok(ssoLoginUrl);
     }
     }
 
 
+    @ApiOperation(value = "获取菜单")
+    @GetMapping("/getMenu")
+    public ApiResponse<?> getMenu(HttpServletRequest request, @CookieValue(Conf.SSO_SESSIONID) String sessionId){
+        XxlSsoUser xxlSsoUser = (XxlSsoUser) request.getAttribute(Conf.SSO_USER);
+        String userid = xxlSsoUser.getUserid();
+        String cookieValue = Conf.SSO_SESSIONID.concat("=").concat(sessionId);
+        JSONObject jsonObject = spaceClient.getMenu(systemId, userid, cookieValue);
+
+        if ("200".equals(jsonObject.getString("code"))) {
+            return ApiResponse.ok(jsonObject.get("data"));
+        } else {
+            return ApiResponse.fail("无法获取菜单及权限信息");
+        }
+    }
 }
 }

+ 5 - 0
fw-sample-admin/src/main/resources/logconfig/logback-dev.xml

@@ -29,8 +29,13 @@
     </appender>
     </appender>
     <!-- 开发期间查看sql输出用 -->
     <!-- 开发期间查看sql输出用 -->
     <logger name="com.mokasz.sample.mapper" level="DEBUG" />
     <logger name="com.mokasz.sample.mapper" level="DEBUG" />
+    <logger name="org.springframework.cloud.openfeign" level="DEBUG" />
+    <logger name="com.mokasz.sample.manager" level="DEBUG" />
     <!-- 日志输出级别 -->
     <!-- 日志输出级别 -->
     <root level="INFO">
     <root level="INFO">
         <appender-ref ref="console"/>
         <appender-ref ref="console"/>
     </root>
     </root>
+    <root level="DEBUG">
+        <appender-ref ref="console"/>
+    </root>
 </configuration>
 </configuration>

+ 6 - 1
fw-sample-portal/.env

@@ -4,4 +4,9 @@ NODE_ENV=development
 
 
 VUE_APP_UPLOAD_URL = /api/msg-lib-app/message/library/upload
 VUE_APP_UPLOAD_URL = /api/msg-lib-app/message/library/upload
 
 
-VUE_APP_API_URL = http://localhost.mokamrp.com:8080/
+# 开发的时候路由用
+VUE_APP_API_URL = /
+VUE_APP_API_URL_YG = /yg/
+# dev devServer proxy用
+VUE_APP_API_URL_TARGET = http://localhost.mokamrp.com:8080/
+VUE_APP_API_URL_YG_TARGET = http://localhost.mokamrp.com:8080/

+ 2 - 1
fw-sample-portal/.env.prod

@@ -4,4 +4,5 @@ NODE_ENV=production
 
 
 VUE_APP_UPLOAD_URL = /api/free-novel/file/upload
 VUE_APP_UPLOAD_URL = /api/free-novel/file/upload
 
 
-VUE_APP_API_URL = https://mokamrp.com
+VUE_APP_API_URL = /api/free-novel/
+VUE_APP_API_URL_YG = /yg

+ 2 - 1
fw-sample-portal/.env.test

@@ -4,4 +4,5 @@ NODE_ENV=testing
 
 
 VUE_APP_UPLOAD_URL = /api/free-novel/file/upload
 VUE_APP_UPLOAD_URL = /api/free-novel/file/upload
 
 
-VUE_APP_API_URL = https://test.mokamrp.com/
+VUE_APP_API_URL = /api/free-novel/
+VUE_APP_API_URL_YG = /yg

+ 1 - 1
fw-sample-portal/src/network/api/api-base.js

@@ -11,7 +11,7 @@ export function getUserInfo () {
  * 获取菜单
  * 获取菜单
  */
  */
 export function getMenuList (params) {
 export function getMenuList (params) {
-    return service.get('/api/account/menu/getMenu', { params })
+    return service.get('/admin/getMenu', { params })
 }
 }
 
 
 /**
 /**

+ 6 - 0
fw-sample-portal/src/network/api/yg-system.js

@@ -0,0 +1,6 @@
+import ygService from '@/network/service/yg-service'
+
+export function exec (data) {
+  return ygService.post('/admin/redis/exec', data)
+}
+

+ 68 - 64
fw-sample-portal/src/network/service/service.js

@@ -1,80 +1,84 @@
 import axios from 'axios'
 import axios from 'axios'
-import { MessageBox, Message } from 'element-ui'
+import {MessageBox, Message} from 'element-ui'
 
 
 const service = axios.create({
 const service = axios.create({
-  timeout: 30000
+    timeout: 30000,
+    baseURL: process.env.VUE_APP_API_URL
 })
 })
 
 
 // 发起请求前的处理
 // 发起请求前的处理
 service.interceptors.request.use(
 service.interceptors.request.use(
-  (config) => {
-    config.headers['Cache-Control'] = 'no-cache'
-    return config
-  },
-  (error) => {
-    return Promise.reject(error)
-  }
+    (config) => {
+        config.headers['Cache-Control'] = 'no-cache'
+        return config
+    },
+    (error) => {
+        return Promise.reject(error)
+    }
 )
 )
 
 
 // 收到响应的处理
 // 收到响应的处理
 service.interceptors.response.use(
 service.interceptors.response.use(
-  (response) => {
-    if (response.headers['content-disposition']) {
-      return response
-    }
-    if (response.status === 200) {
-      if (response.data.code === 200) {
-        return response.data
-      } else {
-        Message({
-          type: 'error',
-          message: response.data.msg,
-          showClose:true,
-        })
-      }
-    } else {
-      return Promise.reject(response.data)
-    }
-  },
-  (error) => {
-    if (
-      error.code === 'ECONNABORTED' &&
-      error.message.indexOf('timeout') > -1
-    ) {
-      return Promise.reject(new Error('请求超时'))
-    }
-    const err = error.response.data || {}
-    const status = error.response.status
-    let errMsg = ''
-    if (err.errors) {
-      let errArr = []
-      for (let k in err.errors) {
-        errArr.push(err.errors[k].toString())
-      }
-      errMsg = errArr.toString()
-    } else {
-      errMsg = err.msg || '获取失败'
-    }
-    switch (status) {
-      case 401:
-          MessageBox.alert('认证失效,请重新登录', '', {
-              confirmButtonText: '确定',
-              type: 'warning',
-              showClose: false,
-              center: true,
-              callback: () => {
-                  let _url = window.location.origin
-                  window.location.href = error.response.data.loginPageUrl + '?redirect_url=' + _url
-              }
-          })
-          break
-      default:
-        if (!errMsg) {
-          errMsg = '当前网络环境较差,请刷新重试'
+    (response) => {
+        if (response.headers['content-disposition']) {
+            return response
+        }
+        if (response.status === 200) {
+            if (response.data.code === undefined)
+                return response.data
+
+            if (response.data.code === 200) {
+                return response.data
+            } else {
+                Message({
+                    type: 'error',
+                    message: response.data.msg,
+                    showClose: true,
+                })
+            }
+        } else {
+            return Promise.reject(response.data)
+        }
+    },
+    (error) => {
+        if (
+            error.code === 'ECONNABORTED' &&
+            error.message.indexOf('timeout') > -1
+        ) {
+            return Promise.reject(new Error('请求超时'))
+        }
+        const err = error.response.data || {}
+        const status = error.response.status
+        let errMsg = ''
+        if (err.errors) {
+            let errArr = []
+            for (let k in err.errors) {
+                errArr.push(err.errors[k].toString())
+            }
+            errMsg = errArr.toString()
+        } else {
+            errMsg = err.msg || '获取失败'
+        }
+        switch (status) {
+            case 401:
+                MessageBox.alert('认证失效,请重新登录', '', {
+                    confirmButtonText: '确定',
+                    type: 'warning',
+                    showClose: false,
+                    center: true,
+                    callback: () => {
+                        let _url = window.location.origin
+                        window.location.href = error.response.data.loginPageUrl + '?redirect_url=' + _url
+                    }
+                })
+                break
+            default:
+                if (!errMsg) {
+                    errMsg = '当前网络环境较差,请刷新重试'
+                }
+                return Promise.reject({msg: errMsg})
         }
         }
-        return Promise.reject({ msg: errMsg })
     }
     }
-  }
 )
 )
 
 
 export default service
 export default service

+ 85 - 0
fw-sample-portal/src/network/service/yg-service.js

@@ -0,0 +1,85 @@
+import axios from 'axios'
+import {MessageBox, Message} from 'element-ui'
+
+const service = axios.create({
+    timeout: 30000,
+    baseURL: process.env.VUE_APP_API_URL_YG
+})
+
+// 发起请求前的处理
+service.interceptors.request.use(
+    (config) => {
+        config.headers['Cache-Control'] = 'no-cache'
+        return config
+    },
+    (error) => {
+        return Promise.reject(error)
+    }
+)
+
+// 收到响应的处理
+service.interceptors.response.use(
+    (response) => {
+        if (response.headers['content-disposition']) {
+            return response
+        }
+        if (response.status === 200) {
+            if (response.data.code === undefined) {
+                return response.data
+            }
+            if (response.data.code === 200) {
+                return response.data
+            } else {
+                Message({
+                    type: 'error',
+                    message: response.data.msg,
+                    showClose: true,
+                })
+                return Promise.reject(response.data)
+            }
+        } else {
+            return Promise.reject(response.data)
+        }
+    },
+    (error) => {
+        if (
+            error.code === 'ECONNABORTED' &&
+            error.message.indexOf('timeout') > -1
+        ) {
+            return Promise.reject(new Error('请求超时'))
+        }
+        const err = error.response.data || {}
+        const status = error.response.status
+        let errMsg = ''
+        if (err.errors) {
+            let errArr = []
+            for (let k in err.errors) {
+                errArr.push(err.errors[k].toString())
+            }
+            errMsg = errArr.toString()
+        } else {
+            errMsg = err.msg || '获取失败'
+        }
+        switch (status) {
+            case 401:
+                MessageBox.alert('认证失效,请重新登录', '', {
+                    confirmButtonText: '确定',
+                    type: 'warning',
+                    showClose: false,
+                    center: true,
+                    callback: () => {
+                        let _url = window.location.origin
+                        window.location.href = error.response.data.loginPageUrl + '?redirect_url=' + _url
+                    }
+                })
+                break
+            default:
+                if (!errMsg) {
+                    errMsg = '当前网络环境较差,请刷新重试'
+                }
+                return Promise.reject({msg: errMsg})
+        }
+    }
+)
+
+export default service

+ 1 - 0
fw-sample-portal/vue.config.js

@@ -7,6 +7,7 @@ const CompressionWebpackPlugin = require('compression-webpack-plugin')
 module.exports = {
 module.exports = {
   publicPath: '/',
   publicPath: '/',
   assetsDir: 'static',
   assetsDir: 'static',
+  lintOnSave: false, //关闭eslint校验
   productionSourceMap: !IS_PROD,
   productionSourceMap: !IS_PROD,
   devServer: {
   devServer: {
     port: 8081,
     port: 8081,

+ 63 - 0
fw-sample-service/src/main/java/com/mokasz/sample/common/config/FeignConfig.java

@@ -0,0 +1,63 @@
+package com.mokasz.sample.common.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer;
+import feign.Logger;
+import feign.codec.Decoder;
+import feign.codec.Encoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+public class FeignConfig {
+    @Bean
+    Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
+    @Bean
+    public Encoder feignEncoder() {
+        return new SpringEncoder(feignHttpMessageConverter());
+    }
+
+    @Bean
+    public Decoder feignDecoder() {
+        return new SpringDecoder(feignHttpMessageConverter());
+    }
+
+    /**
+     * 设置解码器为fastjson
+     *
+     * @return
+     */
+    private ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() {
+        final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(this.getFastJsonConverter());
+        return () -> httpMessageConverters;
+    }
+
+    private FastJsonHttpMessageConverter getFastJsonConverter() {
+        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
+
+        List<MediaType> supportedMediaTypes = new ArrayList<>();
+        MediaType mediaTypeJson = MediaType.valueOf(MediaType.APPLICATION_JSON_UTF8_VALUE);
+        supportedMediaTypes.add(mediaTypeJson);
+        converter.setSupportedMediaTypes(supportedMediaTypes);
+        FastJsonConfig config = new FastJsonConfig();
+        config.getSerializeConfig().put(JSON.class, new SwaggerJsonSerializer());
+        config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
+        converter.setFastJsonConfig(config);
+
+        return converter;
+    }
+}

+ 1 - 1
fw-sample-service/src/main/java/com/mokasz/sample/common/model/PageVO.java

@@ -34,7 +34,7 @@ public class PageVO<T> implements Serializable {
         this.list = list;
         this.list = list;
         this.total = total;
         this.total = total;
         //(pageIndex-1)*pageSize+pageSize<total
         //(pageIndex-1)*pageSize+pageSize<total
-        this.hasNextPage = (long) basePageQuery.getPageIndex() * basePageQuery.getPageSize() < total;
+        this.hasNextPage = (long) basePageQuery.getPageNum() * basePageQuery.getPageSize() < total;
     }
     }
 
 
     private List<T> list;
     private List<T> list;

+ 14 - 0
fw-sample-service/src/main/java/com/mokasz/sample/manager/SpaceClient.java

@@ -0,0 +1,14 @@
+package com.mokasz.sample.manager;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(value = "Space-Client", url= "${space.host}")
+public interface SpaceClient {
+
+    @GetMapping("/space/menu/getMenuInterface")
+    JSONObject getMenu(@RequestParam("sysCode") Integer systemId, @RequestParam("userId") String userId, @RequestHeader("Cookie") String cookies);
+}