Sfoglia il codice sorgente

服务之间查询调用采用spring feign 有同学反映查询通过表配置sql的方式不太友好,所以提供另一种解决方案

吴学文 7 anni fa
parent
commit
9ceececf1c

+ 13 - 0
Api/src/main/java/com/java110/api/rest/RestApi.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.api.smo.IApiServiceSMO;
 import com.java110.common.constant.CommonConstant;
 import com.java110.core.base.controller.BaseController;
+import com.java110.core.smo.user.IUserInnerServiceSMO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -31,6 +32,8 @@ public class RestApi extends BaseController {
     private final static Logger logger = LoggerFactory.getLogger(RestApi.class);
     @Autowired
     private IApiServiceSMO apiServiceSMOImpl;
+
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
     /**
      * 健康检查 服务
      * @return
@@ -41,6 +44,16 @@ public class RestApi extends BaseController {
         return "";
     }
 
+    /**
+     * 健康检查 服务
+     * @return
+     */
+    @RequestMapping(path = "/checkUserServiceVersion",method = RequestMethod.GET)
+    @ApiOperation(value="检查用服务版本", notes="test: 返回 2XX 表示服务正常")
+    public String checkUserServiceVersion(){
+        return userInnerServiceSMOImpl.getUserServiceVersion("test");
+    }
+
 
     /**
      * 资源请求 post方式

+ 13 - 0
UserService/src/main/java/com/java110/user/smo/impl/UserInnerServiceSMOImpl.java

@@ -0,0 +1,13 @@
+package com.java110.user.smo.impl;
+
+import com.java110.core.smo.user.IUserInnerServiceSMO;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class UserInnerServiceSMOImpl implements IUserInnerServiceSMO {
+    @Override
+    public String getUserServiceVersion(@RequestParam("code") String code) {
+        return code + " 0.0.6";
+    }
+}

+ 30 - 0
WebService/src/main/java/com/java110/web/components/floor/ListFloorComponent.java

@@ -0,0 +1,30 @@
+package com.java110.web.components.floor;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IFloorServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 查询楼列表组件
+ */
+@Component("listFloor")
+public class ListFloorComponent {
+
+    @Autowired
+    private IFloorServiceSMO floorServiceSMOImpl;
+
+    public ResponseEntity<String> list(IPageData pd){
+        return floorServiceSMOImpl.listFloor(pd);
+    }
+
+
+    public IFloorServiceSMO getFloorServiceSMOImpl() {
+        return floorServiceSMOImpl;
+    }
+
+    public void setFloorServiceSMOImpl(IFloorServiceSMO floorServiceSMOImpl) {
+        this.floorServiceSMOImpl = floorServiceSMOImpl;
+    }
+}

+ 16 - 10
WebService/src/main/java/com/java110/web/controller/CallComponentController.java

@@ -1,6 +1,7 @@
 package com.java110.web.controller;
 
 import com.java110.common.constant.CommonConstant;
+import com.java110.common.exception.SMOException;
 import com.java110.common.factory.ApplicationContextFactory;
 import com.java110.common.util.Assert;
 import com.java110.core.base.controller.BaseController;
@@ -8,8 +9,10 @@ import com.java110.core.context.IPageData;
 import com.java110.web.smo.impl.LoginServiceSMOImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -36,27 +39,30 @@ public class CallComponentController extends BaseController {
             //@RequestBody String info,
             HttpServletRequest request){
         ResponseEntity<String> responseEntity = null;
-        try{
-            Assert.hasLength(componentCode,"参数错误,未传入组件编码");
-            Assert.hasLength(componentMethod,"参数错误,未传入调用组件方法");
+        try {
+            Assert.hasLength(componentCode, "参数错误,未传入组件编码");
+            Assert.hasLength(componentMethod, "参数错误,未传入调用组件方法");
 
             Object componentInstance = ApplicationContextFactory.getBean(componentCode);
 
-            Assert.notNull(componentInstance,"未找到组件对应的处理类,请确认 "+componentCode);
+            Assert.notNull(componentInstance, "未找到组件对应的处理类,请确认 " + componentCode);
 
-            Method cMethod = componentInstance.getClass().getDeclaredMethod(componentMethod,IPageData.class);
+            Method cMethod = componentInstance.getClass().getDeclaredMethod(componentMethod, IPageData.class);
 
-            Assert.notNull(cMethod,"未找到组件对应处理类的方法,请确认 "+componentCode+"方法:"+componentMethod);
+            Assert.notNull(cMethod, "未找到组件对应处理类的方法,请确认 " + componentCode + "方法:" + componentMethod);
 
             IPageData pd = (IPageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA);
 
-            logger.debug("组件编码{},组件方法{},pd 为{}",componentCode,componentMethod,pd.toString());
-
-             responseEntity = (ResponseEntity<String>)cMethod.invoke(componentInstance,pd);
+            logger.debug("组件编码{},组件方法{},pd 为{}", componentCode, componentMethod, pd.toString());
 
+            responseEntity = (ResponseEntity<String>) cMethod.invoke(componentInstance, pd);
 
+        }catch (SMOException e){
+            MultiValueMap<String, String> headers = new HttpHeaders();
+            headers.add("code",e.getResult().getCode());
+            responseEntity = new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
         }catch (Exception e){
-            responseEntity = new ResponseEntity<>("调用组件失败"+e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
+            responseEntity = new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
         }finally {
             logger.debug("组件调用返回信息为{}",responseEntity);
             return responseEntity;

+ 17 - 0
WebService/src/main/java/com/java110/web/smo/IFloorServiceSMO.java

@@ -0,0 +1,17 @@
+package com.java110.web.smo;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * 小区楼接口类
+ */
+public interface IFloorServiceSMO {
+
+    /**
+     * 查询小区楼信息
+     * @param pd 页面数据封装对象
+     * @return
+     */
+    ResponseEntity<String> listFloor(IPageData pd);
+}

+ 97 - 0
WebService/src/main/java/com/java110/web/smo/impl/FloorServiceSMOImpl.java

@@ -0,0 +1,97 @@
+package com.java110.web.smo.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.ServiceConstant;
+import com.java110.common.exception.SMOException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.StringUtil;
+import com.java110.core.context.IPageData;
+import com.java110.web.core.BaseComponentSMO;
+import com.java110.web.smo.IFloorServiceSMO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * 小区楼实现类
+ *
+ * add by wuxw 2019-04-22
+ */
+
+@Service("floorServiceSMOImpl")
+public class FloorServiceSMOImpl extends BaseComponentSMO implements IFloorServiceSMO {
+
+    private final static Logger logger = LoggerFactory.getLogger(FloorServiceSMOImpl.class);
+
+    @Autowired
+    private RestTemplate restTemplate;
+    /**
+     * 查询小区楼
+     * @param pd 页面数据封装对象
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> listFloor(IPageData pd) {
+
+        validateListFloor(pd);
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        int page = Integer.parseInt(paramIn.getString("page"));
+        int rows = Integer.parseInt(paramIn.getString("rows"));
+        String  floorName = paramIn.getString("floorName");
+        page = (page-1)*rows;
+        ResponseEntity responseEntity = super.getStoreInfo(pd,restTemplate);
+        if(responseEntity.getStatusCode() != HttpStatus.OK){
+            return responseEntity;
+        }
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(),"storeId","根据用户ID查询商户ID失败,未包含storeId节点");
+
+        String storeId = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeId");
+        if(StringUtil.isEmpty(floorName)) {
+            responseEntity = this.callCenterService(restTemplate, pd, "",
+                    ServiceConstant.SERVICE_API_URL + "/api/query.staff.infos?rows=" + rows + "&page=" + page + "&storeId=" + storeId, HttpMethod.GET);
+        }else {
+            responseEntity = this.callCenterService(restTemplate, pd, "",
+                    ServiceConstant.SERVICE_API_URL + "/api/query.staff.byName?rows=" + rows + "&page=" + page + "&storeId=" + storeId+"&name="+floorName, HttpMethod.GET);
+        }
+        if(responseEntity.getStatusCode() != HttpStatus.OK){
+            return responseEntity;
+        }
+
+        JSONObject resultObjs = JSONObject.parseObject(responseEntity.getBody().toString());
+        resultObjs.put("row",rows);
+        resultObjs.put("page",page);
+        return responseEntity;
+    }
+
+    /**
+     * 校验查询小区楼信息
+     * @param pd
+     */
+    private void validateListFloor(IPageData pd){
+        Assert.jsonObjectHaveKey(pd.getReqData(),"page","请求报文中未包含page节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(),"rows","请求报文中未包含rows节点");
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        Assert.isInteger(paramIn.getString("page"),"page不是数字");
+        Assert.isInteger(paramIn.getString("rows"),"rows不是数字");
+        int rows = Integer.parseInt(paramIn.getString("rows"));
+
+        if(rows>50){
+            throw new SMOException(1999,"rows 数量不能大于50");
+        }
+
+    }
+
+    public RestTemplate getRestTemplate() {
+        return restTemplate;
+    }
+
+    public void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+}

+ 67 - 0
WebService/src/main/resources/components/floor/listFloor.html

@@ -0,0 +1,67 @@
+<div id="component" class="wrapper wrapper-content animated fadeInRight ecommerce">
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="ibox">
+                <div class="ibox-title">
+                    <h5>小区楼信息</h5>
+                    <div class="ibox-tools" style="top:10px;">
+                        <button type="button" class="btn btn-primary btn-sm" v-on:click="_openAddFloorModal()">
+                            <i class="glyphicon glyphicon-plus"></i>
+                            初始化楼
+                        </button>
+                    </div>
+                </div>
+                <div class="ibox-content">
+
+                    <table class="footable table table-stripped toggle-arrow-tiny" data-page-size="15">
+                        <thead>
+                        <tr>
+                            <th>楼ID</th>
+                            <th data-hide="phone">名称</th>
+                            <th data-hide="phone">编号</th>
+                            <th data-hide="phone">创建员工</th>
+                            <th data-hide="phone">备注</th>
+                            <th data-hide="phone">创建时间</th>
+                            <th class="text-right">操作</th>
+
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="floor in listFloorInfo.floors">
+                            <td>
+                                {{floor.floorId}}
+                            </td>
+                            <td>
+                                {{floor.name}}
+                            </td>
+                            <td>
+                                {{floor.userName}}
+                            </td>
+                            <td>
+                                {{floor.remark}}
+                            </td>
+                            <td>
+                                {{vc.dateFormat(floor.createTime)}}
+                            </td>
+                            <td class="text-right">
+                                <div class="btn-group">
+                                    <button class="btn-white btn btn-xs" v-on:click="_openDelFloorModel(floor)">删除</button>
+                                </div>
+                            </td>
+                        </tr>
+                        </tbody>
+                        <tfoot>
+                        <tr>
+                            <td colspan="7">
+                                <ul class="pagination float-right"></ul>
+                            </td>
+                        </tr>
+                        </tfoot>
+                    </table>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+</div>

+ 46 - 0
WebService/src/main/resources/components/floor/listFloor.js

@@ -0,0 +1,46 @@
+(function(vc){
+    var DEFAULT_PAGE = 1;
+    var DEFAULT_ROWS = 15;
+    vc.extends({
+        data:{
+            listFloorInfo:{
+                floors:[],
+                errorInfo:""
+            }
+        },
+        _initMethod:function(){
+            vc.component._listFloorData();
+        },
+        _initEvent:function(){
+
+        },
+        methods:{
+            _listFloorData(){
+                var param = {
+                    params:{
+                        page:DEFAULT_PAGE,
+                        rows:DEFAULT_ROWS
+                    }
+                }
+
+               //发送get请求
+               vc.http.get('listFloor',
+                            'list',
+                             param,
+                             function(json,res){
+                                vc.component.listFloorInfo.floors=JSON.parse(json);
+                             },function(errInfo,error){
+                                console.log('请求失败处理');
+                             }
+                           );
+
+            },
+            _openAddFloorModal:function(){ //打开添加框
+
+            },
+            _openDelFloorModel:function(_floor){ // 打开删除对话框
+
+            }
+        }
+    })
+})(window.vc);

+ 33 - 0
WebService/src/main/resources/views/floorFlow.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org"
+      xmlns:vc="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8"/>
+    <title>小区楼初始化|java110</title>
+    <vc:create name="commonTop"></vc:create>
+</head>
+<body>
+<vc:create name="loading"></vc:create>
+<div id="wrapper">
+    <vc:create name="menu"></vc:create>
+
+
+    <div id="page-wrapper" class="gray-bg dashbard-1">
+        <div class="row border-bottom">
+            <vc:create name="nav"></vc:create>
+        </div>
+        <!-- id="component" -->
+        <div class="wrapper wrapper-content animated fadeInRight">
+            <vc:create name="listFloor"></vc:create>
+        </div>
+
+        <vc:create name="copyright"></vc:create>
+
+    </div>
+</div>
+
+<vc:create name="commonBottom"></vc:create>
+</body>
+</html>

+ 4 - 0
java110-core/src/main/java/com/java110/core/smo/ITestInnerServiceSMO.java

@@ -0,0 +1,4 @@
+package com.java110.core.smo;
+
+public interface ITestInnerServiceSMO {
+}

+ 22 - 0
java110-core/src/main/java/com/java110/core/smo/user/IUserInnerServiceSMO.java

@@ -0,0 +1,22 @@
+package com.java110.core.smo.user;
+
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 用户服务接口类(供服务间调用)
+ */
+@FeignClient("user-service")
+@RequestMapping("/userApi")
+public interface IUserInnerServiceSMO {
+
+    /**
+     * 查询用户服务版本
+     * @param code
+     * @return
+     */
+    @RequestMapping(value = "/getUserServiceVersion",method = RequestMethod.GET)
+    String getUserServiceVersion(@RequestParam("code") String code);
+}