Browse Source

Merge branch 'dev' of chenyongxing/jw2.0 into dev

chenweida 7 years ago
parent
commit
70af8b2674
26 changed files with 568 additions and 206 deletions
  1. 5 0
      common/common-mysql/src/main/java/com/yihu/jw/mysql/query/BaseJpaService.java
  2. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MFunction.java
  3. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MModule.java
  4. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MSaas.java
  5. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/sms/MSms.java
  6. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/sms/MSmsGateway.java
  7. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MBaseServerVersion.java
  8. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MBaseServerVersionLog.java
  9. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MWlyyVersion.java
  10. 18 20
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/common/Envelop.java
  11. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/manage/system/ManageUserVO.java
  12. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxGraphicMessage.java
  13. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxMenu.java
  14. 9 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxTemplate.java
  15. 0 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxWechat.java
  16. 10 0
      svr/svr-base/src/main/java/com/yihu/jw/wx/model/WxTemplate.java
  17. 7 15
      svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/login/LoginController.java
  18. 10 0
      svr/svr-manage/src/main/java/com/yihu/jw/manage/model/wechat/Template.java
  19. 23 28
      svr/svr-manage/src/main/resources/webapp/html/index/index.js
  20. 6 7
      svr/svr-manage/src/main/resources/webapp/html/login/login.html
  21. 98 30
      svr/svr-manage/src/main/resources/webapp/html/wechat/template/html/templateList.html
  22. 288 26
      svr/svr-manage/src/main/resources/webapp/html/wechat/template/js/templateList.js
  23. 6 7
      web-gateway/src/main/java/com/yihu/jw/commnon/base/wx/WechatContants.java
  24. 41 13
      web-gateway/src/main/java/com/yihu/jw/controller/base/wx/WechatTemplateControlle.java
  25. 10 8
      web-gateway/src/main/java/com/yihu/jw/fegin/base/wx/WechatTemplateFegin.java
  26. 37 13
      web-gateway/src/main/java/com/yihu/jw/fegin/fallbackfactory/base/wx/WechatTemplateFeginFallbackFactory.java

+ 5 - 0
common/common-mysql/src/main/java/com/yihu/jw/mysql/query/BaseJpaService.java

