commit b05ad3dc20a2d362c6349756bff73f79954c0c7d
Author: TangZhaoZhen <207525215@qq.com>
Date: Mon Oct 16 20:48:25 2023 +0800
初始化
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 0000000..930f2e4
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/RemoteFileService.class differ
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 0000000..e3ff2f8
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/RemoteLogService.class differ
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 0000000..d6ee1a9
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/RemoteUserService.class differ
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 0000000..ee90bad
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysDept.class differ
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 0000000..3eebed0
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysDictData.class differ
diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysDictType.class b/four-api-system/target/classes/com/four/system/api/domain/SysDictType.class
new file mode 100644
index 0000000..f134f4f
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysDictType.class differ
diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysFile.class b/four-api-system/target/classes/com/four/system/api/domain/SysFile.class
new file mode 100644
index 0000000..56ac940
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysFile.class differ
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 0000000..b3d34f6
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysLogininfor.class differ
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 0000000..936e370
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysOperLog.class differ
diff --git a/four-api-system/target/classes/com/four/system/api/domain/SysRole.class b/four-api-system/target/classes/com/four/system/api/domain/SysRole.class
new file mode 100644
index 0000000..f3d3c69
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysRole.class differ
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 0000000..2ca9a72
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/domain/SysUser.class differ
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 0000000..f095a0b
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory$1.class differ
diff --git a/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory.class b/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory.class
new file mode 100644
index 0000000..82f468c
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteFileFallbackFactory.class differ
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 0000000..98e31e1
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory$1.class differ
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 0000000..a2515e1
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteLogFallbackFactory.class differ
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 0000000..174ccad
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory$1.class differ
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 0000000..45cb28a
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/factory/RemoteUserFallbackFactory.class differ
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 0000000..149c2a9
Binary files /dev/null and b/four-api-system/target/classes/com/four/system/api/model/LoginUser.class differ
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 0000000..f292d97
Binary files /dev/null and b/four-api-system/target/four-api-system-3.6.3.jar differ
diff --git a/four-api-system/target/maven-archiver/pom.properties b/four-api-system/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..84d3318
--- /dev/null
+++ b/four-api-system/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Oct 16 20:46:13 CST 2023
+groupId=com.four
+artifactId=four-api-system
+version=3.6.3
diff --git a/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..bbea372
--- /dev/null
+++ b/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,18 @@
+com\four\system\api\factory\RemoteLogFallbackFactory.class
+com\four\system\api\factory\RemoteLogFallbackFactory$1.class
+com\four\system\api\domain\SysDictData.class
+com\four\system\api\domain\SysFile.class
+com\four\system\api\factory\RemoteFileFallbackFactory$1.class
+com\four\system\api\factory\RemoteFileFallbackFactory.class
+com\four\system\api\RemoteLogService.class
+com\four\system\api\domain\SysDictType.class
+com\four\system\api\factory\RemoteUserFallbackFactory.class
+com\four\system\api\domain\SysDept.class
+com\four\system\api\domain\SysOperLog.class
+com\four\system\api\domain\SysLogininfor.class
+com\four\system\api\domain\SysUser.class
+com\four\system\api\RemoteFileService.class
+com\four\system\api\model\LoginUser.class
+com\four\system\api\factory\RemoteUserFallbackFactory$1.class
+com\four\system\api\domain\SysRole.class
+com\four\system\api\RemoteUserService.class
diff --git a/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..5ddb2db
--- /dev/null
+++ b/four-api-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,15 @@
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysRole.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\factory\RemoteUserFallbackFactory.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysLogininfor.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysDictType.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysUser.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\RemoteUserService.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysFile.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\factory\RemoteLogFallbackFactory.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysOperLog.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\RemoteLogService.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysDictData.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\RemoteFileService.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\domain\SysDept.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\model\LoginUser.java
+D:\ruoyi\Four\four-api\four-api-system\src\main\java\com\four\system\api\factory\RemoteFileFallbackFactory.java
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..47e17d0
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ com.four
+ four
+ 3.6.3
+
+ 4.0.0
+ 3.6.3
+
+ four-api-system
+
+
+ four-api
+ pom
+
+
+ four-api系统接口
+
+
+