Sfoglia il codice sorgente

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

LiTaohong 6 anni fa
parent
commit
d30c27dd3c
100 ha cambiato i file con 6167 aggiunte e 946 eliminazioni
  1. 2 2
      common/common-entity/src/main/java/com/yihu/jw/entity/base/customize/UserHideModuleFunctionDO.java
  2. 0 85
      common/common-entity/src/main/java/com/yihu/jw/entity/base/function/FunctionDO.java
  3. 56 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/ModuleDO.java
  4. 170 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceDO.java
  5. 87 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceErrorCodeDO.java
  6. 137 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceParamDO.java
  7. 154 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasModuleDO.java
  8. 154 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasTypeModuleDO.java
  9. 70 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/notice/NoticeDO.java
  10. 28 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/notice/UserNoticeDO.java
  11. 13 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/role/MenuDO.java
  12. 3 12
      common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDO.java
  13. 50 50
      common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDefaultModuleFunctionDO.java
  14. 50 50
      common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasModuleFunctionDO.java
  15. 52 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasTypeDictDO.java
  16. 36 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/WxGraphicSceneDO.java
  17. 37 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/WxWechatSaasDO.java
  18. 31 0
      common/common-exception/src/main/java/com/yihu/jw/exception/code/BaseErrorCode.java
  19. 62 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  20. 2 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/health/house/HealthyHouseMapping.java
  21. 1 1
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/customize/UserHideModuleFunctionVO.java
  22. 82 82
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/function/FunctionVO.java
  23. 13 6
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/InterfaceErrorCodeVO.java
  24. 24 12
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/InterfaceParamVO.java
  25. 84 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceErrorCodeVO.java
  26. 134 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceParamVO.java
  27. 167 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceVO.java
  28. 137 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasModuleVO.java
  29. 137 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasTypeModuleVO.java
  30. 2 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/notice/NoticeVO.java
  31. 2 10
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/notice/UserNoticeVO.java
  32. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/role/MenuVO.java
  33. 4 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasBusinessCardVO.java
  34. 45 45
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasDefaultModuleFunctionVO.java
  35. 48 48
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasModuleFunctionVO.java
  36. 47 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasTypeDictVO.java
  37. 4 4
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasVO.java
  38. 39 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxComboVO.java
  39. 40 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxGraphicSceneVO.java
  40. 79 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxReplySceneVO.java
  41. 263 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxTemplateConfigVO.java
  42. 51 60
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxTemplateVO.java
  43. 4 1
      common/common-util/pom.xml
  44. 15 0
      common/common-util/src/main/java/com/yihu/jw/util/http/AllowAllHostnameVerifier.java
  45. 100 0
      common/common-util/src/main/java/com/yihu/jw/util/http/CustomTrustClientClientImpl.java
  46. 336 0
      common/common-util/src/main/java/com/yihu/jw/util/http/DefaultClientImpl.java
  47. 54 0
      common/common-util/src/main/java/com/yihu/jw/util/http/HTTPClient.java
  48. 23 0
      common/common-util/src/main/java/com/yihu/jw/util/http/HTTPResponse.java
  49. 155 0
      common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientKit.java
  50. 6 2
      gateway/ag-basic/src/main/resources/application.yml
  51. 2 2
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/customize/UserHideModuleFunctionDao.java
  52. 21 13
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/function/FunctionDao.java
  53. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/ModuleDao.java
  54. 22 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceDao.java
  55. 25 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceErrorCodeDao.java
  56. 25 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceParamDao.java
  57. 25 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasModuleDao.java
  58. 21 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasTypeModuleDao.java
  59. 3 1
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/notice/NoticeDao.java
  60. 19 17
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasDefaultModuleFunctionDao.java
  61. 13 13
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasModuleFunctionDao.java
  62. 23 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasTypeDictDao.java
  63. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/user/UserDao.java
  64. 11 14
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxGraphicMessageDao.java
  65. 11 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxGraphicSceneDao.java
  66. 20 20
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxTemplateDao.java
  67. 14 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxWechatSaasDao.java
  68. 165 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/FileUploadController.java
  69. 15 15
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/customize/UserHideModuleFunctionEndpoint.java
  70. 96 96
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/function/FunctionEndpoint.java
  71. 121 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/module/SaasInterfaceEndpoint.java
  72. 123 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/NoticeEndPoint.java
  73. 54 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/UserNoticeEndpoint.java
  74. 96 96
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasDefaultModuleFunctionEndpoint.java
  75. 96 96
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasModuleFunctionEndpoint.java
  76. 113 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasTypeDictEndpoint.java
  77. 196 5
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java
  78. 5 0
      svr/svr-base/src/main/java/com/yihu/jw/base/listener/ApplicationReadyListener.java
  79. 3 3
      svr/svr-base/src/main/java/com/yihu/jw/base/service/customize/UserHideModuleFunctionService.java
  80. 16 16
      svr/svr-base/src/main/java/com/yihu/jw/base/service/function/FunctionService.java
  81. 93 6
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/InterfaceService.java
  82. 185 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/ModuleService.java
  83. 16 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceErrorCodeService.java
  84. 15 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceParamService.java
  85. 94 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceService.java
  86. 16 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasModuleService.java
  87. 16 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasTypeModuleService.java
  88. 168 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/notice/NoticeService.java
  89. 62 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/notice/UserNoticeService.java
  90. 22 15
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasDefaultModuleFunctionService.java
  91. 17 17
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasModuleFunctionService.java
  92. 14 21
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java
  93. 91 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasTypeDictService.java
  94. 355 5
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java
  95. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/util/ErrorCodeUtil.java
  96. 79 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/DelayService.java
  97. 53 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/Notice.java
  98. 12 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/OnDelayedListener.java
  99. 196 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/RedisLock.java
  100. 0 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/threadPool/ThreadPool.java

+ 2 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/base/customize/UserHideModuleFunctionDO.java

@ -12,8 +12,8 @@ import javax.persistence.Table;
 * @date Created on 2018/8/14.
 */
