From 69e2b4505c54802c6ad901848211776d975a4d97 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 27 Nov 2024 15:24:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E5=92=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=B9=B3=E5=8F=B0=E7=9A=84=E6=8E=A5=E5=8F=A3=E4=B8=AD?= =?UTF-8?q?=E9=97=B4=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/wfc/system/api/RemoteUserService.java | 4 +- .../factory/RemoteUserFallbackFactory.java | 4 +- wfc-api/wfc-api-user/pom.xml | 28 ++ .../org/wfc/user/api/RemoteUFileService.java | 29 ++ .../org/wfc/user/api/RemoteULogService.java | 41 +++ .../org/wfc/user/api/RemoteUUserService.java | 49 +++ .../java/org/wfc/user/api/domain/UDept.java | 216 ++++++++++++ .../org/wfc/user/api/domain/UDictData.java | 177 ++++++++++ .../org/wfc/user/api/domain/UDictType.java | 97 ++++++ .../java/org/wfc/user/api/domain/UFile.java | 50 +++ .../org/wfc/user/api/domain/ULogininfor.java | 103 ++++++ .../org/wfc/user/api/domain/UOperLog.java | 256 ++++++++++++++ .../java/org/wfc/user/api/domain/URole.java | 242 +++++++++++++ .../java/org/wfc/user/api/domain/UUser.java | 326 ++++++++++++++++++ .../factory/RemoteUFileFallbackFactory.java | 35 ++ .../factory/RemoteULogFallbackFactory.java | 42 +++ .../factory/RemoteUUserFallbackFactory.java | 47 +++ ...ot.autoconfigure.AutoConfiguration.imports | 3 + 18 files changed, 1745 insertions(+), 4 deletions(-) create mode 100644 wfc-api/wfc-api-user/pom.xml create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUFileService.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteULogService.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUUserService.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDept.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictData.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictType.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UFile.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/ULogininfor.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UOperLog.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/URole.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UUser.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUFileFallbackFactory.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteULogFallbackFactory.java create mode 100644 wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUUserFallbackFactory.java create mode 100644 wfc-api/wfc-api-user/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java index fc9a94a..6793267 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java +++ b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java @@ -12,7 +12,7 @@ import org.wfc.common.core.constant.ServiceNameConstants; import org.wfc.common.core.domain.R; import org.wfc.system.api.domain.SysUser; import org.wfc.system.api.factory.RemoteUserFallbackFactory; -import org.wfc.system.api.model.LoginUser; +import org.wfc.common.core.domain.LoginUser; /** * 用户服务 @@ -30,7 +30,7 @@ public interface RemoteUserService * @return 结果 */ @GetMapping("/user/info/{username}") - public R getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + public R> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 注册用户信息 diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java index 46a732c..f5b1924 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java +++ b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java @@ -4,10 +4,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import org.wfc.common.core.domain.LoginUser; import org.wfc.common.core.domain.R; import org.wfc.system.api.RemoteUserService; import org.wfc.system.api.domain.SysUser; -import org.wfc.system.api.model.LoginUser; /** * 用户服务降级处理 @@ -26,7 +26,7 @@ public class RemoteUserFallbackFactory implements FallbackFactory getUserInfo(String username, String source) + public R> getUserInfo(String username, String source) { return R.fail("获取用户失败:" + throwable.getMessage()); } diff --git a/wfc-api/wfc-api-user/pom.xml b/wfc-api/wfc-api-user/pom.xml new file mode 100644 index 0000000..7b25dfa --- /dev/null +++ b/wfc-api/wfc-api-user/pom.xml @@ -0,0 +1,28 @@ + + + + org.wfc + wfc-api + 3.6.5 + + 4.0.0 + + wfc-api-user + + + wfc-api-user 用户平台接口模块 + + + + + + + org.wfc + wfc-common-core + + + + + \ No newline at end of file diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUFileService.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUFileService.java new file mode 100644 index 0000000..f4d7832 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUFileService.java @@ -0,0 +1,29 @@ +package org.wfc.user.api; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; +import org.wfc.common.core.constant.ServiceNameConstants; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.domain.UFile; +import org.wfc.user.api.factory.RemoteUFileFallbackFactory; + +/** + * 文件服务 + * + * @author wfc + */ +@FeignClient(contextId = "remoteUFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteUFileFallbackFactory.class) +public interface RemoteUFileService +{ + /** + * 上传文件 + * + * @param file 文件信息 + * @return 结果 + */ + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R upload(@RequestPart(value = "file") MultipartFile file); +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteULogService.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteULogService.java new file mode 100644 index 0000000..15a6708 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteULogService.java @@ -0,0 +1,41 @@ +package org.wfc.user.api; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.wfc.common.core.constant.SecurityConstants; +import org.wfc.common.core.constant.ServiceNameConstants; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.domain.ULogininfor; +import org.wfc.user.api.domain.UOperLog; +import org.wfc.user.api.factory.RemoteULogFallbackFactory; + +/** + * 日志服务 + * + * @author wfc + */ +@FeignClient(contextId = "remoteULogService", value = ServiceNameConstants.USER_SERVICE, fallbackFactory = RemoteULogFallbackFactory.class) +public interface RemoteULogService +{ + /** + * 保存系统日志 + * + * @param operLog 日志实体 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/operlog") + public R saveLog(@RequestBody UOperLog operLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; + + /** + * 保存访问记录 + * + * @param logininfor 访问实体 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/logininfor") + public R saveLogininfor(@RequestBody ULogininfor logininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUUserService.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUUserService.java new file mode 100644 index 0000000..0ef5a28 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/RemoteUUserService.java @@ -0,0 +1,49 @@ +package org.wfc.user.api; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; +import org.wfc.common.core.constant.SecurityConstants; +import org.wfc.common.core.constant.ServiceNameConstants; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.domain.UUser; +import org.wfc.user.api.factory.RemoteUUserFallbackFactory; + +/** + * 用户服务 + * + * @author wfc + */ +@FeignClient(contextId = "remoteUUserService", value = ServiceNameConstants.USER_SERVICE, fallbackFactory = RemoteUUserFallbackFactory.class) +public interface RemoteUUserService +{ + /** + * 通过用户名查询用户信息 + * + * @param username 用户名 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/user/info/{username}") + public R> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 注册用户信息 + * + * @param user 用户信息 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/user/register") + public R registerUserInfo(@RequestBody UUser user, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 记录用户登录IP地址和登录时间 + * + * @param user 用户信息 + * @param source 请求来源 + * @return 结果 + */ + @PutMapping("/user/recordlogin") + public R recordUserLogin(@RequestBody UUser user, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDept.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDept.java new file mode 100644 index 0000000..56659b3 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDept.java @@ -0,0 +1,216 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.wfc.common.core.web.domain.BaseEntity; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 部门表 sys_dept + * + * @author wfc + */ +public class UDept extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 部门ID */ + private Long deptId; + + /** 父部门ID */ + private Long parentId; + + /** 祖级列表 */ + private String ancestors; + + /** 部门名称 */ + private String deptName; + + /** 显示顺序 */ + private Integer orderNum; + + /** 负责人 */ + private String leader; + + /** 联系电话 */ + private String phone; + + /** 邮箱 */ + private String email; + + /** 部门状态:0正常,1停用 */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 父部门名称 */ + private String parentName; + + /** 备注 */ + private String remark; + + /** 子部门 */ + private List children = new ArrayList(); + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getLeader() + { + return leader; + } + + public void setLeader(String leader) + { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictData.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictData.java new file mode 100644 index 0000000..1d2e11c --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictData.java @@ -0,0 +1,177 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.constant.UserConstants; +import org.wfc.common.core.web.domain.BaseEntity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 字典数据表 u_dict_data + * + * @author wfc + */ +public class UDictData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典编码 */ + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** 字典排序 */ + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** 字典标签 */ + @Excel(name = "字典标签") + private String dictLabel; + + /** 字典键值 */ + @Excel(name = "字典键值") + private String dictValue; + + /** 字典类型 */ + @Excel(name = "字典类型") + private String dictType; + + /** 样式属性(其他样式扩展) */ + private String cssClass; + + /** 表格字典样式 */ + private String listClass; + + /** 是否默认(Y是 N否) */ + @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") + private String isDefault; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictCode() + { + return dictCode; + } + + public void setDictCode(Long dictCode) + { + this.dictCode = dictCode; + } + + public Long getDictSort() + { + return dictSort; + } + + public void setDictSort(Long dictSort) + { + this.dictSort = dictSort; + } + + @NotBlank(message = "字典标签不能为空") + @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") + public String getDictLabel() + { + return dictLabel; + } + + public void setDictLabel(String dictLabel) + { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "字典键值不能为空") + @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") + public String getDictValue() + { + return dictValue; + } + + public void setDictValue(String dictValue) + { + this.dictValue = dictValue; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") + public String getCssClass() + { + return cssClass; + } + + public void setCssClass(String cssClass) + { + this.cssClass = cssClass; + } + + public String getListClass() + { + return listClass; + } + + public void setListClass(String listClass) + { + this.listClass = listClass; + } + + public boolean getDefault() + { + return UserConstants.YES.equals(this.isDefault); + } + + public String getIsDefault() + { + return isDefault; + } + + public void setIsDefault(String isDefault) + { + this.isDefault = isDefault; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictType.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictType.java new file mode 100644 index 0000000..f638f9f --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UDictType.java @@ -0,0 +1,97 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.web.domain.BaseEntity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +/** + * 字典类型表 u_dict_type + * + * @author wfc + */ +public class UDictType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典主键 */ + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** 字典名称 */ + @Excel(name = "字典名称") + private String dictName; + + /** 字典类型 */ + @Excel(name = "字典类型") + private String dictType; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictId() + { + return dictId; + } + + public void setDictId(Long dictId) + { + this.dictId = dictId; + } + + @NotBlank(message = "字典名称不能为空") + @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") + public String getDictName() + { + return dictName; + } + + public void setDictName(String dictName) + { + this.dictName = dictName; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") + @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UFile.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UFile.java new file mode 100644 index 0000000..99bc3a3 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UFile.java @@ -0,0 +1,50 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 文件信息 + * + * @author wfc + */ +public class UFile +{ + /** + * 文件名称 + */ + private String name; + + /** + * 文件地址 + */ + private String url; + + 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; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("name", getName()) + .append("url", getUrl()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/ULogininfor.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/ULogininfor.java new file mode 100644 index 0000000..3fed840 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/ULogininfor.java @@ -0,0 +1,103 @@ +package org.wfc.user.api.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.web.domain.BaseEntity; + +import java.util.Date; + +/** + * 系统访问记录表 u_logininfor + * + * @author wfc + */ +public class ULogininfor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "序号", cellType = ColumnType.NUMERIC) + private Long infoId; + + /** 用户账号 */ + @Excel(name = "用户账号") + private String userName; + + /** 状态 0成功 1失败 */ + @Excel(name = "状态", readConverterExp = "0=成功,1=失败") + private String status; + + /** 地址 */ + @Excel(name = "地址") + private String ipaddr; + + /** 描述 */ + @Excel(name = "描述") + private String msg; + + /** 访问时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date accessTime; + + public Long getInfoId() + { + return infoId; + } + + public void setInfoId(Long infoId) + { + this.infoId = infoId; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public Date getAccessTime() + { + return accessTime; + } + + public void setAccessTime(Date accessTime) + { + this.accessTime = accessTime; + } +} \ No newline at end of file diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UOperLog.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UOperLog.java new file mode 100644 index 0000000..a2c68e6 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UOperLog.java @@ -0,0 +1,256 @@ +package org.wfc.user.api.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.web.domain.BaseEntity; + +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author wfc + */ +public class UOperLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 日志主键 */ + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) + private Long operId; + + /** 操作模块 */ + @Excel(name = "操作模块") + private String title; + + /** 业务类型(0其它 1新增 2修改 3删除) */ + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + private Integer businessType; + + /** 业务类型数组 */ + private Integer[] businessTypes; + + /** 请求方法 */ + @Excel(name = "请求方法") + private String method; + + /** 请求方式 */ + @Excel(name = "请求方式") + private String requestMethod; + + /** 操作类别(0其它 1后台用户 2手机端用户) */ + @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") + private Integer operatorType; + + /** 操作人员 */ + @Excel(name = "操作人员") + private String operName; + + /** 部门名称 */ + @Excel(name = "部门名称") + private String deptName; + + /** 请求url */ + @Excel(name = "请求地址") + private String operUrl; + + /** 操作地址 */ + @Excel(name = "操作地址") + private String operIp; + + /** 请求参数 */ + @Excel(name = "请求参数") + private String operParam; + + /** 返回参数 */ + @Excel(name = "返回参数") + private String jsonResult; + + /** 操作状态(0正常 1异常) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + /** 错误消息 */ + @Excel(name = "错误消息") + private String errorMsg; + + /** 操作时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** 消耗时间 */ + @Excel(name = "消耗时间", suffix = "毫秒") + private Long costTime; + + public Long getOperId() + { + return operId; + } + + public void setOperId(Long operId) + { + this.operId = operId; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public Integer getBusinessType() + { + return businessType; + } + + public void setBusinessType(Integer businessType) + { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() + { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) + { + this.businessTypes = businessTypes; + } + + public String getMethod() + { + return method; + } + + public void setMethod(String method) + { + this.method = method; + } + + public String getRequestMethod() + { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) + { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() + { + return operatorType; + } + + public void setOperatorType(Integer operatorType) + { + this.operatorType = operatorType; + } + + public String getOperName() + { + return operName; + } + + public void setOperName(String operName) + { + this.operName = operName; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getOperUrl() + { + return operUrl; + } + + public void setOperUrl(String operUrl) + { + this.operUrl = operUrl; + } + + public String getOperIp() + { + return operIp; + } + + public void setOperIp(String operIp) + { + this.operIp = operIp; + } + + public String getOperParam() + { + return operParam; + } + + public void setOperParam(String operParam) + { + this.operParam = operParam; + } + + public String getJsonResult() + { + return jsonResult; + } + + public void setJsonResult(String jsonResult) + { + this.jsonResult = jsonResult; + } + + public Integer getStatus() + { + return status; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public String getErrorMsg() + { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) + { + this.errorMsg = errorMsg; + } + + public Date getOperTime() + { + return operTime; + } + + public void setOperTime(Date operTime) + { + this.operTime = operTime; + } + + public Long getCostTime() + { + return costTime; + } + + public void setCostTime(Long costTime) + { + this.costTime = costTime; + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/URole.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/URole.java new file mode 100644 index 0000000..f25e2eb --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/URole.java @@ -0,0 +1,242 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.web.domain.BaseEntity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Set; + +/** + * 角色表 u_role + * + * @author wfc + */ +public class URole extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 角色ID */ + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** 角色名称 */ + @Excel(name = "角色名称") + private String roleName; + + /** 角色权限 */ + @Excel(name = "角色权限") + private String roleKey; + + /** 角色排序 */ + @Excel(name = "角色排序") + private Integer roleSort; + + /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") + private String dataScope; + + /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + private boolean menuCheckStrictly; + + /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + private boolean deptCheckStrictly; + + /** 角色状态(0正常 1停用) */ + @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 用户是否存在此角色标识 默认不存在 */ + private boolean flag = false; + + /** 菜单组 */ + private Long[] menuIds; + + /** 部门组(数据权限) */ + private Long[] deptIds; + + /** 角色菜单权限 */ + private Set permissions; + + public URole() + { + + } + + public URole(Long roleId) + { + this.roleId = roleId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @NotBlank(message = "角色名称不能为空") + @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") + public String getRoleName() + { + return roleName; + } + + public void setRoleName(String roleName) + { + this.roleName = roleName; + } + + @NotBlank(message = "权限字符不能为空") + @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") + public String getRoleKey() + { + return roleKey; + } + + public void setRoleKey(String roleKey) + { + this.roleKey = roleKey; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getRoleSort() + { + return roleSort; + } + + public void setRoleSort(Integer roleSort) + { + this.roleSort = roleSort; + } + + public String getDataScope() + { + return dataScope; + } + + public void setDataScope(String dataScope) + { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + public Long[] getMenuIds() + { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) + { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() + { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) + { + this.deptIds = deptIds; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UUser.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UUser.java new file mode 100644 index 0000000..9d6f37f --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/UUser.java @@ -0,0 +1,326 @@ +package org.wfc.user.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.wfc.common.core.annotation.Excel; +import org.wfc.common.core.annotation.Excel.ColumnType; +import org.wfc.common.core.annotation.Excel.Type; +import org.wfc.common.core.annotation.Excels; +import org.wfc.common.core.web.domain.BaseEntity; +import org.wfc.common.core.xss.Xss; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * 用户对象 u_user + * + * @author wfc + */ +public class UUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户ID */ + @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** 部门ID */ + @Excel(name = "部门编号", type = Type.IMPORT) + private Long deptId; + + /** 用户账号 */ + @Excel(name = "登录名称") + private String userName; + + /** 用户昵称 */ + @Excel(name = "用户名称") + private String nickName; + + /** 用户邮箱 */ + @Excel(name = "用户邮箱") + private String email; + + /** 手机号码 */ + @Excel(name = "手机号码", cellType = ColumnType.TEXT) + private String phonenumber; + + /** 用户性别 */ + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + private String sex; + + /** 用户头像 */ + private String avatar; + + /** 密码 */ + private String password; + + /** 帐号状态(0正常 1停用) */ + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 最后登录IP */ + @Excel(name = "最后登录IP", type = Type.EXPORT) + private String loginIp; + + /** 最后登录时间 */ + @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** 部门对象 */ + @Excels({ + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + }) + private UDept dept; + + /** 角色对象 */ + private List roles; + + /** 角色组 */ + private Long[] roleIds; + + /** 岗位组 */ + private Long[] postIds; + + /** 角色ID */ + private Long roleId; + + public UUser() + { + + } + + public UUser(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public boolean isAdmin() + { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Xss(message = "用户昵称不能包含脚本字符") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + public String getNickName() + { + return nickName; + } + + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + @Xss(message = "用户账号不能包含脚本字符") + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + public String getPhonenumber() + { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) + { + this.phonenumber = phonenumber; + } + + public String getSex() + { + return sex; + } + + public void setSex(String sex) + { + this.sex = sex; + } + + public String getAvatar() + { + return avatar; + } + + public void setAvatar(String avatar) + { + this.avatar = avatar; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getLoginIp() + { + return loginIp; + } + + public void setLoginIp(String loginIp) + { + this.loginIp = loginIp; + } + + public Date getLoginDate() + { + return loginDate; + } + + public void setLoginDate(Date loginDate) + { + this.loginDate = loginDate; + } + + public UDept getDept() + { + return dept; + } + + public void setDept(UDept dept) + { + this.dept = dept; + } + + public List getRoles() + { + return roles; + } + + public void setRoles(List roles) + { + this.roles = roles; + } + + public Long[] getRoleIds() + { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) + { + this.roleIds = roleIds; + } + + public Long[] getPostIds() + { + return postIds; + } + + public void setPostIds(Long[] postIds) + { + this.postIds = postIds; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUFileFallbackFactory.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUFileFallbackFactory.java new file mode 100644 index 0000000..d6398ff --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUFileFallbackFactory.java @@ -0,0 +1,35 @@ +package org.wfc.user.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.RemoteUFileService; +import org.wfc.user.api.domain.UFile; + +/** + * 文件服务降级处理 + * + * @author wfc + */ +@Component +public class RemoteUFileFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteUFileFallbackFactory.class); + + @Override + public RemoteUFileService create(Throwable throwable) + { + log.error("文件服务调用失败:{}", throwable.getMessage()); + return new RemoteUFileService() + { + @Override + public R upload(MultipartFile file) + { + return R.fail("上传文件失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteULogFallbackFactory.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteULogFallbackFactory.java new file mode 100644 index 0000000..acf43b9 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteULogFallbackFactory.java @@ -0,0 +1,42 @@ +package org.wfc.user.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.RemoteULogService; +import org.wfc.user.api.domain.ULogininfor; +import org.wfc.user.api.domain.UOperLog; + +/** + * 日志服务降级处理 + * + * @author wfc + */ +@Component +public class RemoteULogFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteULogFallbackFactory.class); + + @Override + public RemoteULogService create(Throwable throwable) + { + log.error("日志服务调用失败:{}", throwable.getMessage()); + return new RemoteULogService() + { + @Override + public R saveLog(UOperLog sysOperLog, String source) + { + return R.fail("保存操作日志失败:" + throwable.getMessage()); + } + + @Override + public R saveLogininfor(ULogininfor sysLogininfor, String source) + { + return R.fail("保存登录日志失败:" + throwable.getMessage()); + } + }; + + } +} diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUUserFallbackFactory.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUUserFallbackFactory.java new file mode 100644 index 0000000..3fd8083 --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/factory/RemoteUUserFallbackFactory.java @@ -0,0 +1,47 @@ +package org.wfc.user.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import org.wfc.common.core.domain.LoginUser; +import org.wfc.common.core.domain.R; +import org.wfc.user.api.RemoteUUserService; +import org.wfc.user.api.domain.UUser; + +/** + * 用户服务降级处理 + * + * @author wfc + */ +@Component +public class RemoteUUserFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteUUserFallbackFactory.class); + + @Override + public RemoteUUserService create(Throwable throwable) + { + log.error("用户服务调用失败:{}", throwable.getMessage()); + return new RemoteUUserService() + { + @Override + public R> getUserInfo(String username, String source) + { + return R.fail("获取用户失败:" + throwable.getMessage()); + } + + @Override + public R registerUserInfo(UUser user, String source) + { + return R.fail("注册用户失败:" + throwable.getMessage()); + } + + @Override + public R recordUserLogin(UUser user, String source) + { + return R.fail("记录用户登录信息失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/wfc-api/wfc-api-user/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/wfc-api/wfc-api-user/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..9408c8a --- /dev/null +++ b/wfc-api/wfc-api-user/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +org.wfc.user.api.factory.RemoteUUserFallbackFactory +org.wfc.user.api.factory.RemoteULogFallbackFactory +org.wfc.user.api.factory.RemoteUFileFallbackFactory