From b05ad3dc20a2d362c6349756bff73f79954c0c7d Mon Sep 17 00:00:00 2001 From: TangZhaoZhen <207525215@qq.com> Date: Mon, 16 Oct 2023 20:48:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 + .idea/compiler.xml | 13 + .idea/encodings.xml | 9 + .idea/inspectionProfiles/Project_Default.xml | 5 + .idea/jarRepositories.xml | 30 ++ .idea/misc.xml | 25 ++ .idea/vcs.xml | 6 + four-api-system/pom.xml | 28 ++ .../four/system/api/RemoteFileService.java | 29 ++ .../com/four/system/api/RemoteLogService.java | 41 +++ .../four/system/api/RemoteUserService.java | 43 +++ .../com/four/system/api/domain/SysDept.java | 203 +++++++++++ .../four/system/api/domain/SysDictData.java | 176 ++++++++++ .../four/system/api/domain/SysDictType.java | 96 ++++++ .../com/four/system/api/domain/SysFile.java | 50 +++ .../four/system/api/domain/SysLogininfor.java | 102 ++++++ .../four/system/api/domain/SysOperLog.java | 255 ++++++++++++++ .../com/four/system/api/domain/SysRole.java | 241 +++++++++++++ .../com/four/system/api/domain/SysUser.java | 323 ++++++++++++++++++ .../factory/RemoteFileFallbackFactory.java | 35 ++ .../api/factory/RemoteLogFallbackFactory.java | 42 +++ .../factory/RemoteUserFallbackFactory.java | 41 +++ .../com/four/system/api/model/LoginUser.java | 150 ++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 3 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + .../four/system/api/RemoteFileService.class | Bin 0 -> 860 bytes .../four/system/api/RemoteLogService.class | Bin 0 -> 1241 bytes .../four/system/api/RemoteUserService.class | Bin 0 -> 1311 bytes .../com/four/system/api/domain/SysDept.class | Bin 0 -> 4932 bytes .../four/system/api/domain/SysDictData.class | Bin 0 -> 4758 bytes .../four/system/api/domain/SysDictType.class | Bin 0 -> 3265 bytes .../com/four/system/api/domain/SysFile.class | Bin 0 -> 1259 bytes .../system/api/domain/SysLogininfor.class | Bin 0 -> 2377 bytes .../four/system/api/domain/SysOperLog.class | Bin 0 -> 5220 bytes .../com/four/system/api/domain/SysRole.class | Bin 0 -> 6133 bytes .../com/four/system/api/domain/SysUser.class | Bin 0 -> 7885 bytes .../factory/RemoteFileFallbackFactory$1.class | Bin 0 -> 1570 bytes .../factory/RemoteFileFallbackFactory.class | Bin 0 -> 1519 bytes .../factory/RemoteLogFallbackFactory$1.class | Bin 0 -> 2039 bytes .../factory/RemoteLogFallbackFactory.class | Bin 0 -> 1512 bytes .../factory/RemoteUserFallbackFactory$1.class | Bin 0 -> 1949 bytes .../factory/RemoteUserFallbackFactory.class | Bin 0 -> 1519 bytes .../com/four/system/api/model/LoginUser.class | Bin 0 -> 2678 bytes .../target/four-api-system-3.6.3.jar | Bin 0 -> 27245 bytes .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 18 + .../compile/default-compile/inputFiles.lst | 15 + pom.xml | 22 ++ 48 files changed, 2017 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 four-api-system/pom.xml create mode 100644 four-api-system/src/main/java/com/four/system/api/RemoteFileService.java create mode 100644 four-api-system/src/main/java/com/four/system/api/RemoteLogService.java create mode 100644 four-api-system/src/main/java/com/four/system/api/RemoteUserService.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysDept.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysDictData.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysDictType.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysFile.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysLogininfor.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysOperLog.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysRole.java create mode 100644 four-api-system/src/main/java/com/four/system/api/domain/SysUser.java create mode 100644 four-api-system/src/main/java/com/four/system/api/factory/RemoteFileFallbackFactory.java create mode 100644 four-api-system/src/main/java/com/four/system/api/factory/RemoteLogFallbackFactory.java create mode 100644 four-api-system/src/main/java/com/four/system/api/factory/RemoteUserFallbackFactory.java create mode 100644 four-api-system/src/main/java/com/four/system/api/model/LoginUser.java create mode 100644 four-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 four-api-system/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 four-api-system/target/classes/com/four/system/api/RemoteFileService.class create mode 100644 four-api-system/target/classes/com/four/system/api/RemoteLogService.class create mode 100644 four-api-system/target/classes/com/four/system/api/RemoteUserService.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysDept.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysDictData.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysDictType.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysFile.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysLogininfor.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysOperLog.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysRole.class create mode 100644 four-api-system/target/classes/com/four/system/api/domain/SysUser.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory$1.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory$1.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory$1.class create mode 100644 four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory.class create mode 100644 four-api-system/target/classes/com/four/system/api/model/LoginUser.class create mode 100644 four-api-system/target/four-api-system-3.6.3.jar create mode 100644 four-api-system/target/maven-archiver/pom.properties create mode 100644 four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 pom.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..1aec85a --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..2085738 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..8d66637 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..7566504 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..edb557b --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/four-api-system/pom.xml b/four-api-system/pom.xml new file mode 100644 index 0000000..1babde4 --- /dev/null +++ b/four-api-system/pom.xml @@ -0,0 +1,28 @@ + + + + com.four + four-api + 3.6.3 + + 4.0.0 + + four-api-system + + + four-api-system系统接口模块 + + + + + + + com.four + four-common-core + + + + + \ No newline at end of file diff --git a/four-api-system/src/main/java/com/four/system/api/RemoteFileService.java b/four-api-system/src/main/java/com/four/system/api/RemoteFileService.java new file mode 100644 index 0000000..f4c8419 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/RemoteFileService.java @@ -0,0 +1,29 @@ +package com.four.system.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 com.four.common.core.constant.ServiceNameConstants; +import com.four.common.core.domain.R; +import com.four.system.api.domain.SysFile; +import com.four.system.api.factory.RemoteFileFallbackFactory; + +/** + * 文件服务 + * + * @author ruoyi + */ +@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class) +public interface RemoteFileService +{ + /** + * 上传文件 + * + * @param file 文件信息 + * @return 结果 + */ + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R upload(@RequestPart(value = "file") MultipartFile file); +} diff --git a/four-api-system/src/main/java/com/four/system/api/RemoteLogService.java b/four-api-system/src/main/java/com/four/system/api/RemoteLogService.java new file mode 100644 index 0000000..eeda05e --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/RemoteLogService.java @@ -0,0 +1,41 @@ +package com.four.system.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 com.four.common.core.constant.SecurityConstants; +import com.four.common.core.constant.ServiceNameConstants; +import com.four.common.core.domain.R; +import com.four.system.api.domain.SysLogininfor; +import com.four.system.api.domain.SysOperLog; +import com.four.system.api.factory.RemoteLogFallbackFactory; + +/** + * 日志服务 + * + * @author ruoyi + */ +@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class) +public interface RemoteLogService +{ + /** + * 保存系统日志 + * + * @param sysOperLog 日志实体 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/operlog") + public R saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; + + /** + * 保存访问记录 + * + * @param sysLogininfor 访问实体 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/logininfor") + public R saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/four-api-system/src/main/java/com/four/system/api/RemoteUserService.java b/four-api-system/src/main/java/com/four/system/api/RemoteUserService.java new file mode 100644 index 0000000..74da6e4 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/RemoteUserService.java @@ -0,0 +1,43 @@ +package com.four.system.api; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import com.four.common.core.constant.SecurityConstants; +import com.four.common.core.constant.ServiceNameConstants; +import com.four.common.core.domain.R; +import com.four.system.api.domain.SysUser; +import com.four.system.api.factory.RemoteUserFallbackFactory; +import com.four.system.api.model.LoginUser; + +/** + * 用户服务 + * + * @author ruoyi + */ +@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class) +public interface RemoteUserService +{ + /** + * 通过用户名查询用户信息 + * + * @param username 用户名 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/user/info/{username}") + public R getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 注册用户信息 + * + * @param sysUser 用户信息 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/user/register") + public R registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/four-api-system/src/main/java/com/four/system/api/domain/SysDept.java b/four-api-system/src/main/java/com/four/system/api/domain/SysDept.java new file mode 100644 index 0000000..ba4dc4d --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysDept.java @@ -0,0 +1,203 @@ +package com.four.system.api.domain; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 部门表 sys_dept + * + * @author ruoyi + */ +public class SysDept 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 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 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()) + .toString(); + } +} diff --git a/four-api-system/src/main/java/com/four/system/api/domain/SysDictData.java b/four-api-system/src/main/java/com/four/system/api/domain/SysDictData.java new file mode 100644 index 0000000..1c69d0f --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysDictData.java @@ -0,0 +1,176 @@ +package com.four.system.api.domain; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.constant.UserConstants; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 字典数据表 sys_dict_data + * + * @author ruoyi + */ +public class SysDictData 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/four-api-system/src/main/java/com/four/system/api/domain/SysDictType.java b/four-api-system/src/main/java/com/four/system/api/domain/SysDictType.java new file mode 100644 index 0000000..49ece99 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysDictType.java @@ -0,0 +1,96 @@ +package com.four.system.api.domain; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 字典类型表 sys_dict_type + * + * @author ruoyi + */ +public class SysDictType 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/four-api-system/src/main/java/com/four/system/api/domain/SysFile.java b/four-api-system/src/main/java/com/four/system/api/domain/SysFile.java new file mode 100644 index 0000000..35ddcba --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysFile.java @@ -0,0 +1,50 @@ +package com.four.system.api.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 文件信息 + * + * @author ruoyi + */ +public class SysFile +{ + /** + * 文件名称 + */ + 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/four-api-system/src/main/java/com/four/system/api/domain/SysLogininfor.java b/four-api-system/src/main/java/com/four/system/api/domain/SysLogininfor.java new file mode 100644 index 0000000..35298af --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysLogininfor.java @@ -0,0 +1,102 @@ +package com.four.system.api.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 系统访问记录表 sys_logininfor + * + * @author ruoyi + */ +public class SysLogininfor 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/four-api-system/src/main/java/com/four/system/api/domain/SysOperLog.java b/four-api-system/src/main/java/com/four/system/api/domain/SysOperLog.java new file mode 100644 index 0000000..d8e6f9d --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysOperLog.java @@ -0,0 +1,255 @@ +package com.four.system.api.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 操作日志记录表 oper_log + * + * @author ruoyi + */ +public class SysOperLog 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/four-api-system/src/main/java/com/four/system/api/domain/SysRole.java b/four-api-system/src/main/java/com/four/system/api/domain/SysRole.java new file mode 100644 index 0000000..491a2f7 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysRole.java @@ -0,0 +1,241 @@ +package com.four.system.api.domain; + +import java.util.Set; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.web.domain.BaseEntity; + +/** + * 角色表 sys_role + * + * @author ruoyi + */ +public class SysRole 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 SysRole() + { + + } + + public SysRole(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/four-api-system/src/main/java/com/four/system/api/domain/SysUser.java b/four-api-system/src/main/java/com/four/system/api/domain/SysUser.java new file mode 100644 index 0000000..2cac361 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/domain/SysUser.java @@ -0,0 +1,323 @@ +package com.four.system.api.domain; + +import java.util.Date; +import java.util.List; +import javax.validation.constraints.*; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.four.common.core.annotation.Excel; +import com.four.common.core.annotation.Excel.ColumnType; +import com.four.common.core.annotation.Excel.Type; +import com.four.common.core.annotation.Excels; +import com.four.common.core.web.domain.BaseEntity; +import com.four.common.core.xss.Xss; + +/** + * 用户对象 sys_user + * + * @author ruoyi + */ +public class SysUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户ID */ + @Excel(name = "用户序号", 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 = "手机号码") + 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 SysDept dept; + + /** 角色对象 */ + private List roles; + + /** 角色组 */ + private Long[] roleIds; + + /** 岗位组 */ + private Long[] postIds; + + /** 角色ID */ + private Long roleId; + + public SysUser() + { + + } + + public SysUser(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 SysDept getDept() + { + return dept; + } + + public void setDept(SysDept 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/four-api-system/src/main/java/com/four/system/api/factory/RemoteFileFallbackFactory.java b/four-api-system/src/main/java/com/four/system/api/factory/RemoteFileFallbackFactory.java new file mode 100644 index 0000000..7c31754 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/factory/RemoteFileFallbackFactory.java @@ -0,0 +1,35 @@ +package com.four.system.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 com.four.common.core.domain.R; +import com.four.system.api.RemoteFileService; +import com.four.system.api.domain.SysFile; + +/** + * 文件服务降级处理 + * + * @author ruoyi + */ +@Component +public class RemoteFileFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class); + + @Override + public RemoteFileService create(Throwable throwable) + { + log.error("文件服务调用失败:{}", throwable.getMessage()); + return new RemoteFileService() + { + @Override + public R upload(MultipartFile file) + { + return R.fail("上传文件失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/four-api-system/src/main/java/com/four/system/api/factory/RemoteLogFallbackFactory.java b/four-api-system/src/main/java/com/four/system/api/factory/RemoteLogFallbackFactory.java new file mode 100644 index 0000000..660a5a5 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/factory/RemoteLogFallbackFactory.java @@ -0,0 +1,42 @@ +package com.four.system.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import com.four.common.core.domain.R; +import com.four.system.api.RemoteLogService; +import com.four.system.api.domain.SysLogininfor; +import com.four.system.api.domain.SysOperLog; + +/** + * 日志服务降级处理 + * + * @author ruoyi + */ +@Component +public class RemoteLogFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class); + + @Override + public RemoteLogService create(Throwable throwable) + { + log.error("日志服务调用失败:{}", throwable.getMessage()); + return new RemoteLogService() + { + @Override + public R saveLog(SysOperLog sysOperLog, String source) + { + return R.fail("保存操作日志失败:" + throwable.getMessage()); + } + + @Override + public R saveLogininfor(SysLogininfor sysLogininfor, String source) + { + return R.fail("保存登录日志失败:" + throwable.getMessage()); + } + }; + + } +} diff --git a/four-api-system/src/main/java/com/four/system/api/factory/RemoteUserFallbackFactory.java b/four-api-system/src/main/java/com/four/system/api/factory/RemoteUserFallbackFactory.java new file mode 100644 index 0000000..86f9e80 --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/factory/RemoteUserFallbackFactory.java @@ -0,0 +1,41 @@ +package com.four.system.api.factory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import com.four.common.core.domain.R; +import com.four.system.api.RemoteUserService; +import com.four.system.api.domain.SysUser; +import com.four.system.api.model.LoginUser; + +/** + * 用户服务降级处理 + * + * @author ruoyi + */ +@Component +public class RemoteUserFallbackFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class); + + @Override + public RemoteUserService create(Throwable throwable) + { + log.error("用户服务调用失败:{}", throwable.getMessage()); + return new RemoteUserService() + { + @Override + public R getUserInfo(String username, String source) + { + return R.fail("获取用户失败:" + throwable.getMessage()); + } + + @Override + public R registerUserInfo(SysUser sysUser, String source) + { + return R.fail("注册用户失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/four-api-system/src/main/java/com/four/system/api/model/LoginUser.java b/four-api-system/src/main/java/com/four/system/api/model/LoginUser.java new file mode 100644 index 0000000..5d5d2fb --- /dev/null +++ b/four-api-system/src/main/java/com/four/system/api/model/LoginUser.java @@ -0,0 +1,150 @@ +package com.four.system.api.model; + +import java.io.Serializable; +import java.util.Set; +import com.four.system.api.domain.SysUser; + +/** + * 用户信息 + * + * @author ruoyi + */ +public class LoginUser implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 用户名id + */ + private Long userid; + + /** + * 用户名 + */ + private String username; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 权限列表 + */ + private Set permissions; + + /** + * 角色列表 + */ + private Set roles; + + /** + * 用户信息 + */ + private SysUser sysUser; + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + public Long getUserid() + { + return userid; + } + + public void setUserid(Long userid) + { + this.userid = userid; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + public Set getRoles() + { + return roles; + } + + public void setRoles(Set roles) + { + this.roles = roles; + } + + public SysUser getSysUser() + { + return sysUser; + } + + public void setSysUser(SysUser sysUser) + { + this.sysUser = sysUser; + } +} diff --git a/four-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/four-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..bccba0b --- /dev/null +++ b/four-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.four.system.api.factory.RemoteUserFallbackFactory +com.four.system.api.factory.RemoteLogFallbackFactory +com.four.system.api.factory.RemoteFileFallbackFactory diff --git a/four-api-system/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/four-api-system/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..bccba0b --- /dev/null +++ b/four-api-system/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.four.system.api.factory.RemoteUserFallbackFactory +com.four.system.api.factory.RemoteLogFallbackFactory +com.four.system.api.factory.RemoteFileFallbackFactory diff --git a/four-api-system/target/classes/com/four/system/api/RemoteFileService.class b/four-api-system/target/classes/com/four/system/api/RemoteFileService.class new file mode 100644 index 0000000000000000000000000000000000000000..930f2e4ebb4f8768bcdd2c1f3237102f9a7d9f09 GIT binary patch literal 860 zcmb_aOHUL*5UxhpWdQ|5P&}HL=m9z=8V_qojL9Y>5Xo%f#ZygB&8DFrV?P%5uX*qX z_@fLpgFMBH@z9Uz>iX)ds_*Bo?>_+GEj;hToPd|gTUq-YWSqrBR$`-NLDnZ4X+vWQ zQ>~~E^8(h6af;HQo5;`QF{vb=mmA};5>UK4@L?ij6SSMu0WF>Sa3W8sls22B8w^Pv zUfx>d;p>B|)O@ktN#z5{%3IV<7DEApv7R_gIgo&}|DNE(b^aTr|4u)i#g612)7UPu zOWM*G9d&8wqjNrC(%wY@@BUhLsa+-U>aRTVF&$#laDNzcVTvYmS$%og!9~S@*%E_p zT(_+D!R}O;P{51ZG>)+Ca-#5$d!C0$Y8fsfPgpm z7OjlWmGlj{ns{z<)b5{*Cf6nyaCwQ&(mso2J>1n7`&$j}T(DTJ(U=m|$p}^QVJ6`H zy|bz>+&APpx*a&|2@vpr-^_&7q`*HZSwOI#@dVw!TzW4Ou_a!vat=D literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/RemoteLogService.class b/four-api-system/target/classes/com/four/system/api/RemoteLogService.class new file mode 100644 index 0000000000000000000000000000000000000000..e3ff2f854cfa1976ee4f8961c0eb62ceb2f3386d GIT binary patch literal 1241 zcmcIk$!-%t5Un;&9NXY*7zn!%2XY84B$k5_5j}!kI z2R?w0LR8z9okWg6k#d-=y56hx&F?=ye*wTtcwB*!fTs~HK+1*{#ap^~XG1G(2f#K;S%I5iAz0=_-#EFy|2Q`*Sh$nE85*|XJ|v-G^x zX3*N6Bbg#2BO|gXr_gRoK<(p6gt^ybTm`BEHs>6(69Ltp9vI~divsA%(s_HTfL)># zm1(`>9JjiK@jAn=+Ub6Z?~Ng^#wiPU)ge2OE)V4*9|Bo!_N+#PQzzcb-$+CsZ+7M%EKc z*^c8iia6iKbS<>eCLt@}`@hD)n=y61)PmTneHPbR79ijn|0e)Sto literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/RemoteUserService.class b/four-api-system/target/classes/com/four/system/api/RemoteUserService.class new file mode 100644 index 0000000000000000000000000000000000000000..d6ee1a9b1c435713591efbdf00968ed61c309173 GIT binary patch literal 1311 zcmb_c%We}f6ul0#X&PwLLR-pPNJwQ-ETjU9R7eyNs1!t$h<3rsnYlB#_1MAoq(q1x zW5EaTQHbkFn+NS80v0oVU7zE7&b5F3`u+m|cHn*)N(>%GCgX|8Eq4RwG2@~qc^fn1 z@q&MYK}uX-b$U;&(Az+jwq>< z8OHFPyWd}HunnzAJVv`0I|{cL9Lmhhhrgq4DhPwWe4ObnjSjM2u=IXeFqMNGPo z&51SHwxcSED3O}QR8ptPyKJ~OSa3S=sYJvP8mCJ;8|BAdjQI~thC=|Nz z|LM#cwTzoEd1+|wnKBG!2Rapd&%^_gda+Ze+>nZtUO#scABPLZ;K_x@jFib^ZhEK_ zq#MK=;r~iW)Si$lkwznS*&6mBR=YphE2utuNA7{Rqs#6}U=s8zq_u3sncp)YOLE y6#`g=Ya@W`BY?FKPynnK0ILCDgOJ91iSR~2yIJfCJ8lxvEeE#)%^kQK!M)!Vft#8D literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysDept.class b/four-api-system/target/classes/com/four/system/api/domain/SysDept.class new file mode 100644 index 0000000000000000000000000000000000000000..ee90badc65a96ddfb323c6c3b6456ca324bb8f93 GIT binary patch literal 4932 zcmb7I{d*ME6@Din$*>F+0|}soBBCUrvV3W=p|tsIqf4OXqte>aNiuE*cW1-yED&lx zfLiTSqt;@ft+t{TQ2{|spc_8={q=VclKchztxw-`XLd6gXD#wP>^*bux#zs^x#!$_ z;NSl(TnDfX*J7wZWepY>s6w@drol`){$wVfjZ;Wx91dA4e#jb#4`tG(?ZjKnoYmpD zwmYh!dWY@U?oJJr4UPRZ&^0XGZyq$`dDl+GTe4YmG-2o57-~?t5Q|{cV6lPE;0_II zOKx(bIoC?Z%@Mokp=UJLZjHDa^ub{}HI%g+4NDSphQ(&H*t^p}EtV3-5Y@YeN?Iw? zNyZZyC#kgR4AhI3K4Q`o^lO3|M-T5@B2ex-Pu9dX1%KyCv*2(_rlx0#^cHeJcy-Zb&3}+l= zuhBr0nz0zfbBJS*uWRjtYPDA@9%L(Qx;>tt1r>p zwJ*`t-LbEycW3 zJ88L+Taqlb4UGX0DqX~Xhk;IfmB(d{j93o!9uETX^CGa(ht_!e*!+Mu>!=rOj~IAV zuq`6CJ${PnSSd^026khQ27^m2bBVfa9&#U&j#aXy$3U-a5o^L!5<7$FbL2 z+FeT9x_QQmiK}CsYB&mqsMW>PPP+{L5jx3_43(TbZQ%PwCw>0BjvvyAr&V-v)WET#6Hm`u z*@hn*ct$Mfu3uWLiky|T%~ZdY&Dj~Jud7{y_6PyCWgOPEIsxY9Drjl2GE@OI_VbXaQOskeF24e)TNm8oXRd5o`B9;T5yfQX({MyYch3R(+8t(mMb3OJEi>4~mwo|DNg`#;_#MK%agJx%6xiM8Z z;~AfscxL9tvs*Xayz=hU`IFP<&S+RQpHlDW$b4E7r(%U_xc`$;kz{v1l_Ibew@zK3 zeycEhx-eCEaXvG#I9J&9!B7|LT4F6n=oPcDT0~YeM^8+DI5~Y{eCGYvKF(_M<^U_5 zn^nO}#>kso_FPo?6L8(^u?y1|F5PeN*MeCzz1)2A

n%JCZ}Hh37@6Q#?)R9!^6y?7OtCU3jsB=l`1>&3z- z*=d%z*Uzs$=7V2>5Bn!oQol{NVl>vnUTx6ow57fczjfLu2ZMWfBUUiXi*Xlzf@h)O zIet~(r~J#lNy+St)W~K?jqG&P$mT|k>|E5yc14YBQq;)SM2+l6)W{x0jco4d=VwZO zo^$MRP|e>l&g?`bC16R@WoS*4sM&iN3&#<=q_kh)uk@lIwguRZ7bzK@K3>Al`K8Gl z?%RrU6kAnIA7RNw3Kb9o;tJRi*j!cG{4##wZ{A65aa7&3VH``s?pp}CRavO_w0sL< zUBV`g`C$9Df{xU!$aRdmP4j!)@b1))zhk-m10puh%t!AiC(af)M_%(h*ORsj}HT<>M+<8!KTZAl~NV3Y}9;P!4p^;274d^tcJIvqqa5-Ovrwi&~*v_VqNpA5E$uOlpjzUMNFKZfqgN_M5-q z0^JZM^>PF$4Hu(mkw89-2C_K}6(*(XUf%e+3QRosOL1C8&U#IYx2z?a#MffI#Z;9|73j0JDpfD)HlN6F7 z?5FUQ2o8l25poprB8*b_o(Mmn@FNNnI6fD$PTWaw1rnIVa$Ln4Ttg$SV+(Ge8Gl4O u{)AolGvBqpU?2X9Vf+mT@OK=+KX4rXWRvtSQZEETK33`^CTY0>SN{i}cuf2N literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysDictData.class b/four-api-system/target/classes/com/four/system/api/domain/SysDictData.class new file mode 100644 index 0000000000000000000000000000000000000000..3eebed0abe16ab54513072a86982ef5976ea4918 GIT binary patch literal 4758 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 literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysLogininfor.class b/four-api-system/target/classes/com/four/system/api/domain/SysLogininfor.class new file mode 100644 index 0000000000000000000000000000000000000000..b3d34f6f9be119047854890e07fdfc4678b37174 GIT binary patch literal 2377 zcma)-O>YxN7{~vU7n?XXkQbmyTS`?ZNg!;XRJ3_(f|E23PD=CQO6{TA*n?T>-HmqE zklg4EaY+xAa%t5|TX8}`N{Pgw-1|Ko!k4J}AA7MKvr*&2&dl@rn`fRG|MTyQzX4pw zH!(D!If|AzS`iT#$hx+1$1QpWC${Tw@TBoTt{OSlHZ8}vX(~DG_?EvR5E-=`%O4kL z?(5IA;TYPYh{e&4xIkYuklIkbv<-93dJ|)5L#5q3eVse5$1r+K#U@v1jL*` zBI!EJ=lB`3P?W7Ks{RRqp2Z@|WXp`Dtkr^?bR3shbX5Wu)79$Km)We^7}M)nSzy){ zr@Z4x>BVMgbC*@1xUjsjM#gJL3vxc`7K*l`eHbsgurfcrm`V!7U;X@K@6qo5&Y$JL zkynqO?>+pH`}Cxl+`_+%vO3D0WcYuI9L&aXs7gHOiXl)6@~@+Td?+ets~QJ2yK! zY}><%MT+k~effIp>E71!*IPRRtq-i6e>XBQ9#j~y91o@vjde=8Io9Mv+H&MV(O#9_ zvdOCJUU9QLHIrw@bs%iiaVS z?F_L}?c(kOL4rP}5yRAsPSpnrY;-71vs7;LO5*BVQy6&*t7fBNVoQ85vU0{M7yQ8OzM^k5&obpW(n}UhrKE~tNnq$mH=wS0 zqgWBRa3n7h)tVk3@{%{PX`<-GS$qJ2b6ho1-lU%@u0P_sljC_xE+~AAixPe4=ZY^+ zpl>hhNuV%51s|F~p~t}S5-uwYQp-2zZMQ2_@a1`1VNk&*C{Uc`YKZfz3fCC8S!etN z*Qf9)ZfH@0IzH9>enxDAqu|&&unY05ysyvs)oS24hWXVyqya`S%28kp3t5@hTUkjm)_OoxJWG=fZqg3N@2bTop@5ai24Kq}oNs1K`1cO%HHP>|Vh zknTp1+XVUg5Rgja3Zz0o&NPCogo4b4gPdsu`IaEx9RgChC<3>T4(XBJMv(7ALFTa# i)+4=*AUT4_LqIAQvk707ug7gx4u~=8B9@Vv==l$m{n6|I literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysOperLog.class b/four-api-system/target/classes/com/four/system/api/domain/SysOperLog.class new file mode 100644 index 0000000000000000000000000000000000000000..936e37035120671d4cec48c98737d7054e121d60 GIT binary patch literal 5220 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 literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysUser.class b/four-api-system/target/classes/com/four/system/api/domain/SysUser.class new file mode 100644 index 0000000000000000000000000000000000000000..2ca9a72cacb3bcd0793bf8884b2373556fc7dafb GIT binary patch literal 7885 zcmb7J33yc16+U;e%uDhNkgy0MvP7~7ObCKN2quJ3#wLN1KoQ&0N#+?wW^>*I5^Gx! zt+*hx1yQ6fwE`+qPz*8P(nZ_aMcdl1)wWhElZ3X~)-Kv=t^axVP3Gn0jfQ+*^3J>G z+;jhP?mf$WdH#c*r-#y={@_B;3aGR$-5^k%^g|>W^M$kw>?tot74+X-43QO#ArR#F3 zfC}9-TBR{GR#5(6MS^mI(6`1HY}X8&mod(BRT|GAv;A5$?)CG~c`8k$^93p4KfGPn2LrT=A>zgAn1K@0xDhxS2?u)nUJoRFg=JJr+ zuLYL{eQi8;iAwX0v0$Vv5cWoSY@te(w8(G;#+LfxFwXRNdpr>I@Q7jBVwEnXYC)Oo z7ePh!AH9i7A!W>4qEam_h4ryWP}2u1uMg-_Xqif%pyfczLS8?_MqOd?u(9oo_A-?| zX~;z*IyT3!v_YjtW5eWJH?0&@9*MQ#RQXyrXy#$njRQ2t)6yOY`n8y+IU=`hiG0tY zRn+9BW|dac8bPy$J-;d58Dy6=tgdhNuCMnt)~#=9zP!E;80ybX3C{HjTFbF^xu81h zXrNhT&I=oV$@r+GV>B=NFJ~LjwLX(*hQ0Xe#h!`r ztWqR7qtT31g{CnprjpJq1Fcx<;ihFgF|ACapuE z89e$WmA=fQ?9Cb@E*0`H<2seLF@q7WG^10Y3TAypr5lrTnv57#Xf88uR_PXIrq*PMh zL6r_A^+`FY?;&_MhP)Wt$g3V!=@Hh(u3cq}Ds(9`j;eHw9z}jI+{F23Iu61xG7z8X z<0?JQT9vpN^9WZ&LBJPWqs8<zV70^c^_{ZtqRE^zQEgjJ|uf z4hZ*dIhfe~Ft!0F&<~$)(qeHfR@V^~G`hU1Z}*8Av#SyhJT{}Es(1fGefQuvsfq4g ztmNjd-Yw8Gs=TWAk^2+f-7L6uKOBk}?%ls7vFkR8&Wj?DUAI;uF0gWX_jaAxdmQy> zbHE?pkX^ml++@n-Q@tz_3;E!|!cP3mY-pJ2_fKBFd|@cGP{&r649{gcb|q_*Y%5IP zC*6~aGLAD`6OW_CQMi=Kyf#8^QUCFK`j6j#x~B)|gYXSELOD%=wlK*4F#yFJIQh3WWs{i-_obvQW6@Ro*jgj~g^vN4x*tyaKtHRUWJ$(=2 zWSQ1U*2h@K=y{vvDJ}Zw<&DaUwa3Wl@4fd_;?zzUgHY|e?+E+00{bGFL)V>a^{Rq( z4RtȄfaWa!-4vn@N4kGYm&j!?n?>bE?TvSg!5vy@q-B}W!!lrC`0S}b48@{244 zj-}!z4}PlP@>aTy>70g(E&0MRJdGxq=Wt)bv5KG@T*i$KS|@55j9` z=C#KT&Hy;SW_&I%&+6H($x6AO;Z==ZzObZpNH;G%J0LQ;WQask%}Uwo%LxN7MvGu9 zAU98Hf>0AKsIA(v04F!qyiLyHiyvOS;jk8~4Pw_d-7Th~M;~Y*tXaoix-IqAEs6wP zIILN~lB&~gQJn4qJ!CabA;{SLpebm6TnK?enm}E2f&_Kr%|%b(7k6pApTzq(JWo*u zJ*m@E^t49L(0Ay&I(-j9xXYSC1%{A|g}zVEYV;ia0DN3mO@5xi7tH@57`X8cW&8*X z++~L{o(BV0+M$degMmA($ry>}DU4u^pU_Wr`Wa~4a1E1itu>yw$qto%fu&!BG%mG< z6fUx+l*O)}OS^snIb3Q@{zPNVOkVSs^wLuL75!SL-=rjQt2HGr!SiMOzH$Y*s*?`= zE&WcX-<#qCqp$MlA5uzi#l^(e3}~-odE90V8n;#Bi5n`OrI5j=6#V@o-sa#b@XRX1 zz8*8g-oRh}>O#1%Wzu>&4T|>{<4B)kYw3hR#0})InieH1EO#Gn{6(FR9A{R4m&n}D)yV5CVQKo47h zWDfwz9sn|e&X_^=D`Ij7#m6bkA0- zcU>Cy$S4+kzXfvMdn=F$b|BjwfN-9eg#GyoEO}F>x9G3X^fxd4o!<7+KX~Y$^e@OD zmy9MSrl5b*JEj{3ZS(}YB|BirZD}l#X+`ke-ocVdc1!l8v7{K2O-tUT|45VmI~4VM zhDlS&1(T9ePS(8#4evW!H_2|@K3I2G8tY^>75uTm!MZ7S>+VZq9q-fsq){IXGV1@> zCmd?tCuvkt%4U=)Cxmb|YKq;c12F1f8lz;w7yPBf!Kfm;QHRqQH3kM*&YW19<^JUQ7doi#`Lv z*D(hm<#r%1IRa6fft1^UybK_(qyZwk4#8jJ9DvNR19{aENRBg*Id&j#0LbYyK)AtS zkKp5<1CV)kApMR&a-D(9vjce(K;B9NM0Qw$zco4lSzrh9wj+={!R-r&+@O-Nzz*ac z0C_hJ5ZTHJ{sQO#q{{0sE3Ho%wI<%};bkX{PRuFzB+CXezA_yYHL=?o;OvFL7GtmK}lZk6Ve36MQ zAht4bJ%}5a*bd?*CT<0>gNa=rzRJWN5PO-}2Vy@H_kg&MiEn{8z{G~G+C5WshEu~KNVCd=HNep7gK|ni+{4sqxIqv+5qdX77OSa zv5>ZjO1f1nqCKLD?iP#bptzKdifZZ-HS`2@rfx$$X2b6ilZ>N&0k)m+&t8|9BBqH8 NtH+D!c$QR;{}8EgiZ}oO literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory$1.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f095a0b771a1a8da6dd6030dbc074570b5e7050c GIT binary patch literal 1570 zcmb_c+fEZv6kVs(4%9))-CF^*Xj?7=A|e#gNF*^S5-B0^@pO7x2IkVtOhLZD#1HV< z2Yr_W3K8Q6_#J5c3gezqIujupiA_3t&zXJJUT5!h_Sc`Ez5uv~$1MnfAFZO0Xc!poXc(@4p6BYu!ts~HI77r;)11T@L1fQ` zk@1)`%V>n%33tu5ws>9_4BgpvzR4Axnel$!0H$*lRC9j$0xGaa9u)NMj!eqi_fERAckm3xQoJZ zc!>_(l{}3`FzvV@{`cZqex&-!fhFMkYtEA8bFR=nTl%JLMd1V*Gy%ZAzb8| z&MqEdwntNNs?jud@K^<8HSdeRx-I;u_CU=7@DPN3%k$%>;%%Ujx4lh*3}N)VHUms#^|KZBe*uRzU(mOg1VLNcGo|BjX|H zUPn}0aF^;f7Zh_qG-n>f=ULY((U6~+rm*LA?l{8101YD<3@LfXTWNAdw)C|$T z4MSvy$(twJYbe}4J`;53RlQs~prZ(sm} z48tq-ZQJziz%`euE8I~GgGDd!)I399zEH^^jf@7}zz__EGmfa6HPMu2xEd;6H|>UJ z)@(-!xoTeHb)op8=krC|_p7#ZYcbv-C||e?*^-d18Tz%;D`rW!E|*psTN!fePab^x z{BHf}qwf!&ZLHn@@%ZKU=dU*2zPNDro{nK`*N`DN%j=$G$N^!@o`kX;`xw_25 z&~|AunlF?(R%Ioh5;_6kPOrL?$e2tSS71a(Xg9g?!WXn zbV5fCd!rESV_3?U{tLxQc=bmMa!jX?O&U0WgA_|ga$Auo^GQ|->z-G40$Jwrw&!q5 z#}p20m^P3{fnmpH`ThhtLy?F>%P^I^bHTU6&?->(8w@k+u z&1F+Gcu?b>8<<^L)xRK?iQBf47w{|1dX>xTaXwI@IksQ1r5DZHi~Z`R7gET2QvPcW zTMQZ1$+)qe;xiPIoRd0tGP0dP4C$idx1U<3OayJ!ltibIfNtBys{NZh#hyI7Lpx8* z^fEnZr}cCh_I7MGDSj*>!LajMGf-ZgSG>?8c`pWmP`2_!KBS9(&ekFUE^XB&beo zB{w3>@%UUDlMrwMC&7j<68fn&`f;*}P7Tfw^8OB1?A!K)Z-Z@|G*#o@#3ox_1DS04 o0}j1`7Lj8Ka--z@8Cpx>EaqDMIh>EKBdZJ4TlDKR&QVX_FDd+(vH$=8 literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory$1.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory$1.class new file mode 100644 index 0000000000000000000000000000000000000000..98e31e1eb89402c3d7775a8541187adc8dabc997 GIT binary patch literal 2039 zcmcIlT~8B16g>mTLS3YM_-zHXXsI77ii#|tf}$n`5^G4*_%LjTvbxuyx#4g(Yux@dZAPG@LBkFmjfgTtOF3f` z4}=wvras%Xg8_!>MCZ7MW`^CRq;%lfZgz0Sb~3_?pa~6i*vYVWW%hiPI*YCg2zv)#uyLIfrUP9*6)56U#oJ^EyD?pl^>!yk{I9pNwU)P#-NQORrd+}-Y^V8pa(r|(y9zvAWQCL4|;mz6>ZErNO zwQ4DIICReJ9H(s!$qeB(rfgS?&g3S9ce_wS%_(VdXPkSs`dyr?QANwpvn3JnE|Z}? zZD(B`%y>kq`FvL04u-pxw^ejMJ?D>23y(6*vVDZb6FOJv;D|CpjuzK59IGgOJrR|x zPq$im-n^caLH;+zePwimQaXaW<^XMDN6{_1qVA;h818Q-feb4qZ^^d?@~s5Hkle(& zQZA|W{-?N&EQ+M_M>cG$CKwBE&mZ0Ql^4DC;kv{db5fMzujE1WW-C;46UBk`V zxsG96r-HFO!2@FMFYgg$*R7&|p~~VNC-3x|t}DDDhx@+p(N2wC2g7kxMWd?U12odh zhu%lk^lijR$~Z;Qka{(#ndI>Wu;hsaXvrmPe@|0YFz8uJFrb!tnx4C8PA%@j85&ij zAgRGoT!kn_-8e^)0=`G10*-w`)14)>G`B8dS8^WOBKA?Vi1rUS@-DxyMAMe1X)i1c zX<|5!3waqa^xz@^7YKW4&P3lvgq{CD*s%d&KL#ogULs+a^OCP%kj5Ia?;37U6rpV8 H4SjwBe-TbQ literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..a2515e15f9f60e1fed517a6e8b31111d9bbd6e5d GIT binary patch literal 1512 zcmbVMTTc@~6#k|_w_R5*m5Wess7MRSq9Q6q6GB2_QqfpL;^VSR*M;p)GrNTlzQxP_nkB6=kKrI0Zd?8MGP$pS~avG z&d|ARtQxvwxR!ozahaPwLwwqHZT~hyOD4OJL;^_#s)i%b7$!_n(u<-Zb#LACc}X|Q zwq7($U&wX+0WS%k=Y=(AIL@MBuFQoSgyaZ|A(a=>(mkg*v8q+E7E!3l=R!^m;| zvWhfL1pzqCFrUdE1|%2psip+ErBb{GHJrsc3ZyBy;gck{qMRbuO>eG6vB2f3ZStIo zAzV-}tRaIeL*GH|YEe#77{a(R3`MV;bqvqTWgEkD0li`=$cy&&V+KpRbe_xqKKV17(?MI17ffgL!qa)qiYz6tAX?|CPTv zhNNH5ww|WaGi0Nbqbk?4v6?*$iD}cRzOrP2_!)jh5*rbLuG)s8{hvD1O=&g+_BIhy z3-p*xK4%B-=w!|0fZSsN1&00y71y^*e8Ki?(sssmg>U$_a7o&crjAmLkX-odWvRn7 z11XGAtAz$+I!-edyZ~y0!}kd+M*Z=3P*O)nKceFcdRp)e=|>}@pKx-E_Cma%Hi9Zd zJGl{H_J-%Gn1q1KxB}KWL+Dql=;LG)oQjVS@|ikT=v!CBw|EsNL1p+avB7<>fn+N2 o8Ry?a3COVsxo&d)8m+}JiR=6Q4crW_BdaOubM&h;PE$|cAKPV?9smFU literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory$1.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory$1.class new file mode 100644 index 0000000000000000000000000000000000000000..174ccad90ef0be4754ebb5c923463097d752bae9 GIT binary patch literal 1949 zcmb_d>rN9v6#k|lTk0a^B3=uqMcbmTc$Xq72ue~Vp@=d58n#1O-0qOwEru5`{xJH- z_yn5pQ=@><#0T&_P@lqhrp0cB;)U3xozt^(&i9=&-<QpUFlJ=YHM~X77X^dQTgD7Ged#V56QUq}amN$xD7WotZax?-KZ*A-H2AZY7e7TQ zGTX|LR!qV=8WCY=THtovpLOL!K5Ywz-I+PQzzv%_d1LaYI~{?JCJnoEG$YCo4fc#r z&k55fQUjJ_`GX8~iR6@qR)#&nrmXK;PJXCp**W1x(1NBgb~Chnd%C*z?8VpTOJ5$Z zuDyKo?cJ+>^>mMpz1T-N`TV?aattRDRjkU%(#cJ(_54Kk01j%1>F7ikp#(fC1u;bO z!oMXvkLRiA_Qd9Fl%@rTbR1SW!oDoSMi57jhNC);A;A!<8~_;w=@_PTg^`m5ZaKyT zL;Vc5Y=$#6`TsUH9Y%_{e|fvK_UOqk9nx@|p{EjDrJg`FS>Y~NCRH|`*rrCRx?Aa5 zIyprp4a*!QZq8VaxLqtv3wN@toYssqxjn^QOZ{JW)+?B==?iXD` z-ASjWZpD~0BN;|&w6%(NMJSbC)jA|X2p1`(!wUq^x;dV7=+QM*-L(G);6Tk@6sW7V zk&$`JQ3a+4iC5GWd5dO)8gd~y6SU(bS;OiDqCBbIWw6xoWoW5Y?0iG65DfZlpfsT2cZz;H$ftt) zaGF+SsgyK|$POV&)>)h*OC`Qft4bXEh?aY+Xlrd>K}YHxv=!_pYX#l!apZL=Fo5YQ z!E~1cD=;yf$AuD&7%q|(S_iyDzJ8>)0!;n|V9yqS1GroRaFB>yDN(+PYqZv52-k6g LtO)H^y`j$!7icJ3 literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..45cb28afbd6e7629e771722ab62f916b41f4731b GIT binary patch literal 1519 zcmbVMTTj$L6#izpbhlJ4%N-O&L3TkY2#B(TgpiP!tYQF3d@N<%-`{=!7{|1V7^)OhYp6jj zL*s_AW$2FKTKdB31~+|%+G*Rh{TYU;RC*)=NM?n!bkE6+Z|GTJSzKn~sAuT@_3HiM z^ZmouFArY4Iof?j(}TBrN1xtJJ$b645lsq`8k*6<&|LO+d0mQaW7Xjds>S{L-17{J zCM~ISwrsWJOWU>J^Dsf zbfYH-!DWVpRQ6mbnTS^>T99KZg{)V@Ra~Q3nvxqni82#q6|t^(bvckrTyEJW$f zbp-<&Qb;qjpO)_=&pWNnu}DCSqWTn_Vr63sN66+_y=ytG*DuiGAltRm%q=5U4~ z;g>V6wW9b8=_u!@&gG0OWe`Jr+H^`!EwMxd4ZkRfP9XwavJF-HKY6Ar@;n>b8Dgd` z(UUg$yd6BIp0dp;#fJkD44sQb*SGV0#rABHch+@00fc>vDOV8QeoJeXN8&LN>vv+Cf6TQpO5>Yl`?*Tf&J`HU3Mi_tgoFf#0i;u literal 0 HcmV?d00001 diff --git a/four-api-system/target/classes/com/four/system/api/model/LoginUser.class b/four-api-system/target/classes/com/four/system/api/model/LoginUser.class new file mode 100644 index 0000000000000000000000000000000000000000..149c2a9d7fcaa9677d6f51ffd0f1fa864ef1d3ba GIT binary patch literal 2678 zcma)+-*XdH6vxj^o2E^-g{Gxw6|uIIw1^8LptcsZEm{a|A#Fz=eAp(}cyY5EHX9Iq z(Fb4j!595MbOweQAN&LSqZq&E?j}txcO5d5y}!;m_jAv$f1m&T4-vgb2Sv)!P=SUW z%F~FTllQ%cp6h!-!`(f)FKe-&ku?>lcwNv?dHHaRMro`-MTf@85wuVXo9@?PCvw}5 z+p%oAUQ4;nur7VK5;jzD(3X*)d>no&13{(AvGr;ksi3jS_9h)VK__uh2hyqzh(5VW zm`ar#n&vAk;d} z;m}!nQ_y%zMorajt1xH_I+5JpiIwkGWvn6Ja%h1i^HJ!_HtU{qXo=1XD&XnKI~OZ9 zchtkCrvkT{NUauVSFuaq{u3*tl1 z@5np?$3KB*S5+hM;!XtJg+b`GJ|CvOUSAb7yn*2G3soR@I?W>)?I%~4Dq#&bd$=Dc z>E>|!jeI)Z8OBE>u)@JyTwO5daeHp2Vs0ivr7scoU4UJ2??b16Fh@Kmazn z0@M9Q^f{XtPfc)^V3o=zD+gyfH90E;IXLWFPT+K_mo)G^j{DaPx2>}$;pomMvA@@! zLQ`GxUJ}8L=3YjOCUNP2u~PcVo-Kal>|nqix4J=FGNi4yumuj+J+THE@1vP55 z@kjsBbF>aUqB-ah{XmcC0D45p>k)MheOJ#fK_AsTutqK8Y#MuLg!o>@%Ec%!=2xDP z_)Dw4i!UD&%wEx7Er3>f6)Qp4=sLcG%1@~9Ck}ITtbD_&{62kkS_r8Wd;am27`QT^~j6~@|6|j6T3%dOpqgh)G|OgH5uenE68aRq+tcw zu!Ed7L41HTGeEdD7-Z8LnmH5XffZ!S9-285Pw0#Z z@`D8=sp!vPWSefKM)olFs^<&?4e8oTs^>=l{geTebcx&0U@)$yvvdiwX5c literal 0 HcmV?d00001 diff --git a/four-api-system/target/four-api-system-3.6.3.jar b/four-api-system/target/four-api-system-3.6.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..f292d97e64f8d3ec8acb8b8754f0b65cf2d91e4f GIT binary patch literal 27245 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 a7@MmCG2q*$;hU)8|G432F + + + com.four + four + 3.6.3 + + 4.0.0 + 3.6.3 + + four-api-system + + + four-api + pom + + + four-api系统接口 + + +