@ -141,6 +141,11 @@ public class BaseJpaService<T, R> {
    }
    public long getCount(String filters) throws ParseException {
        if(filters!=null){
            filters = "status<>-1;"+filters;
        }else{
            filters="status<>-1;";
        }
        URLQueryParser queryParser = createQueryParser(filters);
        CriteriaQuery query = queryParser.makeCriteriaCountQuery();

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MFunction.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.base;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/5/19.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MFunction {
    private Long id;
    private String code;//业务code

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MModule.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.base;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/5/19.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MModule {
    private Long id;
    private String code; //业务code

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/base/MSaas.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.base;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/5/19.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MSaas {
    private Long id;
    private String code;//业务code、

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/sms/MSms.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.sms;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/5/22.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MSms {
    private Long id;

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/sms/MSmsGateway.java

@ -1,11 +1,8 @@
package com.yihu.jw.restmodel.base.sms;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
 * Created by chenweida on 2017/5/22.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MSmsGateway {
    private Long id;
    private String code; //业务code

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MBaseServerVersion.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.version;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/16.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MBaseServerVersion {
    private String code; //业务code
    private String saasId;//关联base_saas code

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MBaseServerVersionLog.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.version;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/16.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MBaseServerVersionLog {
    private Long id;

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/version/MWlyyVersion.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.base.version;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/16.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MWlyyVersion {
    private Long id;
    private String saasId; //saas code

+ 18 - 20
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/common/Envelop.java

@ -23,13 +23,13 @@ import java.util.List;
public class Envelop implements Serializable {
    private static final long serialVersionUID = 2076324875575488461L;
    private Integer pageSize ;
    private int pageSize = 10;
    private Integer currPage;
    private int currPage;
    private Integer totalPage;
    private int totalPage;
    private Integer totalCount;
    private int totalCount;
    private List detailModelList;
@ -47,11 +47,11 @@ public class Envelop implements Serializable {
        this.obj = obj;
    }
    public Integer getTotalCount() {
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(Integer totalCount) {
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
@ -72,34 +72,32 @@ public class Envelop implements Serializable {
    }
    public Integer getPageSize() {
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public Integer getCurrPage() {
    public int getCurrPage() {
        return currPage;
    }
    public void setCurrPage(Integer currPage) {
    public void setCurrPage(int currPage) {
        this.currPage = currPage;
    }
    public Integer getTotalPage() {
        if (totalCount != null && pageSize != null) {
            if (totalCount % pageSize == 0) {
                totalPage = totalCount / pageSize;
            } else {
                totalPage = totalCount / pageSize + 1;
            }
    public int getTotalPage() {
        if (totalCount % pageSize == 0) {
            totalPage = totalCount / pageSize;
        } else {
            totalPage = totalCount / pageSize + 1;
        }
        return totalPage;
    }
    public void setTotalPage(Integer totalPage) {
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
@ -124,7 +122,7 @@ public class Envelop implements Serializable {
        return envelop;
    }
    public static Envelop getSuccessListWithPage(String message, List detailModelList, Integer page, Integer size, Long count) {
    public static Envelop getSuccessListWithPage(String message, List detailModelList, int page, int size, Long count) {
        Envelop envelop = new Envelop();
        envelop.setSuccessMsg(message);
        envelop.setPageSize(size);
@ -134,7 +132,7 @@ public class Envelop implements Serializable {
        return envelop;
    }
    public static Envelop getError(String message, Integer errorCode) {
    public static Envelop getError(String message, int errorCode) {
        Envelop envelop = new Envelop();
        envelop.setErrorMsg(message);
        return envelop;

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/manage/system/ManageUserVO.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.manage.system;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/9.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class ManageUserVO {
    private Integer id;
    private String code;

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxGraphicMessage.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.wx;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by Administrator on 2017/5/21 0021.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MWxGraphicMessage {
    private Long id;
    private String code;//业务code

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxMenu.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.wx;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by Administrator on 2017/5/20 0020.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MWxMenu {
    private Long id;//主键id

+ 9 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxTemplate.java

@ -1,18 +1,16 @@
package com.yihu.jw.restmodel.wx;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by Administrator on 2017/5/20 0020.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MWxTemplate {
    private Long id;
    private String code;//模板code
    private String title;//模板标题
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String wechatName;//关联的微信名
    private String templateId;//微信模板id
    private String content;//模板内容
    private String createUser;//创建人
@ -72,6 +70,14 @@ public class MWxTemplate {
        this.wechatCode = wechatCode;
    }
    public String getWechatName() {
        return wechatName;
    }
    public void setWechatName(String wechatName) {
        this.wechatName = wechatName;
    }
    public String getTemplateId() {
        return templateId;
    }

+ 0 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxWechat.java

@ -1,13 +1,10 @@
package com.yihu.jw.restmodel.wx;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
/**
 * Created by Administrator on 2017/5/20 0020.
 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MWxWechat {
    private Long id;

+ 10 - 0
svr/svr-base/src/main/java/com/yihu/jw/wx/model/WxTemplate.java

@ -16,6 +16,7 @@ public class WxTemplate extends IdEntity implements java.io.Serializable {
    private String code;//模板code
    private String title;//模板标题
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String wechatName;//关联的微信名
    private String templateId;//微信模板id
    private String content;//模板内容
    private String createUser;//创建人
@ -67,6 +68,15 @@ public class WxTemplate extends IdEntity implements java.io.Serializable {
        this.wechatCode = wechatCode;
    }
    @Column(name="wechat_name")
    public String getWechatName() {
        return wechatName;
    }
    public void setWechatName(String wechatName) {
        this.wechatName = wechatName;
    }
    @Column(name="template_id")
    public String getTemplateId() {
        return templateId;

+ 7 - 15
svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/login/LoginController.java

@ -5,6 +5,7 @@ import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.login.LoginService;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.common.EnvelopRestController;
import com.yihu.jw.restmodel.exception.business.ManageException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -29,14 +30,9 @@ public class LoginController extends EnvelopRestController {
    @ApiOperation(value = "登陆")
    public Envelop login(
            @ApiParam(name = "username", value = "账号", required = true)@RequestParam(required = true, name = "username") String username,
            @ApiParam(name = "password", value = "密码", required = true)@RequestParam(required = true, name = "password") String password) {
        try {
            ManageUser data = loginService.login(username, password);
            return Envelop.getSuccess("登陆成功", data);
        } catch (Exception e) {
            error(e);
            return Envelop.getError("登陆失败:" + e.getMessage(), -1);
        }
            @ApiParam(name = "password", value = "密码", required = true)@RequestParam(required = true, name = "password") String password) throws ManageException {
        ManageUser data = loginService.login(username, password);
        return Envelop.getSuccess("登陆成功", data);
    }
    @GetMapping("/loginout")
@ -57,12 +53,8 @@ public class LoginController extends EnvelopRestController {
    @ApiOperation(value = "index页面需要的参数,菜单 用户信息")
    public Envelop index(
            @ApiParam(name = "userCode", value = "用户code", required = true)  @RequestParam(required = true, name = "userCode") String userCode
    ) {
        try {
            Map<String, List> data = loginService.index(userCode);
            return Envelop.getSuccess("获取信息成功", data);
        } catch (Exception e) {
            return Envelop.getError("获取信息成功:" + e.getMessage(), -1);
        }
    ) throws ManageException {
        Map<String, List> data = loginService.index(userCode);
        return Envelop.getSuccess("获取信息成功", data);
    }
}

+ 10 - 0
svr/svr-manage/src/main/java/com/yihu/jw/manage/model/wechat/Template.java

@ -17,6 +17,7 @@ public class Template extends IdEntity implements java.io.Serializable {
    private String code;//模板code
    private String title;//模板标题
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String wechatName;//关联的微信名
    private String templateId;//微信模板id
    private String content;//模板内容
    private String createUser;//创建人
@ -68,6 +69,15 @@ public class Template extends IdEntity implements java.io.Serializable {
        this.wechatCode = wechatCode;
    }
    @Column(name="wechat_name")
    public String getWechatName() {
        return wechatName;
    }
    public void setWechatName(String wehcatName) {
        this.wechatName = wechatName;
    }
    @Column(name="template_id")
    public String getTemplateId() {
        return templateId;

+ 23 - 28
svr/svr-manage/src/main/resources/webapp/html/index/index.js

@ -4,28 +4,25 @@ do_get(
    "/index",
    {},
    function (data) {
        if (data.successFlg == true) {
            contentVM = new Vue({
                el: '#wrapper',
                data: {
                    role: '',
                    menus: '',
                    aaa: 'aaa'
                },
                updated: function () {
                    //渲染结束之后调用菜单初始化
                   $('#side-menu').metisMenu();
                    //初始化原先内容
                    Hinit();
                }
            });
            contentVM.role = data.obj.role;
            contentVM.menus = data.obj.menus;
        } else {
            //判断是否登陆
            isLogin(data);
            alert("获取角色,菜单失败")
        }
        contentVM = new Vue({
            el: '#wrapper',
            data: {
                role: '',
                menus: '',
                aaa: 'aaa'
            },
            updated: function () {
                //渲染结束之后调用菜单初始化
               $('#side-menu').metisMenu();
                //初始化原先内容
                Hinit();
            }
        });
        contentVM.role = data.obj.role;
        contentVM.menus = data.obj.menus;
    },
    function(data){
        alert("获取角色,菜单失败");
    }
)
@ -37,12 +34,10 @@ function loginout() {
        "/loginout",
        {},
        function (data) {
            if (data.successFlg == true) {
                //清空用户缓存
                cleanUserCode();
                alert("退出成功")
                window.location.href = '/login/login.html';
            }
            //清空用户缓存
            cleanUserCode();
            alert("退出成功")
            window.location.href = '/login/login.html';
        }
    )
}

+ 6 - 7
svr/svr-manage/src/main/resources/webapp/html/login/login.html

@ -65,13 +65,12 @@
            },
            dataType: "json",
            success: function (data) {
                if (data.successFlg) {
                    //保存用户信息到缓存中
                    setUserCode(data.obj.code)
                    window.location.href = '/index/index.html?u=' + data.obj.id;
                } else {
                    alert("账号或密码错误")
                }
                //保存用户信息到缓存中
                setUserCode(data.obj.code)
                window.location.href = '/index/index.html?u=' + data.obj.id;
            },
            error:function(data){
                alert("账号或密码错误")
            }
        });
        return false;

+ 98 - 30
svr/svr-manage/src/main/resources/webapp/html/wechat/template/html/templateList.html

@ -2,7 +2,7 @@
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板管理页面</title>
    <title>微信模板消息管理页面</title>
    <link href="/common/css/bootstrap/bootstrap.min.css?v=3.4.0" rel="stylesheet">
    <link href="/common/css/bootstrap/font-awesome.min.css?v=4.3.0" rel="stylesheet">
@ -12,53 +12,58 @@
    <!-- Data Tables -->
    <link href="/common/css/bootstrap/plugins/dataTables/dataTables.bootstrap.css" rel="stylesheet">
    <style>
        .m-form-group:after { display: table; content: " "; clear: both; }
        .m-form-group{
            margin-top: 18px;;
        }
        select{
            width:250px !important;
        }
    </style>
</head>
<body class="gray-bg">
<div class="panel panel-default">
    <div class="panel-body">
        <div class="col-md-12">
            <div class="form-horizontal">
                <div class="form-group">
                    <label class="col-sm-2 control-label">标题:</label>
                    <div class="col-sm-3">
                        <input type="text" class="form-control" id="title" name="title" style="width: 250px">
                    </div>
                    <div class="col-sm-2">
                        <button type="button" class="btn btn-success search" style="float: right;">查 询</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="wrapper wrapper-content animated fadeInRight">
    <div class="row">
        <div class="col-sm-12">
            <div class="ibox float-e-margins">
                <div class="ibox-title">
                    <h5>
                        <small>用户列表</small>
                        <small>模板消息列表</small>
                    </h5>
                    <div class="ibox-tools">
                        <a class="collapse-link">
                            <i class="fa fa-chevron-up"></i>
                        </a>
                        <a class="dropdown-toggle" data-toggle="dropdown" href="table_data_tables.html#">
                            <i class="fa fa-wrench"></i>
                        </a>
                        <ul class="dropdown-menu dropdown-user">
                            <li><a href="table_data_tables.html#">选项1</a>
                            </li>
                            <li><a href="table_data_tables.html#">选项2</a>
                            </li>
                        </ul>
                        <a class="close-link">
                            <i class="fa fa-times"></i>
                        </a>
                    </div>
                </div>
                <div class="ibox-content">
                    <table id="templateList" class="table table-striped table-bordered table-hover dataTables-example">
                    <table id="list" class="table table-striped table-bordered table-hover dataTables-example">
                        <thead>
                        <tr>
                            <th>名称</th>
                            <th>电话号码</th>
                            <th><input type="checkbox" name="checkAll" /></th>
                            <th>标题</th>
                            <th>公众号名</th>
                            <th>创建时间</th>
                            <th>操作</th>
                        </tr>
                        </thead>
                        <tbody>
                        </tbody>
                        <tfoot>
                        <tr>
                            <th>名称</th>
                            <th>电话号码</th>
                            <th>创建时间</th>
                        </tr>
                        </tfoot>
                    </table>
                </div>
            </div>
@ -66,17 +71,80 @@
    </div>
</div>
<div class="modal fade" id="myModal-add-info" tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog" style="width:1200px;height: 800px;">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close"
                        data-dismiss="modal" aria-hidden="true">
                    &times;
                </button>
                <h4 class="modal-title" id="myModalLabel">
                    新 增
                </h4>
            </div>
            <form class="form-horizontal" role="form" action="" method="post"  id="category_add" >
                <input  id="id" type="hidden" name="id" :value="template.id" />
                <input  type="hidden" name="code" :value="template.code" />
                <input  type="hidden" name="createUser" :value="template.createUser" />
                <input  type="hidden" name="createUserName" :value="template.createUserName" />
                <!--<input  type="hidden" name="createTime" :value="template.createTime" />-->
                <div class="m-form-group">
                    <label class="col-sm-3 control-label no-padding-right" >标题: </label>
                    <div class="col-sm-2">
                        <input type="text"  class="form-control"  name="title" style="width: 250px"   :value="template.title"/>
                    </div>
                    <label class="col-sm-2 control-label no-padding-right" >公众号名:</label>
                    <div class="col-sm-5">
                        <input type="url"  class="form-control"  name="wechatName" style="width: 250px" required="true" :value="template.wechatName"/>
                    </div>
                </div>
                <div class="m-form-group">
                    <label class="col-sm-3 control-label no-padding-right" >模板id:</label>
                    <div class="col-sm-2">
                        <input type="text"  class="form-control"  name="templateId" style="width: 250px"   :value="template.templateId"/>
                    </div>
                   <!-- <label class="col-sm-2 control-label no-padding-right" >模板格式:</label>
                    <div class="col-sm-5">
                        <input type="text"  class="form-control"  name="content" style="width: 250px" required="true" :value="template.content"/>
                    </div>-->
                </div>
                <div style="margin:0 auto; text-align: center;margin-top: 15px">
                    <label class="col-sm-3 control-label no-padding-right" >模板格式:</label>
                    <textarea style="width:54%;height:150px;margin-left: -211px;" :value="template.content" name="content"></textarea>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default"
                            data-dismiss="modal">关闭
                    </button>
                    <button type="button" class="btn btn-primary" id="btnsubmit">
                        提交
                    </button>
                </div>
            </form>
        </div><!-- /.modal-content -->
    </div>
</div>
<!-- 全局js -->
<script type="text/javascript" src="/common/js/jquery/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="/common/js/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript" src="/common/js/util/util.js"></script>
<!--<script type="text/javascript" src="/common/js/vue/vue.js"></script>--><!--2.0-->
<script type="text/javascript" src="/common/js/vue.js"></script><!--1.0-->
<script type="text/javascript" src="/common/js/layer/layer.min.js"></script>
<script type="text/javascript" src="/common/js/plugins/jeditable/jquery.jeditable.js"></script>
<script type="text/javascript" src="/common/js/plugins/moment/moment.js"></script>
<!-- Data Tables -->
<script type="text/javascript" src="/common/js/plugins/dataTables/jquery.dataTables.js"></script>
<script type="text/javascript" src="/wechat/graphicMessage/js/templateList.js"></script>
<script type="text/javascript" src="/wechat/template/js/templateList.js"></script>
</body>
</html>

+ 288 - 26
svr/svr-manage/src/main/resources/webapp/html/wechat/template/js/templateList.js

@ -1,29 +1,291 @@
$(document).ready(function () {
    debugger
    $("#userlist").dataTable({
        serverSide: true, //开启服务器模式
        paging:true,//是否显示分页栏,默认是true
        searching: false, //禁用搜索和排序 默认false
        ordering:  false,//禁止排序 默认false
        ajax: {
            url: '/user/list',
            type: 'GET',
            dataSrc:"detailModelList"
        },
        columns: [
            { data: 'detailModelList.name' },
            { data: 'detailModelList.code' },
            { data: 'detailModelList.mobile' }
        ],
        "columnDefs": [  //隐藏第几列  下标从0开始
            {
                "targets": [ 0,2 ],
                "visible": false,
                "searchable": false
var table;
var usercode = window.localStorage.getItem("userCode");
$(function () {
    table = $("#list").DataTable({
            "aLengthMenu": [1, 2, 30, 40],
            "searching": false,//禁用搜索
            "lengthChange": true,
            "paging": true,//开启表格分页
            "bProcessing": true,
            "bServerSide": true,
            "bAutoWidth": false,
            "sort": "position",
            "deferRender": true,//延迟渲染
            "bStateSave": false, //在第三页刷新页面,会自动到第一页
            "iDisplayLength": 10,//每页显示条数
            "iDisplayStart": 1, //当前页
            "dom": '<l<\'#topPlugin\'>f>rt<ip><"clear">',
            "ordering": false,//全局禁用排序
            "ajax": {
                url: '/wechat/template/list',
                data: function (d) {
                    d.title = $("#title").val();
                    d.userCode = usercode;
                },
                type: 'GET',
                dataSrc: "detailModelList"
            },
            "aoColumns": [
                {
                    "mData": "code",
                    "orderable": false, // 禁用排序
                    "sDefaultContent": "",
                    "sWidth": "2%"
                },
                {
                    "mData": 'title',
                    "sWidth": "10%",
                    "orderable": false // 禁用排序
                },
                {
                    "mData": 'wechatName',
                    "sWidth": "10%",
                    "orderable": false // 禁用排序
                },
                {
                    "mData": 'createTime',
                    "sWidth": "10%",
                    "orderable": false, // 禁用排序
                    "render": function (data, type, full, meta) {
                        //时间格式化
                        return moment(data).format("YYYY-MM-DD HH:mm:ss");
                    }
                },
                {
                    "mData": "code",
                    "orderable": false, // 禁用排序
                    "sDefaultContent": '',
                    "sWidth": "10%",
                    "render": function (data, type, full, meta) {
                        return data = '<button id="findOne" class="btn btn-primary  btn-sm" data-id=' + data + ' onclick="show(\''+data+'\')">查 看</button>';/*<button id="deleteOne" class="btn btn-danger btn-sm" style="margin-left: 7px;" data-id=' + data + '>删 除</button>*/
                    }
                }
            ],
            "columnDefs": [{
                "orderable": false, // 禁用排序
                "targets": [0], // 指定的列
                "data": "code",
                "render": function (data, type, full, meta) {
                    return '<input type="checkbox" value="' + data + '" name="code"/>';
                }
            }],
            "oLanguage": { // 国际化配置
                "sProcessing": "正在获取数据,请稍后...",
                "sLengthMenu": "显示 _MENU_ 条",
                "sZeroRecords": "没有找到数据",
                "sInfo": "从 _START_ 到  _END_ 条记录 总记录数为 _TOTAL_ 条",
                "sInfoEmpty": "记录数为0",
                "sInfoFiltered": "(全部记录数 _MAX_ 条)",
                "sInfoPostFix": "",
                "sSearch": "搜索",
                "sUrl": "",
                "oPaginate": {
                    "sFirst": "第一页",
                    "sPrevious": "上一页",
                    "sNext": "下一页",
                    "sLast": "最后一页"
                }
            },
            initComplete: initComplete,
            drawCallback: function (settings) {
                $('input[name=checkAll]')[0].checked = false;//取消全选状态
            }
        ],
        "order": [[1, 'asc']]  //索引行
        }
    );
    /**
     * 表格加载渲染完毕后执行的方法
     * @param data
     */
    function initComplete(data){
        //删除用户按钮的HTMLDOM
        var topPlugin='<button   class="btn btn-danger btn-sm" id="deleteAll">批量删除</button> <button   class="btn btn-primary btn-sm addBtn" >新 增</button>       <button  class="btn btn-warning btn-sm" id="reset">重置搜索条件</button>' ;
        $("#topPlugin").append(topPlugin);//在表格上方topPlugin DIV中追加HTML
    }
    /**
     * 多选选中和取消选中,同时选中第一个单元格单选框,并联动全选单选框
     */
    $('#template tbody').on('click', 'tr', function(event) {
        var checkAllWechat=$('input[name=checkAll]')[0];//关联全选单选框
        $($(this).children()[0]).children().each(function(){
            if(this.type=="checkbox" && (!$(event.target).is(":checkbox") && $(":checkbox",this).trigger("click"))){
                if(!this.checked){
                    this.checked = true;
                    addValue(this);
                    var selected=table.rows('.selected').data().length;//被选中的行数
                    //全选单选框的状态处理
                    var recordsDisplay=table.page.info().recordsDisplay;//搜索条件过滤后的总行数
                    var iDisplayStart=table.page.info().start;// 起始行数
                    if(selected === table.page.len()||selected === recordsDisplay||selected === (recordsDisplay - iDisplayStart)){
                        checkAllWechat.checked = true;
                    }
                }else{
                    this.checked = false;
                    cancelValue(this);
                    checkAllWechat.checked = false;
                }
            }
        });
        $(this).toggleClass('selected');//放在最后处理,以便给checkbox做检测
    });
    /**
     * 全选按钮被点击事件
     */
    $('input[name=checkAll]').click(function(){
        if(this.checked){
            $('#list tbody tr').each(function(){
                if(!$(this).hasClass('selected')){
                    $(this).click();
                }
            });
        }else{
            $('#list tbody tr').click();
        }
    });
    /**
     * 单选框被选中时将它的value放入隐藏域
     */
    function addValue(para) {
        var codes = $("input[name=codes]");
        if(codes.val() === ""){
            codes.val($(para).val());
        }else{
            codes.val(codes.val()+","+$(para).val());
        }
    }
    /**
     * 单选框取消选中时将它的value移除隐藏域
     */
    function cancelValue(para){
        //取消选中checkbox要做的操作
        var codes = $("input[name=checkAll]");
        var array = codes.val().split(",");
        codes.val("");
        for (var i = 0; i < array.length; i++) {
            if (array[i] === $(para).val()) {
                continue;
            }
            if (codes.val() === "") {
                codes.val(array[i]);
            } else {
                codes.val(codes.val() + "," + array[i]);
            }
        }
    }
    $(document).delegate('.addBtn','click',function() {
        contentVM.wechatConfig='';
        $('#myModal-add-info').modal('show');
        setTimeout(function(){
            console.log($(':input','#myModal-add-info')
                .not(':button, :submit, :reset, :hidden').length)
            $(':input','#myModal-add-info')
                .not(':button, :submit, :reset, :hidden')
                .val('')
                .removeAttr('checked');
        },200);
    });
    //批量删除
    $(document).delegate('#deleteAll','click',function() {
        var theArray=[];
        $("input[name=code]:checked").each(function() {
            theArray.push($(this).val());
        });
        if(theArray.length<1){
            alert("请至少选择一个");
        }else{
            var codes = theArray.join(",");
            del(codes);
        }
    });
    $(document).delegate('.upOrderStatus','click',function() {
        var id=$(this).data("id");
        //alert(id);
        $("#titleId").html(id);
        $('#editOrderStatus').modal("show");
    });
    //清空查询条件
    $(document).delegate('#reset','click',function() {
        $("#title").val("");
    });
    //重新查询
    $(document).delegate('.search', 'click', function () {
        table.ajax.reload();
    });
});
alert(5555)
    //获取用户列表
var contentVM = new Vue({
    el: '#category_add',
    data: {
        template: '',//记录详情信息
        saasList:''//记录saas列表
    },
    replace:false
});
do_get("/base/saases",{},function(data){
    contentVM.saasList = data.detailModelList;
    console.log( data.detailModelList);
},function(data){
})
//查看配置
function show(code){
    $("#myModal-add-info").removeData("modal");
    var data={};
    do_get("/wechat/template/"+code,data,function(data){
        contentVM.template = data.obj;
        $('#myModal-add-info').modal('show');
        $("#myModalLabel").html("查看");
    },function(data){
    });
}
function del(codes){
    var url = "/wechat/template/"+codes+"?userCode="+usercode;
    do_delete(url,{},function(data){
        if(data.successFlg==true){
            alert("删除成功");
            table.ajax.reload();
        }else{
            alert("删除失败")
        }
    })
}
$("#btnsubmit").click(function(){
    var url = "";
    var id = $("#id").val();
    var data = $("#category_add").serialize();
    url = "/wechat/template"
    do_post(url,data,function(data){
        if(id==''){
            alert("保存成功");
        }else{
            alert("修改成功");
        }
        $('#myModal-add-info').modal('hide');
        table.ajax.reload();
        return;
    })
})

+ 6 - 7
web-gateway/src/main/java/com/yihu/jw/commnon/base/wx/WechatContants.java

@ -29,13 +29,12 @@ public class WechatContants {
    //微信模板消息
    public static class Template {
        public static final String api_common="template";
        public static final String api_create="create";
        public static final String api_update="update";
        public static final String api_delete="delete";
        public static final String api_getByCode="getByCode";
        public static final String api_getWxTemplates="getWxTemplates";
        public static final String api_getWxTemplatesNoPage="getWxTemplatesNoPage";
        public static final String api_create="template";
        public static final String api_update="template";
        public static final String api_delete="template/{codes}";
        public static final String api_getWxTemplatesNoPage="template/listNoPage";
        public static final String api_getWxTemplates="template/list";
        public static final String api_getByCode="template/{code}";
        public static final String api_sendTemplateMessage="sendTemplateMessage";
    }

+ 41 - 13
web-gateway/src/main/java/com/yihu/jw/controller/base/wx/WechatTemplateControlle.java

@ -5,9 +5,13 @@ import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.yihu.jw.commnon.base.wx.WechatContants;
import com.yihu.jw.fegin.base.wx.WechatTemplateFegin;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.exception.business.JiWeiException;
import com.yihu.jw.version.ApiVersion;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
 * Created by Administrator on 2017/5/31 0031.
 */
@RestController
@RequestMapping(WechatContants.Template.api_common)
@RequestMapping("{version}/"+WechatContants.api_common)
@Api(description = "微信模板消息相关")
public class WechatTemplateControlle {
@ -31,6 +35,7 @@ public class WechatTemplateControlle {
    @Autowired
    private Tracer tracer;
    @ApiVersion(1)
    @PostMapping(value = WechatContants.Template.api_create, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建微信模版", notes = "创建微信模版")
    @HystrixCommand(commandProperties = {
@ -38,10 +43,13 @@ public class WechatTemplateControlle {
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop createWxTemplate(
            @ApiParam(name = "json_data", value = "微信模版json字符串")
            @RequestBody String jsonData) {
            @RequestBody String jsonData) throws JiWeiException {
        tracer.getCurrentSpan().logEvent("创建微信模板:jsonData="+jsonData);
        //{"id":null,"code":"","saasId":"1","name":"aaaawefr","token":"","encodingAesKey":"","encType":null,"status":0,"type":"1","appId":"","appSecret":"","baseUrl":"","createUser":"","createUserName":"","createTime":null,"updateUser":null,"updateUserName":null,"updateTime":null,"remark":""}
        return wechatTemplateFegin.createWxTemplate(jsonData);
    }
    @ApiVersion(1)
    @PutMapping(value = WechatContants.Template.api_update, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "修改微信模版", notes = "修改微信模版")
    @HystrixCommand(commandProperties = {
@ -49,22 +57,29 @@ public class WechatTemplateControlle {
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop updateWxTemplate(
            @ApiParam(name = "json_data", value = "", defaultValue = "")
            @RequestBody String jsonData) {
        return wechatTemplateFegin.updateWxTemplate(jsonData);
            @RequestBody String jsonData) throws JiWeiException {
        JSONObject json = new JSONObject(jsonData);
        String data = json.get("jsonData").toString();
        data = data.substring(2,data.length() - 2);
        data = data.replaceAll("\\\\\"","\"");
        tracer.getCurrentSpan().logEvent("更新模板配置:jsonData="+data);
        return wechatTemplateFegin.updateWxTemplate(data);
    }
    @ApiVersion(1)
    @DeleteMapping(value = WechatContants.Template.api_delete)
    @ApiOperation(value = "删除微信模版", notes = "删除微信模版")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop deleteWxTemplate(
            @ApiParam(name = "code", value = "code")
            @RequestParam(value = "code", required = true) String code) {
        return wechatTemplateFegin.deleteWxTemplate(code);
            @ApiParam(name = "codes", value = "codes")
            @PathVariable(value = "codes", required = true) String codes) throws JiWeiException {
        return wechatTemplateFegin.deleteWxTemplate(codes);
    }
    @ApiVersion(1)
    @GetMapping(value = WechatContants.Template.api_getByCode)
    @ApiOperation(value = "根据code查找微信模版", notes = "根据code查找微信模版")
    @HystrixCommand(commandProperties = {
@ -72,14 +87,18 @@ public class WechatTemplateControlle {
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop findByCode(
            @ApiParam(name = "code", value = "code")
            @RequestParam(value = "code", required = true) String code
    ) {
            @PathVariable(value = "code", required = true) String code
    ) throws JiWeiException {
        return wechatTemplateFegin.findByCode(code);
    }
    @ApiVersion(1)
    @RequestMapping(value = WechatContants.Template.api_getWxTemplates, method = RequestMethod.GET)
    @ApiOperation(value = "获取微信模版列表(分页)")
    public Envelop getWechats(
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop getTemplates(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "id,code,title,wechatCode,templateId,content,remark,status")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
@ -90,16 +109,24 @@ public class WechatTemplateControlle {
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        return wechatTemplateFegin.getWechats(fields,filters,sorts,size,page);
        String filterStr = "";
        if(StringUtils.isNotBlank(filters)){
            filters = filters.replaceAll("=", ":");
            JSONObject jsonResult = new JSONObject(filters);
            if(jsonResult.has("name")){
                filterStr+="name?"+jsonResult.get("name")+";";
            }
        }
        return wechatTemplateFegin.getWechats(fields,filterStr,sorts,size,page);
    }
    @ApiVersion(1)
    @GetMapping(value = WechatContants.Template.api_getWxTemplatesNoPage)
    @ApiOperation(value = "获取微信模版列表(不分页)")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop getWechatNoPage(
    public Envelop getTemplateNoPage(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "id,code,title,wechatCode,templateId,content,remark,status")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
@ -109,6 +136,7 @@ public class WechatTemplateControlle {
        return wechatTemplateFegin.getWechatNoPage(fields,filters,sorts);
    }
    @ApiVersion(1)
    @GetMapping(value = WechatContants.Template.api_sendTemplateMessage)
    @ApiOperation(value = "发送微信模板消息")
    @HystrixCommand(commandProperties = {

+ 10 - 8
web-gateway/src/main/java/com/yihu/jw/fegin/base/wx/WechatTemplateFegin.java

@ -3,8 +3,10 @@ package com.yihu.jw.fegin.base.wx;
import com.yihu.jw.fegin.fallbackfactory.base.wx.WechatTemplateFeginFallbackFactory;
import com.yihu.jw.restmodel.common.CommonContants;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.exception.business.JiWeiException;
import com.yihu.jw.restmodel.wx.WxContants;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
/**
@ -17,23 +19,23 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping(value = WxContants.WxTemplate.api_common)
public interface WechatTemplateFegin {
    @RequestMapping(value = WxContants.WxTemplate.api_create ,method = RequestMethod.POST)
    Envelop createWxTemplate(@RequestBody String jsonData);
    @RequestMapping(value = WxContants.WxTemplate.api_create ,method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop createWxTemplate(@RequestBody String jsonData) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_update ,method = RequestMethod.PUT)
    Envelop updateWxTemplate(@RequestBody String jsonData);
    @RequestMapping(value = WxContants.WxTemplate.api_update ,method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop updateWxTemplate(@RequestBody String jsonData) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_delete ,method = RequestMethod.DELETE)
    Envelop deleteWxTemplate( @RequestParam(value = "code", required = true) String code);
    Envelop deleteWxTemplate( @RequestParam(value = "code", required = true) String code) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_getByCode ,method = RequestMethod.GET)
    Envelop findByCode( @RequestParam(value = "code", required = true) String code);
    Envelop findByCode( @RequestParam(value = "code", required = true) String code) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_getWxTemplatesNoPage ,method = RequestMethod.GET)
    Envelop getWechatNoPage(
            @RequestParam(value = "fields", required = false) String fields,
            @RequestParam(value = "filters", required = false) String filters,
            @RequestParam(value = "sorts", required = false) String sorts);
            @RequestParam(value = "sorts", required = false) String sorts) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_getWxTemplates, method = RequestMethod.GET)
    Envelop getWechats(
@ -41,7 +43,7 @@ public interface WechatTemplateFegin {
            @RequestParam(value = "filters", required = false) String filters,
            @RequestParam(value = "sorts", required = false) String sorts,
            @RequestParam(value = "size", required = false) int size,
            @RequestParam(value = "page", required = false) int page);
            @RequestParam(value = "page", required = false) int page) throws JiWeiException;
    @RequestMapping(value = WxContants.WxTemplate.api_sendTemplateMessage ,method = RequestMethod.GET)
    @ResponseBody

+ 37 - 13
web-gateway/src/main/java/com/yihu/jw/fegin/fallbackfactory/base/wx/WechatTemplateFeginFallbackFactory.java

@ -2,7 +2,10 @@ package com.yihu.jw.fegin.fallbackfactory.base.wx;
import com.yihu.jw.fegin.base.wx.WechatTemplateFegin;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.exception.business.JiWeiException;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
/**
@ -11,27 +14,38 @@ import org.springframework.stereotype.Component;
@Component
public class WechatTemplateFeginFallbackFactory implements FallbackFactory<WechatTemplateFegin>{
    @Autowired
    private Tracer tracer;
    @Override
    public WechatTemplateFegin create(Throwable throwable) {
    public WechatTemplateFegin create(Throwable e) {
        return new WechatTemplateFegin() {
            @Override
            public Envelop createWxTemplate(String jsonData) {
                return null;
            public Envelop createWxTemplate(String jsonData) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("创建微信模板消息失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:"+jsonData);
                throw new JiWeiException(e);
            }
            @Override
            public Envelop updateWxTemplate(String jsonData) {
                return null;
            public Envelop updateWxTemplate(String jsonData) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("更新微信模板消息失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:"+jsonData);
                throw new JiWeiException(e);
            }
            @Override
            public Envelop deleteWxTemplate(String code) {
                return null;
            public Envelop deleteWxTemplate(String codes) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("删除微信模板消息失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("codes:"+codes);
                throw new JiWeiException(e);
            }
            @Override
            public Envelop findByCode(String code) {
                return null;
            public Envelop findByCode(String code) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("根据code查找微信模板消息失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("code:"+code);
                throw new JiWeiException(e);
            }
            @Override
@ -40,13 +54,23 @@ public class WechatTemplateFeginFallbackFactory implements FallbackFactory<Wecha
            }
            @Override
            public Envelop getWechatNoPage(String fields, String filters, String sorts) {
                return null;
            public Envelop getWechatNoPage(String fields, String filters, String sorts) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("查找微信模板消息列表失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("fields:" + fields);
                tracer.getCurrentSpan().logEvent("filters:" + filters);
                tracer.getCurrentSpan().logEvent("sorts:" + sorts);
                throw new JiWeiException(e);
            }
            @Override
            public Envelop getWechats(String fields, String filters, String sorts, int size, int page) {
                return null;
            public Envelop getWechats(String fields, String filters, String sorts, int size, int page) throws JiWeiException {
                tracer.getCurrentSpan().logEvent("分页查找微信模板消息失败:原因:"+e.getMessage());
                tracer.getCurrentSpan().logEvent("fields:" + fields);
                tracer.getCurrentSpan().logEvent("filters:" + filters);
                tracer.getCurrentSpan().logEvent("sorts:" + sorts);
                tracer.getCurrentSpan().logEvent("size:" + size);
                tracer.getCurrentSpan().logEvent("page:" + page);
                throw new JiWeiException(e);
            }
        };
    }