服务之间查询调用采用spring feign 有同学反映查询通过表配置sql的方式不太友好,所以提供另一种解决方案
2个文件已修改
9个文件已添加
368 ■■■■■ 已修改文件
Api/src/main/java/com/java110/api/rest/RestApi.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserService/src/main/java/com/java110/user/smo/impl/UserInnerServiceSMOImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/java/com/java110/web/components/floor/ListFloorComponent.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/java/com/java110/web/controller/CallComponentController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/java/com/java110/web/smo/IFloorServiceSMO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/java/com/java110/web/smo/impl/FloorServiceSMOImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/resources/components/floor/listFloor.html 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/resources/components/floor/listFloor.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebService/src/main/resources/views/floorFlow.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/smo/ITestInnerServiceSMO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/smo/user/IUserInnerServiceSMO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Api/src/main/java/com/java110/api/rest/RestApi.java
@@ -4,6 +4,7 @@
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 @@
    private final static Logger logger = LoggerFactory.getLogger(RestApi.class);
    @Autowired
    private IApiServiceSMO apiServiceSMOImpl;
    private IUserInnerServiceSMO userInnerServiceSMOImpl;
    /**
     * 健康检查 服务
     * @return
@@ -41,6 +44,16 @@
        return "";
    }
    /**
     * 健康检查 服务
     * @return
     */
    @RequestMapping(path = "/checkUserServiceVersion",method = RequestMethod.GET)
    @ApiOperation(value="检查用服务版本", notes="test: 返回 2XX 表示服务正常")
    public String checkUserServiceVersion(){
        return userInnerServiceSMOImpl.getUserServiceVersion("test");
    }
    /**
     * 资源请求 post方式
UserService/src/main/java/com/java110/user/smo/impl/UserInnerServiceSMOImpl.java
New file
@@ -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";
    }
}
WebService/src/main/java/com/java110/web/components/floor/ListFloorComponent.java
New file
@@ -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;
    }
}
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.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 @@
            //@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());
            logger.debug("组件编码{},组件方法{},pd 为{}", componentCode, componentMethod, pd.toString());
             responseEntity = (ResponseEntity<String>)cMethod.invoke(componentInstance,pd);
            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;
WebService/src/main/java/com/java110/web/smo/IFloorServiceSMO.java
New file
@@ -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);
}
WebService/src/main/java/com/java110/web/smo/impl/FloorServiceSMOImpl.java
New file
@@ -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;
    }
}
WebService/src/main/resources/components/floor/listFloor.html
New file
@@ -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>
WebService/src/main/resources/components/floor/listFloor.js
New file
@@ -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);
WebService/src/main/resources/views/floorFlow.html
New file
@@ -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>
java110-core/src/main/java/com/java110/core/smo/ITestInnerServiceSMO.java
New file
@@ -0,0 +1,4 @@
package com.java110.core.smo;
public interface ITestInnerServiceSMO {
}
java110-core/src/main/java/com/java110/core/smo/user/IUserInnerServiceSMO.java
New file
@@ -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);
}