@Entity
@Table(name = "base_user_hide_module_function")
public class UserHideModuleFunctionDO extends IntegerIdentityEntity {
@Table(name = "base_user_hide_module_interface")
public class UserHideModuleInterfaceDO extends IntegerIdentityEntity {
    /**
     * 对象ID

+ 0 - 85
common/common-entity/src/main/java/com/yihu/jw/entity/base/function/FunctionDO.java

@ -1,85 +0,0 @@
package com.yihu.jw.entity.base.function;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
 * Entity - 功能
 * Created by progr1mmer on 2018/8/14.
 */
@Entity
@Table(name = "base_function")
public class FunctionDO extends UuidIdentityEntityWithOperator {
    //关联 base_module ID
    private String moduleId;
    //功能名称
    private String name;
    //网关url前缀
    private String prefix;
    //功能对应的后台url路径
    private String url;
    //备注
    private String remark;
    //用于jstree显示
    private String text;
    @Column(name = "module_id", nullable = false, length = 50)
    public String getModuleId() {
        return this.moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    @Column(name = "name", length = 200)
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "prefix")
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    @Column(name = "url")
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Column(name = "remark")
    public String getRemark() {
        return this.remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Transient
    public String getText() {
        return name;
    }
    public void setText(String text) {
        this.text = text;
    }
}

+ 56 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/ModuleDO.java

@ -75,6 +75,62 @@ public class ModuleDO extends UuidIdentityEntityWithOperator {
		}
	}
	public enum Must {
		nonMust("非必选", 0),
		must("必选", 1);
		private String name;
		private Integer value;
		Must(String name, Integer value) {
			this.name = name;
			this.value = value;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Integer getValue() {
			return value;
		}
		public void setValue(Integer value) {
			this.value = value;
		}
	}
    public enum End {
        have("有子节点", 0),
        no("没有子节点", 1);
        private String name;
        private Integer value;
        End(String name, Integer value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getValue() {
            return value;
        }
        public void setValue(Integer value) {
            this.value = value;
        }
    }
	//模块名称
	private String name;
	//模块连接

+ 170 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceDO.java

@ -0,0 +1,170 @@
package com.yihu.jw.entity.base.module;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;
/**
 * 租户接口
 * @author yeshijie on 2018/10/11.
 */
@Entity
@Table(name = "base_saas_interface")
public class SaasInterfaceDO extends UuidIdentityEntity {
    private String name;//接口名称
    private String saasId;//saas_id
    private String interfaceId;//接口id
    private String moduleId;//模块id
    private String moduleName;//模块名称
    private String methodName;//方法名
    private Integer protocolType;//协议类型(2restful,1webservice)
    private Integer openLevel;//开发程度(1公开,2私有)
    private Integer checkLevel;//审计程度(1审计,2不审计)
    private Integer status;//状态(1启用中,0已暂停)
    private String remark;//接口说明
    private String url;//https请求地址
    private List<SaasInterfaceParamDO> entryParams;//入参
    private List<SaasInterfaceParamDO> outParams;//出参
    private List<SaasInterfaceErrorCodeDO> errorCodes;//错误说明
    @Column(name = "saas_id")
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    @Column(name = "interface_id")
    public String getInterfaceId() {
        return interfaceId;
    }
    public void setInterfaceId(String interfaceId) {
        this.interfaceId = interfaceId;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "module_id")
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    @Column(name = "module_name")
    public String getModuleName() {
        return moduleName;
    }
    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }
    @Column(name = "method_name")
    public String getMethodName() {
        return methodName;
    }
    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }
    @Column(name = "protocol_type")
    public Integer getProtocolType() {
        return protocolType;
    }
    public void setProtocolType(Integer protocolType) {
        this.protocolType = protocolType;
    }
    @Column(name = "open_level")
    public Integer getOpenLevel() {
        return openLevel;
    }
    public void setOpenLevel(Integer openLevel) {
        this.openLevel = openLevel;
    }
    @Column(name = "check_level")
    public Integer getCheckLevel() {
        return checkLevel;
    }
    public void setCheckLevel(Integer checkLevel) {
        this.checkLevel = checkLevel;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Column(name = "url")
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Transient
    public List<SaasInterfaceParamDO> getEntryParams() {
        return entryParams;
    }
    public void setEntryParams(List<SaasInterfaceParamDO> entryParams) {
        this.entryParams = entryParams;
    }
    @Transient
    public List<SaasInterfaceParamDO> getOutParams() {
        return outParams;
    }
    public void setOutParams(List<SaasInterfaceParamDO> outParams) {
        this.outParams = outParams;
    }
    @Transient
    public List<SaasInterfaceErrorCodeDO> getErrorCodes() {
        return errorCodes;
    }
    public void setErrorCodes(List<SaasInterfaceErrorCodeDO> errorCodes) {
        this.errorCodes = errorCodes;
    }
}

+ 87 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceErrorCodeDO.java

@ -0,0 +1,87 @@
package com.yihu.jw.entity.base.module;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 接口错误说明
 * @author yeshijie on 2018/10/11.
 */
@Entity
@Table(name = "base_saas_interface_error_code")
public class SaasInterfaceErrorCodeDO extends UuidIdentityEntity {
    private String saasId;//saas_id
    private String saasInterfaceId;//接口id
    private String name;//错误码名称
    private String description;//错误码描述
    private String solution;//解决方案
    private Integer sort;//排序
    private Integer del;//删除标志
    @Column(name = "saas_id")
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    @Column(name = "saas_interface_id")
    public String getSaasInterfaceId() {
        return saasInterfaceId;
    }
    public void setSaasInterfaceId(String saasInterfaceId) {
        this.saasInterfaceId = saasInterfaceId;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "description")
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Column(name = "solution")
    public String getSolution() {
        return solution;
    }
    public void setSolution(String solution) {
        this.solution = solution;
    }
    @Column(name = "sort")
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    @Column(name = "del")
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
}

+ 137 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasInterfaceParamDO.java

@ -0,0 +1,137 @@
package com.yihu.jw.entity.base.module;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 接口入参出参
 * @author yeshijie on 2018/10/11.
 */
@Entity
@Table(name = "base_saas_interface_param")
public class SaasInterfaceParamDO extends UuidIdentityEntity {
    private String saasId;//saas_id
    private String saasInterfaceId;//接口id
    private String name;//参数名
    private Integer paramType;//参数类型
    private Integer dataType;//数据类型
    private Integer isRequire;//是否必填(1是,0否)
    private Integer maxLength;//最大长度
    private String description;//描述
    private String example;//示例
    private Integer type;//类型(1入参,2出参)
    private Integer sort;//排序
    private Integer del;//删除标志
    @Column(name = "saas_id")
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    @Column(name = "saas_interface_id")
    public String getSaasInterfaceId() {
        return saasInterfaceId;
    }
    public void setSaasInterfaceId(String saasInterfaceId) {
        this.saasInterfaceId = saasInterfaceId;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "param_type")
    public Integer getParamType() {
        return paramType;
    }
    public void setParamType(Integer paramType) {
        this.paramType = paramType;
    }
    @Column(name = "data_type")
    public Integer getDataType() {
        return dataType;
    }
    public void setDataType(Integer dataType) {
        this.dataType = dataType;
    }
    @Column(name = "is_require")
    public Integer getIsRequire() {
        return isRequire;
    }
    public void setIsRequire(Integer isRequire) {
        this.isRequire = isRequire;
    }
    @Column(name = "max_length")
    public Integer getMaxLength() {
        return maxLength;
    }
    public void setMaxLength(Integer maxLength) {
        this.maxLength = maxLength;
    }
    @Column(name = "description")
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Column(name = "example")
    public String getExample() {
        return example;
    }
    public void setExample(String example) {
        this.example = example;
    }
    @Column(name = "type")
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Column(name = "sort")
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    @Column(name = "del")
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
}

+ 154 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasModuleDO.java

@ -0,0 +1,154 @@
package com.yihu.jw.entity.base.module;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
/**
 * Entity - 租户模块
 * Created by yeshijie on 2018/10/11.
 */
@Entity
@Table(name = "base_saas_module")
public class SaasModuleDO extends UuidIdentityEntityWithOperator {
	//saasId
	private String saasId;
	//模块名称
	private String name;
	//模块连接
	private String url;
	//模块id
	private String moduleId;
	//父模块id
	private String parentModuleId;
	//状态
	private Integer status;
	//类型
	private Integer type;
	//备注
	private String remark;
	//0-表示有子节点,1-表示没有子节点
	private Integer isEnd ;
	//0-表示非必选,1-表示必选
	private Integer isMust ;
	//逻辑删除标志1正常,0删除
	private Integer del ;
	//子集
	private List<SaasModuleDO> children = new ArrayList<>();
	// Constructors
	@Column(name = "saas_id")
	public String getSaasId() {
		return saasId;
	}
	public void setSaasId(String saasId) {
		this.saasId = saasId;
	}
	@Column(name = "name")
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
	@Column(name = "module_id")
	public String getModuleId() {
		return moduleId;
	}
	public void setModuleId(String moduleId) {
		this.moduleId = moduleId;
	}
	@Column(name = "parent_module_id")
	public String getParentModuleId() {
		return parentModuleId;
	}
	public void setParentModuleId(String parentModuleId) {
		this.parentModuleId = parentModuleId;
	}
	@Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
	@Column(name = "remark")
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	@Column(name = "url")
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	@Column(name = "type")
	public Integer getType() {
		return type;
	}
	public void setType(Integer type) {
		this.type = type;
	}
	@Column(name = "is_end")
	public Integer getIsEnd() {
		return isEnd;
	}
	public void setIsEnd(Integer isEnd) {
		this.isEnd = isEnd;
	}
	@Column(name = "del")
	public Integer getDel() {
		return del;
	}
	public void setDel(Integer del) {
		this.del = del;
	}
	@Column(name = "is_must")
	public Integer getIsMust() {
		return isMust;
	}
	public void setIsMust(Integer isMust) {
		this.isMust = isMust;
	}
	@Transient
	public List<SaasModuleDO> getChildren() {
		return children;
	}
	public void setChildren(List<SaasModuleDO> children) {
		this.children = children;
	}
}

+ 154 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/module/SaasTypeModuleDO.java

@ -0,0 +1,154 @@
package com.yihu.jw.entity.base.module;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
/**
 * Entity - 租户类型模块
 * Created by yeshijie on 2018/10/11.
 */
@Entity
@Table(name = "base_saas_type_module")
public class SaasTypeModuleDO extends UuidIdentityEntityWithOperator {
	//租户类型id
	private String saasTypeId;
	//模块名称
	private String name;
	//模块连接
	private String url;
	//模块id
	private String moduleId;
	//父模块id
	private String parentModuleId;
	//状态
	private Integer status;
	//类型
	private Integer type;
	//备注
	private String remark;
	//0-表示有子节点,1-表示没有子节点
	private Integer isEnd ;
	//0-表示非必选,1-表示必选
	private Integer isMust ;
	//逻辑删除标志1正常,0删除
	private Integer del ;
	//子集
	private List<SaasTypeModuleDO> children = new ArrayList<>();
	// Constructors
	@Column(name = "saas_type_id")
	public String getSaasTypeId() {
		return saasTypeId;
	}
	public void setSaasTypeId(String saasTypeId) {
		this.saasTypeId = saasTypeId;
	}
	@Column(name = "name")
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
	@Column(name = "module_id")
	public String getModuleId() {
		return moduleId;
	}
	public void setModuleId(String moduleId) {
		this.moduleId = moduleId;
	}
	@Column(name = "parent_module_id")
	public String getParentModuleId() {
		return parentModuleId;
	}
	public void setParentModuleId(String parentModuleId) {
		this.parentModuleId = parentModuleId;
	}
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
	@Column(name = "remark")
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	@Column(name = "url")
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	@Column(name = "type")
	public Integer getType() {
		return type;
	}
	public void setType(Integer type) {
		this.type = type;
	}
	@Column(name = "is_end")
	public Integer getIsEnd() {
		return isEnd;
	}
	public void setIsEnd(Integer isEnd) {
		this.isEnd = isEnd;
	}
	@Column(name = "del")
	public Integer getDel() {
		return del;
	}
	public void setDel(Integer del) {
		this.del = del;
	}
	@Column(name = "is_must")
	public Integer getIsMust() {
		return isMust;
	}
	public void setIsMust(Integer isMust) {
		this.isMust = isMust;
	}
	@Transient
	public List<SaasTypeModuleDO> getChildren() {
		return children;
	}
	public void setChildren(List<SaasTypeModuleDO> children) {
		this.children = children;
	}
}

+ 70 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/notice/NoticeDO.java

@ -1,5 +1,6 @@
package com.yihu.jw.entity.base.notice;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
@ -15,6 +16,62 @@ import java.util.Date;
@Table(name = "base_notice")
public class NoticeDO extends UuidIdentityEntityWithOperator{
    public enum Status{
        wait("待发布",1),
        released("已发布",2);
        private String name;
        private Integer value;
        Status(String name, Integer value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getValue() {
            return value;
        }
        public void setValue(Integer value) {
            this.value = value;
        }
    }
    public enum SendType{
        manual_release("手动发布",1),
        automatic_release("自动发布",2);
        private String name;
        private Integer value;
        SendType(String name, Integer value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getValue() {
            return value;
        }
        public void setValue(Integer value) {
            this.value = value;
        }
    }
    private String title;//公告标题
    private Integer status;//状态(1待发布,2已发布)
    private Date sendTime;//发布时间
@ -50,6 +107,7 @@ public class NoticeDO extends UuidIdentityEntityWithOperator{
    }
    @Column(name = "send_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getSendTime() {
        return sendTime;
    }
@ -75,4 +133,16 @@ public class NoticeDO extends UuidIdentityEntityWithOperator{
    public void setDel(Integer del) {
        this.del = del;
    }
    @Override
    public String toString() {
        return "NoticeDO{" +
                "title='" + title + '\'' +
                ", status=" + status +
                ", sendTime=" + sendTime +
                ", content='" + content + '\'' +
                ", sendType=" + sendType +
                ", del=" + del +
                '}';
    }
}

+ 28 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/notice/UserNoticeDO.java

@ -14,6 +14,34 @@ import javax.persistence.Table;
@Table(name = "base_user_notice")
public class UserNoticeDO extends UuidIdentityEntity{
    public enum Read{
        unRead("未读",0),
        read("已读",1);
        private String name;
        private Integer value;
        Read(String name, Integer value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getValue() {
            return value;
        }
        public void setValue(Integer value) {
            this.value = value;
        }
    }
    private String noticeId;//公告id
    private String userId;//用户id
    private Integer isRead;//是否已读(1已读,0未读)

+ 13 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/role/MenuDO.java

@ -23,6 +23,10 @@ public class MenuDO extends UuidIdentityEntityWithOperator {
	 * 请求路径
	 */
	private String url;
	/**
	 * 菜单图标
	 */
	private String icon;
	/**
	 * 请求方式
	 */
@ -107,6 +111,15 @@ public class MenuDO extends UuidIdentityEntityWithOperator {
		this.url = url;
	}
	@Column(name = "icon")
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	@Column(name = "method")
	public String getMethod() {
		return method;

+ 3 - 12
common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDO.java

@ -26,21 +26,12 @@ public class SaasDO extends UuidIdentityEntityWithOperator {
		delete
    }
	public enum Type {
	    //家医
        familyDoctor,
        //等级医院
        gradeHospital,
        //混合型
        hybrid
    }
    private String orgCode; //机构编码
	private String name; //系统名称
	private Status status; //状态  0待审核 1审核通过 2审核不通过 3已删除
	private String remark; //备注
	private String logo; //远程fastDFS文件地址
    private Type type; //类型
    private Integer type; //类型
	private String manager; //管理员 - 关联user表id字段
	private String email; //管理员邮箱
	private String mobile; //管理员手机号码
@ -91,11 +82,11 @@ public class SaasDO extends UuidIdentityEntityWithOperator {
	}
	@Column(name = "type", nullable = false)
	public Type getType() {
	public Integer getType() {
		return type;
	}
	public void setType(Type type) {
	public void setType(Integer type) {
		this.type = type;
	}

+ 50 - 50
common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDefaultModuleFunctionDO.java

@ -1,50 +1,50 @@
package com.yihu.jw.entity.base.saas;
import com.yihu.jw.entity.IntegerIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Entity - Saas默认模块功能
 * Created by progr1mmer on 2018/8/14.
 */
@Entity
@Table(name = "base_saas_default_module_function")
public class SaasDefaultModuleFunctionDO extends IntegerIdentityEntity {
    //Saas类型
    private SaasDO.Type saasType;
    //模块ID
    private String moduleId;
    //功能ID
    private String functionId;
    @Column(name = "saas_type", nullable = false)
    public SaasDO.Type getSaasType() {
        return saasType;
    }
    public void setSaasType(SaasDO.Type saasType) {
        this.saasType = saasType;
    }
    @Column(name = "module_id", nullable = false, length = 50)
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    @Column(name = "function_id", nullable = false, length = 50)
    public String getFunctionId() {
        return functionId;
    }
    public void setFunctionId(String functionId) {
        this.functionId = functionId;
    }
}
//package com.yihu.jw.entity.base.saas;
//
//import com.yihu.jw.entity.IntegerIdentityEntity;
//
//import javax.persistence.Column;
//import javax.persistence.Entity;
//import javax.persistence.Table;
//
///**
// * Entity - Saas默认模块功能
// * Created by progr1mmer on 2018/8/14.
// */
//@Entity
//@Table(name = "base_saas_default_module_function")
//public class SaasDefaultModuleFunctionDO extends IntegerIdentityEntity {
//
//    //Saas类型
//    private Integer saasType;
//    //模块ID
//    private String moduleId;
//    //功能ID
//    private String functionId;
//
//    @Column(name = "saas_type", nullable = false)
//    public Integer getSaasType() {
//        return saasType;
//    }
//
//    public void setSaasType(Integer saasType) {
//        this.saasType = saasType;
//    }
//
//    @Column(name = "module_id", nullable = false, length = 50)
//    public String getModuleId() {
//        return moduleId;
//    }
//
//    public void setModuleId(String moduleId) {
//        this.moduleId = moduleId;
//    }
//
//    @Column(name = "function_id", nullable = false, length = 50)
//    public String getFunctionId() {
//        return functionId;
//    }
//
//    public void setFunctionId(String functionId) {
//        this.functionId = functionId;
//    }
//}

+ 50 - 50
common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasModuleFunctionDO.java

@ -1,50 +1,50 @@
package com.yihu.jw.entity.base.saas;
import com.yihu.jw.entity.IntegerIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Entity - Saas所分配的模块功能
 * Created by progr1mmer on 2018/8/27.
 */
@Entity
@Table(name = "base_saas_module_function")
public class SaasModuleFunctionDO extends IntegerIdentityEntity {
    //Saas ID
    private String saasId;
    //模块ID
    private String moduleId;
    //功能ID
    private String functionId;
    @Column(name = "saas_id", nullable = false, length = 50)
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    @Column(name = "module_id", nullable = false, length = 50)
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    @Column(name = "function_id", nullable = false, length = 50)
    public String getFunctionId() {
        return functionId;
    }
    public void setFunctionId(String functionId) {
        this.functionId = functionId;
    }
}
//package com.yihu.jw.entity.base.saas;
//
//import com.yihu.jw.entity.IntegerIdentityEntity;
//
//import javax.persistence.Column;
//import javax.persistence.Entity;
//import javax.persistence.Table;
//
///**
// * Entity - Saas所分配的模块功能
// * Created by progr1mmer on 2018/8/27.
// */
//@Entity
//@Table(name = "base_saas_module_function")
//public class SaasModuleFunctionDO extends IntegerIdentityEntity {
//
//    //Saas ID
//    private String saasId;
//    //模块ID
//    private String moduleId;
//    //功能ID
//    private String functionId;
//
//    @Column(name = "saas_id", nullable = false, length = 50)
//    public String getSaasId() {
//        return saasId;
//    }
//
//    public void setSaasId(String saasId) {
//        this.saasId = saasId;
//    }
//
//    @Column(name = "module_id", nullable = false, length = 50)
//    public String getModuleId() {
//        return moduleId;
//    }
//
//    public void setModuleId(String moduleId) {
//        this.moduleId = moduleId;
//    }
//
//    @Column(name = "function_id", nullable = false, length = 50)
//    public String getFunctionId() {
//        return functionId;
//    }
//
//    public void setFunctionId(String functionId) {
//        this.functionId = functionId;
//    }
//}

+ 52 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasTypeDictDO.java

@ -0,0 +1,52 @@
package com.yihu.jw.entity.base.saas;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by zdm on 2018/10/10.
 */
@Entity
@Table(name = "base_saas_type_dict")
public class SaasTypeDictDO extends UuidIdentityEntityWithOperator{
    public enum  Status{
        //失效
        invalid,
        //生效
        effective
    }
    //Saas类型编码
    private Integer code;
    //Saas类型名称
    private String name;
    //状态(1生效中,0已失效)
    private Status status;
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Status getStatus() {
        return status;
    }
    public void setStatus(Status status) {
        this.status = status;
    }
}

+ 36 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/WxGraphicSceneDO.java

@ -0,0 +1,36 @@
package com.yihu.jw.entity.base.wx;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by Administrator on 2018/10/9.
 */@Entity
@Table(name = "wx_graphic_scene")
public class WxGraphicSceneDO extends UuidIdentityEntity implements java.io.Serializable{
    private String wechatId;//所属微信
    private String scene;//场景值
    @Column(name = "wechat_id")
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    @Column(name="scene")
    public String getScene() {
        return scene;
    }
    public void setScene(String scene) {
        this.scene = scene;
    }
}

+ 37 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/WxWechatSaasDO.java

@ -0,0 +1,37 @@
package com.yihu.jw.entity.base.wx;
import com.yihu.jw.entity.UuidIdentityEntity;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by Administrator on 2018/10/8.
 */
@Entity
@Table(name = "wx_wechat_saas")
public class WxWechatSaasDO extends UuidIdentityEntity implements java.io.Serializable {
    private String wechatId;
    private String saasId;
    @Column(name="wechat_id")
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    @Column(name="saas_id")
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
}

+ 31 - 0
common/common-exception/src/main/java/com/yihu/jw/exception/code/BaseErrorCode.java

@ -63,6 +63,18 @@ public class BaseErrorCode {
     */
    public static class Notice{
        public static final String FINDDICTBYCODE = "-105000";
        /**
         * 请输入50个字以内的公告标题
         */
        public static final String LIMIT_TITLE = "-105001";
        /**
         * 已经发布,请不要重复发布
         */
        public static final String HAD_RELEASE = "-105002";
        /**
         * 自动发布,不允许手动发布
         */
        public static final String AUTO_RELEASE = "-105003";
    }
    /**
@ -72,6 +84,25 @@ public class BaseErrorCode {
        public static final String FINDDICTBYCODE = "-106000";
    }
    /**
     * 通知公告模块
     */
    public static class FileUpload{
        /**
         * 文件格式错误
         */
        public static final String FAIL_UPLOAD_FORMAT = "-107000";
        /**
         * 文件大小不超过{}M
         */
        public static final String FAIL_FILE_SIZE = "-107001";
        /**
         * 上传内容为空
         */
        public static final String FILE_NULL = "-107002";
    }
    /**
     * 微信模块
     */

+ 62 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java

@ -51,6 +51,13 @@ public class BaseRequestMapping {
        public static final String GENERATE = "/generate";
    }
    /**
     * SAAS类型
     */
    public static class SaasTypeDict extends Basic {
        public static final String PREFIX  = "/saas_type_dict";
    }
    /**
     * 模块
     */
@ -71,6 +78,16 @@ public class BaseRequestMapping {
        public static final String FIND_ALL  = "/findAll";
    }
    /**
     * 租户接口
     */
    public static class SaasInterface extends Basic {
        public static final String PREFIX  = "/saasInterface";
        public static final String STATUS  = "/status";
        public static final String IS_NAME_EXIST  = "/isNameExist";
        public static final String FIND_ALL  = "/findAll";
    }
    /**
     * 功能
     */
@ -157,6 +174,32 @@ public class BaseRequestMapping {
        public static final String PREFIX  = "/error";
    }
    /**
     * 通知公告
     */
    public static class Notice extends Basic {
        public static final String PREFIX  = "/notice";
        public static final String RELEASE  = "/release";
    }
    /**
     * 用户通知公告
     */
    public static class UserNotice extends Basic {
        public static final String PREFIX  = "/userNotice";
    }
    /**
     * 文件上传
     */
    public static class FileUpload extends Basic {
        public static final String PREFIX  = "/fileUpload";
        public static final String UPLOAD_STREAM_IMG  = "/upload_stream_img";
        public static final String UPLOAD_STREAM  = "/upload_stream";
        public static final String UPLOAD_STRING  = "/upload_string";
        public static final String UPLOAD_STREAM_ATTACHMENT  = "/upload_stream_attachment";
    }
    /**
     * 角色权限
     */
@ -171,7 +214,26 @@ public class BaseRequestMapping {
        public static final String PREFIX  = "/wechat";
        public static final String wechat_base ="/wechatBase";
        public static final String api_success ="success";
        public static final String getWechatInfos ="/getWechatInfos";
        public static final String saveWxAndSaas ="/saveWxAndSaas";
        public static final String updateWxAndSaas ="/updateWxAndSaas";
        public static final String findWechatCombo ="/findWechatCombo";
        public static final String findWechatImgGroup ="/findWechatImgGroup";
        public static final String createImgGroup ="/createImgGroup";
        public static final String updateImgGroup ="/updateImgGroup";
        public static final String deleteImgGroup ="/deleteImgGroup";
        public static final String saveImg ="/saveImg";
        public static final String findImg ="/findImg";
        public static final String saveImgGroup ="/saveImgGroup";
        public static final String saveWxReplyScene ="/saveWxReplyScene";
        public static final String findWxReplyScene ="/findWxReplyScene";
        public static final String saveWxTemp ="/saveWxTemp";
        public static final String saveWxTempConfig ="/saveWxTempConfig";
        public static final String findWxTempConfigList ="/findWxTempConfigList";
        public static final String findWxTemplateConfig ="/findWxTemplateConfig";
    }
    /**

+ 2 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/health/house/HealthyHouseMapping.java

@ -85,6 +85,8 @@ public class HealthyHouseMapping {
            public static final String GET_FEEDBACKS_BY_FIELD = "/getFeedBacksByField";
            public static final String UPDATE_FEEDBACKS_BY_ID = "/updateFeedBacksById";
            public static final String EXPORT_EXCEL = "/exportExcel/feedBacks";
            public static final String GET_APP_FEEDBACK_BY_ID = "/getAppFeedBackById";
            public static final String GET_APP_FEEDBACK_BY_USER_ID_AND_READFLAG = "/getAppFeedBackByUserIdAndReadFlag";
        }
        //用户使用导航记录

+ 1 - 1
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/customize/UserHideModuleFunctionVO.java

@ -11,7 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 * @date Created on 2018/9/11.
 */
@ApiModel(value = "UserHideModuleFunctionVO", description = "用户取消订阅的模块或者功能")
public class UserHideModuleFunctionVO extends IntegerIdentityVO {
public class UserHideModuleInterfaceVO extends IntegerIdentityVO {
    /**
     * 用户ID

+ 82 - 82
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/function/FunctionVO.java

@ -1,82 +1,82 @@
package com.yihu.jw.restmodel.base.function;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * VO - 功能
 * Created by progr1mmer on 2018/8/14.
 */
@ApiModel(value = "FunctionVO", description = "功能")
public class FunctionVO extends UuidIdentityVOWithOperator {
    //关联 base_module ID
    @ApiModelProperty(value = "关联 base_module ID", example = "0dae0003590016e5b3865e377b2f8615")
    private String moduleId;
    //功能名称
    @ApiModelProperty(value = "功能名称", example = "功能1")
    private String name;
    //网关url前缀
    @ApiModelProperty(value = "网关url前缀", example = "/base")
    private String prefix;
    //功能对应的后台url路径
    @ApiModelProperty(value = "功能对应的后台url路径", example = "/function/list")
    private String url;
    //备注
    @ApiModelProperty(value = "备注", example = "我是备注")
    private String remark;
    //用于jstree显示
    @ApiModelProperty(value = "用于jstree显示")
    private String text;
    public String getModuleId() {
        return this.moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getRemark() {
        return this.remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getText() {
        return name;
    }
    public void setText(String text) {
        this.text = text;
    }
}
//package com.yihu.jw.restmodel.base.function;
//
//
//import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//
//
///**
// * VO - 功能
// * Created by progr1mmer on 2018/8/14.
// */
//@ApiModel(value = "FunctionVO", description = "功能")
//public class FunctionVO extends UuidIdentityVOWithOperator {
//
//    //关联 base_module ID
//    @ApiModelProperty(value = "关联 base_module ID", example = "0dae0003590016e5b3865e377b2f8615")
//    private String moduleId;
//    //功能名称
//    @ApiModelProperty(value = "功能名称", example = "功能1")
//    private String name;
//    //网关url前缀
//    @ApiModelProperty(value = "网关url前缀", example = "/base")
//    private String prefix;
//    //功能对应的后台url路径
//    @ApiModelProperty(value = "功能对应的后台url路径", example = "/function/list")
//    private String url;
//    //备注
//    @ApiModelProperty(value = "备注", example = "我是备注")
//    private String remark;
//    //用于jstree显示
//    @ApiModelProperty(value = "用于jstree显示")
//    private String text;
//
//    public String getModuleId() {
//        return this.moduleId;
//    }
//
//    public void setModuleId(String moduleId) {
//        this.moduleId = moduleId;
//    }
//
//    public String getName() {
//        return this.name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public String getPrefix() {
//        return prefix;
//    }
//
//    public void setPrefix(String prefix) {
//        this.prefix = prefix;
//    }
//
//    public String getUrl() {
//        return url;
//    }
//
//    public void setUrl(String url) {
//        this.url = url;
//    }
//
//    public String getRemark() {
//        return this.remark;
//    }
//
//    public void setRemark(String remark) {
//        this.remark = remark;
//    }
//
//    public String getText() {
//        return name;
//    }
//
//    public void setText(String text) {
//        this.text = text;
//    }
//}

+ 13 - 6
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/InterfaceErrorCodeVO.java

@ -2,6 +2,7 @@ package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * @author yeshijie on 2018/9/28.
@ -9,12 +10,18 @@ import io.swagger.annotations.ApiModel;
@ApiModel(value = "InterfaceErrorCodeVO", description = "接口错误说明")
public class InterfaceErrorCodeVO extends UuidIdentityVO {
    private String interfaceId;//接口id
    private String name;//错误码名称
    private String description;//错误码描述
    private String solution;//解决方案
    private Integer sort;//排序
    private Integer del;//删除标志
    @ApiModelProperty(value = "接口id", example = "接口id")
    private String interfaceId;
    @ApiModelProperty(value = "错误码名称", example = "错误码名称")
    private String name;
    @ApiModelProperty(value = "错误码描述", example = "错误码描述")
    private String description;
    @ApiModelProperty(value = "解决方案", example = "解决方案")
    private String solution;
    @ApiModelProperty(value = "排序", example = "1")
    private Integer sort;
    @ApiModelProperty(value = "删除标志", example = "1")
    private Integer del;
    public String getInterfaceId() {
        return interfaceId;

+ 24 - 12
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/InterfaceParamVO.java

@ -2,24 +2,36 @@ package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * @author yeshijie on 2018/9/28.
 */
@ApiModel(value = "InterfaceParamVO", description = "接口入参出参")
public class InterfaceParamVO extends UuidIdentityVO {
    
    private String interfaceId;//接口id
    private String name;//参数名
    private Integer paramType;//参数类型
    private Integer dataType;//数据类型
    private Integer isRequire;//是否必填(1是,0否)
    private Integer maxLength;//最大长度
    private String description;//描述
    private String example;//示例
    private Integer type;//类型(1入参,2出参)
    private Integer sort;//排序
    private Integer del;//删除标志
    @ApiModelProperty(value = "接口id", example = "接口id")
    private String interfaceId;
    @ApiModelProperty(value = "参数名", example = "user")
    private String name;
    @ApiModelProperty(value = "参数类型", example = "HEADER")
    private Integer paramType;
    @ApiModelProperty(value = "数据类型", example = "VERCHAR")
    private Integer dataType;
    @ApiModelProperty(value = "是否必填(1是,0否)", example = "1")
    private Integer isRequire;
    @ApiModelProperty(value = "最大长度", example = "1")
    private Integer maxLength;
    @ApiModelProperty(value = "描述", example = "")
    private String description;
    @ApiModelProperty(value = "示例", example = "")
    private String example;
    @ApiModelProperty(value = "类型(1入参,2出参)", example = "1")
    private Integer type;
    @ApiModelProperty(value = "排序", example = "1")
    private Integer sort;
    @ApiModelProperty(value = "删除标志", example = "1")
    private Integer del;
    public String getInterfaceId() {
        return interfaceId;

+ 84 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceErrorCodeVO.java

@ -0,0 +1,84 @@
package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 接口错误说明
 * @author yeshijie on 2018/9/28.
 */
@ApiModel(value = "SaasInterfaceErrorCodeVO", description = "接口错误说明")
public class SaasInterfaceErrorCodeVO extends UuidIdentityVO {
    @ApiModelProperty(value = "saas_id", example = "saas_id")
    private String saasId;
    @ApiModelProperty(value = "接口id", example = "接口id")
    private String saasInterfaceId;
    @ApiModelProperty(value = "错误码名称", example = "错误码名称")
    private String name;
    @ApiModelProperty(value = "错误码描述", example = "错误码描述")
    private String description;
    @ApiModelProperty(value = "解决方案", example = "解决方案")
    private String solution;
    @ApiModelProperty(value = "排序", example = "1")
    private Integer sort;
    @ApiModelProperty(value = "删除标志", example = "1")
    private Integer del;
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    public String getSaasInterfaceId() {
        return saasInterfaceId;
    }
    public void setSaasInterfaceId(String saasInterfaceId) {
        this.saasInterfaceId = saasInterfaceId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getSolution() {
        return solution;
    }
    public void setSolution(String solution) {
        this.solution = solution;
    }
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
}

+ 134 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceParamVO.java

@ -0,0 +1,134 @@
package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 接口入参出参
 * @author yeshijie on 2018/10/11.
 */
@ApiModel(value = "SaasInterfaceParamVO", description = "接口入参出参")
public class SaasInterfaceParamVO extends UuidIdentityVO {
    @ApiModelProperty(value = "saas_id", example = "saas_id")
    private String saasId;
    @ApiModelProperty(value = "接口id", example = "接口id")
    private String saasInterfaceId;
    @ApiModelProperty(value = "参数名", example = "user")
    private String name;
    @ApiModelProperty(value = "参数类型", example = "HEADER")
    private Integer paramType;
    @ApiModelProperty(value = "数据类型", example = "VERCHAR")
    private Integer dataType;
    @ApiModelProperty(value = "是否必填(1是,0否)", example = "1")
    private Integer isRequire;
    @ApiModelProperty(value = "最大长度", example = "1")
    private Integer maxLength;
    @ApiModelProperty(value = "描述", example = "")
    private String description;
    @ApiModelProperty(value = "示例", example = "")
    private String example;
    @ApiModelProperty(value = "类型(1入参,2出参)", example = "1")
    private Integer type;
    @ApiModelProperty(value = "排序", example = "1")
    private Integer sort;
    @ApiModelProperty(value = "删除标志", example = "1")
    private Integer del;
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    public String getSaasInterfaceId() {
        return saasInterfaceId;
    }
    public void setSaasInterfaceId(String saasInterfaceId) {
        this.saasInterfaceId = saasInterfaceId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getParamType() {
        return paramType;
    }
    public void setParamType(Integer paramType) {
        this.paramType = paramType;
    }
    public Integer getDataType() {
        return dataType;
    }
    public void setDataType(Integer dataType) {
        this.dataType = dataType;
    }
    public Integer getIsRequire() {
        return isRequire;
    }
    public void setIsRequire(Integer isRequire) {
        this.isRequire = isRequire;
    }
    public Integer getMaxLength() {
        return maxLength;
    }
    public void setMaxLength(Integer maxLength) {
        this.maxLength = maxLength;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getExample() {
        return example;
    }
    public void setExample(String example) {
        this.example = example;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
}

+ 167 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasInterfaceVO.java

@ -0,0 +1,167 @@
package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
 * 租户接口
 * @author yeshijie on 2018/10/11.
 */
@ApiModel(value = "SaasInterfaceVO", description = "租户接口")
public class SaasInterfaceVO extends UuidIdentityVO {
    @ApiModelProperty(value = "saas_id", example = "saas_id")
    private String saasId;
    @ApiModelProperty(value = "接口id", example = "接口id")
    private String interfaceId;
    @ApiModelProperty(value = "接口名称", example = "接口1")
    private String name;
    @ApiModelProperty(value = "模块id", example = "模块1d")
    private String moduleId;
    @ApiModelProperty(value = "模块名称", example = "模块名称")
    private String moduleName;
    @ApiModelProperty(value = "方法名", example = "方法1")
    private String methodName;
    @ApiModelProperty(value = "协议类型(2restful,1webservice)", example = "1")
    private Integer protocolType;
    @ApiModelProperty(value = "开发程度(1公开,2私有)", example = "1")
    private Integer openLevel;
    @ApiModelProperty(value = "审计程度(1审计,2不审计)", example = "1")
    private Integer checkLevel;
    @ApiModelProperty(value = "状态(1启用,0暂停)", example = "1")
    private Integer status;
    @ApiModelProperty(value = "接口说明", example = "明")
    private String remark;
    @ApiModelProperty(value = "https请求地址", example = "")
    private String url;
    @ApiModelProperty(value = "入参", example = "")
    private List<SaasInterfaceParamVO> entryParams;
    @ApiModelProperty(value = "出参", example = "")
    private List<SaasInterfaceParamVO> outParams;
    @ApiModelProperty(value = "错误说明", example = "")
    private List<SaasInterfaceErrorCodeVO> errorCodes;
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    public String getInterfaceId() {
        return interfaceId;
    }
    public void setInterfaceId(String interfaceId) {
        this.interfaceId = interfaceId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    public String getModuleName() {
        return moduleName;
    }
    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }
    public String getMethodName() {
        return methodName;
    }
    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }
    public Integer getProtocolType() {
        return protocolType;
    }
    public void setProtocolType(Integer protocolType) {
        this.protocolType = protocolType;
    }
    public Integer getOpenLevel() {
        return openLevel;
    }
    public void setOpenLevel(Integer openLevel) {
        this.openLevel = openLevel;
    }
    public Integer getCheckLevel() {
        return checkLevel;
    }
    public void setCheckLevel(Integer checkLevel) {
        this.checkLevel = checkLevel;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public List<SaasInterfaceParamVO> getEntryParams() {
        return entryParams;
    }
    public void setEntryParams(List<SaasInterfaceParamVO> entryParams) {
        this.entryParams = entryParams;
    }
    public List<SaasInterfaceParamVO> getOutParams() {
        return outParams;
    }
    public void setOutParams(List<SaasInterfaceParamVO> outParams) {
        this.outParams = outParams;
    }
    public List<SaasInterfaceErrorCodeVO> getErrorCodes() {
        return errorCodes;
    }
    public void setErrorCodes(List<SaasInterfaceErrorCodeVO> errorCodes) {
        this.errorCodes = errorCodes;
    }
}

+ 137 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasModuleVO.java

@ -0,0 +1,137 @@
package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
/**
 * Entity - 租户模块
 * Created by yeshijie on 2018/10/11.
 */
@ApiModel(value = "SaasModuleVO", description = "租户模块")
public class SaasModuleVO extends UuidIdentityVOWithOperator {
	@ApiModelProperty(value = "saasId", example = "saasId")
	private String saasId;
	@ApiModelProperty(value = "模块名称", example = "模块1")
	private String name;
	@ApiModelProperty(value = "模块链接", example = "模块链接")
	private String url;
	@ApiModelProperty(value = "模块id", example = "模块id")
	private String moduleId;
	@ApiModelProperty(value = "父模块id", example = "父模块id")
	private String parentModuleId;
	@ApiModelProperty(value = "状态", example = "1有效,0失效")
	private Integer status;
	@ApiModelProperty(value = "类型", example = "0通用,1医生端你,2居民端")
	private Integer type;
	@ApiModelProperty(value = "备注", example = "备注")
	private String remark;
	@ApiModelProperty(value = "0-表示有子节点,1-表示没有子节点", example = "1")
	private Integer isEnd ;
	@ApiModelProperty(value = "必选 0-表示非必选,1-表示必选", example = "1")
	private Integer isMust ;
	@ApiModelProperty(value = "逻辑删除标志1正常,0删除", example = "1")
	private Integer del ;
	@ApiModelProperty(value = "子集", example = "子集")
	private List<SaasModuleVO> children = new ArrayList<>();
	public String getSaasId() {
		return saasId;
	}
	public void setSaasId(String saasId) {
		this.saasId = saasId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getModuleId() {
		return moduleId;
	}
	public void setModuleId(String moduleId) {
		this.moduleId = moduleId;
	}
	public String getParentModuleId() {
		return parentModuleId;
	}
	public void setParentModuleId(String parentModuleId) {
		this.parentModuleId = parentModuleId;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public Integer getType() {
		return type;
	}
	public void setType(Integer type) {
		this.type = type;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public Integer getIsEnd() {
		return isEnd;
	}
	public void setIsEnd(Integer isEnd) {
		this.isEnd = isEnd;
	}
	public Integer getIsMust() {
		return isMust;
	}
	public void setIsMust(Integer isMust) {
		this.isMust = isMust;
	}
	public Integer getDel() {
		return del;
	}
	public void setDel(Integer del) {
		this.del = del;
	}
	public List<SaasModuleVO> getChildren() {
		return children;
	}
	public void setChildren(List<SaasModuleVO> children) {
		this.children = children;
	}
}

+ 137 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/SaasTypeModuleVO.java

@ -0,0 +1,137 @@
package com.yihu.jw.restmodel.base.module;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
/**
 * Entity - 租户类型模块
 * Created by yeshijie on 2018/10/11.
 */
@ApiModel(value = "SaasTypeModuleVO", description = "租户类型模块")
public class SaasTypeModuleVO extends UuidIdentityVOWithOperator {
	@ApiModelProperty(value = "租户类型id", example = "saasTypeId")
	private String saasTypeId;
	@ApiModelProperty(value = "模块名称", example = "模块1")
	private String name;
	@ApiModelProperty(value = "模块链接", example = "模块链接")
	private String url;
	@ApiModelProperty(value = "模块id", example = "模块id")
	private String moduleId;
	@ApiModelProperty(value = "父模块id", example = "父模块id")
	private String parentModuleId;
	@ApiModelProperty(value = "状态", example = "1有效,0失效")
	private Integer status;
	@ApiModelProperty(value = "类型", example = "0通用,1医生端你,2居民端")
	private Integer type;
	@ApiModelProperty(value = "备注", example = "备注")
	private String remark;
	@ApiModelProperty(value = "0-表示有子节点,1-表示没有子节点", example = "1")
	private Integer isEnd ;
	@ApiModelProperty(value = "必选 0-表示非必选,1-表示必选", example = "1")
	private Integer isMust ;
	@ApiModelProperty(value = "逻辑删除标志1正常,0删除", example = "1")
	private Integer del ;
	@ApiModelProperty(value = "子集", example = "子集")
	private List<SaasTypeModuleVO> children = new ArrayList<>();
	public String getSaasTypeId() {
		return saasTypeId;
	}
	public void setSaasTypeId(String saasTypeId) {
		this.saasTypeId = saasTypeId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getModuleId() {
		return moduleId;
	}
	public void setModuleId(String moduleId) {
		this.moduleId = moduleId;
	}
	public String getParentModuleId() {
		return parentModuleId;
	}
	public void setParentModuleId(String parentModuleId) {
		this.parentModuleId = parentModuleId;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public Integer getType() {
		return type;
	}
	public void setType(Integer type) {
		this.type = type;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public Integer getIsEnd() {
		return isEnd;
	}
	public void setIsEnd(Integer isEnd) {
		this.isEnd = isEnd;
	}
	public Integer getIsMust() {
		return isMust;
	}
	public void setIsMust(Integer isMust) {
		this.isMust = isMust;
	}
	public Integer getDel() {
		return del;
	}
	public void setDel(Integer del) {
		this.del = del;
	}
	public List<SaasTypeModuleVO> getChildren() {
		return children;
	}
	public void setChildren(List<SaasTypeModuleVO> children) {
		this.children = children;
	}
}

+ 2 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/notice/NoticeVO.java

@ -1,5 +1,6 @@
package com.yihu.jw.restmodel.base.notice;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -18,6 +19,7 @@ public class NoticeVO extends UuidIdentityVOWithOperator {
    @ApiModelProperty(value = "状态(1待发布,2已发布)", example = "1")
    private Integer status;
    @ApiModelProperty(value = "发布时间", example = "2019-01-01 12:20:59")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date sendTime;
    @ApiModelProperty(value = "公告内容", example = "内容")
    private String content;

+ 2 - 10
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/notice/UserNoticeVO.java

@ -1,5 +1,6 @@
package com.yihu.jw.restmodel.base.notice;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -24,9 +25,8 @@ public class UserNoticeVO extends UuidIdentityEntity{
    @ApiModelProperty(value = "公告标题", example = "标题")
    private String title;
    @ApiModelProperty(value = "发布时间", example = "2019-01-01 12:20:59")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date sendTime;
    @ApiModelProperty(value = "公告内容", example = "内容")
    private String content;
    public String getNoticeId() {
        return noticeId;
@ -75,12 +75,4 @@ public class UserNoticeVO extends UuidIdentityEntity{
    public void setSendTime(Date sendTime) {
        this.sendTime = sendTime;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/role/MenuVO.java

@ -17,6 +17,8 @@ public class MenuVO extends UuidIdentityVOWithOperator {
    private String name;
    @ApiModelProperty(value = "请求路径", example = "/usr/var")
    private String url;
    @ApiModelProperty(value = "菜单图标", example = "icon")
    private String icon;
//    @ApiModelProperty(value = "请求方式", example = "get,post")
//    private String method;
    @ApiModelProperty(value = "排序", example = "1")
@ -46,6 +48,14 @@ public class MenuVO extends UuidIdentityVOWithOperator {
        this.url = url;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    public Integer getSort() {
        return sort;
    }

+ 4 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasBusinessCardVO.java

@ -1,6 +1,7 @@
package com.yihu.jw.restmodel.base.saas;
import com.yihu.jw.entity.base.saas.SaasBusinessCardDO;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.restmodel.IntegerIdentityVO;
import io.swagger.annotations.ApiModel;
@ -22,7 +23,7 @@ public class SaasBusinessCardVO extends IntegerIdentityVO {
    private String field;
    //类型
    @ApiModelProperty(value = "名片类型", example = "doctor")
    private SaasDO.Type type;
    private SaasBusinessCardDO.Type type;
    public String getSaasId() {
        return saasId;
@ -40,11 +41,11 @@ public class SaasBusinessCardVO extends IntegerIdentityVO {
        this.field = field;
    }
    public SaasDO.Type getType() {
    public SaasBusinessCardDO.Type getType() {
        return type;
    }
    public void setType(SaasDO.Type type) {
    public void setType(SaasBusinessCardDO.Type type) {
        this.type = type;
    }
}

+ 45 - 45
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasDefaultModuleFunctionVO.java

@ -1,45 +1,45 @@
package com.yihu.jw.restmodel.base.saas;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.restmodel.IntegerIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * VO - Saas默认模块功能
 * Created by progr1mmer on 2018/8/14.
 */
@ApiModel(value = "SaasDefaultModuleFunctionVO", description = "Saas默认模块功能")
public class SaasDefaultModuleFunctionVO extends IntegerIdentityVO {
    @ApiModelProperty(value = "Saas类型", example = "familyDoctor")
    private SaasDO.Type saasType;
    @ApiModelProperty(value = "模块ID", example = "402303ee656498890234sf9ad2wa00sa")
    private String moduleId;
    @ApiModelProperty(value = "功能ID", example = "402303ee656498890sd24s9ad2wa00sd")
    private String functionId;
    public SaasDO.Type getSaasType() {
        return saasType;
    }
    public void setSaasType(SaasDO.Type saasType) {
        this.saasType = saasType;
    }
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    public String getFunctionId() {
        return functionId;
    }
    public void setFunctionId(String functionId) {
        this.functionId = functionId;
    }
}
//package com.yihu.jw.restmodel.base.saas;
//
//import com.yihu.jw.entity.base.saas.SaasDO;
//import com.yihu.jw.restmodel.IntegerIdentityVO;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//
///**
// * VO - Saas默认模块功能
// * Created by progr1mmer on 2018/8/14.
// */
//@ApiModel(value = "SaasDefaultModuleFunctionVO", description = "Saas默认模块功能")
//public class SaasDefaultModuleFunctionVO extends IntegerIdentityVO {
//
//    @ApiModelProperty(value = "Saas类型编码(从1开始自增)", example = "1")
//    private Integer saasType;
//    @ApiModelProperty(value = "模块ID", example = "402303ee656498890234sf9ad2wa00sa")
//    private String moduleId;
//    @ApiModelProperty(value = "功能ID", example = "402303ee656498890sd24s9ad2wa00sd")
//    private String functionId;
//
//    public Integer getSaasType() {
//        return saasType;
//    }
//
//    public void setSaasType(Integer saasType) {
//        this.saasType = saasType;
//    }
//
//    public String getModuleId() {
//        return moduleId;
//    }
//
//    public void setModuleId(String moduleId) {
//        this.moduleId = moduleId;
//    }
//
//    public String getFunctionId() {
//        return functionId;
//    }
//
//    public void setFunctionId(String functionId) {
//        this.functionId = functionId;
//    }
//}

+ 48 - 48
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasModuleFunctionVO.java

@ -1,48 +1,48 @@
package com.yihu.jw.restmodel.base.saas;
import com.yihu.jw.restmodel.IntegerIdentityVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * VO - Saas所分配的模块功能
 * Created by progr1mmer on 2018/8/27.
 */
@ApiModel(value = "SaasModuleFunctionVO", description = "Saas所分配的模块功能")
public class SaasModuleFunctionVO extends IntegerIdentityVO {
    //Saas ID
    @ApiModelProperty(value = "Saas ID", example = "402303ee65634dfs0234sf9ad2wa00d2")
    private String saasId;
    //模块ID
    @ApiModelProperty(value = "模块ID", example = "402303ee656498890234sf9ad2wa00sa")
    private String moduleId;
    //功能ID
    @ApiModelProperty(value = "功能ID", example = "402303ee656498890sd24s9ad2wa00sd")
    private String functionId;
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    public String getModuleId() {
        return moduleId;
    }
    public void setModuleId(String moduleId) {
        this.moduleId = moduleId;
    }
    public String getFunctionId() {
        return functionId;
    }
    public void setFunctionId(String functionId) {
        this.functionId = functionId;
    }
}
//package com.yihu.jw.restmodel.base.saas;
//
//import com.yihu.jw.restmodel.IntegerIdentityVO;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//
//
///**
// * VO - Saas所分配的模块功能
// * Created by progr1mmer on 2018/8/27.
// */
//@ApiModel(value = "SaasModuleFunctionVO", description = "Saas所分配的模块功能")
//public class SaasModuleFunctionVO extends IntegerIdentityVO {
//
//    //Saas ID
//    @ApiModelProperty(value = "Saas ID", example = "402303ee65634dfs0234sf9ad2wa00d2")
//    private String saasId;
//    //模块ID
//    @ApiModelProperty(value = "模块ID", example = "402303ee656498890234sf9ad2wa00sa")
//    private String moduleId;
//    //功能ID
//    @ApiModelProperty(value = "功能ID", example = "402303ee656498890sd24s9ad2wa00sd")
//    private String functionId;
//
//    public String getSaasId() {
//        return saasId;
//    }
//
//    public void setSaasId(String saasId) {
//        this.saasId = saasId;
//    }
//
//    public String getModuleId() {
//        return moduleId;
//    }
//
//    public void setModuleId(String moduleId) {
//        this.moduleId = moduleId;
//    }
//
//    public String getFunctionId() {
//        return functionId;
//    }
//
//    public void setFunctionId(String functionId) {
//        this.functionId = functionId;
//    }
//}

+ 47 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasTypeDictVO.java

@ -0,0 +1,47 @@
package com.yihu.jw.restmodel.base.saas;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import com.yihu.jw.entity.base.saas.SaasTypeDictDO;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by zdm on 2018/10/10.
 */
@ApiModel(value = "SaasTypeDictVO", description = "SAAS类型VO")
public class SaasTypeDictVO extends UuidIdentityVOWithOperator {
    @ApiModelProperty(value = "Saas类型编码", example = "familyDoctor")
    private String code;
    @ApiModelProperty(value = "Saas类型名称", example = "家医型")
    private String name;
    @ApiModelProperty(value = "状态(effective-生效中,invalid-已失效)", example = "effective")
    private SaasTypeDictDO.Status status;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public SaasTypeDictDO.Status getStatus() {
        return status;
    }
    public void setStatus(SaasTypeDictDO.Status status) {
        this.status = status;
    }
}

+ 4 - 4
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasVO.java

@ -23,8 +23,8 @@ public class SaasVO extends UuidIdentityVOWithOperator {
	private String remark;
	@ApiModelProperty(value = "远程fastDFS文件地址", example = "group1:M00/97/E9/wKgyJltp1i-AHHf6AAAvRXBaR18423.zip")
	private String logo;
	@ApiModelProperty(value = "类型", example = "familyDoctor")
    private SaasDO.Type type;
	@ApiModelProperty(value = "类型(租户类型编码,从1开始自增)", example = "1")
    private Integer type;
	@ApiModelProperty(value = "管理员 - 关联user表id字段", example = "402303ee656498890165649ad2wa00sd")
	private String manager;
	@ApiModelProperty(value = "管理员邮箱", example = "admin@jkzl.com")
@ -72,11 +72,11 @@ public class SaasVO extends UuidIdentityVOWithOperator {
		this.logo = logo;
	}
	public SaasDO.Type getType() {
	public Integer getType() {
		return type;
	}
	public void setType(SaasDO.Type type) {
	public void setType(Integer type) {
		this.type = type;
	}

+ 39 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxComboVO.java

@ -0,0 +1,39 @@
package com.yihu.jw.restmodel.base.wx;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by Administrator on 2018/10/9.
 */
public class WxComboVO {
    @ApiModelProperty(value = "微信id")
    private String id;
    @ApiModelProperty(value = "微信公众号")
    private String name;
    @ApiModelProperty(value = "原始id")
    private String appOriginId;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAppOriginId() {
        return appOriginId;
    }
    public void setAppOriginId(String appOriginId) {
        this.appOriginId = appOriginId;
    }
}

+ 40 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxGraphicSceneVO.java

@ -0,0 +1,40 @@
package com.yihu.jw.restmodel.base.wx;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by Administrator on 2018/10/9.
 */
public class WxGraphicSceneVO {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "所属微信")
    private String wechatId;//所属微信
    @ApiModelProperty(value = "场景值")
    private String scene;//场景值
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    public String getScene() {
        return scene;
    }
    public void setScene(String scene) {
        this.scene = scene;
    }
}

+ 79 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxReplySceneVO.java

@ -0,0 +1,79 @@
package com.yihu.jw.restmodel.base.wx;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by Administrator on 2018/10/9.
 */
public class WxReplySceneVO {
    @ApiModelProperty(value = "微信id(唯一)")
    private String wechatId;//微信id(唯一)
    @ApiModelProperty(value = "原始ID(唯一)")
    private String appOriginId;//原始ID(唯一)
    @ApiModelProperty(value = "微信消息类型:text,event,image,voice,video,shortvideo,location,link")
    private String msgType;//微信消息类型:text,event,image,voice,video,shortvideo,location,link
    @ApiModelProperty(value = "微信事件类型:SCAN,LOCATION,CLICK,subscribe,unsubscribe")
    private String event;//微信事件类型:SCAN,LOCATION,CLICK,subscribe,unsubscribe
    @ApiModelProperty(value = "图文消息/自定义消息,分组场景,微信的eventKey")
    private String scene;//图文消息/自定义消息,分组场景,微信的eventKey
    @ApiModelProperty(value = "居民回复内容,消息字段")
    private String content;//居民回复内容,消息字段
    @ApiModelProperty(value = "状态(-1删除 0 冻结 1可用")
    private Integer status;//状态(-1删除 0 冻结 1可用
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    public String getAppOriginId() {
        return appOriginId;
    }
    public void setAppOriginId(String appOriginId) {
        this.appOriginId = appOriginId;
    }
    public String getMsgType() {
        return msgType;
    }
    public void setMsgType(String msgType) {
        this.msgType = msgType;
    }
    public String getEvent() {
        return event;
    }
    public void setEvent(String event) {
        this.event = event;
    }
    public String getScene() {
        return scene;
    }
    public void setScene(String scene) {
        this.scene = scene;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}

+ 263 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxTemplateConfigVO.java

@ -0,0 +1,263 @@
package com.yihu.jw.restmodel.base.wx;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
/**
 * Created by Administrator on 2018/10/10.
 */
public class WxTemplateConfigVO {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "微信id")
    private String wechatId;//微信id
    @ApiModelProperty(value = "微信模板id")
    private String templateId;//微信模板id
    @ApiModelProperty(value = "自定义模板名称")
    private String templateName;//自定义模板名称
    @ApiModelProperty(value = "使用场景值")
    private String scene;//使用场景值
    @ApiModelProperty(value = "使用场景描述")
    private String sceneDescription;//使用场景描述
    @ApiModelProperty(value = "头部")
    private String first;//头部,
    @ApiModelProperty(value = "跳转链接")
    private String url;//跳转链接
    @ApiModelProperty(value = "备注")
    private String remark;//备注
    @ApiModelProperty(value = "项目")
    private String keyword1;//项目
    @ApiModelProperty(value = "项目")
    private String keyword2;//项目
    @ApiModelProperty(value = "项目")
    private String keyword3;//项目
    @ApiModelProperty(value = "项目")
    private String keyword4;//项目
    @ApiModelProperty(value = "项目")
    private String keyword5;//项目
    @ApiModelProperty(value = "项目")
    private String keyword6;//项目
    @ApiModelProperty(value = "项目")
    private String keyword7;//项目
    @ApiModelProperty(value = "跳转小程序的appid")
    private String appid;//跳转小程序的appid
    @ApiModelProperty(value = "跳转小程序路径")
    private String pagepath;//跳转小程序路径
    @ApiModelProperty(value = "状态 -1删除 0 冻结 1可用")
    private Integer status;  //状态 -1删除 0 冻结 1可用
    @ApiModelProperty(value = "创建人")
    private String createUser;//创建人
    @ApiModelProperty(value = "创建人名")
    private String createUserName;//创建人名
    @ApiModelProperty(value = "创建时间")
    private Date createTime;//创建时间
    @ApiModelProperty(value = "修改人")
    private String updateUser;//修改人
    @ApiModelProperty(value = "修改人名称")
    private String updateUserName;//修改人名称
    @ApiModelProperty(value = "修改时间")
    private Date updateTime;//修改时间
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    public String getTemplateId() {
        return templateId;
    }
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
    public String getTemplateName() {
        return templateName;
    }
    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }
    public String getScene() {
        return scene;
    }
    public void setScene(String scene) {
        this.scene = scene;
    }
    public String getSceneDescription() {
        return sceneDescription;
    }
    public void setSceneDescription(String sceneDescription) {
        this.sceneDescription = sceneDescription;
    }
    public String getFirst() {
        return first;
    }
    public void setFirst(String first) {
        this.first = first;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getKeyword1() {
        return keyword1;
    }
    public void setKeyword1(String keyword1) {
        this.keyword1 = keyword1;
    }
    public String getKeyword2() {
        return keyword2;
    }
    public void setKeyword2(String keyword2) {
        this.keyword2 = keyword2;
    }
    public String getKeyword3() {
        return keyword3;
    }
    public void setKeyword3(String keyword3) {
        this.keyword3 = keyword3;
    }
    public String getKeyword4() {
        return keyword4;
    }
    public void setKeyword4(String keyword4) {
        this.keyword4 = keyword4;
    }
    public String getKeyword5() {
        return keyword5;
    }
    public void setKeyword5(String keyword5) {
        this.keyword5 = keyword5;
    }
    public String getKeyword6() {
        return keyword6;
    }
    public void setKeyword6(String keyword6) {
        this.keyword6 = keyword6;
    }
    public String getKeyword7() {
        return keyword7;
    }
    public void setKeyword7(String keyword7) {
        this.keyword7 = keyword7;
    }
    public String getAppid() {
        return appid;
    }
    public void setAppid(String appid) {
        this.appid = appid;
    }
    public String getPagepath() {
        return pagepath;
    }
    public void setPagepath(String pagepath) {
        this.pagepath = pagepath;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    public String getCreateUserName() {
        return createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getUpdateUser() {
        return updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    public String getUpdateUserName() {
        return updateUserName;
    }
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

+ 51 - 60
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/wx/WxTemplateVO.java

@ -1,5 +1,8 @@
package com.yihu.jw.restmodel.base.wx;
import io.swagger.annotations.ApiModelProperty;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -9,23 +12,36 @@ import java.util.Map;
 * Created by Administrator on 2017/5/20 0020.
 */
public class WxTemplateVO {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "模板标题")
    private String title;//模板标题
    private String name;//用于模板列表渲染
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String wechatName;//关联的微信名
    @ApiModelProperty(value = "关联的微信code 关联表 Wx_Wechat")
    private String wechatId;//关联的微信code 关联表 Wx_Wechat
    @ApiModelProperty(value = "微信模板id")
    private String templateId;//微信模板id
    @ApiModelProperty(value = "模板名称(模板检索名称)")
    private String templateName;//模板名称(模板检索名称)
    @ApiModelProperty(value = "模板内容")
    private String content;//模板内容
    @ApiModelProperty(value = "remark")
    private String remark;
    @ApiModelProperty(value = "状态 -1删除 0 冻结 1可用")
    private Integer status;  //状态 -1删除 0 冻结 1可用
    @ApiModelProperty(value = "创建人")
    private String createUser;//创建人
    @ApiModelProperty(value = "创建人名")
    private String createUserName;//创建人名
    @ApiModelProperty(value = "创建时间")
    private Date createTime;//创建时间
    @ApiModelProperty(value = "修改人")
    private String updateUser;//修改人
    @ApiModelProperty(value = "修改人名称")
    private String updateUserName;//修改人名称
    @ApiModelProperty(value = "修改时间")
    private Date updateTime;//修改时间
    private String remark;
    private List<Map<String,Object>> children = new ArrayList<>();
    private String state;
    private Integer status;  //状态 -1删除 0 冻结 1可用
    public String getId() {
        return id;
@ -35,23 +51,6 @@ public class WxTemplateVO {
        this.id = id;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getTitle() {
        return title;
    }
@ -60,20 +59,12 @@ public class WxTemplateVO {
        this.title = title;
    }
    public String getWechatCode() {
        return wechatCode;
    public String getWechatId() {
        return wechatId;
    }
    public void setWechatCode(String wechatCode) {
        this.wechatCode = wechatCode;
    }
    public String getWechatName() {
        return wechatName;
    }
    public void setWechatName(String wechatName) {
        this.wechatName = wechatName;
    public void setWechatId(String wechatId) {
        this.wechatId = wechatId;
    }
    public String getTemplateId() {
@ -84,6 +75,14 @@ public class WxTemplateVO {
        this.templateId = templateId;
    }
    public String getTemplateName() {
        return templateName;
    }
    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }
    public String getContent() {
        return content;
    }
@ -92,6 +91,22 @@ public class WxTemplateVO {
        this.content = content;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getCreateUser() {
        return createUser;
    }
@ -139,28 +154,4 @@ public class WxTemplateVO {
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getName() {
        return title;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Map<String, Object>> getChildren() {
        return children;
    }
    public void setChildren(List<Map<String, Object>> children) {
        this.children = children;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
}

+ 4 - 1
common/common-util/pom.xml

@ -61,6 +61,9 @@
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </dependency>
    </dependencies>
</project>

+ 15 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/AllowAllHostnameVerifier.java

@ -0,0 +1,15 @@
package com.yihu.jw.util.http;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
/**
 * @author Air
 * @version 1.0
 * @created 2015.07.02 15:48
 */
public class AllowAllHostnameVerifier implements HostnameVerifier {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}

+ 100 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/CustomTrustClientClientImpl.java

@ -0,0 +1,100 @@
package com.yihu.jw.util.http;
import okhttp3.OkHttpClient;
import javax.net.ssl.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collection;
/**
 * 用于非受信证书的HTTPS访问
 *
 * @created Airhead 2016/8/24.
 */
class CustomTrustClientClientImpl extends DefaultClientImpl {
    CustomTrustClientClientImpl() {
        try {
            final TrustManager[] trustManagers = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }
                        @Override
                        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }
                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return new X509Certificate[0];
                        }
                    }
            };
            final SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustManagers, new SecureRandom());
            SSLSocketFactory socketFactory = sslContext.getSocketFactory();
            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .sslSocketFactory(socketFactory, (X509TrustManager) trustManagers[0])
                    .hostnameVerifier(new AllowAllHostnameVerifier()).build();
            setHttpClient(httpClient);
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            e.printStackTrace();
        }
    }
    CustomTrustClientClientImpl(String path, String password) {
        try {
            InputStream inputStream = new FileInputStream(new File(path));
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            Collection<? extends Certificate> certificates = certificateFactory.generateCertificates(inputStream);
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            InputStream in = null;
            keyStore.load(in, password.toCharArray());
            int index = 0;
            for (Certificate certificate : certificates) {
                String certificateAlias = Integer.toString(index++);
                keyStore.setCertificateEntry(certificateAlias, certificate);
            }
            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            keyManagerFactory.init(keyStore, password.toCharArray());
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(inputStream, password.toCharArray());
            trustManagerFactory.init(trustStore);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509KeyManager)) {
                throw new IllegalStateException("Unexpectd default trust managers:" + Arrays.toString(trustManagers));
            }
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustManagers, new SecureRandom());
            SSLSocketFactory socketFactory = sslContext.getSocketFactory();
            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .sslSocketFactory(socketFactory, (X509TrustManager) trustManagers[0])
                    .hostnameVerifier(new AllowAllHostnameVerifier()).build();
            setHttpClient(httpClient);
        } catch (NoSuchAlgorithmException | KeyStoreException | CertificateException | IOException | KeyManagementException | UnrecoverableKeyException e) {
            e.printStackTrace();
        }
    }
}

+ 336 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/DefaultClientImpl.java

@ -0,0 +1,336 @@
package com.yihu.jw.util.http;
import okhttp3.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * @author Airhead
 * @since 2016/8/24.
 */
class DefaultClientImpl implements HTTPClient {
    private static final Log log = LogFactory.getLog(DefaultClientImpl.class);
    private OkHttpClient httpClient;
    DefaultClientImpl() {
        this.httpClient = new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS).build();
    }
    public HTTPResponse get(String url) {
        return get(url, null);
    }
    public HTTPResponse get(String url, Map<String, String> params) {
        return get(url, params, null);
    }
    public HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers) {
        try {
            Request.Builder builder = new Request.Builder();
            if (headers != null) {
                builder.headers(Headers.of(headers));
            }
            Request request = builder
                    .url(formatURL(url, params))
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            // ?? 怎么把异常处理了??  应该交由调用者处理
            ex.printStackTrace();
            log.error(ex.getMessage());
            return new HTTPResponse(417,ex.getMessage());
        }
    }
    public HTTPResponse post(String url) {
        return post(url, (Map<String, String>) null);
    }
    public HTTPResponse post(String url, Map<String, String> params) {
        return post(url, params, null);
    }
    public HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers) {
        try {
            FormBody.Builder fromBodyBuilder = new FormBody.Builder();
            if (params != null) {
                params.forEach(fromBodyBuilder::add);
            }
            RequestBody requestBody = fromBodyBuilder
                    .build();
            Request.Builder builder = new Request.Builder();
            if (headers != null) {
                builder.headers(Headers.of(headers));
            }
            Request request = builder
                    .url(url)
                    .post(requestBody)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            //讲异常信息返回,交由调用者处理
            log.error(ex.getMessage());
            return new HTTPResponse(417,ex.getMessage());
        }
    }
    @Override
    public HTTPResponse post(String url, String json, Map<String, String> headers) {
        try {
            Request.Builder builder = new Request.Builder();
            if (headers != null) {
                builder.headers(Headers.of(headers));
            }
            final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            RequestBody body = RequestBody.create(JSON, json);
            Request request = builder
                    .url(url)
                    .post(body)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse postFile(String url, String path) {
        return postFile(url, path, null);
    }
    public HTTPResponse postFile(String url, String path, Map<String, String> params) {
        return postFile(url, path, params, null);
    }
    public HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers) {
        try {
            File file = new File(path);
            final MediaType type = MediaType.parse("application/zip");
            Request.Builder requestBuilder = new Request.Builder();
            if (headers != null) {
                requestBuilder.headers(Headers.of(headers));
            }
            MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
            multipartBuilder.setType(MultipartBody.FORM)
                    .addFormDataPart("pack", file.getName(), RequestBody.create(type, file));
            for (String key : params.keySet()) {
                multipartBuilder.addFormDataPart(key, params.get(key));
            }
            Request request = requestBuilder
                    .url(url)
                    .post(multipartBuilder.build())
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    @Override
    public HTTPResponse postFile(String url, String key, String path, String contentType) {
        try {
            File file = new File(path);
            final MediaType type = MediaType.parse(contentType);
            Request.Builder requestBuilder = new Request.Builder();
            MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
            multipartBuilder.setType(MultipartBody.FORM)
                    .addFormDataPart(key, file.getName(), RequestBody.create(type, file));
            Request request = requestBuilder
                    .url(url)
                    .post(multipartBuilder.build())
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse put(String url) {
        return put(url, (Map<String, String>) null);
    }
    public HTTPResponse put(String url, Map<String, String> params) {
        return put(url, params, null);
    }
    @Override
    public HTTPResponse put(String url, String json) {
        try {
            final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            RequestBody body = RequestBody.create(JSON, json);
            Request request = new Request.Builder()
                    .url(url)
                    .put(body)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers) {
        try {
            FormBody.Builder fromBodyBuilder = new FormBody.Builder();
            if (params != null) {
                params.forEach(fromBodyBuilder::add);
            }
            RequestBody requestBody = fromBodyBuilder
                    .build();
            Request.Builder builder = new Request.Builder();
            if (headers != null) {
                builder.headers(Headers.of(headers));
            }
            Request request = builder
                    .url(url)
                    .put(requestBody)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse delete(String url) {
        return delete(url, (Map<String, String>) null);
    }
    public HTTPResponse delete(String url, Map<String, String> params) {
        return delete(url, params, null);
    }
    @Override
    public HTTPResponse delete(String url, String json) {
        try {
            final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            RequestBody body = RequestBody.create(JSON, json);
            Request request = new Request.Builder()
                    .url(url)
                    .delete(body)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers) {
        try {
            FormBody.Builder fromBodyBuilder = new FormBody.Builder();
            if (params != null) {
                params.forEach(fromBodyBuilder::add);
            }
            RequestBody requestBody = fromBodyBuilder
                    .build();
            Request.Builder builder = new Request.Builder();
            if (headers != null) {
                builder.headers(Headers.of(headers));
            }
            Request request = builder
                    .url(url)
                    .delete(requestBody)
                    .build();
            Response response = httpClient.newCall(request).execute();
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            log.error(ex.getMessage());
            return new HTTPResponse(417, ex.getMessage());
        }
    }
    public HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers) {
        if (method.equals(POST)) {
            return post(url, params, headers);
        }
        if (method.equals(GET)) {
            return get(url, params, headers);
        }
        if (method.equals(PUT)) {
            return put(url, params, headers);
        }
        if (method.equals(DELETE)) {
            return delete(url, params, headers);
        }
        return get(url, params, headers);
    }
    protected void setHttpClient(OkHttpClient okHttpClient) {
        this.httpClient = okHttpClient;
    }
    private String formatURL(String url, Map<String, String> params) {
        if (params == null) {
            return url;
        }
        final String[] query = {""};
        params.forEach((name, value) -> {
            try {
                query[0] += "&" + name + "=" + URLEncoder.encode(value, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException("encode url ");
            }
        });
        if (url.contains("?")) {
            return url + query[0];
        }
        return url + "?" + query[0].substring(1);
    }
}

+ 54 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/HTTPClient.java

@ -0,0 +1,54 @@
package com.yihu.jw.util.http;
import java.util.Map;
/**
 * @created Airhead 2016/8/24.
 */
public interface HTTPClient {
    //主要的几种方法,其他的暂时未使用
    String GET = "GET";
    String POST = "POST";
    String PUT = "PUT";
    String DELETE = "DELETE";
    HTTPResponse get(String url);
    HTTPResponse get(String url, Map<String, String> params);
    HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers);
    HTTPResponse post(String url);
    HTTPResponse post(String url, Map<String, String> params);
    HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers);
    HTTPResponse post(String url, String json, Map<String, String> headers);
    HTTPResponse postFile(String url, String path);
    HTTPResponse postFile(String url, String path, Map<String, String> params);
    HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers);
    HTTPResponse postFile(String url, String key, String path, String contentType);
    HTTPResponse put(String url);
    HTTPResponse put(String url, Map<String, String> params);
    HTTPResponse put(String url, String json);
    HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers);
    HTTPResponse delete(String url);
    HTTPResponse delete(String url, Map<String, String> params);
    HTTPResponse delete(String url, String json);
    HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers);
    HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers);
}

+ 23 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/HTTPResponse.java

@ -0,0 +1,23 @@
package com.yihu.jw.util.http;
/**
 * @created Airhead 2016/8/24.
 */
public class HTTPResponse {
    private final int statusCode;// e.g. 200
    private final String body;
    public HTTPResponse(int statusCode, String body) {
        this.statusCode = statusCode;
        this.body = body;
    }
    public int getStatusCode() {
        return statusCode;
    }
    public String getBody() {
        return body;
    }
}

+ 155 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientKit.java

@ -0,0 +1,155 @@
package com.yihu.jw.util.http;
import javafx.util.Pair;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import java.util.HashMap;
import java.util.Map;
/**
 * @created Airhead 2016/8/24.
 */
public class HttpClientKit {
    private static Map<String, Pair<String, String>> keyStoreMap = new HashMap<>();
    private static Map<String, SSLConnectionSocketFactory> keyStoreSSLMap = new HashMap<>();
    /**
     * 用于HTTP和受信HTTPS
     *
     * @return
     */
    public static HTTPClient use() {
        return new DefaultClientImpl();
    }
    /**
     * 用于非受信HTTPS
     *
     * @param host host正常情况是不需要包含端口号的。
     *             但在非域名(或开发)时,不同的端口会使用不同证书,
     *             在添加host时,可以增加端口号
     *             格式:
     *             1.ip:port
     *             2.domain
     * @return
     */
    public static HTTPClient custom(String host) {
        if (host != null) {
            Pair<String, String> keyStore = keyStoreMap.get(host);
            if (keyStore != null) {
                return new CustomTrustClientClientImpl(keyStore.getKey(), keyStore.getValue());
            }
        }
        return new CustomTrustClientClientImpl();
    }
    public static void addKeyStore(String host, String file, String password) throws Exception {
        keyStoreMap.put(host, new Pair<>(file, password));
    }
    public static void addKeyStoreSSL(String host, SSLConnectionSocketFactory sslConnectionSocketFactory) throws Exception {
        keyStoreSSLMap.put(host, sslConnectionSocketFactory);
    }
    public static HTTPResponse get(String url) {
        return use().get(url);
    }
    public static HTTPResponse get(String url, Map<String, String> params) {
        return use().get(url, params);
    }
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers) {
        return use().get(url, params, headers);
    }
    public static HTTPResponse post(String url) {
        return use().post(url);
    }
    public static HTTPResponse post(String url, Map<String, String> params) {
        return use().post(url, params);
    }
    public static HTTPResponse post(String url, String json) {
        return use().post(url, json, null);
    }
    public static HTTPResponse post(String url, String json, Map<String, String> headers) {
        return use().post(url, json, headers);
    }
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers) {
        return use().post(url, params, headers);
    }
    public static HTTPResponse postFile(String url, String path) {
        return use().postFile(url, path);
    }
    public static HTTPResponse postFile(String url, String path, Map<String, String> params) {
        if (url.startsWith("https")) {
            return custom(url).postFile(url, path, params);
        } else {
            return use().postFile(url, path, params);
        }
    }
    public static HTTPResponse postFile(String url, String key, String path, String contentType) {
        if (url.startsWith("https")) {
            return custom(url).postFile(url, key, path, contentType);
        } else {
            return use().postFile(url, key, path, contentType);
        }
    }
    public static HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers) {
        if (url.startsWith("https")) {
            return custom(url).postFile(url, path, params, headers);
        } else {
            return use().postFile(url, path, params, headers);
        }
    }
    public static HTTPResponse put(String url) {
        return use().put(url);
    }
    public static HTTPResponse put(String url, Map<String, String> params) {
        return use().put(url, params);
    }
    public static HTTPResponse put(String url, String json) {
        return use().put(url, json);
    }
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers) {
        return use().put(url, params, headers);
    }
    public static HTTPResponse delete(String url) {
        return use().delete(url);
    }
    public static HTTPResponse delete(String url, Map<String, String> params) {
        return use().delete(url, params);
    }
    public static HTTPResponse delete(String url, String json) {
        return use().delete(url, json);
    }
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers) {
        return use().delete(url, params, headers);
    }
    public static HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers) {
        if (url.startsWith("https")) {
            return custom(url).request(method, url, params, headers);
        } else {
            return use().request(method, url, params, headers);
        }
    }
}

+ 6 - 2
gateway/ag-basic/src/main/resources/application.yml

@ -42,10 +42,14 @@ zuul:
      serviceId: svr-iot
    svr-base:
      path: /base/**
      serviceId: svr-base-lyx
      serviceId: svr-base
    svr-authentication:
      path: /auth/**
      serviceId: svr-authentication-lyx
      serviceId: svr-authentication
    svr-healthy-house:
      path: /healthyHouse/**
      serviceId: svr-healthy-house
---
spring:

+ 2 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/dao/customize/UserHideModuleFunctionDao.java

@ -1,6 +1,6 @@
package com.yihu.jw.base.dao.customize;
import com.yihu.jw.entity.base.customize.UserHideModuleFunctionDO;
import com.yihu.jw.entity.base.customize.UserHideModuleInterfaceDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -9,5 +9,5 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 * @author progr1mmer.
 * @date Created on 2018/8/20.
 */
public interface UserHideModuleFunctionDao extends PagingAndSortingRepository<UserHideModuleFunctionDO, Integer>, JpaSpecificationExecutor<UserHideModuleFunctionDO> {
public interface UserHideModuleInterfaceDao extends PagingAndSortingRepository<UserHideModuleInterfaceDO, Integer>, JpaSpecificationExecutor<UserHideModuleInterfaceDO> {
}

+ 21 - 13
svr/svr-base/src/main/java/com/yihu/jw/base/dao/function/FunctionDao.java

@ -1,13 +1,21 @@
package com.yihu.jw.base.dao.function;
import com.yihu.jw.entity.base.function.FunctionDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Dao - 功能
 * Created by chenweida on 2017/5/19.
 */
public interface FunctionDao extends PagingAndSortingRepository<FunctionDO, String>, JpaSpecificationExecutor<FunctionDO> {
}
//package com.yihu.jw.base.dao.function;
//
//import com.yihu.jw.entity.base.function.FunctionDO;
//import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//import org.springframework.data.jpa.repository.Query;
//import org.springframework.data.repository.PagingAndSortingRepository;
//import org.springframework.data.repository.query.Param;
//
//import java.util.List;
//
///**
// * Dao - 功能
// * Created by chenweida on 2017/5/19.
// */
//public interface FunctionDao extends PagingAndSortingRepository<FunctionDO, String>, JpaSpecificationExecutor<FunctionDO> {
//
//    @Query("select f from FunctionDO  f where f.moduleId in (:moduleId)")
//    List<FunctionDO> findFunctionDOSByModuleIdExists(@Param("moduleId") String[] moduleId);
//
//
//}

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/ModuleDao.java

@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Dao - 模块
 * Created by chenweida on 2017/5/19.
@ -18,4 +20,6 @@ public interface ModuleDao extends PagingAndSortingRepository<ModuleDO, String>,
    @Query("select count(*) from ModuleDO a where a.name = ?1 ")
    int isExistName(String name);
    List<ModuleDO> findByParentId(String parentId);
}

+ 22 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceDao.java

@ -0,0 +1,22 @@
package com.yihu.jw.base.dao.module;
import com.yihu.jw.entity.base.module.SaasInterfaceDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * 租户接口
 * @author yeshijie on 2018/10/11.
 */
public interface SaasInterfaceDao extends PagingAndSortingRepository<SaasInterfaceDO, String>, JpaSpecificationExecutor<SaasInterfaceDO> {
    @Modifying
    @Query("update SaasInterfaceDO p set p.status=?2 where p.id=?1")
    void updateStatus(String id,Integer status);
    @Modifying
    @Query("update SaasInterfaceDO p set p.status=?2 where p.interfaceId=?1")
    void updateStatusByInterfaceId(String interfaceId,Integer status);
}

+ 25 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceErrorCodeDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.base.dao.module;
import com.yihu.jw.entity.base.module.InterfaceErrorCodeDO;
import com.yihu.jw.entity.base.module.SaasInterfaceErrorCodeDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * 接口错误说明
 * @author yeshijie on 2018/10/11.
 */
public interface SaasInterfaceErrorCodeDao extends PagingAndSortingRepository<SaasInterfaceErrorCodeDO, String>,
        JpaSpecificationExecutor<SaasInterfaceErrorCodeDO> {
    @Query("from SaasInterfaceErrorCodeDO w where w.saasInterfaceId =?1 and w.del=1")
    List<SaasInterfaceErrorCodeDO> findBySaasInterfaceId(String saasInterfaceId);
    @Modifying
    @Query("delete from SaasInterfaceErrorCodeDO p where p.saasInterfaceId=?1")
    void deleteBySaasInterfaceId(String saasInterfaceId);
}

+ 25 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasInterfaceParamDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.base.dao.module;
import com.yihu.jw.entity.base.module.InterfaceParamDO;
import com.yihu.jw.entity.base.module.SaasInterfaceParamDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * 接口入参出参
 * @author yeshijie on 2018/10/11.
 */
public interface SaasInterfaceParamDao extends PagingAndSortingRepository<SaasInterfaceParamDO, String>,
        JpaSpecificationExecutor<SaasInterfaceParamDO> {
    @Query("from SaasInterfaceParamDO w where w.saasInterfaceId =?1 and w.del=1")
    List<SaasInterfaceParamDO> findBySaasInterfaceId(String saasInterfaceId);
    @Modifying
    @Query("delete from SaasInterfaceParamDO p where p.saasInterfaceId=?1")
    void deleteBySaasInterfaceId(String saasInterfaceId);
}

+ 25 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasModuleDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.base.dao.module;
import com.yihu.jw.entity.base.module.SaasModuleDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Entity - 租户模块
 * Created by yeshijie on 2018/10/11.
 */
public interface SaasModuleDao extends PagingAndSortingRepository<SaasModuleDO, String>, JpaSpecificationExecutor<SaasModuleDO> {
    @Query("select count(*) from SaasModuleDO a where a.moduleId = ?1 ")
    int isExistModule(String moduleId);
    @Modifying
    @Query("delete from SaasModuleDO p where p.moduleId=?1 ")
    void deleteByModuleId(String moduleId);
    List<SaasModuleDO> findByModuleId(String moduleId);
}

+ 21 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/module/SaasTypeModuleDao.java

@ -0,0 +1,21 @@
package com.yihu.jw.base.dao.module;
import com.yihu.jw.entity.base.module.SaasTypeModuleDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Entity - 租户类型模块
 * Created by yeshijie on 2018/10/11.
 */
public interface SaasTypeModuleDao extends PagingAndSortingRepository<SaasTypeModuleDO, String>, JpaSpecificationExecutor<SaasTypeModuleDO> {
    @Query("select count(*) from SaasTypeModuleDO a where a.moduleId = ?1 ")
    int isExistModule(String moduleId);
    @Modifying
    @Query("delete from SaasTypeModuleDO p where p.moduleId=?1 ")
    void deleteByModuleId(String moduleId);
}

+ 3 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/dao/notice/NoticeDao.java

@ -4,11 +4,13 @@ import com.yihu.jw.entity.base.notice.NoticeDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * 公告通知
 * @author yeshijie on 2018/9/30.
 */
public interface NoticeDao extends PagingAndSortingRepository<NoticeDO, String>, JpaSpecificationExecutor<NoticeDO> {
    List<NoticeDO> findByStatusAndSendType(Integer status,Integer sendType);
}

+ 19 - 17
svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasDefaultModuleFunctionDao.java

@ -1,17 +1,19 @@
package com.yihu.jw.base.dao.saas;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Dao - Saas默认模块功能
 * Created by progr1mmer on 2018/8/17.
 */
public interface SaasDefaultModuleFunctionDao extends PagingAndSortingRepository<SaasDefaultModuleFunctionDO, Integer>, JpaSpecificationExecutor<SaasDefaultModuleFunctionDO> {
    List<SaasDefaultModuleFunctionDO> findBySaasType(SaasDO.Type type);
}
//package com.yihu.jw.base.dao.saas;
//
//import com.yihu.jw.entity.base.saas.SaasDO;
//import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
//import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//import org.springframework.data.repository.PagingAndSortingRepository;
//
//import java.util.List;
//
///**
// * Dao - Saas默认模块功能
// * Created by progr1mmer on 2018/8/17.
// */
//public interface SaasDefaultModuleFunctionDao extends PagingAndSortingRepository<SaasDefaultModuleFunctionDO, Integer>, JpaSpecificationExecutor<SaasDefaultModuleFunctionDO> {
//
//    List<SaasDefaultModuleFunctionDO> findBySaasType(Integer saasType);
//
//    void deleteBySaasType(Integer saasType);
//}

+ 13 - 13
svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasModuleFunctionDao.java

@ -1,13 +1,13 @@
package com.yihu.jw.base.dao.saas;
import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Dao - Saas所分配的模块功能
 * Created by progr1mmer on 2018/8/17.
 */
public interface SaasModuleFunctionDao extends PagingAndSortingRepository<SaasModuleFunctionDO, String>, JpaSpecificationExecutor<SaasModuleFunctionDO> {
}
//package com.yihu.jw.base.dao.saas;
//
//import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
//import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//import org.springframework.data.repository.PagingAndSortingRepository;
//
///**
// * Dao - Saas所分配的模块功能
// * Created by progr1mmer on 2018/8/17.
// */
//public interface SaasModuleFunctionDao extends PagingAndSortingRepository<SaasModuleFunctionDO, String>, JpaSpecificationExecutor<SaasModuleFunctionDO> {
//
//}

+ 23 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasTypeDictDao.java

@ -0,0 +1,23 @@
package com.yihu.jw.base.dao.saas;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.entity.base.saas.SaasTypeDictDO;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * Created by zdm on 2018/10/10.
 */
public interface SaasTypeDictDao extends PagingAndSortingRepository<SaasTypeDictDO, String> {
    SaasTypeDictDO findByName(String name);
    SaasTypeDictDO findById(String id);
    @Query("select Max(code) from SaasTypeDictDO ")
    Integer findTopCode();
}

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/user/UserDao.java

@ -4,9 +4,13 @@ import com.yihu.jw.entity.base.user.UserDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Dao - 后台管理员
 * Created by progr1mmer on 2018/8/20.
 */
public interface UserDao extends PagingAndSortingRepository<UserDO, String>, JpaSpecificationExecutor<UserDO> {
    List<UserDO> findByEnabled(boolean enabled);
}

+ 11 - 14
svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxGraphicMessageDao.java

@ -1,15 +1,12 @@
package com.yihu.jw.base.dao.wx;//package com.yihu.jw.business.wx.dao;
//
//import com.yihu.jw.base.wx.WxGraphicMessageDO;
//import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//import org.springframework.data.jpa.repository.Query;
//import org.springframework.data.repository.PagingAndSortingRepository;
//
///**
// * Created by Administrator on 2017/5/20 0020.
// */
//public interface WxGraphicMessageDao extends PagingAndSortingRepository<WxGraphicMessageDO, String>, JpaSpecificationExecutor<WxGraphicMessageDO> {
//
//    @Query("from WxGraphicMessageDO w where w.id =?1 and w.status!=-1")
//    WxGraphicMessageDO findById(String id);
//}
import com.yihu.jw.entity.base.wx.WxGraphicMessageDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2017/5/20 0020.
 */
public interface WxGraphicMessageDao extends PagingAndSortingRepository<WxGraphicMessageDO, String>, JpaSpecificationExecutor<WxGraphicMessageDO> {
}

+ 11 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxGraphicSceneDao.java

@ -0,0 +1,11 @@
package com.yihu.jw.base.dao.wx;
import com.yihu.jw.entity.base.wx.WxGraphicSceneDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2018/10/9.
 */
public interface WxGraphicSceneDao extends PagingAndSortingRepository<WxGraphicSceneDO, String>, JpaSpecificationExecutor<WxGraphicSceneDO> {
}

+ 20 - 20
svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxTemplateDao.java

@ -1,21 +1,21 @@
package com.yihu.jw.base.dao.wx;//package com.yihu.jw.business.wx.dao;
//
//import com.yihu.jw.base.wx.WxTemplateDO;
//import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//import org.springframework.data.jpa.repository.Query;
//import org.springframework.data.repository.PagingAndSortingRepository;
//
//import java.util.List;
//
///**
// * Created by Administrator on 2017/5/20 0020.
// */
//public interface WxTemplateDao extends PagingAndSortingRepository<WxTemplateDO, String>, JpaSpecificationExecutor<WxTemplateDO> {
//
//
//    @Query("from WxTemplateDO w where w.id = ?1 and w.status =1")
//    WxTemplateDO findById(String id);
//
//    @Query("from WxTemplateDO w where w.wechatId = ?1 and w.status =1")
//    List<WxTemplateDO> findByWxId(String wechatId);
//}
import com.yihu.jw.entity.base.wx.WxTemplateDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Administrator on 2017/5/20 0020.
 */
public interface WxTemplateDao extends PagingAndSortingRepository<WxTemplateDO, String>, JpaSpecificationExecutor<WxTemplateDO> {
    @Query("from WxTemplateDO w where w.id = ?1 and w.status =1")
    WxTemplateDO findById(String id);
    @Query("from WxTemplateDO w where w.wechatId = ?1 and w.status =1")
    List<WxTemplateDO> findByWxId(String wechatId);
}

+ 14 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxWechatSaasDao.java

@ -0,0 +1,14 @@
package com.yihu.jw.base.dao.wx;
import com.yihu.jw.entity.base.wx.WxWechatSaasDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Administrator on 2018/10/8.
 */
public interface WxWechatSaasDao  extends PagingAndSortingRepository<WxWechatSaasDO, String>, JpaSpecificationExecutor<WxWechatSaasDO> {
    List<WxWechatSaasDO> findByWechatId(String wechatId);
}

+ 165 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/FileUploadController.java

@ -0,0 +1,165 @@
package com.yihu.jw.base.endpoint.common;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.fastdfs.FastDFSUtil;
import com.yihu.jw.base.util.ErrorCodeUtil;
import com.yihu.jw.exception.code.BaseErrorCode;
import com.yihu.jw.restmodel.iot.common.UploadVO;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.Base64;
/**
 * 文件上传不在微服务中处理
 * @author yeshijie on 2017/12/7.
 */
@RestController
@RequestMapping(BaseRequestMapping.FileUpload.PREFIX)
@Api(tags = "文件上传相关操作", description = "文件上传相关操作")
public class FileUploadController extends EnvelopRestEndpoint {
    @Autowired
    private FastDFSUtil fastDFSHelper;
    @Value("${fastDFS.fastdfs_file_url}")
    private String fastdfs_file_url;
    @Autowired
    private ErrorCodeUtil errorCodeUtil;
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_IMG)
    @ApiOperation(value = "文件流上传图片", notes = "文件流上传图片")
    public ObjEnvelop<UploadVO> uploadImg(@ApiParam(value = "文件", required = true)
                                       @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
        // 得到文件的完整名称  xxx.txt
        String fullName = file.getOriginalFilename();
        if(StringUtils.isBlank(fullName)){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
        }
        //得到文件类型
        String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
        if(StringUtils.isBlank(fileType)||!"jpg,jpeg,png".contains(fileType)){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
        }
        long size = file.getSize();
        long max = 5*1024*1024;
        if(size>max){
            String msg = String.format(BaseErrorCode.FileUpload.FAIL_FILE_SIZE, 5);
            return failed(msg, ObjEnvelop.class);
        }
        String fileName = fullName.substring(0, fullName.lastIndexOf("."));
        //上传到fastdfs
        ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
        //解析返回的objectNode
        UploadVO uploadVO = new UploadVO();
        uploadVO.setFileName(fileName);
        uploadVO.setFileType(fileType);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        return success("上传成功", uploadVO);
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_ATTACHMENT)
    @ApiOperation(value = "文件流上传附件", notes = "文件流上传附件")
    public ObjEnvelop<UploadVO> uploadAttachment(@ApiParam(value = "文件", required = true)
                                       @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
        // 得到文件的完整名称  xxx.txt
        String fullName = file.getOriginalFilename();
        if(StringUtils.isBlank(fullName)){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
        }
        //得到文件类型
        String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
        if(StringUtils.isBlank(fileType)||!"doc、docx、pdf、xls、xlsx、jpg、jpeg、png".contains(fileType)){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
        }
        long size = file.getSize();
        long max = 5*1024*1024;
        if(size>max){
            String msg = String.format(BaseErrorCode.FileUpload.FAIL_FILE_SIZE, 5);
            return failed(msg, ObjEnvelop.class);
        }
        String fileName = fullName.substring(0, fullName.lastIndexOf("."));
        //上传到fastdfs
        ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
        //解析返回的objectNode
        UploadVO uploadVO = new UploadVO();
        uploadVO.setFileName(fileName);
        uploadVO.setFileType(fileType);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        return success("上传成功", uploadVO);
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM)
    @ApiOperation(value = "文件流上传文件", notes = "文件流上传文件")
    public ObjEnvelop<UploadVO> uploadStream(@ApiParam(value = "文件", required = true)
        @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
        // 得到文件的完整名称  xxx.txt
        String fullName = file.getOriginalFilename();
        //得到文件类型
        String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
        String fileName = fullName.substring(0, fullName.lastIndexOf("."));
        //上传到fastdfs
        ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
        //解析返回的objectNode
        UploadVO uploadVO = new UploadVO();
        uploadVO.setFileName(fileName);
        uploadVO.setFileType(fileType);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        return success("上传成功", uploadVO);
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STRING)
    @ApiOperation(value = "base64上传图片",notes = "base64上传图片")
    public ObjEnvelop<UploadVO> uploadImages(@ApiParam(name = "jsonData", value = "头像转化后的输入流")
                                                 @RequestBody String jsonData) throws Exception {
        if(jsonData == null){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FILE_NULL), ObjEnvelop.class);
        }
        String date = URLDecoder.decode(jsonData,"UTF-8");
        String[] fileStreams = date.split(",");
        String is = URLDecoder.decode(fileStreams[1],"UTF-8").replace(" ","+");
        byte[] in = Base64.getDecoder().decode(is);
        String pictureName = fileStreams[0].substring(0,fileStreams[0].length()-1);
        String fileExtension = pictureName.substring(pictureName.lastIndexOf(".") + 1).toLowerCase();
        String description = null;
        if ((pictureName != null) && (pictureName.length() > 0)) {
            int dot = pictureName.lastIndexOf('.');
            if ((dot > -1) && (dot < (pictureName.length()))) {
                description = pictureName.substring(0, dot);
            }
        }
        InputStream inputStream = new ByteArrayInputStream(in);
        ObjectNode objectNode = fastDFSHelper.upload(inputStream, "png", "");
        String groupName = objectNode.get("groupName").toString();
        String remoteFileName = objectNode.get("remoteFileName").toString();
        //解析返回的objectNode
        UploadVO uploadVO = new UploadVO();
        uploadVO.setFileName(remoteFileName);
        uploadVO.setFileType(groupName);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        //返回文件路径
        return success("上传成功", uploadVO);
    }
}

+ 15 - 15
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/customize/UserHideModuleFunctionEndpoint.java

@ -1,8 +1,8 @@
package com.yihu.jw.base.endpoint.customize;
import com.yihu.jw.base.service.customize.UserHideModuleFunctionService;
import com.yihu.jw.entity.base.customize.UserHideModuleFunctionDO;
import com.yihu.jw.restmodel.base.customize.UserHideModuleFunctionVO;
import com.yihu.jw.base.service.customize.UserHideModuleInterfaceService;
import com.yihu.jw.entity.base.customize.UserHideModuleInterfaceDO;
import com.yihu.jw.restmodel.base.customize.UserHideModuleInterfaceVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
@ -25,19 +25,19 @@ import java.util.List;
@RestController
@RequestMapping(value = BaseRequestMapping.UserHideModuleFunction.PREFIX)
@Api(value = "用户取消订阅的模块或功能(用户自定义)", description = "用户取消订阅的模块或功能(用户自定义)服务接口", tags = {"wlyy基础服务 - 用户取消订阅的模块或功能(用户自定义)服务接口"})
public class UserHideModuleFunctionEndpoint extends EnvelopRestEndpoint {
public class UserHideModuleInterfaceEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private UserHideModuleFunctionService userHideModuleFunctionService;
    private UserHideModuleInterfaceService userHideModuleFunctionService;
    @PostMapping(value = BaseRequestMapping.UserHideModuleFunction.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<UserHideModuleFunctionVO> create (
    public ObjEnvelop<UserHideModuleInterfaceVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        UserHideModuleFunctionDO userHideModuleFunctionDO = toEntity(jsonData, UserHideModuleFunctionDO.class);
        UserHideModuleInterfaceDO userHideModuleFunctionDO = toEntity(jsonData, UserHideModuleInterfaceDO.class);
        userHideModuleFunctionDO = userHideModuleFunctionService.save(userHideModuleFunctionDO);
        return success(userHideModuleFunctionDO, UserHideModuleFunctionVO.class);
        return success(userHideModuleFunctionDO, UserHideModuleInterfaceVO.class);
    }
    @PostMapping(value = BaseRequestMapping.UserHideModuleFunction.DELETE)
@ -54,7 +54,7 @@ public class UserHideModuleFunctionEndpoint extends EnvelopRestEndpoint {
    public Envelop update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        UserHideModuleFunctionDO userHideModuleFunctionDO = toEntity(jsonData, UserHideModuleFunctionDO.class);
        UserHideModuleInterfaceDO userHideModuleFunctionDO = toEntity(jsonData, UserHideModuleInterfaceDO.class);
        if (null == userHideModuleFunctionDO.getId()) {
            return failed("ID不能为空", Envelop.class);
        }
@ -64,7 +64,7 @@ public class UserHideModuleFunctionEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = BaseRequestMapping.UserHideModuleFunction.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<UserHideModuleFunctionVO> page (
    public PageEnvelop<UserHideModuleInterfaceVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
@ -75,22 +75,22 @@ public class UserHideModuleFunctionEndpoint extends EnvelopRestEndpoint {
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<UserHideModuleFunctionDO> userHideModuleFunctionDOS = userHideModuleFunctionService.search(fields, filters, sorts, page, size);
        List<UserHideModuleInterfaceDO> userHideModuleFunctionDOS = userHideModuleFunctionService.search(fields, filters, sorts, page, size);
        int count = (int)userHideModuleFunctionService.getCount(filters);
        return success(userHideModuleFunctionDOS, count, page, size, UserHideModuleFunctionVO.class);
        return success(userHideModuleFunctionDOS, count, page, size, UserHideModuleInterfaceVO.class);
    }
    @GetMapping(value = BaseRequestMapping.UserHideModuleFunction.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<UserHideModuleFunctionVO> list (
    public ListEnvelop<UserHideModuleInterfaceVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<UserHideModuleFunctionDO> userHideModuleFunctionDOS = userHideModuleFunctionService.search(fields, filters, sorts);
        return success(userHideModuleFunctionDOS, UserHideModuleFunctionVO.class);
        List<UserHideModuleInterfaceDO> userHideModuleFunctionDOS = userHideModuleFunctionService.search(fields, filters, sorts);
        return success(userHideModuleFunctionDOS, UserHideModuleInterfaceVO.class);
    }
}

+ 96 - 96
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/function/FunctionEndpoint.java

@ -1,96 +1,96 @@
package com.yihu.jw.base.endpoint.function;
import com.yihu.jw.base.service.function.FunctionService;
import com.yihu.jw.entity.base.function.FunctionDO;
import com.yihu.jw.restmodel.base.function.FunctionVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Endpoint - 功能
 * Created by progr1mmer on 2018/8/16.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.Function.PREFIX)
@Api(value = "功能管理", description = "功能管理服务接口", tags = {"wlyy基础服务 - 功能管理服务接口"})
public class FunctionEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private FunctionService functionService;
    @PostMapping(value = BaseRequestMapping.Function.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<FunctionVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        FunctionDO functionDO = toEntity(jsonData, FunctionDO.class);
        functionDO = functionService.save(functionDO);
        return success(functionDO, FunctionVO.class);
    }
    @PostMapping(value = BaseRequestMapping.Function.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        functionService.delete(ids.split(","));
        return success("success");
    }
    @PostMapping(value = BaseRequestMapping.Function.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<FunctionVO> update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        FunctionDO functionDO = toEntity(jsonData, FunctionDO.class);
        if (null == functionDO.getId()) {
            return failed("ID不能为空", ObjEnvelop.class);
        }
        functionDO = functionService.save(functionDO);
        return success(functionDO, FunctionVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Function.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<FunctionVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<FunctionDO> functionDOS = functionService.search(fields, filters, sorts, page, size);
        int count = (int)functionService.getCount(filters);
        return success(functionDOS, count, page, size, FunctionVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Function.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<FunctionVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<FunctionDO> functionDOS = functionService.search(fields, filters, sorts);
        return success(functionDOS, FunctionVO.class);
    }
}
//package com.yihu.jw.base.endpoint.function;
//
//import com.yihu.jw.base.service.function.FunctionService;
//import com.yihu.jw.entity.base.function.FunctionDO;
//import com.yihu.jw.restmodel.base.function.FunctionVO;
//import com.yihu.jw.restmodel.web.Envelop;
//import com.yihu.jw.restmodel.web.ListEnvelop;
//import com.yihu.jw.restmodel.web.ObjEnvelop;
//import com.yihu.jw.restmodel.web.PageEnvelop;
//import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
//import com.yihu.jw.rm.base.BaseRequestMapping;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * Endpoint - 功能
// * Created by progr1mmer on 2018/8/16.
// */
//@RestController
//@RequestMapping(value = BaseRequestMapping.Function.PREFIX)
//@Api(value = "功能(接口)管理", description = "功能(接口)管理服务接口", tags = {"wlyy基础服务 - 功能(接口)管理服务接口"})
//public class FunctionEndpoint extends EnvelopRestEndpoint {
//
//    @Autowired
//    private FunctionService functionService;
//
//    @PostMapping(value = BaseRequestMapping.Function.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "创建")
//    public ObjEnvelop<FunctionVO> create (
//            @ApiParam(name = "json_data", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        FunctionDO functionDO = toEntity(jsonData, FunctionDO.class);
//        functionDO = functionService.save(functionDO);
//        return success(functionDO, FunctionVO.class);
//    }
//
//    @PostMapping(value = BaseRequestMapping.Function.DELETE)
//    @ApiOperation(value = "删除")
//    public Envelop delete(
//            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
//            @RequestParam(value = "ids") String ids) {
//        functionService.delete(ids.split(","));
//        return success("success");
//    }
//
//    @PostMapping(value = BaseRequestMapping.Function.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "更新")
//    public ObjEnvelop<FunctionVO> update (
//            @ApiParam(name = "json_data", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        FunctionDO functionDO = toEntity(jsonData, FunctionDO.class);
//        if (null == functionDO.getId()) {
//            return failed("ID不能为空", ObjEnvelop.class);
//        }
//        functionDO = functionService.save(functionDO);
//        return success(functionDO, FunctionVO.class);
//    }
//
//    @GetMapping(value = BaseRequestMapping.Function.PAGE)
//    @ApiOperation(value = "获取分页")
//    public PageEnvelop<FunctionVO> page (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts,
//            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
//            @RequestParam(value = "page") int page,
//            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
//            @RequestParam(value = "size") int size) throws Exception {
//        List<FunctionDO> functionDOS = functionService.search(fields, filters, sorts, page, size);
//        int count = (int)functionService.getCount(filters);
//        return success(functionDOS, count, page, size, FunctionVO.class);
//    }
//
//    @GetMapping(value = BaseRequestMapping.Function.LIST)
//    @ApiOperation(value = "获取列表")
//    public ListEnvelop<FunctionVO> list (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
//        List<FunctionDO> functionDOS = functionService.search(fields, filters, sorts);
//        return success(functionDOS, FunctionVO.class);
//    }
//
//}

+ 121 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/module/SaasInterfaceEndpoint.java

@ -0,0 +1,121 @@
package com.yihu.jw.base.endpoint.module;
import com.yihu.jw.base.service.module.SaasInterfaceService;
import com.yihu.jw.base.util.ErrorCodeUtil;
import com.yihu.jw.entity.base.module.SaasInterfaceDO;
import com.yihu.jw.exception.code.BaseErrorCode;
import com.yihu.jw.restmodel.base.module.SaasInterfaceVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 租户接口
 * @author yeshijie on 2018/10/11.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.SaasInterface.PREFIX)
@Api(value = "租户接口管理", description = "租户接口管理服务接口", tags = {"基础服务 - 租户接口管理服务接口"})
public class SaasInterfaceEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SaasInterfaceService interfaceService;
    @Autowired
    private ErrorCodeUtil errorCodeUtil;
    @PostMapping(value = BaseRequestMapping.SaasInterface.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<SaasInterfaceVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasInterfaceDO interfaceDO = toEntity(jsonData, SaasInterfaceDO.class);
        interfaceDO = interfaceService.addInterface(interfaceDO);
        return success(interfaceDO, SaasInterfaceVO.class);
    }
    @GetMapping(value = BaseRequestMapping.SaasInterface.FINDBYID)
    @ApiOperation(value = "按id查找")
    public ObjEnvelop<SaasInterfaceVO> findById (
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) throws Exception {
        SaasInterfaceDO interfaceDO = interfaceService.findById(id);
        return success(interfaceDO, SaasInterfaceVO.class);
    }
    @PostMapping(value = BaseRequestMapping.SaasInterface.STATUS)
    @ApiOperation(value = "启用/暂停")
    public Envelop status(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id,
            @ApiParam(name = "status", value = "1生效,0失效", required = true)
            @RequestParam(value = "status") Integer status) {
        interfaceService.updateStatus(id, status);
        return success("修改成功");
    }
    @PostMapping(value = BaseRequestMapping.SaasInterface.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        interfaceService.delete(ids.split(","));
        return success("删除成功");
    }
    @PostMapping(value = BaseRequestMapping.SaasInterface.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<SaasInterfaceVO> update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasInterfaceDO interfaceDO = toEntity(jsonData, SaasInterfaceDO.class);
        if (null == interfaceDO.getId()) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Common.ID_IS_NULL), ObjEnvelop.class);
        }
        interfaceDO = interfaceService.addInterface(interfaceDO);
        return success(interfaceDO, SaasInterfaceVO.class);
    }
    @GetMapping(value = BaseRequestMapping.SaasInterface.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<SaasInterfaceVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<SaasInterfaceDO> modules = interfaceService.search(fields, filters, sorts, page, size);
        int count = (int)interfaceService.getCount(filters);
        return success(modules, count, page, size, SaasInterfaceVO.class);
    }
    @GetMapping(value = BaseRequestMapping.SaasInterface.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<SaasInterfaceVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<SaasInterfaceDO> interfaceDOs = interfaceService.search(fields, filters, sorts);
        return success(interfaceDOs, SaasInterfaceVO.class);
    }
}

+ 123 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/NoticeEndPoint.java

@ -0,0 +1,123 @@
package com.yihu.jw.base.endpoint.notice;
import com.yihu.jw.base.service.notice.NoticeService;
import com.yihu.jw.base.util.ErrorCodeUtil;
import com.yihu.jw.entity.base.notice.NoticeDO;
import com.yihu.jw.exception.code.BaseErrorCode;
import com.yihu.jw.restmodel.base.notice.NoticeVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 公告通知
 * @author yeshijie on 2018/10/9.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.Notice.PREFIX)
@Api(value = "公告通知管理", description = "公告通知管理服务接口", tags = {"基础服务 - 公告通知管理服务接口"})
public class NoticeEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private NoticeService noticeService;
    @Autowired
    private ErrorCodeUtil errorCodeUtil;
    @PostMapping(value = BaseRequestMapping.Notice.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<NoticeVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        NoticeDO noticeDO = toEntity(jsonData, NoticeDO.class);
        if(StringUtils.isBlank(noticeDO.getTitle())||noticeDO.getTitle().length()>50){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Notice.LIMIT_TITLE), ObjEnvelop.class);
        }
        noticeDO = noticeService.addNotice(noticeDO);
        return success(noticeDO, NoticeVO.class);
    }
    @PostMapping(value = BaseRequestMapping.Notice.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) {
        noticeService.deleteNotice(id);
        return success("删除成功");
    }
    @PostMapping(value = BaseRequestMapping.Notice.RELEASE)
    @ApiOperation(value = "发布")
    public Envelop release(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) {
        NoticeDO noticeDO = noticeService.findById(id);
        if (NoticeDO.Status.released.getValue().equals(noticeDO.getStatus())){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Notice.HAD_RELEASE), Envelop.class);
        }
        if (NoticeDO.SendType.automatic_release.getValue().equals(noticeDO.getSendType())){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Notice.AUTO_RELEASE), Envelop.class);
        }
        noticeService.release(noticeDO);
        return success("发布成功");
    }
    @PostMapping(value = BaseRequestMapping.Notice.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<NoticeVO> update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        NoticeDO noticeDO = toEntity(jsonData, NoticeDO.class);
        if (null == noticeDO.getId()) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Common.ID_IS_NULL), ObjEnvelop.class);
        }
        if(StringUtils.isBlank(noticeDO.getTitle())||noticeDO.getTitle().length()>50){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Notice.LIMIT_TITLE), ObjEnvelop.class);
        }
        noticeDO = noticeService.updateNotice(noticeDO);
        return success(noticeDO, NoticeVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Notice.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<NoticeVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<NoticeDO> noticeDOs = noticeService.search(fields, filters, sorts, page, size);
        int count = (int)noticeService.getCount(filters);
        return success(noticeDOs, count, page, size, NoticeVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Notice.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<NoticeVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<NoticeDO> noticeDOs = noticeService.search(fields, filters, sorts);
        return success(noticeDOs, NoticeVO.class);
    }
}

+ 54 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/UserNoticeEndpoint.java

@ -0,0 +1,54 @@
package com.yihu.jw.base.endpoint.notice;
import com.yihu.jw.base.service.notice.UserNoticeService;
import com.yihu.jw.entity.base.notice.NoticeDO;
import com.yihu.jw.restmodel.base.notice.NoticeVO;
import com.yihu.jw.restmodel.base.notice.UserNoticeVO;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 *
 * @author yeshijie on 2018/10/9.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.UserNotice.PREFIX)
@Api(value = "用户公告通知管理", description = "用户公告通知管理服务接口", tags = {"基础服务 - 用户公告通知管理服务接口"})
public class UserNoticeEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private UserNoticeService userNoticeService;
    @GetMapping(value = BaseRequestMapping.Module.FINDBYID)
    @ApiOperation(value = "查看文章详情")
    public ObjEnvelop<NoticeVO> findById(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) {
        NoticeDO noticeDO = userNoticeService.findNoticeDetail(id);
        return success(noticeDO, NoticeVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Module.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<UserNoticeVO> page (
            @ApiParam(name = "userId", value = "用户id")
            @RequestParam(value = "userId", required = true) String userId,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        return userNoticeService.queryPage(page,size,userId);
    }
}

+ 96 - 96
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasDefaultModuleFunctionEndpoint.java

@ -1,96 +1,96 @@
package com.yihu.jw.base.endpoint.saas;
import com.yihu.jw.base.service.saas.SaasDefaultModuleFunctionService;
import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
import com.yihu.jw.restmodel.base.saas.SaasDefaultModuleFunctionVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Endpoint - Saas默认模块功能
 * Created by progr1mmer on 2018/8/16.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.PREFIX)
@Api(value = "Saas默认模块功能管理", description = "Saas默认模块功能管理服务接口", tags = {"wlyy基础服务 - Saas默认模块功能管理服务接口"})
public class SaasDefaultModuleFunctionEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SaasDefaultModuleFunctionService saasDefaultModuleService;
    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<SaasDefaultModuleFunctionVO> create (
            @ApiParam(name = "json", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasDefaultModuleFunctionDO saasDefaultModuleDO = toEntity(jsonData, SaasDefaultModuleFunctionDO.class);
        saasDefaultModuleDO = saasDefaultModuleService.save(saasDefaultModuleDO);
        return success(saasDefaultModuleDO, SaasDefaultModuleFunctionVO.class);
    }
    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        saasDefaultModuleService.delete(ids.split(","));
        return success("删除成功");
    }
    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public Envelop update (
            @ApiParam(name = "json", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasDefaultModuleFunctionDO saasDefaultModuleDO = toEntity(jsonData, SaasDefaultModuleFunctionDO.class);
        if (null == saasDefaultModuleDO.getId()) {
            return failed("ID不能为空", Envelop.class);
        }
        saasDefaultModuleDO = saasDefaultModuleService.save(saasDefaultModuleDO);
        return success(saasDefaultModuleDO);
    }
    @GetMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<SaasDefaultModuleFunctionVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleService.search(fields, filters, sorts, page, size);
        int count = (int)saasDefaultModuleService.getCount(filters);
        return success(saasDefaultModuleDOS, count, page, size, SaasDefaultModuleFunctionVO.class);
    }
    @GetMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<SaasDefaultModuleFunctionVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleService.search(fields, filters, sorts);
        return success(saasDefaultModuleDOS, SaasDefaultModuleFunctionVO.class);
    }
}
//package com.yihu.jw.base.endpoint.saas;
//
//import com.yihu.jw.base.service.saas.SaasDefaultModuleFunctionService;
//import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
//import com.yihu.jw.restmodel.base.saas.SaasDefaultModuleFunctionVO;
//import com.yihu.jw.restmodel.web.Envelop;
//import com.yihu.jw.restmodel.web.ListEnvelop;
//import com.yihu.jw.restmodel.web.ObjEnvelop;
//import com.yihu.jw.restmodel.web.PageEnvelop;
//import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
//import com.yihu.jw.rm.base.BaseRequestMapping;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * Endpoint - Saas默认模块功能
// * Created by progr1mmer on 2018/8/16.
// */
//@RestController
//@RequestMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.PREFIX)
//@Api(value = "Saas默认模块功能管理", description = "Saas默认模块功能管理服务接口", tags = {"wlyy基础服务 - Saas默认模块功能管理服务接口"})
//public class SaasDefaultModuleFunctionEndpoint extends EnvelopRestEndpoint {
//
//    @Autowired
//    private SaasDefaultModuleFunctionService saasDefaultModuleService;
//
//    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "创建")
//    public ObjEnvelop<SaasDefaultModuleFunctionVO> create (
//            @ApiParam(name = "json", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        SaasDefaultModuleFunctionDO saasDefaultModuleDO = toEntity(jsonData, SaasDefaultModuleFunctionDO.class);
//        saasDefaultModuleDO = saasDefaultModuleService.save(saasDefaultModuleDO);
//        return success(saasDefaultModuleDO, SaasDefaultModuleFunctionVO.class);
//    }
//
//    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.DELETE)
//    @ApiOperation(value = "删除")
//    public Envelop delete(
//            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
//            @RequestParam(value = "ids") String ids) {
//        saasDefaultModuleService.delete(ids.split(","));
//        return success("删除成功");
//    }
//
//    @PostMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "更新")
//    public Envelop update (
//            @ApiParam(name = "json", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        SaasDefaultModuleFunctionDO saasDefaultModuleDO = toEntity(jsonData, SaasDefaultModuleFunctionDO.class);
//        if (null == saasDefaultModuleDO.getId()) {
//            return failed("ID不能为空", Envelop.class);
//        }
//        saasDefaultModuleDO = saasDefaultModuleService.save(saasDefaultModuleDO);
//        return success(saasDefaultModuleDO);
//    }
//
//    @GetMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.PAGE)
//    @ApiOperation(value = "获取分页")
//    public PageEnvelop<SaasDefaultModuleFunctionVO> page (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts,
//            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
//            @RequestParam(value = "page") int page,
//            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
//            @RequestParam(value = "size") int size) throws Exception {
//        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleService.search(fields, filters, sorts, page, size);
//        int count = (int)saasDefaultModuleService.getCount(filters);
//        return success(saasDefaultModuleDOS, count, page, size, SaasDefaultModuleFunctionVO.class);
//    }
//
//    @GetMapping(value = BaseRequestMapping.SaasDefaultModuleFunction.LIST)
//    @ApiOperation(value = "获取列表")
//    public ListEnvelop<SaasDefaultModuleFunctionVO> list (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
//        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleService.search(fields, filters, sorts);
//        return success(saasDefaultModuleDOS, SaasDefaultModuleFunctionVO.class);
//    }
//
//}

+ 96 - 96
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasModuleFunctionEndpoint.java

@ -1,96 +1,96 @@
package com.yihu.jw.base.endpoint.saas;
import com.yihu.jw.base.service.saas.SaasModuleFunctionService;
import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
import com.yihu.jw.restmodel.base.saas.SaasModuleFunctionVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Endpoint - Saas所分配的模块功能
 * Created by progr1mmer on 2018/8/16.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.SaasModuleFunction.PREFIX)
@Api(value = "Saas模块功能管理", description = "Saas模块功能管理服务接口", tags = {"wlyy基础服务 - Saas模块功能管理服务接口"})
public class SaasModuleFunctionEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SaasModuleFunctionService saasModuleFunctionService;
    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<SaasModuleFunctionVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasModuleFunctionDO saasModuleFunctionDO = toEntity(jsonData, SaasModuleFunctionDO.class);
        saasModuleFunctionDO = saasModuleFunctionService.save(saasModuleFunctionDO);
        return success(saasModuleFunctionDO, SaasModuleFunctionVO.class);
    }
    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        saasModuleFunctionService.delete(ids.split(","));
        return success("删除成功");
    }
    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public Envelop update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestBody String jsonData) throws Exception {
        SaasModuleFunctionDO saasModuleFunctionDO = toEntity(jsonData, SaasModuleFunctionDO.class);
        if (null == saasModuleFunctionDO.getId()) {
            return failed("ID不能为空", Envelop.class);
        }
        saasModuleFunctionDO = saasModuleFunctionService.save(saasModuleFunctionDO);
        return success(saasModuleFunctionDO);
    }
    @GetMapping(value = BaseRequestMapping.SaasModuleFunction.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<SaasModuleFunctionVO> page (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<SaasModuleFunctionDO> saasModuleFunctionDOS = saasModuleFunctionService.search(fields, filters, sorts, page, size);
        int count = (int)saasModuleFunctionService.getCount(filters);
        return success(saasModuleFunctionDOS, count, page, size, SaasModuleFunctionVO.class);
    }
    @GetMapping(value = BaseRequestMapping.SaasModuleFunction.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<SaasModuleFunctionVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<SaasModuleFunctionDO> saasModuleFunctionDOS = saasModuleFunctionService.search(fields, filters, sorts);
        return success(saasModuleFunctionDOS, SaasModuleFunctionVO.class);
    }
}
//package com.yihu.jw.base.endpoint.saas;
//
//import com.yihu.jw.base.service.saas.SaasModuleFunctionService;
//import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
//import com.yihu.jw.restmodel.base.saas.SaasModuleFunctionVO;
//import com.yihu.jw.restmodel.web.Envelop;
//import com.yihu.jw.restmodel.web.ListEnvelop;
//import com.yihu.jw.restmodel.web.ObjEnvelop;
//import com.yihu.jw.restmodel.web.PageEnvelop;
//import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
//import com.yihu.jw.rm.base.BaseRequestMapping;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * Endpoint - Saas所分配的模块功能
// * Created by progr1mmer on 2018/8/16.
// */
//@RestController
//@RequestMapping(value = BaseRequestMapping.SaasModuleFunction.PREFIX)
//@Api(value = "Saas模块功能管理", description = "Saas模块功能管理服务接口", tags = {"wlyy基础服务 - Saas模块功能管理服务接口"})
//public class SaasModuleFunctionEndpoint extends EnvelopRestEndpoint {
//
//    @Autowired
//    private SaasModuleFunctionService saasModuleFunctionService;
//
//    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "创建")
//    public ObjEnvelop<SaasModuleFunctionVO> create (
//            @ApiParam(name = "json_data", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        SaasModuleFunctionDO saasModuleFunctionDO = toEntity(jsonData, SaasModuleFunctionDO.class);
//        saasModuleFunctionDO = saasModuleFunctionService.save(saasModuleFunctionDO);
//        return success(saasModuleFunctionDO, SaasModuleFunctionVO.class);
//    }
//
//    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.DELETE)
//    @ApiOperation(value = "删除")
//    public Envelop delete(
//            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
//            @RequestParam(value = "ids") String ids) {
//        saasModuleFunctionService.delete(ids.split(","));
//        return success("删除成功");
//    }
//
//    @PostMapping(value = BaseRequestMapping.SaasModuleFunction.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "更新")
//    public Envelop update (
//            @ApiParam(name = "json_data", value = "Json数据", required = true)
//            @RequestBody String jsonData) throws Exception {
//        SaasModuleFunctionDO saasModuleFunctionDO = toEntity(jsonData, SaasModuleFunctionDO.class);
//        if (null == saasModuleFunctionDO.getId()) {
//            return failed("ID不能为空", Envelop.class);
//        }
//        saasModuleFunctionDO = saasModuleFunctionService.save(saasModuleFunctionDO);
//        return success(saasModuleFunctionDO);
//    }
//
//    @GetMapping(value = BaseRequestMapping.SaasModuleFunction.PAGE)
//    @ApiOperation(value = "获取分页")
//    public PageEnvelop<SaasModuleFunctionVO> page (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts,
//            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
//            @RequestParam(value = "page") int page,
//            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
//            @RequestParam(value = "size") int size) throws Exception {
//        List<SaasModuleFunctionDO> saasModuleFunctionDOS = saasModuleFunctionService.search(fields, filters, sorts, page, size);
//        int count = (int)saasModuleFunctionService.getCount(filters);
//        return success(saasModuleFunctionDOS, count, page, size, SaasModuleFunctionVO.class);
//    }
//
//    @GetMapping(value = BaseRequestMapping.SaasModuleFunction.LIST)
//    @ApiOperation(value = "获取列表")
//    public ListEnvelop<SaasModuleFunctionVO> list (
//            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
//            @RequestParam(value = "fields", required = false) String fields,
//            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
//            @RequestParam(value = "filters", required = false) String filters,
//            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
//            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
//        List<SaasModuleFunctionDO> saasModuleFunctionDOS = saasModuleFunctionService.search(fields, filters, sorts);
//        return success(saasModuleFunctionDOS, SaasModuleFunctionVO.class);
//    }
//
//}

+ 113 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasTypeDictEndpoint.java

@ -0,0 +1,113 @@
package com.yihu.jw.base.endpoint.saas;
import com.yihu.jw.base.service.saas.SaasTypeDictService;
import com.yihu.jw.entity.base.saas.SaasTypeDictDO;
import com.yihu.jw.restmodel.base.saas.SaasTypeDictVO;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Endpoint - SaasTypeDict
 * Created by zdm on 2018/10/10.
 */
@RestController
@RequestMapping(value = BaseRequestMapping.SaasTypeDict.PREFIX)
@Api(value = "Saas类型管理", description = "Saas类型管理服务接口", tags = {"wlyy基础服务 - Saas类型管理服务接口"})
public class SaasTypeDictEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SaasTypeDictService saasTypeDictService;
//    @Autowired
//    private SaasDefaultModuleFunctionService saasDefaultModuleFunctionService;
    @PostMapping(value = BaseRequestMapping.SaasTypeDict.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<SaasTypeDictVO> create(
            @ApiParam(name = "saasTypeDictJson", value = "saas类型Json数据")
            @RequestParam(value = "saasTypeDictJson", required = true) String saasTypeDictJson,
            @ApiParam(name = "saasTypeDefaultModuleIds", value = "Saas类型默认的模块id,用逗号隔开")
            @RequestParam(value = "saasTypeDefaultModuleIds", required = true) String saasTypeDefaultModuleIds) throws Exception {
        SaasTypeDictDO saasTypeDictDO = toEntity(saasTypeDictJson, SaasTypeDictDO.class);
        //名称重复判断
        List<SaasTypeDictDO> saasTypeDictDOList = saasTypeDictService.findByField("name", saasTypeDictDO.getName());
        if (null != saasTypeDictDOList && saasTypeDictDOList.size() > 0) {
            return failed("租户类型名称重复!", ObjEnvelop.class);
        }
        saasTypeDictDO = saasTypeDictService.save(saasTypeDictDO, saasTypeDefaultModuleIds);
        return success("创建成功", saasTypeDictDO, SaasTypeDictVO.class);
    }
    @PostMapping(value = BaseRequestMapping.Saas.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<SaasTypeDictVO> update(
            @ApiParam(name = "saasTypeDictJson", value = "saas类型Json数据")
            @RequestParam(value = "saasTypeDictJson", required = true) String saasTypeDictJson,
            @ApiParam(name = "saasTypeDefaultModuleIds", value = "Saas类型默认的模块id,用逗号隔开")
            @RequestParam(value = "saasTypeDefaultModuleIds", required = true) String saasTypeDefaultModuleIds) throws Exception {
        SaasTypeDictDO saasTypeDictDO = toEntity(saasTypeDictJson, SaasTypeDictDO.class);
        if (null == saasTypeDictDO.getId()) {
            return failed("ID不能为空", ObjEnvelop.class);
        }
        if (saasTypeDictService.isSaasTypeDictExistByNameAndId(saasTypeDictDO.getId(),saasTypeDictDO.getName())) {
            return failed("租户类型名称重复!", ObjEnvelop.class);
        }
        //删除关联的模块
//        saasDefaultModuleFunctionService.deleteBySaasType(saasTypeDictDO.getCode());
        saasTypeDictDO = saasTypeDictService.save(saasTypeDictDO, saasTypeDefaultModuleIds);
        return success("更新成功!", saasTypeDictDO, SaasTypeDictVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Saas.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<SaasTypeDictVO> page(
            @ApiParam(name = "name", value = "租户类型名称")
            @RequestParam(value = "name", required = false) String name,
            @ApiParam(name = "status", value = "设施状态:失效-invalid,生效effective")
            @RequestParam(value = "status", required = false) SaasTypeDictDO.Status status,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        StringBuffer s = new StringBuffer();
        if (StringUtils.isNotEmpty(name)) {
            s.append("name?" + name + "g1;");
        }
        if (null != status) {
            s.append("status=" + status);
        }
        //状态(生效中>已失效)>租户类型ID(租户类型ID降序排序,即最新创建的租户类型排在最前)
        String sorts = "-status,-id";
        String filters = s.toString();
        List<SaasTypeDictDO> saasTypeDictDOS = saasTypeDictService.search("", filters, sorts, page, size);
        int count = (int) saasTypeDictService.getCount(filters);
        return success(saasTypeDictDOS, count, page, size, SaasTypeDictVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Saas.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<SaasTypeDictVO> list(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<SaasTypeDictDO> saasTypeDictDOS = saasTypeDictService.search(fields, filters, sorts);
        return success(saasTypeDictDOS, SaasTypeDictVO.class);
    }
}

+ 196 - 5
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java

@ -1,18 +1,22 @@
package com.yihu.jw.base.endpoint.wx;
import com.alibaba.fastjson.JSONArray;
import com.yihu.jw.base.service.wx.WechatService;
import com.yihu.jw.entity.base.wx.*;
import com.yihu.jw.restmodel.base.wx.WxReplySceneVO;
import com.yihu.jw.restmodel.base.wx.WxTemplateConfigVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Created by Trick on 2018/9/26.
@ -25,6 +29,8 @@ public class WechatController extends EnvelopRestEndpoint {
    @Autowired
    private WechatService wechatService;
    //====================微信与租户管理=======================
    @GetMapping(value = BaseRequestMapping.WeChat.getWechatInfos)
    @ApiOperation(value = "获取微信基本信息列表", notes = "获取微信基本信息列表")
    public MixEnvelop getWxWechatList(@ApiParam(name = "name", value = "微信名称")
@ -41,4 +47,189 @@ public class WechatController extends EnvelopRestEndpoint {
                                      @RequestParam(value = "size", required = true) Integer size) {
        return wechatService.getWxWechatList(name, saasName, status, publicType, page, size);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.saveWxAndSaas)
    @ApiOperation(value = "保存微信信息", notes = "保存微信信息")
    public Envelop saveWxAndSaas(@ApiParam(name = "wxWechatJson", value = "微信基本信息")
                                 @RequestParam(value = "wxWechatJson", required = true)String wxWechatJson,
                                 @ApiParam(name = "wxWechatSaasDOs", value = "微信租户关联")
                                 @RequestParam(value = "wxWechatSaasDOs", required = false)String wxWechatSaasDOs)throws Exception{
        WxWechatDO wxWechatDO = toEntity(wxWechatJson, WxWechatDO.class);
        List<WxWechatSaasDO> list = (List<WxWechatSaasDO>) JSONArray.parseArray(wxWechatSaasDOs, WxWechatSaasDO.class);
        return wechatService.saveWxAndSaas(wxWechatDO,list);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.updateWxAndSaas)
    @ApiOperation(value = "修改微信信息", notes = "修改微信信息")
    public Envelop updateWxAndSaas(@ApiParam(name = "wxWechatJson", value = "微信基本信息")
                                   @RequestParam(value = "wxWechatJson", required = true)String wxWechatJson,
                                   @ApiParam(name = "wxWechatSaasDOs", value = "微信租户关联")
                                   @RequestParam(value = "wxWechatSaasDOs", required = false)String wxWechatSaasDOs)throws Exception {
        WxWechatDO wxWechat = toEntity(wxWechatJson, WxWechatDO.class);
        List<WxWechatSaasDO> list = (List<WxWechatSaasDO>) JSONArray.parseArray(wxWechatSaasDOs, WxWechatSaasDO.class);
        return wechatService.updateWxAndSaas(wxWechat,list);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWechatCombo)
    @ApiOperation(value = "微信信息下拉框", notes = "微信信息下拉框")
    public MixEnvelop findWechatCombo() {
        return wechatService.findWechatCombo();
    }
    //====================微信与租户管理end=======================
    //====================图文素材管理============================
    @GetMapping(value = BaseRequestMapping.WeChat.findWechatImgGroup)
    @ApiOperation(value = "获取图文素材分组", notes = "获取图文素材分组")
    public MixEnvelop findWechatImgGroup(@ApiParam(name = "wechatId", value = "微信ID")
                                         @RequestParam(value = "wechatId", required = true)String wechatId,
                                         @ApiParam(name = "page", value = "第几页")
                                         @RequestParam(value = "page", required = false)Integer page,
                                         @ApiParam(name = "size", value = "每页条数")
                                         @RequestParam(value = "size", required = false)Integer size) {
        return wechatService.findWechatImgGroup(wechatId,page,size);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.createImgGroup)
    @ApiOperation(value = "创建图文素材分组", notes = "创建图文素材分组")
    public Envelop createImgGroup(@ApiParam(name = "wxGraphicSceneJson", value = "图文分组JSON")
                                  @RequestParam(value = "wxGraphicSceneJson", required = true)String wxGraphicSceneJson)throws Exception {
        WxGraphicSceneDO wxWechatScene = toEntity(wxGraphicSceneJson, WxGraphicSceneDO.class);
        return wechatService.createImgGroup(wxWechatScene);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.updateImgGroup)
    @ApiOperation(value = "修改图文素材分组", notes = "修改图文素材分组")
    public Envelop updateImgGroup(@ApiParam(name = "id", value = "id")
                                  @RequestParam(value = "id", required = true)String id,
                                  @ApiParam(name = "scene", value = "分组名称(场景值)")
                                  @RequestParam(value = "scene", required = true)String scene) {
        return wechatService.updateImgGroup(id,scene);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.deleteImgGroup)
    @ApiOperation(value = "删除图文素材分组", notes = "删除图文素材分组")
    public Envelop deleteImgGroup(@ApiParam(name = "id", value = "id")
                                  @RequestParam(value = "id", required = true)String id) {
        return wechatService.deleteImgGroup(id);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.saveImg)
    @ApiOperation(value = "保存图文素材", notes = "保存图文素材")
    public Envelop saveImg(@ApiParam(name = "id", value = "id")
                           @RequestParam(value = "id", required = true)String wxGraphicMessageJson)throws Exception {
        WxGraphicMessageDO WxGraphicMessage = toEntity(wxGraphicMessageJson, WxGraphicMessageDO.class);
        return wechatService.saveImg(WxGraphicMessage);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findImg)
    @ApiOperation(value = "获取图文素材", notes = "获取图文素材")
    public MixEnvelop findImg(@ApiParam(name = "wechatId", value = "微信id")
                              @RequestParam(value = "wechatId", required = true)String wechatId,
                              @ApiParam(name = "title", value = "素材标题")
                              @RequestParam(value = "title", required = false)String title,
                              @ApiParam(name = "scene", value = "场景值")
                              @RequestParam(value = "scene", required = false)String scene,
                              @ApiParam(name = "page", value = "第几页")
                              @RequestParam(value = "page", required = true)Integer page,
                              @ApiParam(name = "size", value = "每页几条")
                              @RequestParam(value = "size", required = true)Integer size) {
        return wechatService.findImg(wechatId, title, scene, page, size);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.saveImgGroup)
    @ApiOperation(value = "分组图文素材", notes = "分组图文素材")
    public Envelop saveImgGroup(@ApiParam(name = "groups", value = "微信id")
                                @RequestParam(value = "groups", required = true)String groups) {
        List<WxGraphicSceneGroupDO> list = (List<WxGraphicSceneGroupDO>) JSONArray.parseArray(groups, WxGraphicSceneGroupDO.class);
        return wechatService.saveImgGroup(list);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.saveWxReplyScene)
    @ApiOperation(value = "事件配置场景", notes = "事件配置场景")
    public Envelop saveWxReplyScene(@ApiParam(name = "wxReplySceneJson", value = "事件配置json")
                                    @RequestParam(value = "wxReplySceneJson", required = true)String wxReplySceneJson) throws Exception{
        WxReplySceneDO wxReplyScene = toEntity(wxReplySceneJson, WxReplySceneDO.class);
        return wechatService.saveWxReplyScene(wxReplyScene);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWxReplyScene)
    @ApiOperation(value = "获取消息配置场景", notes = "获取消息配置场景")
    public MixEnvelop<WxReplySceneVO,WxReplySceneVO> findWxReplyScene(@ApiParam(name = "wechatId", value = "微信id")
                                       @RequestParam(value = "wechatId", required = true)String wechatId,
                                                       @ApiParam(name = "msgType", value = "消息类型")
                                       @RequestParam(value = "msgType", required = false)String msgType,
                                                       @ApiParam(name = "event", value = "事件类型")
                                       @RequestParam(value = "event", required = false)String event,
                                                       @ApiParam(name = "content", value = "回复内容")
                                       @RequestParam(value = "content", required = false)String content,
                                                       @ApiParam(name = "page", value = "页数")
                                       @RequestParam(value = "page", required = true)Integer page,
                                                       @ApiParam(name = "size", value = "每页大小")
                                       @RequestParam(value = "size", required = true)Integer size) {
        return wechatService.findWxReplyScene(wechatId, msgType, event, content, page, size);
    }
    //====================图文素材管理end============================
    //===================模板消息==========================================
    @PostMapping(value = BaseRequestMapping.WeChat.saveWxTemp)
    @ApiOperation(value = "保存微信模板消息基础信息", notes = "保存微信模板消息基础信息")
    public Envelop saveWxTemp(@ApiParam(name = "wxTemplateJson", value = "微信模板消息基础信息json")
                              @RequestParam(value = "wxTemplateJson", required = true)String wxTemplateJson)throws Exception {
        WxTemplateDO wxTemplate = toEntity(wxTemplateJson, WxTemplateDO.class);
        return wechatService.saveWxTemp(wxTemplate);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.saveWxTemp)
    @ApiOperation(value = "获取微信模板消息基础信息(列表)", notes = "获取微信模板消息基础信息(列表)")
    public MixEnvelop findWxtemp(@ApiParam(name = "wechatId", value = "微信id")
                                 @RequestParam(value = "wechatId", required = true)String wechatId,
                                 @ApiParam(name = "status", value = "状态")
                                 @RequestParam(value = "status", required = true)Integer status,
                                 @ApiParam(name = "name", value = "微信模板名称")
                                 @RequestParam(value = "name", required = true)String name,
                                 @ApiParam(name = "key", value = "模板id或标题模糊匹配")
                                 @RequestParam(value = "key", required = true)String key,
                                 @ApiParam(name = "page", value = "页码")
                                 @RequestParam(value = "page", required = true)Integer page,
                                 @ApiParam(name = "size", value = "分页大小")
                                 @RequestParam(value = "size", required = true)Integer size) {
        return wechatService.findWxtemp(wechatId, status, name, key, page, size);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.saveWxTempConfig)
    @ApiOperation(value = "保存微信模板消息信息", notes = "保存微信模板消息信息")
    public Envelop saveWxTempConfig(@ApiParam(name = "wxTemplateConfigJosn", value = "微信模板消息信息json")
                                    @RequestParam(value = "wxTemplateConfigJosn", required = true)String wxTemplateConfigJosn)throws Exception {
        WxTemplateConfigDO WxTemplateConfig = toEntity(wxTemplateConfigJosn, WxTemplateConfigDO.class);
        return wechatService.saveWxTempConfig(WxTemplateConfig);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWxTempConfigList)
    @ApiOperation(value = "获取微信模板列表", notes = "获取微信模板列表")
    public MixEnvelop<WxTemplateConfigVO,WxTemplateConfigVO> findWxTempConfigList(@ApiParam(name = "wechatId", value = "微信id")
                                           @RequestParam(value = "wechatId", required = true)String wechatId,
                                           @ApiParam(name = "scene", value = "微信场景值")
                                           @RequestParam(value = "scene", required = true)String scene,
                                           @ApiParam(name = "page", value = "第几页")
                                           @RequestParam(value = "page", required = true)Integer page,
                                           @ApiParam(name = "size", value = "分页大小")
                                           @RequestParam(value = "size", required = true)Integer size) {
        return wechatService.findWxTempConfigList(wechatId, scene, page, size);
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWxTemplateConfig)
    @ApiOperation(value = "获取微信模板列表(单条)", notes = "获取微信模板列表(单条)")
    public ObjEnvelop<WxTemplateConfigVO>  findWxTemplateConfig(@ApiParam(name = "wechatId", value = "微信id")
                                                   @RequestParam(value = "wechatId", required = true)String wechatId,
                                                                          @ApiParam(name = "name", value = "模板名称")
                                                   @RequestParam(value = "name", required = true)String name,
                                                                          @ApiParam(name = "scene", value = "场景值")
                                                   @RequestParam(value = "scene", required = true)String scene) {
        return success(wechatService.findWxTemplateConfig(wechatId,name,scene), WxTemplateConfigVO.class);
    }
    //===================模板消息end==========================================
}

+ 5 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/listener/ApplicationReadyListener.java

@ -2,6 +2,7 @@ package com.yihu.jw.base.listener;
import com.yihu.jw.base.activemq.MessageManager;
import com.yihu.jw.base.service.errorCode.ErrorCodeService;
import com.yihu.jw.base.service.notice.NoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
@ -18,6 +19,8 @@ public class ApplicationReadyListener implements ApplicationListener<Application
    private MessageManager messageManager;
    @Autowired
    private ErrorCodeService errorCodeService;
    @Autowired
    private NoticeService noticeService;
    @Override
    public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
@ -25,6 +28,8 @@ public class ApplicationReadyListener implements ApplicationListener<Application
        messageManager.initConsumer();
        //初始化错误码
        errorCodeService.initErrorCode();
        //初始化延迟队列
        noticeService.initDelayNotice();
    }
}

+ 3 - 3
svr/svr-base/src/main/java/com/yihu/jw/base/service/customize/UserHideModuleFunctionService.java

@ -1,7 +1,7 @@
package com.yihu.jw.base.service.customize;
import com.yihu.jw.base.dao.customize.UserHideModuleFunctionDao;
import com.yihu.jw.entity.base.customize.UserHideModuleFunctionDO;
import com.yihu.jw.base.dao.customize.UserHideModuleInterfaceDao;
import com.yihu.jw.entity.base.customize.UserHideModuleInterfaceDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
@ -11,5 +11,5 @@ import org.springframework.stereotype.Service;
 * @date Created on 2018/9/14.
 */
@Service
public class UserHideModuleFunctionService extends BaseJpaService<UserHideModuleFunctionDO, UserHideModuleFunctionDao> {
public class UserHideModuleInterfaceService extends BaseJpaService<UserHideModuleInterfaceDO, UserHideModuleInterfaceDao> {
}

+ 16 - 16
svr/svr-base/src/main/java/com/yihu/jw/base/service/function/FunctionService.java

@ -1,16 +1,16 @@
package com.yihu.jw.base.service.function;
import com.yihu.jw.base.dao.function.FunctionDao;
import com.yihu.jw.entity.base.function.FunctionDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * Service - 功能
 * Created by chenweida on 2017/5/19.
 */
@Service
public class FunctionService extends BaseJpaService<FunctionDO, FunctionDao> {
}
//package com.yihu.jw.base.service.function;
//
//import com.yihu.jw.base.dao.function.FunctionDao;
//import com.yihu.jw.entity.base.function.FunctionDO;
//import com.yihu.mysql.query.BaseJpaService;
//import org.springframework.stereotype.Service;
//
//
///**
// * Service - 功能
// * Created by chenweida on 2017/5/19.
// */
//@Service
//public class FunctionService extends BaseJpaService<FunctionDO, FunctionDao> {
//
//}

+ 93 - 6
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/InterfaceService.java

@ -1,17 +1,14 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.InterfaceDao;
import com.yihu.jw.base.dao.module.InterfaceErrorCodeDao;
import com.yihu.jw.base.dao.module.InterfaceParamDao;
import com.yihu.jw.entity.base.module.InterfaceDO;
import com.yihu.jw.entity.base.module.InterfaceErrorCodeDO;
import com.yihu.jw.entity.base.module.InterfaceParamDO;
import com.yihu.jw.base.dao.module.*;
import com.yihu.jw.entity.base.module.*;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -28,6 +25,14 @@ public class InterfaceService extends BaseJpaService<InterfaceDO, InterfaceDao>
    private InterfaceParamDao interfaceParamDao;
    @Autowired
    private InterfaceErrorCodeDao interfaceErrorCodeDao;
    @Autowired
    private SaasInterfaceDao saasInterfaceDao;
    @Autowired
    private SaasModuleDao saasModuleDao;
    @Autowired
    private SaasInterfaceParamDao saasInterfaceParamDao;
    @Autowired
    private SaasInterfaceErrorCodeDao saasInterfaceErrorCodeDao;
    /**
     * 返回接口
@ -60,9 +65,18 @@ public class InterfaceService extends BaseJpaService<InterfaceDO, InterfaceDao>
    @Transactional(rollbackFor = Exception.class)
    public InterfaceDO addInterface(InterfaceDO interfaceDO){
        boolean isNew = true;
        if(StringUtils.isNotBlank(interfaceDO.getId())){
            interfaceParamDao.deleteByInterfaceId(interfaceDO.getId());
            interfaceErrorCodeDao.deleteByInterfaceId(interfaceDO.getId());
            isNew = false;
            InterfaceDO oldInterfaceDO = interfaceDao.findOne(interfaceDO.getId());
            //判断是否修改了状态
            if(!oldInterfaceDO.getStatus().equals(interfaceDO.getStatus())){
                //修改租户的接口状态
                saasInterfaceDao.updateStatusByInterfaceId(interfaceDO.getId(),interfaceDO.getStatus());
            }
        }
        List<InterfaceParamDO> entryParams = interfaceDO.getEntryParams();
@ -82,9 +96,80 @@ public class InterfaceService extends BaseJpaService<InterfaceDO, InterfaceDao>
        interfaceParamDao.save(outParams);
        interfaceErrorCodeDao.save(errorCodes);
        //为租户新增接口
        if (isNew){
            List<SaasModuleDO> saasModuleDOList = saasModuleDao.findByModuleId(interfaceDO.getModuleId());
            saasModuleDOList.forEach(saasModuleDO -> {
                SaasInterfaceDO saasInterfaceDO = new SaasInterfaceDO();
                saasInterfaceDO.setInterfaceId(interfaceDO.getId());
                saasInterfaceDO.setUrl(interfaceDO.getUrl());
                saasInterfaceDO.setStatus(interfaceDO.getStatus());
                saasInterfaceDO.setCheckLevel(interfaceDO.getCheckLevel());
                saasInterfaceDO.setMethodName(interfaceDO.getMethodName());
                saasInterfaceDO.setModuleId(interfaceDO.getModuleId());
                saasInterfaceDO.setName(interfaceDO.getName());
                saasInterfaceDO.setModuleName(interfaceDO.getModuleName());
                saasInterfaceDO.setOpenLevel(interfaceDO.getOpenLevel());
                saasInterfaceDO.setProtocolType(interfaceDO.getProtocolType());
                saasInterfaceDO.setRemark(interfaceDO.getRemark());
                saasInterfaceDO.setSaasId(saasModuleDO.getSaasId());
                List<SaasInterfaceParamDO> saasEntryParams = new ArrayList<>(16);
                List<SaasInterfaceParamDO> saasOutParams = new ArrayList<>(16);
                List<SaasInterfaceErrorCodeDO> saasErrorCodes = new ArrayList<>(16);
                saasInterfaceDao.save(saasInterfaceDO);
                entryParams.forEach(interfaceParamDO -> {
                    SaasInterfaceParamDO saasInterfaceParamDO = addSaasInterfaceParamDO(saasInterfaceDO,interfaceParamDO);
                    saasEntryParams.add(saasInterfaceParamDO);
                });
                outParams.forEach(interfaceParamDO -> {
                    SaasInterfaceParamDO saasInterfaceParamDO = addSaasInterfaceParamDO(saasInterfaceDO,interfaceParamDO);
                    saasOutParams.add(saasInterfaceParamDO);
                });
                errorCodes.forEach(interfaceErrorCodeDO -> {
                    SaasInterfaceErrorCodeDO saasInterfaceErrorCodeDO = new SaasInterfaceErrorCodeDO();
                    saasInterfaceErrorCodeDO.setSort(interfaceErrorCodeDO.getSort());
                    saasInterfaceErrorCodeDO.setDel(interfaceErrorCodeDO.getDel());
                    saasInterfaceErrorCodeDO.setSaasInterfaceId(saasInterfaceDO.getId());
                    saasInterfaceErrorCodeDO.setDescription(interfaceErrorCodeDO.getDescription());
                    saasInterfaceErrorCodeDO.setName(interfaceErrorCodeDO.getName());
                    saasInterfaceErrorCodeDO.setSaasId(saasInterfaceDO.getSaasId());
                    saasInterfaceErrorCodeDO.setSolution(interfaceErrorCodeDO.getSolution());
                    saasErrorCodes.add(saasInterfaceErrorCodeDO);
                });
                saasInterfaceParamDao.save(saasEntryParams);
                saasInterfaceParamDao.save(saasOutParams);
                saasInterfaceErrorCodeDao.save(saasErrorCodes);
            });
        }
        return interfaceDO;
    }
    /**
     * 新增租户接口参数
     * @param saasInterfaceDO
     * @param interfaceParamDO
     * @return
     */
    private SaasInterfaceParamDO addSaasInterfaceParamDO(SaasInterfaceDO saasInterfaceDO,InterfaceParamDO interfaceParamDO){
        SaasInterfaceParamDO saasInterfaceParamDO = new SaasInterfaceParamDO();
        saasInterfaceParamDO.setSaasId(saasInterfaceDO.getSaasId());
        saasInterfaceParamDO.setDel(interfaceParamDO.getDel());
        saasInterfaceParamDO.setName(interfaceParamDO.getName());
        saasInterfaceParamDO.setDataType(interfaceParamDO.getDataType());
        saasInterfaceParamDO.setDescription(interfaceParamDO.getDescription());
        saasInterfaceParamDO.setExample(interfaceParamDO.getExample());
        saasInterfaceParamDO.setIsRequire(interfaceParamDO.getIsRequire());
        saasInterfaceParamDO.setMaxLength(interfaceParamDO.getMaxLength());
        saasInterfaceParamDO.setParamType(interfaceParamDO.getParamType());
        saasInterfaceParamDO.setSaasInterfaceId(saasInterfaceDO.getId());
        saasInterfaceParamDO.setSort(interfaceParamDO.getSort());
        saasInterfaceParamDO.setType(interfaceParamDO.getType());
        return saasInterfaceParamDO;
    }
    /**
     * 设置生效和失效
     * @param id
@ -93,5 +178,7 @@ public class InterfaceService extends BaseJpaService<InterfaceDO, InterfaceDao>
    @Transactional(rollbackFor = Exception.class)
    public void updateStatus(String id,Integer status){
        interfaceDao.updateStatus(id,status);
        //修改租户的接口状态
        saasInterfaceDao.updateStatusByInterfaceId(id,status);
    }
}

+ 185 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/ModuleService.java

@ -2,13 +2,25 @@ package com.yihu.jw.base.service.module;
import com.yihu.jw.base.contant.CommonContant;
import com.yihu.jw.base.dao.module.ModuleDao;
import com.yihu.jw.base.dao.module.SaasModuleDao;
import com.yihu.jw.base.dao.module.SaasTypeModuleDao;
import com.yihu.jw.base.dao.saas.SaasDao;
import com.yihu.jw.base.dao.saas.SaasTypeDictDao;
import com.yihu.jw.entity.base.module.ModuleDO;
import com.yihu.jw.entity.base.module.SaasModuleDO;
import com.yihu.jw.entity.base.module.SaasTypeModuleDO;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.entity.base.saas.SaasTypeDictDO;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Service - 模块
 * Created by chenweida on 2017/5/19.
@ -18,22 +30,149 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
    @Autowired
    private ModuleDao moduleDao;
    @Autowired
    private SaasModuleDao saasModuleDao;
    @Autowired
    private SaasTypeModuleDao saasTypeModuleDao;
    @Autowired
    private SaasTypeDictDao saasTypeDictDao;
    @Autowired
    private SaasDao saasDao;
    /**
     * 新增模块
     * @param moduleDO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public ModuleDO addModule(ModuleDO moduleDO){
        if(StringUtils.isBlank(moduleDO.getParentId())){
            moduleDO.setParentId(CommonContant.DEFAULT_PARENTID);
        }
        moduleDO.setDel(1);
        moduleDO.setIsEnd(1);
        moduleDao.save(moduleDO);
        //父节点设置非根节点
        if(!CommonContant.DEFAULT_PARENTID.equals(moduleDO.getParentId())){
            ModuleDO parentModule = moduleDao.findOne(moduleDO.getParentId());
            if(ModuleDO.End.no.getValue().equals(parentModule.getIsEnd())){
                parentModule.setIsEnd(ModuleDO.End.have.getValue());
                moduleDao.save(parentModule);
            }
        }
        //若新增某必选业务模块,则需为所有已创建的租户和租户类型添加此业务模块
        addSubModule(moduleDO);
        return moduleDO;
    }
    /**
     * 新增模块时,新增租户和租户类型的模块
     * @param moduleDO
     */
    public void addSubModule(ModuleDO moduleDO){
        if (ModuleDO.Must.must.getValue().equals(moduleDO.getIsMust())){
            //判断父模块是否必选
            boolean parentIsMust = true;
            ModuleDO parentModule = null;
            if(!CommonContant.DEFAULT_PARENTID.equals(moduleDO.getParentId())){
                parentModule = moduleDao.findOne(moduleDO.getParentId());
                if(ModuleDO.Must.nonMust.getValue().equals(parentModule.getIsMust())){
                    parentIsMust = false;
                }
            }
            //租户类型
            Iterable<SaasTypeDictDO> saasTypeDictDOs = saasTypeDictDao.findAll();
            List<SaasTypeModuleDO> saasTypeModuleDOList = new ArrayList<>(16);
            while (saasTypeDictDOs.iterator().hasNext()){
                SaasTypeDictDO saasTypeDictDO = saasTypeDictDOs.iterator().next();
                SaasTypeModuleDO saasTypeModuleDO = new SaasTypeModuleDO();
                saasTypeModuleDO.setCreateTime(new Date());
                saasTypeModuleDO.setDel(moduleDO.getDel());
                saasTypeModuleDO.setStatus(moduleDO.getStatus());
                saasTypeModuleDO.setIsEnd(moduleDO.getIsEnd());
                saasTypeModuleDO.setIsMust(moduleDO.getIsMust());
                saasTypeModuleDO.setModuleId(moduleDO.getId());
                saasTypeModuleDO.setParentModuleId(moduleDO.getParentId());
                saasTypeModuleDO.setName(moduleDO.getName());
                saasTypeModuleDO.setRemark(moduleDO.getRemark());
                saasTypeModuleDO.setSaasTypeId(saasTypeDictDO.getId());
                saasTypeModuleDO.setType(moduleDO.getType());
                saasTypeModuleDO.setUrl(moduleDO.getUrl());
                saasTypeModuleDOList.add(saasTypeModuleDO);
                //父模块非必选
                if(!parentIsMust){
                    int count = saasTypeModuleDao.isExistModule(parentModule.getId());
                    if(count==0){
                        SaasTypeModuleDO typeModuleDO = new SaasTypeModuleDO();
                        typeModuleDO.setCreateTime(new Date());
                        typeModuleDO.setDel(parentModule.getDel());
                        typeModuleDO.setStatus(parentModule.getStatus());
                        typeModuleDO.setIsEnd(parentModule.getIsEnd());
                        typeModuleDO.setIsMust(parentModule.getIsMust());
                        typeModuleDO.setModuleId(parentModule.getId());
                        typeModuleDO.setParentModuleId(parentModule.getParentId());
                        typeModuleDO.setName(parentModule.getName());
                        typeModuleDO.setRemark(parentModule.getRemark());
                        typeModuleDO.setSaasTypeId(saasTypeDictDO.getId());
                        typeModuleDO.setType(parentModule.getType());
                        typeModuleDO.setUrl(parentModule.getUrl());
                        saasTypeModuleDOList.add(typeModuleDO);
                    }
                }
            }
            saasTypeModuleDao.save(saasTypeModuleDOList);
            //租户
            Iterable<SaasDO> saasDOs = saasDao.findAll();
            List<SaasModuleDO> saasModuleDOList = new ArrayList<>(16);
            while (saasDOs.iterator().hasNext()){
                SaasDO saasDO = saasDOs.iterator().next();
                SaasModuleDO saasModuleDO = new SaasModuleDO();
                saasModuleDO.setCreateTime(new Date());
                saasModuleDO.setDel(moduleDO.getDel());
                saasModuleDO.setStatus(moduleDO.getStatus());
                saasModuleDO.setIsEnd(moduleDO.getIsEnd());
                saasModuleDO.setIsMust(moduleDO.getIsMust());
                saasModuleDO.setModuleId(moduleDO.getId());
                saasModuleDO.setParentModuleId(moduleDO.getParentId());
                saasModuleDO.setName(moduleDO.getName());
                saasModuleDO.setRemark(moduleDO.getRemark());
                saasModuleDO.setSaasId(saasDO.getId());
                saasModuleDO.setType(moduleDO.getType());
                saasModuleDO.setUrl(moduleDO.getUrl());
                saasModuleDOList.add(saasModuleDO);
                //父模块非必选
                if(!parentIsMust){
                    int count = saasModuleDao.isExistModule(parentModule.getId());
                    if(count==0){
                        SaasModuleDO saasModule = new SaasModuleDO();
                        saasModule.setCreateTime(new Date());
                        saasModule.setDel(parentModule.getDel());
                        saasModule.setStatus(parentModule.getStatus());
                        saasModule.setIsEnd(parentModule.getIsEnd());
                        saasModule.setIsMust(parentModule.getIsMust());
                        saasModule.setModuleId(parentModule.getId());
                        saasModule.setParentModuleId(parentModule.getParentId());
                        saasModule.setName(parentModule.getName());
                        saasModule.setRemark(parentModule.getRemark());
                        saasModule.setSaasId(saasDO.getId());
                        saasModule.setType(parentModule.getType());
                        saasModule.setUrl(parentModule.getUrl());
                        saasModuleDOList.add(saasModule);
                    }
                }
            }
            saasModuleDao.save(saasModuleDOList);
        }
    }
    /**
     * 设置生效和失效
     * @param id
@ -41,9 +180,54 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
     */
    @Transactional(rollbackFor = Exception.class)
    public void updateStatus(String id,Integer status){
        moduleDao.updateStatus(id,status);
        ModuleDO moduleDO = moduleDao.findOne(id);
        //若原业务模块为失效/生效,操作生效/失效后的变更逻辑如以下流程图所示
        if(ModuleDO.Status.available.getValue().equals(status)){
            //生效
            available(moduleDO);
        }else {
            //失效
            unavailable(moduleDO);
        }
    }
    /**
     * 生效
     * @param moduleDO
     */
    public void available(ModuleDO moduleDO){
        moduleDO.setStatus(ModuleDO.Status.unAvailable.getValue());
        moduleDao.save(moduleDO);
        addSubModule(moduleDO);
        ModuleDO parentModule = moduleDao.findOne(moduleDO.getParentId());
        if(ModuleDO.Status.unAvailable.getValue().equals(parentModule.getStatus())){
            available(moduleDO);
        }
    }
    /**
     * 失效
     * @param moduleDO
     */
    public void unavailable(ModuleDO moduleDO){
        //把本身失效
        moduleDO.setStatus(ModuleDO.Status.unAvailable.getValue());
        moduleDao.save(moduleDO);
        saasTypeModuleDao.deleteByModuleId(moduleDO.getId());
        saasModuleDao.deleteByModuleId(moduleDO.getId());
        //把子类失效
        List<ModuleDO> moduleDOList = moduleDao.findByParentId(moduleDO.getId());
        moduleDOList.forEach(module->{
            if(ModuleDO.Status.available.getValue().equals(module.getStatus())){
                unavailable(moduleDO);
            }
        });
    }
    /**

+ 16 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceErrorCodeService.java

@ -0,0 +1,16 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.SaasInterfaceErrorCodeDao;
import com.yihu.jw.entity.base.module.SaasInterfaceErrorCodeDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * 接口错误说明
 * @author yeshijie on 2018/10/11.
 */
@Service
public class SaasInterfaceErrorCodeService extends BaseJpaService<SaasInterfaceErrorCodeDO, SaasInterfaceErrorCodeDao> {
}

+ 15 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceParamService.java

@ -0,0 +1,15 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.SaasInterfaceParamDao;
import com.yihu.jw.entity.base.module.SaasInterfaceParamDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * 接口入参出参
 * @author yeshijie on 2018/10/11.
 */
@Service
public class SaasInterfaceParamService extends BaseJpaService<SaasInterfaceParamDO, SaasInterfaceParamDao> {
}

+ 94 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasInterfaceService.java

@ -0,0 +1,94 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.SaasInterfaceDao;
import com.yihu.jw.base.dao.module.SaasInterfaceErrorCodeDao;
import com.yihu.jw.base.dao.module.SaasInterfaceParamDao;
import com.yihu.jw.entity.base.module.*;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 租户接口
 * @author yeshijie on 2018/10/11.
 */
@Service
public class SaasInterfaceService extends BaseJpaService<SaasInterfaceDO, SaasInterfaceDao> {
    @Autowired
    private SaasInterfaceDao interfaceDao;
    @Autowired
    private SaasInterfaceParamDao interfaceParamDao;
    @Autowired
    private SaasInterfaceErrorCodeDao interfaceErrorCodeDao;
    /**
     * 新增接口
     * @param interfaceDO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public SaasInterfaceDO addInterface(SaasInterfaceDO interfaceDO){
        if(StringUtils.isNotBlank(interfaceDO.getId())){
            interfaceParamDao.deleteBySaasInterfaceId(interfaceDO.getId());
            interfaceErrorCodeDao.deleteBySaasInterfaceId(interfaceDO.getId());
        }
        List<SaasInterfaceParamDO> entryParams = interfaceDO.getEntryParams();
        List<SaasInterfaceParamDO> outParams = interfaceDO.getOutParams();
        List<SaasInterfaceErrorCodeDO> errorCodes = interfaceDO.getErrorCodes();
        interfaceDao.save(interfaceDO);
        entryParams.forEach(interfaceParamDO -> {
            interfaceParamDO.setSaasInterfaceId(interfaceDO.getId());
        });
        outParams.forEach(interfaceParamDO -> {
            interfaceParamDO.setSaasInterfaceId(interfaceDO.getId());
        });
        errorCodes.forEach(interfaceErrorCodeDO -> {
            interfaceErrorCodeDO.setSaasInterfaceId(interfaceDO.getId());
        });
        interfaceParamDao.save(entryParams);
        interfaceParamDao.save(outParams);
        interfaceErrorCodeDao.save(errorCodes);
        return interfaceDO;
    }
    /**
     * 返回接口
     * @param id
     * @return
     */
    public SaasInterfaceDO findById(String id){
        SaasInterfaceDO interfaceDO = interfaceDao.findOne(id);
        List<SaasInterfaceParamDO> paramDOList = interfaceParamDao.findBySaasInterfaceId(id);
        List<SaasInterfaceParamDO> entryParams = paramDOList.stream()
                .filter(interfaceParamDO -> InterfaceParamDO.Type.entry.getValue().equals(interfaceParamDO.getType()))
                .collect(Collectors.toList());
        List<SaasInterfaceParamDO> outParams = paramDOList.stream()
                .filter(interfaceParamDO -> InterfaceParamDO.Type.out.getValue().equals(interfaceParamDO.getType()))
                .collect(Collectors.toList());
        List<SaasInterfaceErrorCodeDO> errorCodeDOList = interfaceErrorCodeDao.findBySaasInterfaceId(id);
        interfaceDO.setErrorCodes(errorCodeDOList);
        interfaceDO.setEntryParams(entryParams);
        interfaceDO.setOutParams(outParams);
        return interfaceDO;
    }
    /**
     * 设置生效和失效
     * @param id
     * @param status
     */
    @Transactional(rollbackFor = Exception.class)
    public void updateStatus(String id,Integer status){
        interfaceDao.updateStatus(id,status);
    }
}

+ 16 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasModuleService.java

@ -0,0 +1,16 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.SaasModuleDao;
import com.yihu.jw.entity.base.module.SaasModuleDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * Entity - 租户模块
 * Created by yeshijie on 2018/10/11.
 */
@Service
public class SaasModuleService extends BaseJpaService<SaasModuleDO, SaasModuleDao> {
}

+ 16 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/SaasTypeModuleService.java

@ -0,0 +1,16 @@
package com.yihu.jw.base.service.module;
import com.yihu.jw.base.dao.module.SaasTypeModuleDao;
import com.yihu.jw.entity.base.module.SaasTypeModuleDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * Entity - 租户类型模块
 * Created by yeshijie on 2018/10/11.
 */
@Service
public class SaasTypeModuleService extends BaseJpaService<SaasTypeModuleDO, SaasTypeModuleDao> {
}

+ 168 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/notice/NoticeService.java

@ -1,9 +1,27 @@
package com.yihu.jw.base.service.notice;
import com.yihu.jw.base.dao.notice.NoticeDao;
import com.yihu.jw.base.dao.notice.UserNoticeDao;
import com.yihu.jw.base.dao.user.UserDao;
import com.yihu.jw.base.util.threadPool.ThreadPoolUtil;
import com.yihu.jw.base.util.delay.DelayService;
import com.yihu.jw.base.util.delay.Notice;
import com.yihu.jw.base.util.delay.OnDelayedListener;
import com.yihu.jw.base.util.delay.RedisLock;
import com.yihu.jw.entity.base.notice.NoticeDO;
import com.yihu.jw.entity.base.notice.UserNoticeDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static com.yihu.jw.entity.base.notice.NoticeDO.Status.released;
/**
 * 公告通知
@ -12,5 +30,155 @@ import org.springframework.stereotype.Service;
@Service
public class NoticeService extends BaseJpaService<NoticeDO, NoticeDao> {
    @Autowired
    private NoticeDao noticeDao;
    @Autowired
    private UserNoticeDao userNoticeDao;
    @Autowired
    private DelayService delayService;
    @Autowired
    private UserDao userDao;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private ThreadPoolUtil threadPoolUtil;
    /**
     * redis锁的key
     */
    private final String rediskey = "notice:";
    /**
     * 发布公告
     * @param noticeDO
     */
    @Transactional(rollbackFor = Exception.class)
    public void release(NoticeDO noticeDO){
        noticeDO.setStatus(NoticeDO.Status.released.getValue());
        noticeDO.setSendTime(new Date());
        List<UserDO> userDOList = userDao.findByEnabled(true);
        List<UserNoticeDO> userNoticeDOs = new ArrayList<>(userDOList.size());
        userDOList.forEach(userDO -> {
            UserNoticeDO userNoticeDO = new UserNoticeDO();
            userNoticeDO.setDel(1);
            userNoticeDO.setIsRead(UserNoticeDO.Read.unRead.getValue());
            userNoticeDO.setNoticeId(noticeDO.getId());
            userNoticeDO.setUserId(userDO.getId());
            userNoticeDOs.add(userNoticeDO);
        });
        userNoticeDao.save(userNoticeDOs);
        noticeDao.save(noticeDO);
    }
    /**
     * 按id查找
     * @param id
     * @return
     */
    public NoticeDO findById(String id){
        return noticeDao.findOne(id);
    }
    /**
     * 新增消息公告
     * @param noticeDO
     * @return
     */
    public NoticeDO addNotice(NoticeDO noticeDO){
        noticeDO.setDel(1);
        noticeDO.setStatus(NoticeDO.Status.wait.getValue());
        noticeDao.save(noticeDO);
        //自动发布
        if(NoticeDO.SendType.automatic_release.getValue().equals(noticeDO.getSendType())){
            Notice notice = new Notice(noticeDO.getId(), noticeDO.getSendTime().getTime());
            delayService.add(notice);
        }
        return noticeDO;
    }
    /**
     * 修改公告
     * @param noticeDO
     * @return
     */
    public NoticeDO updateNotice(NoticeDO noticeDO){
        NoticeDO noticeOld = noticeDao.findOne(noticeDO.getId());
        if(released.getValue().equals(noticeDO.getStatus())){
            //已发布的不能修改
            return noticeDO;
        }
        if(!noticeOld.getSendType().equals(noticeDO.getSendType())){
            if(NoticeDO.SendType.automatic_release.getValue().equals(noticeDO.getSendType())){
                //自动发布
                Notice notice = new Notice(noticeDO.getId(), noticeDO.getSendTime().getTime());
                delayService.add(notice);
            }else {
                //手动发布
                delayService.remove(noticeDO.getId());
            }
        }
        noticeOld.setContent(noticeDO.getContent());
        noticeOld.setTitle(noticeDO.getTitle());
        noticeOld.setSendTime(noticeDO.getSendTime());
        noticeOld.setSendType(noticeDO.getSendType());
        noticeDao.save(noticeOld);
        return noticeDO;
    }
    /**
     * 删除
     * @param noticeId
     */
    public void deleteNotice(String noticeId){
        NoticeDO noticeDO = noticeDao.findOne(noticeId);
        noticeDO.setDel(0);
        noticeDao.save(noticeDO);
    }
    /**
     * 初始化延迟队列,项目启动的时候吧数据库的数据重新加入到队列中
     */
    public void initDelayNotice(){
        //启动监听
        delayService.start(new OnDelayedListener() {
            @Override
            public void onDelayedArrived(final Notice notice) {
                //异步来做
                threadPoolUtil.execute(new Runnable() {
                    @Override
                    public void run() {
                        String noticeId = notice.getNoticeId();
                        //分布式事务锁,防止代码在多台机器上执行
                        RedisLock lock = new RedisLock(redisTemplate, rediskey+noticeId, 10000, 20000);
                        try {
                            if(lock.lock()) {
                                //需要加锁的代码
                                NoticeDO noticeDO = noticeDao.findOne(noticeId);
                                if (NoticeDO.Status.wait.getValue().equals(noticeDO.getStatus())
                                        &&NoticeDO.SendType.automatic_release.getValue().equals(noticeDO.getSendType())){
                                    release(noticeDO);
                                }
                            }
                        } catch (InterruptedException e){
                            e.printStackTrace();
                        } finally {
                            lock.unlock();
                        }
                    }
                });
            }
        });
        //查找需要加入队列的数据
        List<NoticeDO> noticeDOList = noticeDao.findByStatusAndSendType(NoticeDO.Status.wait.getValue(),
                NoticeDO.SendType.automatic_release.getValue());
        noticeDOList.forEach(noticeDO -> {
            Notice notice = new Notice(noticeDO.getId(), noticeDO.getSendTime().getTime());
            delayService.add(notice);
        });
    }
}

+ 62 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/notice/UserNoticeService.java

@ -1,10 +1,22 @@
package com.yihu.jw.base.service.notice;
import com.yihu.jw.base.dao.notice.NoticeDao;
import com.yihu.jw.base.dao.notice.UserNoticeDao;
import com.yihu.jw.entity.base.notice.NoticeDO;
import com.yihu.jw.entity.base.notice.UserNoticeDO;
import com.yihu.jw.restmodel.base.notice.UserNoticeVO;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 用户公告通知
 * @author yeshijie on 2018/9/30.
@ -12,5 +24,55 @@ import org.springframework.stereotype.Service;
@Service
public class UserNoticeService extends BaseJpaService<UserNoticeDO, UserNoticeDao> {
    @Autowired
    private UserNoticeDao userNoticeDao;
    @Autowired
    private NoticeDao noticeDao;
    @Autowired
    private JdbcTemplate jdbcTempalte;
    /**
     * 查看文章详情
     * @param id
     * @return
     */
    public NoticeDO findNoticeDetail(String id){
        UserNoticeDO userNoticeDO = userNoticeDao.findOne(id);
        if(UserNoticeDO.Read.unRead.getValue().equals(userNoticeDO.getIsRead())){
            userNoticeDO.setIsRead(UserNoticeDO.Read.read.getValue());
            userNoticeDao.save(userNoticeDO);
        }
        NoticeDO noticeDO = noticeDao.findOne(userNoticeDO.getNoticeId());
        return noticeDO;
    }
    /**
     * 按类型分页查找
     * @param page
     * @param size
     * @param userId
     * @return
     */
    public PageEnvelop<UserNoticeVO> queryPage(Integer page, Integer size, String userId){
        StringBuffer sql = new StringBuffer("SELECT n.id noticeId,n.title,n.send_time sendTime,u.id,u.is_read isRead,u.user_id userId from base_notice n , base_user_notice u WHERE n.del = '1' ");
        StringBuffer sqlCount = new StringBuffer("SELECT COUNT(*) count from base_notice n , base_user_notice u WHERE n.del = '1' ");
        List<Object> args = new ArrayList<>();
        if(StringUtils.isNotBlank(userId)){
            sql.append(" and u.user_id=? ");
            sqlCount.append(" and u.user_id='").append(userId).append("' ");
            args.add(userId);
        }
        sql.append(" and u.notice_id = n.id and u.del = '1' ");
        sqlCount.append(" and u.notice_id = n.id and u.del = '1'");
        sql.append(" ORDER BY n.send_time desc limit ").append((page-1)*size).append(",").append(size);
        List<UserNoticeVO> list = jdbcTempalte.query(sql.toString(),args.toArray(),new BeanPropertyRowMapper(UserNoticeVO.class));
        List<Map<String,Object>> countList = jdbcTempalte.queryForList(sqlCount.toString());
        long count = Long.valueOf(countList.get(0).get("count").toString());
        return PageEnvelop.getSuccessListWithPage("查找成功",list, page, size,count);
    }
}

+ 22 - 15
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasDefaultModuleFunctionService.java

@ -1,15 +1,22 @@
package com.yihu.jw.base.service.saas;
import com.yihu.jw.base.dao.saas.SaasDefaultModuleFunctionDao;
import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * Service - Saas默认模块功能
 * Created by progr1mmer on 2018/8/17.
 */
@Service
public class SaasDefaultModuleFunctionService extends BaseJpaService<SaasDefaultModuleFunctionDO, SaasDefaultModuleFunctionDao> {
}
//package com.yihu.jw.base.service.saas;
//
//import com.yihu.jw.base.dao.saas.SaasDefaultModuleFunctionDao;
//import com.yihu.jw.base.dao.saas.SaasTypeDictDao;
//import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
//import com.yihu.mysql.query.BaseJpaService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
///**
// * Service - Saas默认模块功能
// * Created by progr1mmer on 2018/8/17.
// */
//@Service
//public class SaasDefaultModuleFunctionService extends BaseJpaService<SaasDefaultModuleFunctionDO, SaasDefaultModuleFunctionDao> {
//    @Autowired
//    private SaasDefaultModuleFunctionDao saasDefaultModuleFunctionDao;
//
//    public void deleteBySaasType(Integer saasType) {
//        saasDefaultModuleFunctionDao.deleteBySaasType(saasType);
//    }
//}

+ 17 - 17
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasModuleFunctionService.java

@ -1,17 +1,17 @@
package com.yihu.jw.base.service.saas;
import com.yihu.jw.base.dao.saas.SaasModuleFunctionDao;
import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
/**
 * Service - Saas所分配的模块功能
 * Created by progr1mmer on 2018/8/17.
 */
@Service
public class SaasModuleFunctionService extends BaseJpaService<SaasModuleFunctionDO, SaasModuleFunctionDao> {
}
//package com.yihu.jw.base.service.saas;
//
//import com.yihu.jw.base.dao.saas.SaasModuleFunctionDao;
//import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
//import com.yihu.mysql.query.BaseJpaService;
//import org.springframework.stereotype.Service;
//
//
///**
// * Service - Saas所分配的模块功能
// * Created by progr1mmer on 2018/8/17.
// */
//@Service
//public class SaasModuleFunctionService extends BaseJpaService<SaasModuleFunctionDO, SaasModuleFunctionDao> {
//
//
//}

+ 14 - 21
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java

@ -2,14 +2,10 @@ package com.yihu.jw.base.service.saas;
import com.yihu.jw.base.dao.role.RoleDao;
import com.yihu.jw.base.dao.saas.SaasDao;
import com.yihu.jw.base.dao.saas.SaasDefaultModuleFunctionDao;
import com.yihu.jw.base.dao.saas.SaasModuleFunctionDao;
import com.yihu.jw.base.dao.user.UserDao;
import com.yihu.jw.base.dao.user.UserRoleDao;
import com.yihu.jw.entity.base.role.RoleDO;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.entity.base.saas.SaasDefaultModuleFunctionDO;
import com.yihu.jw.entity.base.saas.SaasModuleFunctionDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.entity.base.user.UserRoleDO;
import com.yihu.mysql.query.BaseJpaService;
@ -19,9 +15,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * Service - SAAS
 * Created by progr1mmer on 2018/8/14.
@ -33,10 +26,10 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
    private SaasDao saasDao;
    @Autowired
    private UserDao userDao;
    @Autowired
    private SaasDefaultModuleFunctionDao saasDefaultModuleFunctionDao;
    @Autowired
    private SaasModuleFunctionDao roleModuleFunctionDao;
//    @Autowired
//    private SaasDefaultModuleFunctionDao saasDefaultModuleFunctionDao;
//    @Autowired
//    private SaasModuleFunctionDao roleModuleFunctionDao;
    @Autowired
    private RoleDao roleDao;
    @Autowired
@ -69,21 +62,21 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
        userRoleDO.setUserId(user.getId());
        userRoleDO.setRoleId(roleDO.getId());
        //初始化租户默认模块
        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleFunctionDao.findBySaasType(saas.getType());
        List<SaasModuleFunctionDO> roleModuleFunctionDOS = new ArrayList<>();
        saasDefaultModuleDOS.forEach(item -> {
            SaasModuleFunctionDO saasModuleFunctionDO = new SaasModuleFunctionDO();
            saasModuleFunctionDO.setSaasId(saasId);
            saasModuleFunctionDO.setModuleId(item.getModuleId());
            saasModuleFunctionDO.setFunctionId(item.getFunctionId());
            roleModuleFunctionDOS.add(saasModuleFunctionDO);
        });
//        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = saasDefaultModuleFunctionDao.findBySaasType(saas.getType());
//        List<SaasModuleFunctionDO> roleModuleFunctionDOS = new ArrayList<>();
//        saasDefaultModuleDOS.forEach(item -> {
//            SaasModuleFunctionDO saasModuleFunctionDO = new SaasModuleFunctionDO();
//            saasModuleFunctionDO.setSaasId(saasId);
//            saasModuleFunctionDO.setModuleId(item.getModuleId());
//            saasModuleFunctionDO.setFunctionId(item.getFunctionId());
//            roleModuleFunctionDOS.add(saasModuleFunctionDO);
//        });
        //保存数据
        saas = saasDao.save(saas);
        roleDao.save(roleDO);
        userDao.save(user);
        userRoleDao.save(userRoleDO);
        roleModuleFunctionDao.save(roleModuleFunctionDOS);
//        roleModuleFunctionDao.save(roleModuleFunctionDOS);
        return saas;
    }

+ 91 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasTypeDictService.java

@ -0,0 +1,91 @@
package com.yihu.jw.base.service.saas;
import com.yihu.jw.base.dao.role.RoleDao;
import com.yihu.jw.base.dao.saas.SaasTypeDictDao;
import com.yihu.jw.base.dao.user.UserDao;
import com.yihu.jw.base.dao.user.UserRoleDao;
import com.yihu.jw.entity.base.role.RoleDO;
import com.yihu.jw.entity.base.saas.SaasTypeDictDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.entity.base.user.UserRoleDO;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import org.hibernate.SQLQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by zdm on 2018/10/10.
 */
@Service
@Transactional
public class SaasTypeDictService extends BaseJpaService<SaasTypeDictDO, SaasTypeDictDao> {
    @Autowired
    private SaasTypeDictDao saasTypeDictDao;
//    @Autowired
//    private FunctionDao functionDao;
//    @Autowired
//    private SaasDefaultModuleFunctionDao saasDefaultModuleFunctionDao;
    public SaasTypeDictDO save(SaasTypeDictDO saasTypeDictDO, String saasTypeDefaultModuleIds) {
        //初始化租户信息
        Integer code ;
        if (StringUtils.isEmpty(saasTypeDictDO.getId())) {
            //新增
            code = getNextSaasTypeDictCode();
            saasTypeDictDO.setCode(code);
        } else {
            //编辑
            code = saasTypeDictDO.getCode();
        }
        //根据moduleId获取模块关联的接口id
        String[] ids = saasTypeDefaultModuleIds.split(",");
//        List<FunctionDO> functionDOList = functionDao.findFunctionDOSByModuleIdExists(ids);
//        //初始化租户默认模块
//        List<SaasDefaultModuleFunctionDO> saasDefaultModuleDOS = new ArrayList<>();
//        functionDOList.forEach(item -> {
//            SaasDefaultModuleFunctionDO saasDefaultModuleFunctionDO = new SaasDefaultModuleFunctionDO();
//            saasDefaultModuleFunctionDO.setSaasType(code);
//            saasDefaultModuleFunctionDO.setModuleId(item.getModuleId());
//            saasDefaultModuleFunctionDO.setFunctionId(item.getId());
//            saasDefaultModuleDOS.add(saasDefaultModuleFunctionDO);
//        });
        //保存数据
        saasTypeDictDO = saasTypeDictDao.save(saasTypeDictDO);
//        saasDefaultModuleFunctionDao.save(saasDefaultModuleDOS);
        return saasTypeDictDO;
    }
    /**
     * 获取当前最大租户编码+1
     *
     * @return
     */
    public Integer getNextSaasTypeDictCode() {
        return saasTypeDictDao.findTopCode() + 1;
    }
    /**
     * 验证
     *
     * @param id
     * @param name
     * @return
     */
    public boolean isSaasTypeDictExistByNameAndId(String id, String name) {
        String sql = "select count(1) from base_saas_type_dict  std where  std.name=:name and std.id!=:id";
        SQLQuery sqlQuery = currentSession().createSQLQuery(sql);
        sqlQuery.setParameter("id", id);
        sqlQuery.setParameter("name", name);
        BigInteger count = (BigInteger) sqlQuery.uniqueResult();
        return count.compareTo(new BigInteger("0")) > 0;
    }
}

+ 355 - 5
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java

@ -1,12 +1,12 @@
package com.yihu.jw.base.service.wx;
import com.yihu.jw.restmodel.base.saas.SaasVO;
import com.yihu.jw.restmodel.base.wx.WxSaasVO;
import com.yihu.jw.restmodel.base.wx.WxWechatVO;
import com.yihu.jw.base.dao.wx.*;
import com.yihu.jw.entity.base.wx.*;
import com.yihu.jw.restmodel.base.wx.*;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.rm.specialist.SpecialistMapping;
import com.yihu.jw.rm.base.BaseRequestMapping;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -16,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
 * Created by trick on 2017/5/20 0020.
@ -26,6 +27,24 @@ public class WechatService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private WechatDao wechatDao;
    @Autowired
    private WxWechatSaasDao wxWechatSaasDao;
    @Autowired
    private WxGraphicSceneDao wxGraphicSceneDao;
    @Autowired
    private WxGraphicSceneGroupDao wxGraphicSceneGroupDao;
    @Autowired
    private WxGraphicMessageDao wxGraphicMessageDao;
    @Autowired
    private WxReplySceneDao wxReplySceneDao;
    @Autowired
    private WxTemplateDao wxTemplateDao;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    //====================微信与租户管理=======================
    public MixEnvelop getWxWechatList(String name,String saasName,Integer status,Integer publicType,Integer page,Integer size){
@ -91,7 +110,7 @@ public class WechatService {
            count = (Long) rstotal.get(0).get("total");
        }
        return MixEnvelop.getSuccessListWithPage(SpecialistMapping.api_success, list, page, size, count);
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    public List<WxSaasVO> getWxSaasVOs(String id){
@ -106,4 +125,335 @@ public class WechatService {
        List<WxSaasVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxSaasVO.class));
        return list;
    }
    public Envelop saveWxAndSaas(WxWechatDO wxWechatDO, List<WxWechatSaasDO> wxWechatSaasDOs){
        String uuid = UUID.randomUUID().toString();
        wxWechatDO.setId(uuid);
        wechatDao.save(wxWechatDO);
        if(wxWechatSaasDOs!=null&&wxWechatSaasDOs.size()>0){
            for(WxWechatSaasDO wxs:wxWechatSaasDOs){
                wxs.setWechatId(uuid);
            }
            wxWechatSaasDao.save(wxWechatSaasDOs);
        }
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public Envelop updateWxAndSaas(WxWechatDO wxWechatDO, List<WxWechatSaasDO> wxWechatSaasDOs) {
        wechatDao.save(wxWechatDO);
        List<WxWechatSaasDO> ws = wxWechatSaasDao.findByWechatId(wxWechatDO.getId());
        wxWechatSaasDao.delete(ws);
        if(wxWechatSaasDOs!=null&&wxWechatSaasDOs.size()>0){
            for(WxWechatSaasDO wxs:wxWechatSaasDOs){
                wxs.setWechatId(wxWechatDO.getId());
            }
            wxWechatSaasDao.save(wxWechatSaasDOs);
        }
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    //====================微信与租户管理end=======================
    //====================图文素材管理============================
    public MixEnvelop findWechatCombo(){
        String sql ="SELECT t.id,t.`name`,t.app_origin_id AS appOriginId from wx_wechat t";
        List<WxComboVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxComboVO.class));
        return MixEnvelop.getSuccessList(BaseRequestMapping.WeChat.api_success,list);
    }
    public MixEnvelop findWechatImgGroup(String wechatId,Integer page,Integer size){
        String totalSql ="SELECT COUNT(1) AS total from wx_graphic_scene g WHERE g.wechat_id ='"+wechatId+"'";
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
        Long count = 0L;
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql = "SELECT " +
                " g.id,g.wechat_id AS wechatId,g.scene " +
                " FROM " +
                " wx_graphic_scene g " +
                " WHERE " +
                " g.wechat_id = '"+wechatId+"' " +
                " LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxGraphicSceneVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxGraphicSceneVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    public Envelop createImgGroup(WxGraphicSceneDO wxGraphicSceneDO){
        wxGraphicSceneDao.save(wxGraphicSceneDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public Envelop updateImgGroup(String id,String scene){
        WxGraphicSceneDO wxGraphicSceneDO = wxGraphicSceneDao.findOne(id);
        List<WxGraphicSceneGroupDO> list = wxGraphicSceneGroupDao.findByWechatIdAndScene(wxGraphicSceneDO.getWechatId(),wxGraphicSceneDO.getScene());
        if(list!=null&&list.size()>0){
            for(WxGraphicSceneGroupDO group:list){
                group.setScene(scene);
            }
            wxGraphicSceneGroupDao.save(list);
        }
        wxGraphicSceneDO.setScene(scene);
        wxGraphicSceneDao.save(wxGraphicSceneDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public Envelop deleteImgGroup(String id){
        WxGraphicSceneDO wxGraphicSceneDO = wxGraphicSceneDao.findOne(id);
        List<WxGraphicSceneGroupDO> list = wxGraphicSceneGroupDao.findByWechatIdAndScene(wxGraphicSceneDO.getWechatId(),wxGraphicSceneDO.getScene());
        if(list!=null&&list.size()>0){
            wxGraphicSceneGroupDao.delete(list);
        }
        wxGraphicSceneDao.delete(wxGraphicSceneDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public Envelop saveImg(WxGraphicMessageDO wxGraphicMessageDO){
        wxGraphicMessageDao.save(wxGraphicMessageDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public MixEnvelop findImg(String wechatId,String title,String scene,Integer page,Integer size){
        String sqlTotal = "SELECT " +
                " COUNT(1) AS total " +
                " FROM " +
                " wx_graphic_message m ";
                if(StringUtils.isNotBlank(scene)){
                    sqlTotal+= " JOIN wx_graphic_scene_group g ON g.graphic_id = m.id ";
                }
        sqlTotal+= " WHERE " +
                " m.wechat_id = '"+wechatId+"' " +
                " m.status =1" ;
                if(StringUtils.isNotBlank(title)){
                    sqlTotal += " AND m.title LIKE '%"+title+"%' " ;
                }
                if(StringUtils.isNotBlank(scene)){
                    sqlTotal+= "AND g.scene = '"+scene+"'";
                }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sqlTotal);
        Long count = 0L;
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql = "SELECT " +
                " m.id, " +
                " m.wechat_id AS wechatId, " +
                " m.`code` AS code, " +
                " m.title, " +
                " m.description, " +
                " m.url, " +
                " m.pic_url AS picUrl, " +
                " m.remark, " +
                " m.`status` " +
                " FROM " +
                " wx_graphic_message m ";
        if(StringUtils.isNotBlank(scene)){
            sql+= " JOIN wx_graphic_scene_group g ON g.graphic_id = m.id ";
        }
        sql+=" WHERE m.wechat_id = '"+wechatId+"' " +
                " m.status =1" ;
        if(StringUtils.isNotBlank(title)){
            sql += " AND m.title LIKE '%"+title+"%' " ;
        }
        if(StringUtils.isNotBlank(scene)){
            sql+= "AND g.scene = '"+scene+"'";
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxGraphicMessageVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxGraphicMessageVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    public Envelop saveImgGroup(List<WxGraphicSceneGroupDO> groups){
        List<WxGraphicSceneGroupDO> gs = wxGraphicSceneGroupDao.findByWechatIdAndScene(groups.get(0).getWechatId(),groups.get(0).getScene());
        if(gs!=null&&gs.size()>0){
            wxGraphicSceneGroupDao.delete(gs);
        }
        wxGraphicSceneGroupDao.save(groups);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public Envelop saveWxReplyScene(WxReplySceneDO wxReplySceneDO){
        wxReplySceneDao.save(wxReplySceneDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public MixEnvelop findWxReplyScene(String wechatId,String msgType,String event,String content,Integer page,Integer size){
        String totalSql = "SELECT " +
                " COUNT(1) AS total " +
                " FROM " +
                " wx_reply_scene s " +
                " WHERE " +
                " s.wechat_id = '"+wechatId+"'";
        if(StringUtils.isNotBlank(msgType)){
            totalSql += " AND s.msg_type ='"+msgType+"'";
        }
        if(StringUtils.isNotBlank(event)){
            totalSql += " AND s.event ='"+event+"'";
        }
        if(StringUtils.isNotBlank(content)){
            totalSql += " AND s.content like '%"+content+"%'";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
        Long count = 0L;
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql = "SELECT " +
                " s.wechat_id AS wechatId," +
                " s.scene, " +
                " s.`status`, " +
                " s.id, " +
                " s.content, " +
                " s.app_origin_id AS appOriginId, " +
                " s.`event`, " +
                " s.msg_type AS msgType" +
                " FROM " +
                " wx_reply_scene s " +
                " WHERE " +
                " s.wechat_id = '"+wechatId+"'";
        if(StringUtils.isNotBlank(msgType)){
            sql += " AND s.msg_type ='"+msgType+"'";
        }
        if(StringUtils.isNotBlank(event)){
            sql += " AND s.event ='"+event+"'";
        }
        if(StringUtils.isNotBlank(content)){
            sql += " AND s.content like '%"+content+"%'";
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxReplySceneVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxReplySceneVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    //===================图文素材管理end====================================
    //===================模板消息==========================================
    public Envelop saveWxTemp(WxTemplateDO wxTemplateDO){
        wxTemplateDao.save(wxTemplateDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public MixEnvelop findWxtemp(String wechatId,Integer status,String name,String key,Integer page,Integer size){
        String totalSql = "SELECT " +
                " COUNT(1) AS total " +
                " FROM " +
                " wx_template t" +
                " WHERE t.wechat_id= '"+wechatId+"' ";
        if(status!=null){
            totalSql+= " AND t.status = "+ status;
        }
        if(StringUtils.isNotBlank(name)){
            totalSql+= " AND t.template_name ='"+name+"'";
        }
        if(StringUtils.isNotBlank(key)){
            totalSql+= " AND (t.template_id ='"+key+"' OR t.title like'%"+key+"%')";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
        Long count = 0L;
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql = "SELECT " +
                " t.id, " +
                " t.title, " +
                " t.wechat_id AS wechatId, " +
                " t.template_id AS templateId, " +
                " t.template_name AS templateName, " +
                " t.content, " +
                " t.`status` " +
                " FROM " +
                " wx_template t" +
                " WHERE t.wechat_id= '"+wechatId+"' ";
        if(status!=null){
            sql+= " AND t.status = "+ status;
        }
        if(StringUtils.isNotBlank(name)){
            sql+= " AND t.template_name ='"+name+"'";
        }
        if(StringUtils.isNotBlank(key)){
            sql+= " AND (t.template_id ='"+key+"' OR t.title like'%"+key+"%')";
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxTemplateVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxTemplateVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    public Envelop saveWxTempConfig(WxTemplateConfigDO wxTemplateConfigDO){
        wxTemplateConfigDao.save(wxTemplateConfigDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
    public MixEnvelop findWxTempConfigList(String wechatId,String scene,Integer page,Integer size){
        String totalSql ="SELECT " +
                " COUNT(1) AS total " +
                " FROM " +
                " wx_template_config g " +
                " WHERE " +
                " g.wechat_id ='"+wechatId+"'";
        if(StringUtils.isNotBlank(scene)){
            totalSql += " AND g.scene = '"+scene+"'";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
        Long count = 0L;
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql ="SELECT " +
                " g.id, " +
                " g.wechat_id AS wechatId, " +
                " g.template_id AS templateId, " +
                " g.template_name AS template_name, " +
                " g.scene, " +
                " g.scene_description AS sceneDescription, " +
                " g.`first`, " +
                " g.url, " +
                " g.remark, " +
                " g.keyword1, " +
                " g.keyword2, " +
                " g.keyword3, " +
                " g.keyword4, " +
                " g.keyword5, " +
                " g.keyword6, " +
                " g.keyword7, " +
                " g.create_time AS createTime, " +
                " g.create_user AS createUser, " +
                " g.create_user_name AS createUserName, " +
                " g.update_time AS updateTime, " +
                " g.update_user AS updateUser, " +
                " g.update_user_name AS updateUserName " +
                " FROM " +
                " wx_template_config g " +
                " WHERE " +
                " g.wechat_id ='"+wechatId+"'";
        if(StringUtils.isNotBlank(scene)){
            sql += " AND g.scene = '"+scene+"'";
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxTemplateConfigVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxTemplateConfigVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);
    }
    public WxTemplateConfigDO findWxTemplateConfig(String wechatId,String name,String scene){
        WxTemplateConfigDO wxTemplateConfigDO =  wxTemplateConfigDao.findByWechatIdAndTemplateNameAndScene(wechatId,name,scene);
        return wxTemplateConfigDO;
    }
    //===================模板消息end=======================================
}

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/util/ErrorCodeUtil.java

@ -21,6 +21,6 @@ public class ErrorCodeUtil {
     * @return
     */
    public String getErrorMsg(String errorCode){
        return redisTemplate.opsForValue().get(BaseErrorCode.PREFIX+errorCode);
        return redisTemplate.opsForValue().get(BaseErrorCode.PREFIX + errorCode);
    }
}

+ 79 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/DelayService.java

@ -0,0 +1,79 @@
package com.yihu.jw.base.util.delay;
import com.yihu.jw.base.util.threadPool.ThreadPoolUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.DelayQueue;
/**
 * @author yeshijie on 2018/9/29.
 */
@Component
public class DelayService {
    private final Logger log = LoggerFactory.getLogger(DelayService.class);
    @Autowired
    private ThreadPoolUtil threadPoolUtil;
    private boolean start;
    private OnDelayedListener listener;
    public DelayQueue<Notice> delayQueue = new DelayQueue<Notice>();
    public void start(OnDelayedListener listener) {
        if (start) {
            return;
        }
        log.info("DelayService 启动");
        start = true;
        this.listener = listener;
        threadPoolUtil.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        Notice notice = delayQueue.take();
                        if (DelayService.this.listener != null) {
                            DelayService.this.listener.onDelayedArrived(notice);
                        }
                        log.info("执行任务+"+notice.getNoticeId()+","+notice.getStartTime());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public void add(Notice notice) {
        delayQueue.put(notice);
    }
    public boolean remove(Notice notice) {
        return delayQueue.remove(notice);
    }
    public void add(String noticeId,long startTime) {
        delayQueue.put(new Notice(noticeId, startTime));
    }
    public void remove(String noticeId) {
        Notice[] array = delayQueue.toArray(new Notice[]{});
        if (array == null || array.length <= 0) {
            return;
        }
        Notice target = null;
        for (Notice notice : array) {
            if (notice.getNoticeId().equals(noticeId)) {
                target = notice;
                break;
            }
        }
        if (target != null) {
            delayQueue.remove(target);
        }
    }
}

+ 53 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/Notice.java

@ -0,0 +1,53 @@
package com.yihu.jw.base.util.delay;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
 * 消息公告的延迟队列
 * @author yeshijie on 2018/10/9.
 */
public class Notice implements Delayed {
    private String noticeId;
    private long startTime;
    public Notice(String noticeId, long timeout){
        this.noticeId = noticeId;
        this.startTime = timeout;
    }
    @Override
    public int compareTo(Delayed other) {
        if (other == this) {
            return 0;
        }
        if (other instanceof Notice) {
            Notice otherRequest = (Notice) other;
            long otherStartTime = otherRequest.getStartTime();
            return (int) (this.startTime - otherStartTime);
        }
        return 0;
    }
    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(startTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }
    public String getNoticeId() {
        return noticeId;
    }
    public void setNoticeId(String noticeId) {
        this.noticeId = noticeId;
    }
    public long getStartTime() {
        return startTime;
    }
    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }
}

+ 12 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/OnDelayedListener.java

@ -0,0 +1,12 @@
package com.yihu.jw.base.util.delay;
/**
 * @author yeshijie on 2018/10/9.
 */
public interface OnDelayedListener {
    /**
     * 延迟时间到了,执行处理订单
     * @param notice
     */
    void onDelayedArrived(Notice notice);
}

+ 196 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/delay/RedisLock.java

@ -0,0 +1,196 @@
package com.yihu.jw.base.util.delay;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.concurrent.TimeUnit;
/**
 * @author yeshijie on 2018/10/9.
 */
public class RedisLock {
    private static Logger logger = LoggerFactory.getLogger(RedisLock.class);
    private RedisTemplate redisTemplate;
    private static final int DEFAULT_ACQUIRY_RESOLUTION_MILLIS = 100;
    /**
     * Lock key path.
     */
    private String lockKey;
    /**
     * 锁超时时间,防止线程在入锁以后,无限的执行等待
     */
    private int expireMsecs = 60 * 1000;
    /**
     * 锁等待时间,防止线程饥饿
     */
    private int timeoutMsecs = 10 * 1000;
    private volatile boolean locked = false;
    /**
     * Detailed constructor with default acquire timeout 10000 msecs and lock expiration of 60000 msecs.
     *
     * @param lockKey lock key (ex. account:1, ...)
     */
    public RedisLock(RedisTemplate redisTemplate, String lockKey) {
        this.redisTemplate = redisTemplate;
        this.lockKey = lockKey + "_lock";
    }
    /**
     * Detailed constructor with default lock expiration of 60000 msecs.
     *
     */
    public RedisLock(RedisTemplate redisTemplate, String lockKey, int timeoutMsecs) {
        this(redisTemplate, lockKey);
        this.timeoutMsecs = timeoutMsecs;
    }
    /**
     * Detailed constructor.
     *
     */
    public RedisLock(RedisTemplate redisTemplate, String lockKey, int timeoutMsecs, int expireMsecs) {
        this(redisTemplate, lockKey, timeoutMsecs);
        this.expireMsecs = expireMsecs;
    }
    /**
     * @return lock key
     */
    public String getLockKey() {
        return lockKey;
    }
    private String get(final String key) {
        Object obj = null;
        try {
            obj = redisTemplate.execute(new RedisCallback<Object>() {
                @Override
                public Object doInRedis(RedisConnection connection) throws DataAccessException {
                    StringRedisSerializer serializer = new StringRedisSerializer();
                    byte[] data = connection.get(serializer.serialize(key));
                    connection.close();
                    if (data == null) {
                        return null;
                    }
                    return serializer.deserialize(data);
                }
            });
        } catch (Exception e) {
            logger.error("get redis error, key : {}", key);
        }
        return obj != null ? obj.toString() : null;
    }
    private boolean setNX(final String key, final String value) {
        Object obj = null;
        try {
            obj = redisTemplate.execute(new RedisCallback<Object>() {
                @Override
                public Object doInRedis(RedisConnection connection) throws DataAccessException {
                    StringRedisSerializer serializer = new StringRedisSerializer();
                    Boolean success = connection.setNX(serializer.serialize(key), serializer.serialize(value));
                    connection.close();
                    return success;
                }
            });
        } catch (Exception e) {
            logger.error("setNX redis error, key : {}", key);
        }
        return obj != null ? (Boolean) obj : false;
    }
    private String getSet(final String key, final String value) {
        Object obj = null;
        try {
            obj = redisTemplate.execute(new RedisCallback<Object>() {
                @Override
                public Object doInRedis(RedisConnection connection) throws DataAccessException {
                    StringRedisSerializer serializer = new StringRedisSerializer();
                    byte[] ret = connection.getSet(serializer.serialize(key), serializer.serialize(value));
                    connection.close();
                    return serializer.deserialize(ret);
                }
            });
        } catch (Exception e) {
            logger.error("setNX redis error, key : {}", key);
        }
        return obj != null ? (String) obj : null;
    }
    /**
     * 获得 lock.
     * 实现思路: 主要是使用了redis 的setnx命令,缓存了锁.
     * reids缓存的key是锁的key,所有的共享, value是锁的到期时间(注意:这里把过期时间放在value了,没有时间上设置其超时时间)
     * 执行过程:
     * 1.通过setnx尝试设置某个key的值,成功(当前没有这个锁)则返回,成功获得锁
     * 2.锁已经存在则获取锁的到期时间,和当前时间比较,超时的话,则设置新的值
     *
     * @return true if lock is acquired, false acquire timeouted
     * @throws InterruptedException in case of thread interruption
     */
    public synchronized boolean lock() throws InterruptedException {
        int timeout = timeoutMsecs;
        while (timeout >= 0) {
            long expires = System.currentTimeMillis() + expireMsecs + 1;
            //锁到期时间
            String expiresStr = String.valueOf(expires);
            if (this.setNX(lockKey, expiresStr)) {
                // lock acquired
                locked = true;
                return true;
            }
            //redis里的时间
            String currentValueStr = this.get(lockKey);
            if (currentValueStr != null && Long.parseLong(currentValueStr) < System.currentTimeMillis()) {
                //判断是否为空,不为空的情况下,如果被其他线程设置了值,则第二个条件判断是过不去的
                // lock is expired
                String oldValueStr = this.getSet(lockKey, expiresStr);
                //获取上一个锁到期时间,并设置现在的锁到期时间,
                //只有一个线程才能获取上一个线上的设置时间,因为jedis.getSet是同步的
                if (oldValueStr != null && oldValueStr.equals(currentValueStr)) {
                    //防止误删(覆盖,因为key是相同的)了他人的锁——这里达不到效果,这里值会被覆盖,但是因为什么相差了很少的时间,所以可以接受
                    //[分布式的情况下]:如过这个时候,多个线程恰好都到了这里,但是只有一个线程的设置值和当前值相同,他才有权利获取锁
                    // lock acquired
                    locked = true;
                    return true;
                }
            }
            timeout -= DEFAULT_ACQUIRY_RESOLUTION_MILLIS;
            /*
                延迟100 毫秒,  这里使用随机时间可能会好一点,可以防止饥饿进程的出现,即,当同时到达多个进程,
                只会有一个进程获得锁,其他的都用同样的频率进行尝试,后面有来了一些进行,也以同样的频率申请锁,这将可能导致前面来的锁得不到满足.
                使用随机的等待时间可以一定程度上保证公平性
             */
            TimeUnit.MILLISECONDS.sleep(DEFAULT_ACQUIRY_RESOLUTION_MILLIS);
        }
        return false;
    }
    /**
     * Acqurired lock release.
     */
    public synchronized void unlock() {
        if (locked) {
            redisTemplate.delete(lockKey);
            locked = false;
        }
    }
}

+ 0 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/threadPool/ThreadPool.java


Some files were not shown because too many files changed in this diff