From 34d18c08f04de78eccb42b88b7484b0531d263ff Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期一, 12 八月 2024 20:13:19 +0800
Subject: [PATCH] 新增加系统管理部分功能接口

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java                                 |   64 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java                                      |   23 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java                                         |    9 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java                                       |   12 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java                                           |  484 +++++-----
 ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml                                                   |    9 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java                                       |   12 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java                            |   18 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java                                        |   24 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java                                     |   11 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java                                      |   77 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java                              |   19 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java                            |   69 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                           |    2 
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java                                                        |    8 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java                                 |   11 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java                                              |   91 ++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java                         |    8 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java                                 |   12 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java                                   |   40 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java                               |   69 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java                                     |   11 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java                              |   12 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java                            |   10 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java                                 |  132 +-
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java                          |   28 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java                                           |   21 
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java                                                           |   53 
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml                                              |   35 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java                                       |   10 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java                              |  208 ++--
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml                                             |   34 
 ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java                                  |   10 
 ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 
 /dev/null                                                                                                                      |   54 -
 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java                                                        |   32 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java                                     |   32 
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java                                                       |  162 +++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java                                |   63 +
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java                            |    6 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml                                                     |   14 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java                             |   66 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java                               |   73 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java                                         |   21 
 ruoyi-api/ruoyi-api-system/pom.xml                                                                                             |    8 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java                                            |   11 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java                               |   26 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java                                  |  252 +++---
 48 files changed, 1,682 insertions(+), 775 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
index 22549a5..9742f77 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -1,6 +1,7 @@
 package com.ruoyi.account.api.factory;
 
 import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.common.core.domain.R;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,6 +29,11 @@
             public R<List<Long>> getUserIdsByPhone(String phone) {
                 return R.fail("根据手机号查询用户ids失败:"+throwable.getMessage());
             }
+    
+            @Override
+            public R<TAppUser> getUserById(Long id) {
+                return R.fail("根据id查询用户失败:"+throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index 8d4d1c7..b39f099 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -1,10 +1,12 @@
 package com.ruoyi.account.api.feignClient;
 
+import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.account.api.factory.AppUserFallbackFactory;
 import com.ruoyi.common.core.domain.R;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -19,5 +21,13 @@
     @ApiOperation(value = "管理后台-根据手机号查询用户ids", tags = {"管理后台-活动费用统计"})
     @PostMapping(value = "/t-app-user/user/getUserIdsByPhone")
     public R<List<Long>> getUserIdsByPhone(@RequestParam("phone") String phone);
-
+    
+    
+    /**
+     * 根据id获取用户
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/user/getUserById")
+    R<TAppUser> getUserById(Long id);
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java
index c6527d9..7bc1399 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java
@@ -1,6 +1,7 @@
 package com.ruoyi.other.api.factory;
 
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.TEvaluationTagClient;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
@@ -26,9 +27,14 @@
         return new TEvaluationTagClient() {
 
             @Override
-            public R<List<TEvaluationTagVO>> getTagList() {
+            public R<List<TEvaluationTagVO>> getTagList(Integer type) {
                 return R.fail("获取标签列表:" + throwable.getMessage());
             }
+    
+            @Override
+            public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds) {
+                return R.fail("根据id集合获取数据失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java
index 92c209d..4d7e87a 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.factory.RoleSiteFallbackFactory;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -24,5 +25,14 @@
 	 * @return
 	 */
 	@PostMapping("/t-evaluation-tag/getTagList")
-	R<List<TEvaluationTagVO>> getTagList();
+	R<List<TEvaluationTagVO>> getTagList(Integer type);
+	
+	
+	/**
+	 * 根据id集合获取数据
+	 * @param tagIds
+	 * @return
+	 */
+	@GetMapping("/t-evaluation-tag/getListByIds")
+	R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds);
 }
diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml
index a9f9845..723a3c0 100644
--- a/ruoyi-api/ruoyi-api-system/pom.xml
+++ b/ruoyi-api/ruoyi-api-system/pom.xml
@@ -28,7 +28,13 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        
+	    <dependency>
+		    <groupId>com.ruoyi</groupId>
+		    <artifactId>ruoyi-modules-system</artifactId>
+		    <version>3.6.2</version>
+		    <scope>compile</scope>
+	    </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java
index 525eda3..dc247b3 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java
@@ -28,14 +28,5 @@
      */
     @PostMapping("/operlog")
     public R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception;
-
-    /**
-     * 保存访问记录
-     *
-     * @param sysLogininfor 访问实体
-     * @param source 请求来源
-     * @return 结果
-     */
-    @PostMapping("/logininfor")
-    public R<Boolean> saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java
index a3c350f..1e04af6 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.api.domain;
 
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.annotation.Excel;
 import com.ruoyi.common.core.annotation.Excel.ColumnType;
@@ -8,248 +9,247 @@
 
 /**
  * 操作日志记录表 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;
-    }
+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/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java
index 6acb505..599d97a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java
@@ -20,8 +20,7 @@
     private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class);
 
     @Override
-    public RemoteLogService create(Throwable throwable)
-    {
+    public RemoteLogService create(Throwable throwable) {
         log.error("日志服务调用失败:{}", throwable.getMessage());
         return new RemoteLogService()
         {
@@ -30,12 +29,7 @@
             {
                 return null;
             }
-
-            @Override
-            public R<Boolean> saveLogininfor(SysLogininfor sysLogininfor, String source)
-            {
-                return null;
-            }
+            
         };
 
     }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java
new file mode 100644
index 0000000..df6782c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java
@@ -0,0 +1,28 @@
+package com.ruoyi.system.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysLoginLogClient;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.api.model.*;
+import com.ruoyi.system.domain.SysLoginLog;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class SysLoginLogFallbackFactory implements FallbackFactory<SysLoginLogClient> {
+    @Override
+    public SysLoginLogClient create(Throwable cause) {
+        return new SysLoginLogClient(){
+    
+    
+            @Override
+            public R saveLoginLog(SysLoginLog loginLog) {
+                return R.fail("添加登录日志失败!" + cause.getMessage());
+            }
+        };
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java
new file mode 100644
index 0000000..f4283ec
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.api.feignClient;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.factory.SysLoginLogFallbackFactory;
+import com.ruoyi.system.domain.SysLoginLog;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 16:30
+ */
+@FeignClient(contextId = "SysLoginLogClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysLoginLogFallbackFactory.class)
+public interface SysLoginLogClient {
+	
+	
+	/**
+	 * 添加登陆日志
+	 * @param loginLog
+	 * @return
+	 */
+	@PostMapping("/saveLoginLog")
+	R saveLoginLog(@RequestBody SysLoginLog loginLog);
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 7104897..4dfeaf3 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -3,3 +3,4 @@
 com.ruoyi.system.api.factory.RemoteFileFallbackFactory
 com.ruoyi.system.api.factory.SysUserFallbackFactory
 com.ruoyi.system.api.factory.SysRoleFallbackFactory
+com.ruoyi.system.api.factory.SysLoginLogFallbackFactory
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
index 9868d190..85ebf14 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -1,12 +1,15 @@
 package com.ruoyi.auth.controller;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysLoginLogClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.domain.SysLoginLog;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -24,6 +27,9 @@
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.model.LoginUser;
 
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.time.LocalDateTime;
 import java.util.*;
 
 /**
@@ -39,14 +45,18 @@
 
     @Autowired
     private SysLoginService sysLoginService;
-    @Autowired
+    @Resource
     private SysUserClient userClient;
+    
+    
+    
+    
+    
 
     @PostMapping("login")
-    public R<?> login(@RequestBody LoginBody form)
-    {
+    public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) {
         // 用户登录
-        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
+        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request);
         HashMap<String, Object> map = new HashMap<>();
         map.put("token",tokenService.createToken(userInfo));
         List<SysRole> roles = userInfo.getSysUser().getRoles();
@@ -62,13 +72,15 @@
         sysUser.setLoginDate(new Date());
         System.out.println("修改用户登录时间"+sysUser);
         userClient.updateSysUser(sysUser);
-        // 获取登录token
         return R.ok(map);
     }
+    
+    
+    
+    
 
     @DeleteMapping("logout")
-    public R<?> logout(HttpServletRequest request)
-    {
+    public R<?> logout(HttpServletRequest request) {
         String token = SecurityUtils.getToken(request);
         if (StringUtils.isNotEmpty(token))
         {
@@ -76,7 +88,7 @@
             // 删除用户缓存记录
             AuthUtil.logoutByToken(token);
             // 记录用户退出日志
-            sysLoginService.logout(username);
+            sysLoginService.logout(username, request);
         }
         return R.ok();
     }
@@ -95,10 +107,10 @@
     }
 
     @PostMapping("register")
-    public R<?> register(@RequestBody RegisterBody registerBody)
+    public R<?> register(@RequestBody RegisterBody registerBody, HttpServletRequest request)
     {
         // 用户注册
-        sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
+        sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request);
         return R.ok();
     }
 }
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index 431c264..acfab13 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -1,5 +1,6 @@
 package com.ruoyi.auth.service;
 
+import com.ruoyi.system.domain.SysLoginLog;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.core.constant.CacheConstants;
@@ -17,6 +18,9 @@
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.model.LoginUser;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
 
 /**
  * 登录校验方法
@@ -41,42 +45,44 @@
     /**
      * 登录
      */
-    public LoginUser login(String username, String password)
-    {
+    public LoginUser login(String username, String password, HttpServletRequest request) {
+        // 查询用户信息
+        R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
+    
+        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
+        {
+            recordLogService.recordLogininfor(request, null, username, Constants.LOGIN_FAIL_STATUS, "登录用户不存在");
+            throw new ServiceException("登录用户:" + username + " 不存在");
+        }
+        LoginUser userInfo = userResult.getData();
+        SysUser user = userResult.getData().getSysUser();
+        
         // 用户名或密码为空 错误
         if (StringUtils.isAnyBlank(username, password))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户/密码必须填写");
             throw new ServiceException("用户/密码必须填写");
         }
         // 密码如果不在指定范围内 错误
         if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
                 || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户密码不在指定范围");
             throw new ServiceException("用户密码不在指定范围");
         }
         // 用户名不在指定范围内 错误
         if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                 || username.length() > UserConstants.USERNAME_MAX_LENGTH)
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户名不在指定范围");
             throw new ServiceException("用户名不在指定范围");
         }
         // IP黑名单校验
         String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
         if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "很遗憾,访问IP已被列入系统黑名单");
             throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
-        }
-        // 查询用户信息
-        R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
-
-        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
-        {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
-            throw new ServiceException("登录用户:" + username + " 不存在");
         }
 
         if (R.FAIL == userResult.getCode())
@@ -84,32 +90,31 @@
             throw new ServiceException(userResult.getMsg());
         }
         
-        LoginUser userInfo = userResult.getData();
-        SysUser user = userResult.getData().getSysUser();
+        
         if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "对不起,您的账号已被删除");
             throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
         }
         if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员");
             throw new ServiceException("对不起,您的账号:" + username + " 已停用");
         }
-        passwordService.validate(user, password);
-        recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
+        passwordService.validate(user, password, request);
+        recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "登录成功");
         return userInfo;
     }
 
-    public void logout(String loginName)
+    public void logout(String loginName, HttpServletRequest request)
     {
-        recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");
+        recordLogService.recordLogininfor(request, null, loginName, Constants.LOGIN_SUCCESS_STATUS, "退出成功");
     }
 
     /**
      * 注册
      */
-    public void register(String username, String password)
+    public void register(String username, String password, HttpServletRequest request)
     {
         // 用户名或密码为空 错误
         if (StringUtils.isAnyBlank(username, password))
@@ -138,6 +143,6 @@
         {
             throw new ServiceException(registerResult.getMsg());
         }
-        recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
+        recordLogService.recordLogininfor(request, sysUser.getUserId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "注册成功");
     }
 }
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
index e00b1a4..1f6a419 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
@@ -10,6 +10,8 @@
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.domain.SysUser;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * 登录密码方法
  * 
@@ -39,7 +41,7 @@
         return CacheConstants.PWD_ERR_CNT_KEY + username;
     }
 
-    public void validate(SysUser user, String password)
+    public void validate(SysUser user, String password, HttpServletRequest request)
     {
         String username = user.getUserName();
 
@@ -53,14 +55,14 @@
         if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
         {
             String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime);
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg);
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS,errMsg);
             throw new ServiceException(errMsg);
         }
 
         if (!matches(user, password))
         {
             retryCount = retryCount + 1;
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount));
+            recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, String.format("密码输入错误%s次", retryCount));
             redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
             throw new ServiceException("密码错误");
         }
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java
index 7ca0f00..c4230d8 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java
@@ -1,48 +1,134 @@
 package com.ruoyi.auth.service;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import com.ruoyi.system.api.feignClient.SysLoginLogClient;
+import com.ruoyi.system.domain.SysLoginLog;
 import org.springframework.stereotype.Component;
-import com.ruoyi.common.core.constant.Constants;
-import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.ip.IpUtils;
-import com.ruoyi.system.api.RemoteLogService;
-import com.ruoyi.system.api.domain.SysLogininfor;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 记录日志方法
- * 
+ *
  * @author ruoyi
  */
 @Component
-public class SysRecordLogService
-{
-    @Autowired
-    private RemoteLogService remoteLogService;
-
-    /**
-     * 记录登录信息
-     * 
-     * @param username 用户名
-     * @param status 状态
-     * @param message 消息内容
-     * @return
-     */
-    public void recordLogininfor(String username, String status, String message)
-    {
-        SysLogininfor logininfor = new SysLogininfor();
-        logininfor.setUserName(username);
-        logininfor.setIpaddr(IpUtils.getIpAddr());
-        logininfor.setMsg(message);
-        // 日志状态
-        if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
-        {
-            logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS);
-        }
-        else if (Constants.LOGIN_FAIL.equals(status))
-        {
-            logininfor.setStatus(Constants.LOGIN_FAIL_STATUS);
-        }
-        remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER);
-    }
+public class SysRecordLogService {
+	@Resource
+	private SysLoginLogClient sysLoginLogClient;
+	
+	/**
+	 * 记录登录信息
+	 *
+	 * @param username 用户名
+	 * @param status   状态
+	 * @param message  消息内容
+	 * @return
+	 */
+	public void recordLogininfor(HttpServletRequest request, Integer userId, String username, String status, String message) {
+		Map<String, String> headerData = getHeaderData(request);
+		//添加登录日志
+		SysLoginLog loginLog = new SysLoginLog();
+		loginLog.setUserId(userId);
+		loginLog.setUsername(username);
+		loginLog.setIpAddress(headerData.get("ip"));
+		loginLog.setAddress("");// todo 待完善  https://www.juhe.cn/docs/api/id/1
+		loginLog.setBrowserType(headerData.get("browser"));
+		loginLog.setOperatingSystem(headerData.get("os"));
+		loginLog.setLoginTime(LocalDateTime.now());
+		loginLog.setLoginStatus(Integer.valueOf(status));
+		loginLog.setMessage(message);
+		sysLoginLogClient.saveLoginLog(loginLog);
+	}
+	
+	
+	public Map<String, String> getHeaderData(HttpServletRequest request) {
+		//Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
+		String browserDetails = request.getHeader("User-Agent");
+		String userAgent = browserDetails;
+		String user = userAgent.toLowerCase();
+		Map<String, String> map = new HashMap<>();
+		String os = "";
+		String browser = "";
+		if (userAgent.toLowerCase().indexOf("windows") >= 0) {
+			os = "Windows";
+		} else if (userAgent.toLowerCase().indexOf("mac") >= 0) {
+			os = "Mac";
+		} else if (userAgent.toLowerCase().indexOf("x11") >= 0) {
+			os = "Unix";
+		} else if (userAgent.toLowerCase().indexOf("android") >= 0) {
+			os = "Android";
+		} else if (userAgent.toLowerCase().indexOf("iphone") >= 0) {
+			os = "IPhone";
+		} else {
+			os = "UnKnown, More-Info: " + userAgent;
+		}
+		if (user.contains("edge")) {
+			browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
+		} else if (user.contains("msie")) {
+			String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
+			browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
+		} else if (user.contains("safari") && user.contains("version")) {
+			browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
+					+ "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
+		} else if (user.contains("opr") || user.contains("opera")) {
+			if (user.contains("opera")) {
+				browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
+						+ "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
+			} else if (user.contains("opr")) {
+				browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
+						.replace("OPR", "Opera");
+			}
+			
+		} else if (user.contains("chrome")) {
+			browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
+		} else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) ||
+				(user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) ||
+				(user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1)) {
+			browser = "Netscape-?";
+			
+		} else if (user.contains("firefox")) {
+			browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
+		} else if (user.contains("rv")) {
+			String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
+			browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1);
+		} else {
+			browser = "UnKnown, More-Info: " + userAgent;
+		}
+		
+		String ip = request.getHeader("x-forwarded-for");
+		if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
+			// 多次反向代理后会有多个ip值,第一个ip才是真实ip
+			if (ip.indexOf(",") != -1) {
+				ip = ip.split(",")[0];
+			}
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP");
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP");
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("X-Real-IP");
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr();
+		}
+		map.put("os", os);
+		map.put("browser", browser);
+		map.put("ip", ip);
+		return map;
+	}
+	
+	
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
index 1b48650..d27cec0 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
@@ -16,132 +16,132 @@
 
 /**
  * Entity基类
- * 
+ *
  * @author ruoyi
  */
-public class BaseEntity implements Serializable
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 搜索值 */
-    @JsonIgnore
-    @TableField(exist = false)
-    private String searchValue;
-
-    /** 创建者 */
-    @ApiModelProperty(value = "记录创建人,前端忽略")
-    @TableField(value = "create_by", fill = FieldFill.INSERT)
-    private String createBy;
-
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @TableField("create_time")
-    private Date createTime;
-
-    /** 更新者 */
-    @ApiModelProperty(value = "记录修改人,前端忽略")
-    //@JsonIgnore
-    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
-    private String updateBy;
-
-    /** 更新时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @TableField("update_time")
-    private Date updateTime;
-
-    /** 是否删除 1未删除 0已删除 */
-    @TableLogic
-    @Excel(name = "是否删除 0未删除 1已删除")
-    @TableField(exist = false)
-    private Boolean disabled;
-
-    /** 备注 */
-    private String remark;
-
-    /** 请求参数 */
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    @TableField(exist = false)
-    private Map<String, Object> params;
-
-    public Boolean getDisabled() {
-        return disabled;
-    }
-
-    public void setDisabled(Boolean disabled) {
-        this.disabled = disabled;
-    }
-
-    public String getSearchValue()
-    {
-        return searchValue;
-    }
-
-    public void setSearchValue(String searchValue)
-    {
-        this.searchValue = searchValue;
-    }
-
-    public String getCreateBy()
-    {
-        return createBy;
-    }
-
-    public void setCreateBy(String createBy)
-    {
-        this.createBy = createBy;
-    }
-
-    public Date getCreateTime()
-    {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime)
-    {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateBy()
-    {
-        return updateBy;
-    }
-
-    public void setUpdateBy(String updateBy)
-    {
-        this.updateBy = updateBy;
-    }
-
-    public Date getUpdateTime()
-    {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime)
-    {
-        this.updateTime = updateTime;
-    }
-
-    public String getRemark()
-    {
-        return remark;
-    }
-
-    public void setRemark(String remark)
-    {
-        this.remark = remark;
-    }
-
-    public Map<String, Object> getParams()
-    {
-        if (params == null)
-        {
-            params = new HashMap<>();
-        }
-        return params;
-    }
-
-    public void setParams(Map<String, Object> params)
-    {
-        this.params = params;
-    }
+public class BaseEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * 搜索值
+	 */
+	@JsonIgnore
+	@TableField(exist = false)
+	private String searchValue;
+	
+	/**
+	 * 创建者
+	 */
+	@ApiModelProperty(value = "记录创建人,前端忽略")
+	@TableField(value = "create_by", fill = FieldFill.INSERT)
+	private String createBy;
+	
+	/**
+	 * 创建时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@TableField("create_time")
+	private Date createTime;
+	
+	/**
+	 * 更新者
+	 */
+	@ApiModelProperty(value = "记录修改人,前端忽略")
+	//@JsonIgnore
+	@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+	private String updateBy;
+	
+	/**
+	 * 更新时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@TableField("update_time")
+	private Date updateTime;
+	
+	/**
+	 * 是否删除 1未删除 0已删除
+	 */
+	@TableLogic
+	@Excel(name = "是否删除 0未删除 1已删除")
+	@TableField(exist = false)
+	private Boolean disabled;
+	
+	/**
+	 * 备注
+	 */
+	private String remark;
+	
+	/**
+	 * 请求参数
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	@TableField(exist = false)
+	private Map<String, Object> params;
+	
+	public Boolean getDisabled() {
+		return disabled;
+	}
+	
+	public void setDisabled(Boolean disabled) {
+		this.disabled = disabled;
+	}
+	
+	public String getSearchValue() {
+		return searchValue;
+	}
+	
+	public void setSearchValue(String searchValue) {
+		this.searchValue = searchValue;
+	}
+	
+	public String getCreateBy() {
+		return createBy;
+	}
+	
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+	
+	public Date getCreateTime() {
+		return createTime;
+	}
+	
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+	
+	public String getUpdateBy() {
+		return updateBy;
+	}
+	
+	public void setUpdateBy(String updateBy) {
+		this.updateBy = updateBy;
+	}
+	
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+	
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+	
+	public String getRemark() {
+		return remark;
+	}
+	
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	
+	public Map<String, Object> getParams() {
+		if (params == null) {
+			params = new HashMap<>();
+		}
+		return params;
+	}
+	
+	public void setParams(Map<String, Object> params) {
+		this.params = params;
+	}
 }
diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java
index 83f2ef6..e44b648 100644
--- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java
+++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java
@@ -7,23 +7,23 @@
 import com.ruoyi.system.api.RemoteLogService;
 import com.ruoyi.system.api.domain.SysOperLog;
 
+import javax.annotation.Resource;
+
 /**
  * 异步调用日志服务
  * 
  * @author ruoyi
  */
 @Service
-public class AsyncLogService
-{
-    @Autowired
+public class AsyncLogService {
+    @Resource
     private RemoteLogService remoteLogService;
 
     /**
      * 保存系统日志记录
      */
     @Async
-    public void saveSysLog(SysOperLog sysOperLog) throws Exception
-    {
+    public void saveSysLog(SysOperLog sysOperLog) throws Exception {
         remoteLogService.saveLog(sysOperLog, SecurityConstants.INNER);
     }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java
new file mode 100644
index 0000000..208c975
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.domain.SysLoginLog;
+import com.ruoyi.system.service.ISysLoginLogService;
+import com.ruoyi.system.service.ISysUserService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 15:48
+ */
+@RestController
+@RequestMapping("/sysLoginLog")
+public class SysLoginLogController {
+	
+	
+	@Resource
+	private ISysLoginLogService sysLoginLogService;
+	
+	@Resource
+	private ISysUserService sysUserService;
+	
+	
+	
+	@GetMapping("/pageList")
+	@ApiOperation(value = "获取登录日志列表", tags = {"管理后台-登录日志"})
+	public AjaxResult<PageInfo<SysLoginLog>> pageList(String name, BasePage basePage){
+		PageInfo<SysLoginLog> pageInfo = sysLoginLogService.pageList(name, basePage);
+		return AjaxResult.success(pageInfo);
+	}
+	
+	
+	@PostMapping("/addLoginLog")
+	@ApiOperation(value = "添加登录日志", tags = {"管理后台-登录日志"})
+	public AjaxResult addLoginLog(@RequestBody SysLoginLog loginLog){
+		return sysLoginLogService.addLoginLog(loginLog);
+	}
+	
+	
+	/**
+	 * 添加登陆日志
+	 * @param loginLog
+	 * @return
+	 */
+	@PostMapping("/saveLoginLog")
+	public R saveLoginLog(@RequestBody SysLoginLog loginLog){
+		loginLog.setCreateTime(LocalDateTime.now());
+		loginLog.setDelFlag(0);
+		sysLoginLogService.save(loginLog);
+		return R.ok();
+	}
+	
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java
deleted file mode 100644
index aa116a4..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.ruoyi.system.controller;
-
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.ruoyi.system.service.ISysLogininforService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.common.core.constant.CacheConstants;
-import com.ruoyi.common.core.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.web.controller.BaseController;
-import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.page.TableDataInfo;
-import com.ruoyi.common.log.annotation.Log;
-import com.ruoyi.common.log.enums.BusinessType;
-import com.ruoyi.common.redis.service.RedisService;
-import com.ruoyi.common.security.annotation.InnerAuth;
-import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.system.api.domain.SysLogininfor;
-
-/**
- * 系统访问记录
- * 
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/logininfor")
-public class SysLogininforController extends BaseController
-{
-    @Autowired
-    private ISysLogininforService logininforService;
-
-    @Autowired
-    private RedisService redisService;
-
-    @RequiresPermissions("system:logininfor:list")
-    @GetMapping("/list")
-    public TableDataInfo list(SysLogininfor logininfor)
-    {
-        startPage();
-        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        return getDataTable(list);
-    }
-
-    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
-    @RequiresPermissions("system:logininfor:export")
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, SysLogininfor logininfor)
-    {
-        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
-        util.exportExcel(response, list, "登录日志");
-    }
-
-    @RequiresPermissions("system:logininfor:remove")
-    @Log(title = "登录日志", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{infoIds}")
-    public AjaxResult remove(@PathVariable Long[] infoIds)
-    {
-        return toAjax(logininforService.deleteLogininforByIds(infoIds));
-    }
-
-    @RequiresPermissions("system:logininfor:remove")
-    @Log(title = "登录日志", businessType = BusinessType.DELETE)
-    @DeleteMapping("/clean")
-    public AjaxResult clean()
-    {
-        logininforService.cleanLogininfor();
-        return success();
-    }
-
-    @RequiresPermissions("system:logininfor:unlock")
-    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
-    @GetMapping("/unlock/{userName}")
-    public AjaxResult unlock(@PathVariable("userName") String userName)
-    {
-        redisService.deleteObject(CacheConstants.PWD_ERR_CNT_KEY + userName);
-        return success();
-    }
-
-    @InnerAuth
-    @PostMapping
-    public AjaxResult add(@RequestBody SysLogininfor logininfor)
-    {
-        return toAjax(logininforService.insertLogininfor(logininfor));
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
index 4a6ec7c..eadb678 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
@@ -1,13 +1,11 @@
 package com.ruoyi.system.controller;
 
-import java.util.Iterator;
 import java.util.List;
-import java.util.Objects;
 import javax.servlet.http.HttpServletResponse;
 
-import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.system.query.SysOperLogQuery;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +19,6 @@
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.annotation.InnerAuth;
@@ -31,78 +28,65 @@
 
 /**
  * 操作日志记录
- * 
+ *
  * @author ruoyi
  */
 @RestController
 @RequestMapping("/operlog")
-public class SysOperlogController extends BaseController
-{
-    @Autowired
-    private ISysOperLogService operLogService;
-
-//    @RequiresPermissions("system:operlog:list")
-//    @GetMapping("/list")
-//    public TableDataInfo list(SysOperLog operLog)
-//    {
-//        startPage();
-//        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-//        return getDataTable(list);
-//    }
-
-    @ApiOperation(value = "当前车辆操作日志查询")
-    @PostMapping("/list")
-    public AjaxResult list(@RequestBody SysOperLogQuery query)
-    {
-        LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<>();
-        wrapper.like(SysOperLog::getTitle,"车辆管理");
-        wrapper.ne(SysOperLog::getBusinessType,1);
-        List<SysOperLog> list = operLogService.list(wrapper);
-        Iterator<SysOperLog> iterator = list.iterator();
-        while (iterator.hasNext()){
-            SysOperLog sysOperLog = iterator.next();
-            String operParam = sysOperLog.getOperParam();
-            JSONObject jsonObject = JSONObject.parseObject(operParam);
-            String carId = jsonObject.getString("carId");
-            if(StringUtils.isNotEmpty(carId) && Objects.nonNull(query.getCarId()) && !carId.equals(String.valueOf(query.getCarId()))){
-                iterator.remove();
-            }
-        }
-        return AjaxResult.success(list);
-    }
-
-
-    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
-    @RequiresPermissions("system:operlog:export")
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, SysOperLog operLog)
-    {
-        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
-        util.exportExcel(response, list, "操作日志");
-    }
-
-    @Log(title = "操作日志", businessType = BusinessType.DELETE)
-    @RequiresPermissions("system:operlog:remove")
-    @DeleteMapping("/{operIds}")
-    public AjaxResult remove(@PathVariable Long[] operIds)
-    {
-        return toAjax(operLogService.deleteOperLogByIds(operIds));
-    }
-
-    @RequiresPermissions("system:operlog:remove")
-    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
-    @DeleteMapping("/clean")
-    public AjaxResult clean()
-    {
-        operLogService.cleanOperLog();
-        return success();
-    }
-
-    @InnerAuth
-    @PostMapping
-    public AjaxResult add(@RequestBody SysOperLog operLog)
-    {
-        return toAjax(operLogService.insertOperlog(operLog));
-    }
+public class SysOperlogController extends BaseController {
+	@Autowired
+	private ISysOperLogService operLogService;
+	
+	
+	@GetMapping("/list")
+	@ApiOperation(value = "获取操作日志列表", tags = {"管理后台-操作日志"})
+	public AjaxResult<PageInfo<SysOperLog>> list(SysOperLogQuery query) {
+		PageInfo<SysOperLog> pageInfo = new PageInfo(query.getPageCurr(), query.getPageSize());
+		LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<>();
+		if(StringUtils.isNotEmpty(query.getOperName())){
+			wrapper.like(SysOperLog::getOperName, query.getOperName());
+		}
+		if(StringUtils.isNotEmpty(query.getTitle())){
+			wrapper.like(SysOperLog::getTitle, query.getTitle());
+		}
+		if(null != query.getStatus()){
+			wrapper.eq(SysOperLog::getStatus, query.getStatus());
+		}
+		if(null != query.getStartTime() && null != query.getEndTime()){
+			wrapper.between(SysOperLog::getOperTime, query.getStartTime(), query.getEndTime());
+		}
+		PageInfo<SysOperLog> page = operLogService.page(pageInfo, wrapper);
+		return AjaxResult.success(page);
+	}
+	
+	
+	@Log(title = "操作日志", businessType = BusinessType.EXPORT)
+	@RequiresPermissions("system:operlog:export")
+	@PostMapping("/export")
+	public void export(HttpServletResponse response, SysOperLog operLog) {
+		List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+		ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
+		util.exportExcel(response, list, "操作日志");
+	}
+	
+	@Log(title = "操作日志", businessType = BusinessType.DELETE)
+	@RequiresPermissions("system:operlog:remove")
+	@DeleteMapping("/{operIds}")
+	public AjaxResult remove(@PathVariable Long[] operIds) {
+		return toAjax(operLogService.deleteOperLogByIds(operIds));
+	}
+	
+	@RequiresPermissions("system:operlog:remove")
+	@Log(title = "操作日志", businessType = BusinessType.CLEAN)
+	@DeleteMapping("/clean")
+	public AjaxResult clean() {
+		operLogService.cleanOperLog();
+		return success();
+	}
+	
+	@InnerAuth
+	@PostMapping
+	public AjaxResult add(@RequestBody SysOperLog operLog) {
+		return toAjax(operLogService.insertOperlog(operLog));
+	}
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java
new file mode 100644
index 0000000..df7119c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java
@@ -0,0 +1,91 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 15:38
+ */
+@Data
+@TableName("sys_login_log")
+@ApiModel
+public class SysLoginLog {
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "数据id")
+	@TableId(value = "id", type = IdType.AUTO)
+	private Integer id;
+	/**
+	 * 用户id
+	 */
+	@TableField("user_id")
+	private Integer userId;
+	/**
+	 * 登录账号
+	 */
+	@TableField("username")
+	@ApiModelProperty(value = "用户账号")
+	private String username;
+	/**
+	 * 登录IP地址
+	 */
+	@TableField("ip_address")
+	@ApiModelProperty(value = "登录IP地址")
+	private String ipAddress;
+	/**
+	 * 登录地址
+	 */
+	@TableField("address")
+	@ApiModelProperty(value = "登录地址")
+	private String address;
+	/**
+	 * 浏览器类型
+	 */
+	@TableField("browser_type")
+	@ApiModelProperty(value = "浏览器类型")
+	private String browserType;
+	/**
+	 * 操作系统
+	 */
+	@TableField("operating_system")
+	@ApiModelProperty(value = "操作系统")
+	private String operatingSystem;
+	/**
+	 * 登录时间
+	 */
+	@TableField("login_time")
+	@ApiModelProperty(value = "登录时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime loginTime;
+	/**
+	 * 登录状态(1=成功,2=失败)
+	 */
+	@TableField("login_status")
+	private Integer loginStatus;
+	/**
+	 * 提示消息
+	 */
+	@TableField("message")
+	private String message;
+	/**
+	 * 添加时间
+	 */
+	@TableField("create_time")
+	private LocalDateTime createTime;
+	/**
+	 * 删除状态(0=否,1=是)
+	 */
+	@TableField("del_flag")
+	private Integer delFlag;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java
new file mode 100644
index 0000000..e3be84b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.domain.SysLoginLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 15:44
+ */
+public interface SysLoginLogMapper extends BaseMapper<SysLoginLog> {
+	
+	/**
+	 * 获取列表数据
+	 * @param pageInfo
+	 * @param name
+	 * @return
+	 */
+	List<SysLoginLog> pageList(PageInfo<SysLoginLog> pageInfo, @Param("name") String name);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
deleted file mode 100644
index 19671f3..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.ruoyi.system.mapper;
-
-import java.util.List;
-import com.ruoyi.system.api.domain.SysLogininfor;
-
-/**
- * 系统访问日志情况信息 数据层
- * 
- * @author ruoyi
- */
-public interface SysLogininforMapper
-{
-    /**
-     * 新增系统登录日志
-     * 
-     * @param logininfor 访问日志对象
-     */
-    public int insertLogininfor(SysLogininfor logininfor);
-
-    /**
-     * 查询系统登录日志集合
-     * 
-     * @param logininfor 访问日志对象
-     * @return 登录记录集合
-     */
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
-
-    /**
-     * 批量删除系统登录日志
-     * 
-     * @param infoIds 需要删除的登录日志ID
-     * @return 结果
-     */
-    public int deleteLogininforByIds(Long[] infoIds);
-
-    /**
-     * 清空系统登录日志
-     * 
-     * @return 结果
-     */
-    public int cleanLogininfor();
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java
index 84d75e4..fcb7a5b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java
@@ -1,16 +1,27 @@
 package com.ruoyi.system.query;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.web.page.BasePage;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 @Data
-@ApiModel(value = "当前车辆查询操作日志")
+@ApiModel()
 public class SysOperLogQuery extends BasePage {
-
-
-    @ApiModelProperty(value = "车辆id")
-    private Integer carId;
+    @ApiModelProperty(value = "操作人员")
+    private String operName;
+    @ApiModelProperty(value = "操作标题")
+    private String title;
+    @ApiModelProperty(value = "状态(0=正常,1=异常)")
+    private Integer status;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "操作开始时间", notes = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "操作结束时间", notes = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java
new file mode 100644
index 0000000..e99400e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.domain.SysLoginLog;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 15:47
+ */
+public interface ISysLoginLogService extends IService<SysLoginLog> {
+	
+	
+	/**
+	 * 获取列表数据
+	 * @param name
+	 * @param basePage
+	 * @return
+	 */
+	PageInfo<SysLoginLog> pageList(String name, BasePage basePage);
+	
+	
+	/**
+	 * 添加登录日志
+	 * @param loginLog
+	 * @return
+	 */
+	AjaxResult addLoginLog(SysLoginLog loginLog);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
deleted file mode 100644
index 509cc54..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.system.service;
-
-import java.util.List;
-import com.ruoyi.system.api.domain.SysLogininfor;
-
-/**
- * 系统访问日志情况信息 服务层
- * 
- * @author ruoyi
- */
-public interface ISysLogininforService
-{
-    /**
-     * 新增系统登录日志
-     * 
-     * @param logininfor 访问日志对象
-     */
-    public int insertLogininfor(SysLogininfor logininfor);
-
-    /**
-     * 查询系统登录日志集合
-     * 
-     * @param logininfor 访问日志对象
-     * @return 登录记录集合
-     */
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
-
-    /**
-     * 批量删除系统登录日志
-     * 
-     * @param infoIds 需要删除的登录日志ID
-     * @return 结果
-     */
-    public int deleteLogininforByIds(Long[] infoIds);
-
-    /**
-     * 清空系统登录日志
-     */
-    public void cleanLogininfor();
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
index 46a31f7..66bbc1d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
@@ -7,45 +7,44 @@
 
 /**
  * 操作日志 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysOperLogService extends IService<SysOperLog>
-{
-    /**
-     * 新增操作日志
-     * 
-     * @param operLog 操作日志对象
-     * @return 结果
-     */
-    public int insertOperlog(SysOperLog operLog);
-
-    /**
-     * 查询系统操作日志集合
-     * 
-     * @param operLog 操作日志对象
-     * @return 操作日志集合
-     */
-    public List<SysOperLog> selectOperLogList(SysOperLog operLog);
-
-    /**
-     * 批量删除系统操作日志
-     * 
-     * @param operIds 需要删除的操作日志ID
-     * @return 结果
-     */
-    public int deleteOperLogByIds(Long[] operIds);
-
-    /**
-     * 查询操作日志详细
-     * 
-     * @param operId 操作ID
-     * @return 操作日志对象
-     */
-    public SysOperLog selectOperLogById(Long operId);
-
-    /**
-     * 清空操作日志
-     */
-    public void cleanOperLog();
+public interface ISysOperLogService extends IService<SysOperLog> {
+	/**
+	 * 新增操作日志
+	 *
+	 * @param operLog 操作日志对象
+	 * @return 结果
+	 */
+	public int insertOperlog(SysOperLog operLog);
+	
+	/**
+	 * 查询系统操作日志集合
+	 *
+	 * @param operLog 操作日志对象
+	 * @return 操作日志集合
+	 */
+	public List<SysOperLog> selectOperLogList(SysOperLog operLog);
+	
+	/**
+	 * 批量删除系统操作日志
+	 *
+	 * @param operIds 需要删除的操作日志ID
+	 * @return 结果
+	 */
+	public int deleteOperLogByIds(Long[] operIds);
+	
+	/**
+	 * 查询操作日志详细
+	 *
+	 * @param operId 操作ID
+	 * @return 操作日志对象
+	 */
+	public SysOperLog selectOperLogById(Long operId);
+	
+	/**
+	 * 清空操作日志
+	 */
+	public void cleanOperLog();
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java
new file mode 100644
index 0000000..69d7b95
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java
@@ -0,0 +1,66 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.domain.SysLoginLog;
+import com.ruoyi.system.mapper.SysLoginLogMapper;
+import com.ruoyi.system.service.ISysLoginLogService;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 15:47
+ */
+@Service
+public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLoginLog> implements ISysLoginLogService {
+	
+	@Resource
+	private ISysUserService sysUserService;
+	
+	
+	
+	
+	
+	/**
+	 * 获取列表数据
+	 * @param name
+	 * @param basePage
+	 * @return
+	 */
+	@Override
+	public PageInfo<SysLoginLog> pageList(String name, BasePage basePage) {
+		PageInfo<SysLoginLog> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize());
+		List<SysLoginLog> list = this.baseMapper.pageList(pageInfo, name);
+		return pageInfo.setRecords(list);
+	}
+	
+	
+	/**
+	 * 添加登录日志
+	 * @param loginLog
+	 * @return
+	 */
+	@Override
+	public AjaxResult addLoginLog(SysLoginLog loginLog) {
+		String username = loginLog.getUsername();
+		SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username).eq(SysUser::getDelFlag, 0));
+		if(null == sysUser){
+			return AjaxResult.error("用户账号无效");
+		}
+		loginLog.setUserId(sysUser.getUserId().intValue());
+		loginLog.setCreateTime(LocalDateTime.now());
+		loginLog.setDelFlag(0);
+		this.save(loginLog);
+		return AjaxResult.success();
+	}
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
deleted file mode 100644
index 525d9d7..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import java.util.List;
-
-import com.ruoyi.system.mapper.SysLogininforMapper;
-import com.ruoyi.system.service.ISysLogininforService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.system.api.domain.SysLogininfor;
-
-/**
- * 系统访问日志情况信息 服务层处理
- * 
- * @author ruoyi
- */
-@Service
-public class SysLogininforServiceImpl implements ISysLogininforService
-{
-
-    @Autowired
-    private SysLogininforMapper logininforMapper;
-
-    /**
-     * 新增系统登录日志
-     * 
-     * @param logininfor 访问日志对象
-     */
-    @Override
-    public int insertLogininfor(SysLogininfor logininfor)
-    {
-        return logininforMapper.insertLogininfor(logininfor);
-    }
-
-    /**
-     * 查询系统登录日志集合
-     * 
-     * @param logininfor 访问日志对象
-     * @return 登录记录集合
-     */
-    @Override
-    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor)
-    {
-        return logininforMapper.selectLogininforList(logininfor);
-    }
-
-    /**
-     * 批量删除系统登录日志
-     * 
-     * @param infoIds 需要删除的登录日志ID
-     * @return 结果
-     */
-    @Override
-    public int deleteLogininforByIds(Long[] infoIds)
-    {
-        return logininforMapper.deleteLogininforByIds(infoIds);
-    }
-
-    /**
-     * 清空系统登录日志
-     */
-    @Override
-    public void cleanLogininfor()
-    {
-        logininforMapper.cleanLogininfor();
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
index 7ca5d1b..5174654 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
@@ -15,114 +15,108 @@
 
 /**
  * 操作日志 服务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysOperLogServiceImpl implements ISysOperLogService
-{
-    @Autowired
-    private SysOperLogMapper operLogMapper;
-
-    /**
-     * 新增操作日志
-     * 
-     * @param operLog 操作日志对象
-     * @return 结果
-     */
-    @Override
-    public int insertOperlog(SysOperLog operLog)
-    {
-        return operLogMapper.insertOperlog(operLog);
-    }
-
-    /**
-     * 查询系统操作日志集合
-     * 
-     * @param operLog 操作日志对象
-     * @return 操作日志集合
-     */
-    @Override
-    public List<SysOperLog> selectOperLogList(SysOperLog operLog)
-    {
-        return operLogMapper.selectOperLogList(operLog);
-    }
-
-    /**
-     * 批量删除系统操作日志
-     * 
-     * @param operIds 需要删除的操作日志ID
-     * @return 结果
-     */
-    @Override
-    public int deleteOperLogByIds(Long[] operIds)
-    {
-        return operLogMapper.deleteOperLogByIds(operIds);
-    }
-
-    /**
-     * 查询操作日志详细
-     * 
-     * @param operId 操作ID
-     * @return 操作日志对象
-     */
-    @Override
-    public SysOperLog selectOperLogById(Long operId)
-    {
-        return operLogMapper.selectOperLogById(operId);
-    }
-
-    /**
-     * 清空操作日志
-     */
-    @Override
-    public void cleanOperLog()
-    {
-        operLogMapper.cleanOperLog();
-    }
-
-    @Override
-    public boolean saveBatch(Collection<SysOperLog> entityList, int batchSize) {
-        return false;
-    }
-
-    @Override
-    public boolean saveOrUpdateBatch(Collection<SysOperLog> entityList, int batchSize) {
-        return false;
-    }
-
-    @Override
-    public boolean updateBatchById(Collection<SysOperLog> entityList, int batchSize) {
-        return false;
-    }
-
-    @Override
-    public boolean saveOrUpdate(SysOperLog entity) {
-        return false;
-    }
-
-    @Override
-    public SysOperLog getOne(Wrapper<SysOperLog> queryWrapper, boolean throwEx) {
-        return null;
-    }
-
-    @Override
-    public Map<String, Object> getMap(Wrapper<SysOperLog> queryWrapper) {
-        return null;
-    }
-
-    @Override
-    public <V> V getObj(Wrapper<SysOperLog> queryWrapper, Function<? super Object, V> mapper) {
-        return null;
-    }
-
-    @Override
-    public BaseMapper<SysOperLog> getBaseMapper() {
-        return null;
-    }
-
-    @Override
-    public Class<SysOperLog> getEntityClass() {
-        return null;
-    }
+public class SysOperLogServiceImpl implements ISysOperLogService {
+	@Autowired
+	private SysOperLogMapper operLogMapper;
+	
+	/**
+	 * 新增操作日志
+	 *
+	 * @param operLog 操作日志对象
+	 * @return 结果
+	 */
+	@Override
+	public int insertOperlog(SysOperLog operLog) {
+		return operLogMapper.insertOperlog(operLog);
+	}
+	
+	/**
+	 * 查询系统操作日志集合
+	 *
+	 * @param operLog 操作日志对象
+	 * @return 操作日志集合
+	 */
+	@Override
+	public List<SysOperLog> selectOperLogList(SysOperLog operLog) {
+		return operLogMapper.selectOperLogList(operLog);
+	}
+	
+	/**
+	 * 批量删除系统操作日志
+	 *
+	 * @param operIds 需要删除的操作日志ID
+	 * @return 结果
+	 */
+	@Override
+	public int deleteOperLogByIds(Long[] operIds) {
+		return operLogMapper.deleteOperLogByIds(operIds);
+	}
+	
+	/**
+	 * 查询操作日志详细
+	 *
+	 * @param operId 操作ID
+	 * @return 操作日志对象
+	 */
+	@Override
+	public SysOperLog selectOperLogById(Long operId) {
+		return operLogMapper.selectOperLogById(operId);
+	}
+	
+	/**
+	 * 清空操作日志
+	 */
+	@Override
+	public void cleanOperLog() {
+		operLogMapper.cleanOperLog();
+	}
+	
+	@Override
+	public boolean saveBatch(Collection<SysOperLog> entityList, int batchSize) {
+		return false;
+	}
+	
+	@Override
+	public boolean saveOrUpdateBatch(Collection<SysOperLog> entityList, int batchSize) {
+		return false;
+	}
+	
+	@Override
+	public boolean updateBatchById(Collection<SysOperLog> entityList, int batchSize) {
+		return false;
+	}
+	
+	@Override
+	public boolean saveOrUpdate(SysOperLog entity) {
+		return false;
+	}
+	
+	@Override
+	public SysOperLog getOne(Wrapper<SysOperLog> queryWrapper, boolean throwEx) {
+		return null;
+	}
+	
+	@Override
+	public Map<String, Object> getMap(Wrapper<SysOperLog> queryWrapper) {
+		return null;
+	}
+	
+	@Override
+	public <V> V getObj(Wrapper<SysOperLog> queryWrapper, Function<? super Object, V> mapper) {
+		return null;
+	}
+	
+	@Override
+	public BaseMapper<SysOperLog> getBaseMapper() {
+		return null;
+	}
+	
+	@Override
+	public Class<SysOperLog> getEntityClass() {
+		return null;
+	}
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml
new file mode 100644
index 0000000..87f8136
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SysLoginLogMapper">
+	
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.ruoyi.system.domain.SysLoginLog">
+		<id column="id" property="id" />
+		<result column="user_id" property="userId" />
+		<result column="user_name" property="username" />
+		<result column="ip_address" property="ipAddress"/>
+		<result column="address" property="address"/>
+		<result column="browser_type" property="browserType"/>
+		<result column="operating_system" property="operatingSystem"/>
+		<result column="login_time" property="loginTime"/>
+		<result column="login_status" property="loginStatus"/>
+		<result column="message" property="message"/>
+		<result column="create_time" property="createTime"/>
+		<result column="del_flag" property="delFlag"/>
+	</resultMap>
+	
+	
+	
+	<select id="pageList" resultMap="BaseResultMap">
+		select
+		a.*,
+		b.user_name
+		from sys_login_log a
+		left join sys_user b on (a.user_id = b.user_id)
+		where a.del_flag = 0
+		<if test="null != name and '' != name">
+			and b.user_name like CONCAT('%', #{name}, '%')
+		</if>
+		order by a.create_time desc
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
deleted file mode 100644
index 8c5a10e..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.system.mapper.SysLogininforMapper">
-
-	<resultMap type="com.ruoyi.system.api.domain.SysLogininfor" id="SysLogininforResult">
-		<id     property="infoId"        column="info_id"           />
-		<result property="userName"      column="user_name"         />
-		<result property="status"        column="status"            />
-		<result property="ipaddr"        column="ipaddr"            />
-		<result property="msg"           column="msg"               />
-		<result property="accessTime"    column="access_time"       />
-	</resultMap>
-
-	<insert id="insertLogininfor" parameterType="com.ruoyi.system.api.domain.SysLogininfor">
-		insert into sys_logininfor (user_name, status, ipaddr, msg, access_time)
-		values (#{userName}, #{status}, #{ipaddr}, #{msg}, sysdate())
-	</insert>
-	
-	<select id="selectLogininforList" parameterType="com.ruoyi.system.api.domain.SysLogininfor" resultMap="SysLogininforResult">
-		select info_id, user_name, ipaddr, status, msg, access_time from sys_logininfor
-		<where>
-			<if test="ipaddr != null and ipaddr != ''">
-				AND ipaddr like concat('%', #{ipaddr}, '%')
-			</if>
-			<if test="status != null and status != ''">
-				AND status = #{status}
-			</if>
-			<if test="userName != null and userName != ''">
-				AND user_name like concat('%', #{userName}, '%')
-			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				AND access_time &gt;= #{params.beginTime}
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				AND access_time &lt;= #{params.endTime}
-			</if>
-		</where>
-		order by info_id desc
-	</select>
-	
-	<delete id="deleteLogininforByIds" parameterType="Long">
- 		delete from sys_logininfor where info_id in
- 		<foreach collection="array" item="infoId" open="(" separator="," close=")">
- 			#{infoId}
-        </foreach> 
- 	</delete>
-    
-    <update id="cleanLogininfor">
-        truncate table sys_logininfor
-    </update>
-    
-</mapper> 
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index fed89c4..15172f8 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -333,5 +333,16 @@
 
         return R.ok();
     }
+    
+    /**
+     * 根据用户id获取用户
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/user/getUserById/{id}")
+    public R<TAppUser> getUserById(@PathVariable Long id){
+        TAppUser appUser = appUserService.getById(id);
+        return R.ok(appUser);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index 3750bc9..87353bc 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -156,7 +156,7 @@
 	
 	@ResponseBody
 	@GetMapping("/getAllSiteList")
-	@ApiOperation(value = "获取所有站点数据", tags = {"管理后台-充电桩信息", "管理后台-系统用户管理", "管理后台-角色管理", "管理后台-系统通知"})
+	@ApiOperation(value = "获取所有站点数据", tags = {"管理后台-充电桩信息", "管理后台-系统用户管理", "管理后台-角色管理", "管理后台-系统通知", "管理后台-充电评价"})
 	public AjaxResult<List<Site>> getAllSiteList(){
 		//校验当前账户站点权限
 		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
index ec89086..20cc001 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
@@ -1,22 +1,21 @@
 package com.ruoyi.order.controller;
 
 
-import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TOrderEvaluate;
 import com.ruoyi.order.api.query.TOrderEvaluateQuery;
 import com.ruoyi.order.api.vo.TOrderEvaluateVO;
+import com.ruoyi.order.dto.GetOrderEvaluatePageList;
+import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
 import com.ruoyi.order.service.TOrderEvaluateService;
-import com.ruoyi.other.api.feignClient.TEvaluationTagClient;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -47,6 +46,62 @@
     public AjaxResult<PageInfo<TOrderEvaluateVO>> pageList(@RequestBody TOrderEvaluateQuery query) {
         return AjaxResult.ok(orderEvaluateService.getTagList(query));
     }
-
+    
+    
+    
+    
+    
+    
+    
+    @GetMapping(value = "/getPageList")
+    @ApiOperation(value = "获取充电评价列表", tags = {"管理后台-充电评价"})
+    public AjaxResult<PageInfo<GetOrderEvaluatePageListDTO>> getPageList(@RequestBody GetOrderEvaluatePageList pageList){
+        PageInfo<GetOrderEvaluatePageListDTO> list = orderEvaluateService.getPageList(pageList);
+        return AjaxResult.success(list);
+    }
+    
+    
+    
+    @DeleteMapping(value = "/delOrderEvaluate")
+    @ApiOperation(value = "删除充电评价", tags = {"管理后台-充电评价"})
+    public AjaxResult delOrderEvaluate(@PathVariable Long id){
+        TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id);
+        orderEvaluate.setDelFlag(true);
+        orderEvaluateService.updateById(orderEvaluate);
+        return AjaxResult.success();
+    }
+    
+    
+    
+    
+    @PostMapping(value = "/replyEvaluation")
+    @ApiOperation(value = "充电评价回复", tags = {"管理后台-充电评价"})
+    public AjaxResult replyEvaluation(@PathVariable("id") Long id, @RequestParam("reply") String reply){
+        TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id);
+        reply = reply.replaceAll("& #40;", "(")
+                .replaceAll("& #41;", ")")
+                .replaceAll("& #40;", "(")
+                .replaceAll("& #41;", ")")
+                .replaceAll("& #39;", "'")
+                .replaceAll("& lt;", "<")
+                .replaceAll("& gt;", ">");
+        orderEvaluate.setEvaluationResponse(reply);
+        orderEvaluate.setResponseTime(LocalDateTime.now());
+        orderEvaluateService.updateById(orderEvaluate);
+        return AjaxResult.success();
+    }
+    
+    
+    
+    
+    @DeleteMapping(value = "/delOrderEvaluateReply")
+    @ApiOperation(value = "删除充电评价回复", tags = {"管理后台-充电评价"})
+    public AjaxResult delOrderEvaluateReply(@PathVariable Long id){
+        TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id);
+        orderEvaluate.setEvaluationResponse("");
+        orderEvaluateService.updateById(orderEvaluate);
+        return AjaxResult.success();
+    }
+    
 }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java
new file mode 100644
index 0000000..c195f20
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java
@@ -0,0 +1,23 @@
+package com.ruoyi.order.dto;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 19:07
+ */
+@Data
+@ApiModel
+public class GetOrderEvaluatePageList extends BasePage {
+	@ApiModelProperty(value = "订单编号")
+	private String code;
+	@ApiModelProperty(value = "评价内容")
+	private String content;
+	@ApiModelProperty(value = "评价类型(1=好评,2=中评,3=差评)")
+	private Integer evaluateType;
+	@ApiModelProperty(value = "归属电站id")
+	private Integer siteId;
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java
new file mode 100644
index 0000000..37ac8db
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java
@@ -0,0 +1,40 @@
+package com.ruoyi.order.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 19:09
+ */
+@Data
+@ApiModel
+public class GetOrderEvaluatePageListDTO {
+	@ApiModelProperty("订单id")
+	private String id;
+	@ApiModelProperty("订单编号")
+	private String code;
+	private Long appUserId;
+	@ApiModelProperty("用户头像")
+	private String avatar;
+	@ApiModelProperty("用户电话")
+	private String phone;
+	@ApiModelProperty("评分")
+	private Integer mark;
+	@ApiModelProperty("归属电站名称")
+	private String siteName;
+	private Integer siteId;
+	@ApiModelProperty("评价内容")
+	private String content;
+	@ApiModelProperty("评价图片")
+	private String imgUrl;
+	@ApiModelProperty("评价时间")
+	private String createTime;
+	@ApiModelProperty("评价标签")
+	private List<String> tags;
+	@ApiModelProperty("回复内容")
+	private String recover;
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java
index b2566d5..2c6257e 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java
@@ -5,6 +5,8 @@
 import com.ruoyi.order.api.model.TOrderEvaluate;
 import com.ruoyi.order.api.query.TOrderEvaluateQuery;
 import com.ruoyi.order.api.vo.TOrderEvaluateVO;
+import com.ruoyi.order.dto.GetOrderEvaluatePageList;
+import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -30,4 +32,14 @@
      * @return
      */
     List<TOrderEvaluateVO> pageList(@Param("query") TOrderEvaluateQuery query,@Param("pageInfo")PageInfo<TOrderEvaluateVO> pageInfo);
+    
+    
+    /**
+     * 获取充电评价列表数据
+     * @param pageList
+     * @param pageInfo
+     * @return
+     */
+    List<GetOrderEvaluatePageListDTO> getPageList(@Param("query") GetOrderEvaluatePageList pageList, @Param("evaluationTagIds") List<Integer> evaluationTagIds,
+                                                  PageInfo<GetOrderEvaluatePageListDTO> pageInfo);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java
index cd76d7d..f2b212d 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java
@@ -5,7 +5,10 @@
 import com.ruoyi.order.api.model.TOrderEvaluate;
 import com.ruoyi.order.api.query.TOrderEvaluateQuery;
 import com.ruoyi.order.api.vo.TOrderEvaluateVO;
+import com.ruoyi.order.dto.GetOrderEvaluatePageList;
+import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 
@@ -31,4 +34,12 @@
      * @return
      */
     PageInfo<TOrderEvaluateVO> getTagList(TOrderEvaluateQuery query);
+    
+    
+    /**
+     * 获取充电评价列表
+     * @param pageList
+     * @return
+     */
+    PageInfo<GetOrderEvaluatePageListDTO> getPageList(GetOrderEvaluatePageList pageList);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
index b1b5ca5..1c27a8a 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
@@ -1,24 +1,35 @@
 package com.ruoyi.order.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TOrderEvaluate;
+import com.ruoyi.order.api.model.TOrderEvaluateTag;
 import com.ruoyi.order.api.query.TOrderEvaluateQuery;
 import com.ruoyi.order.api.vo.TOrderEvaluateVO;
+import com.ruoyi.order.dto.GetOrderEvaluatePageList;
+import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.mapper.TOrderEvaluateMapper;
 import com.ruoyi.order.mapper.TOrderEvaluateTagMapper;
 import com.ruoyi.order.service.TOrderEvaluateService;
+import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.feignClient.TEvaluationTagClient;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -35,16 +46,34 @@
 @Service
 public class TOrderEvaluateServiceImpl extends ServiceImpl<TOrderEvaluateMapper, TOrderEvaluate> implements TOrderEvaluateService {
 
-    @Autowired
+    @Resource
     private TEvaluationTagClient evaluationTagClient;
-    @Autowired
+    @Resource
     private TOrderEvaluateTagMapper orderEvaluateTagMapper;
-    @Autowired
+    @Resource
     private TChargingOrderMapper chargingOrderMapper;
+    
+    @Resource
+    private AppUserClient appUserClient;
+    
+    @Resource
+    private SiteClient siteClient;
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
     @Override
     public List<TEvaluationTagVO> getTagCount() {
         // 查询标签列表
-        R<List<TEvaluationTagVO>> r = evaluationTagClient.getTagList();
+        R<List<TEvaluationTagVO>> r = evaluationTagClient.getTagList(null);
         List<TEvaluationTagVO> tagList = r.getData();
         List<Integer> tagIds = tagList.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList());
         // 统计标签使用数量
@@ -100,5 +129,35 @@
             tagList.add(evaluationTagVO);
         }
     }
-
+    
+    
+    /**
+     * 获取充电评价列表
+     * @param pageList
+     * @return
+     */
+    @Override
+    public PageInfo<GetOrderEvaluatePageListDTO> getPageList(GetOrderEvaluatePageList pageList) {
+        PageInfo<GetOrderEvaluatePageListDTO> pageInfo = new PageInfo<>(pageList.getPageCurr(), pageList.getPageSize());
+        List<Integer> evaluationTagIds = null;
+        if(null != pageList.getEvaluateType()){
+            List<TEvaluationTagVO> data = evaluationTagClient.getTagList(pageList.getEvaluateType()).getData();
+            evaluationTagIds = data.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList());
+        }
+        List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, pageInfo);
+        for (GetOrderEvaluatePageListDTO dto : list) {
+            TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData();
+            dto.setAvatar(appUser.getAvatar());
+            String phone = appUser.getPhone();
+            dto.setPhone(phone.substring(0, 3) + "****" + phone.substring(6));
+            Site site = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData().get(0);
+            dto.setSiteName(site.getName());
+            List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, dto.getId()));
+            List<Integer> tagIds = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList());
+            List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagIds).getData();
+            List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList());
+            dto.setTags(collect);
+        }
+        return pageInfo.setRecords(list);
+    }
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml
index 66e30e6..8e83dee 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml
@@ -79,4 +79,38 @@
         </if>
     </select>
 
+    
+    
+    <select id="getPageList" resultType="com.ruoyi.order.dto.GetOrderEvaluatePageListDTO">
+        select
+        CAST(a.id AS CHAR) as id,
+        b.`code`,
+        a.mark,
+        b.site_id as siteId,
+        b.app_user_id as appUserId,
+        a.content,
+        a.img_url as imgUrl,
+        DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') as createTime,
+        a.evaluation_response as `recover`
+        from t_order_evaluate a
+        left join t_charging_order b on (a.order_id = b.id)
+        where a.order_type = 1 and a.del_flag = 0
+        <if test="null != query.code and '' != query.code">
+            and b.`code` like CONCAT('%', #{query.code}, '%')
+        </if>
+        <if test="null != query.content and '' != query.content">
+            and a.content like CONCAT('%', #{query.content}, '%')
+        </if>
+        <if test="null != query.evaluateType">
+            and a.id in (select order_evaluate_id from t_order_evaluate_tag where evaluation_tag_id in
+            <foreach collection="evaluationTagIds" item="item" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            )
+        </if>
+        <if test="null != query.siteId">
+            and b.site_id = #{query.siteId}
+        </if>
+        order by a.create_time desc
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
index 261869b..6b55808 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
@@ -3,15 +3,18 @@
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TEvaluationTag;
+import com.ruoyi.other.api.domain.TInvoiceType;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
+import com.ruoyi.other.query.InvoiceTypePageList;
 import com.ruoyi.other.service.TEvaluationTagService;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
-
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -37,6 +40,66 @@
     public R<List<TEvaluationTagVO>> getTagList() {
         return R.ok(evaluationTagService.getTagList());
     }
-
+    
+    
+    
+    @ResponseBody
+    @GetMapping("/pageList")
+    @ApiOperation(value = "获取评价标签列表", tags = {"管理后台-评价标签设置"})
+    public AjaxResult<PageInfo<TEvaluationTag>> pageList(String name, BasePage basePage){
+        PageInfo<TEvaluationTag> pageInfo = evaluationTagService.pageList(name, basePage);
+        return AjaxResult.success(pageInfo);
+    }
+    
+    
+    @ResponseBody
+    @PostMapping("/addEvaluationTag")
+    @ApiOperation(value = "添加评价标签", tags = {"管理后台-评价标签设置"})
+    public AjaxResult addEvaluationTag(@RequestBody TEvaluationTag evaluationTag){
+        evaluationTagService.save(evaluationTag);
+        return AjaxResult.success();
+    }
+    
+    @ResponseBody
+    @GetMapping("/getEvaluationTagInfo/{id}")
+    @ApiOperation(value = "获取评价标签详情", tags = {"管理后台-评价标签设置"})
+    public AjaxResult<TEvaluationTag> getEvaluationTagInfo(@PathVariable Integer id){
+        TEvaluationTag evaluationTag = evaluationTagService.getById(id);
+        return AjaxResult.success(evaluationTag);
+    }
+    
+    
+    @ResponseBody
+    @PostMapping("/editEvaluationTag")
+    @ApiOperation(value = "编辑评价标签", tags = {"管理后台-评价标签设置"})
+    public AjaxResult editEvaluationTag(@RequestBody TEvaluationTag evaluationTag){
+        evaluationTagService.updateById(evaluationTag);
+        return AjaxResult.success();
+    }
+    
+    
+    @ResponseBody
+    @DeleteMapping("/delEvaluationTag/{id}")
+    @ApiOperation(value = "删除评价标签", tags = {"管理后台-评价标签设置"})
+    public AjaxResult<TInvoiceType> delEvaluationTag(@PathVariable Integer[] id){
+        List<TEvaluationTag> tEvaluationTags = evaluationTagService.listByIds(Arrays.asList(id));
+        for (TEvaluationTag evaluationTag : tEvaluationTags) {
+            evaluationTag.setDelFlag(true);
+            evaluationTagService.updateById(evaluationTag);
+        }
+        return AjaxResult.success();
+    }
+    
+    
+    /**
+     * 根据id集合获取数据
+     * @param tagIds
+     * @return
+     */
+    @GetMapping("/getListByIds")
+    public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds){
+        List<TEvaluationTag> tEvaluationTags = evaluationTagService.listByIds(tagIds);
+        return R.ok(tEvaluationTags);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
index bb00ff7..6c55b54 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
@@ -1,9 +1,17 @@
 package com.ruoyi.other.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.other.api.domain.TInvoiceType;
+import com.ruoyi.other.query.InvoiceTypePageList;
+import com.ruoyi.other.service.TInvoiceTypeService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * <p>
@@ -16,6 +24,56 @@
 @RestController
 @RequestMapping("/t-invoice-type")
 public class TInvoiceTypeController {
-
+	
+	@Resource
+	private TInvoiceTypeService invoiceTypeService;
+	
+	
+	@ResponseBody
+	@GetMapping("/pageList")
+	@ApiOperation(value = "获取发票类型列表", tags = {"管理后台-发票类型管理"})
+	public AjaxResult<PageInfo<TInvoiceType>> pageList(InvoiceTypePageList pageList){
+		PageInfo<TInvoiceType> pageInfo = invoiceTypeService.pageList(pageList);
+		return AjaxResult.success(pageInfo);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/addInvoiceType")
+	@ApiOperation(value = "添加发票类型", tags = {"管理后台-发票类型管理"})
+	public AjaxResult addInvoiceType(@RequestBody TInvoiceType invoiceType){
+		invoiceTypeService.save(invoiceType);
+		return AjaxResult.success();
+	}
+	
+	@ResponseBody
+	@GetMapping("/getInvoiceTypeInfo/{id}")
+	@ApiOperation(value = "获取发票类型详情", tags = {"管理后台-发票类型管理"})
+	public AjaxResult<TInvoiceType> getInvoiceTypeInfo(@PathVariable Integer id){
+		TInvoiceType invoiceType = invoiceTypeService.getById(id);
+		return AjaxResult.success(invoiceType);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/editInvoiceType")
+	@ApiOperation(value = "编辑发票类型", tags = {"管理后台-发票类型管理"})
+	public AjaxResult editInvoiceType(@RequestBody TInvoiceType invoiceType){
+		invoiceTypeService.updateById(invoiceType);
+		return AjaxResult.success();
+	}
+	
+	
+	@ResponseBody
+	@DeleteMapping("/delInvoiceType/{id}")
+	@ApiOperation(value = "删除发票类型", tags = {"管理后台-发票类型管理"})
+	public AjaxResult<TInvoiceType> delInvoiceType(@PathVariable Integer[] id){
+		List<TInvoiceType> tInvoiceTypes = invoiceTypeService.listByIds(Arrays.asList(id));
+		for (TInvoiceType invoiceType : tInvoiceTypes) {
+			invoiceType.setDelFlag(true);
+			invoiceTypeService.updateById(invoiceType);
+		}
+		return AjaxResult.success();
+	}
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java
index 64e26b7..4376dbf 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java
@@ -1,8 +1,10 @@
 package com.ruoyi.other.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -21,5 +23,13 @@
      * @return
      */
     List<TEvaluationTagVO> getTagList();
-
+    
+    
+    /**
+     * 获取列表数据
+     * @param pageInfo
+     * @param name
+     * @return
+     */
+    List<TEvaluationTag> pageList(PageInfo<TEvaluationTag> pageInfo, @Param("name") String name);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java
index 5b284f1..fac2361 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java
@@ -1,7 +1,12 @@
 package com.ruoyi.other.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TInvoiceType;
+import com.ruoyi.other.query.InvoiceTypePageList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +17,7 @@
  * @since 2024-08-06
  */
 public interface TInvoiceTypeMapper extends BaseMapper<TInvoiceType> {
-
+	
+	
+	List<TInvoiceType> pageList(PageInfo<TInvoiceType> pageInfo, @Param("req") InvoiceTypePageList pageList);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java
new file mode 100644
index 0000000..ab62966
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java
@@ -0,0 +1,21 @@
+package com.ruoyi.other.query;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/12 18:07
+ */
+@Data
+@ApiModel
+public class InvoiceTypePageList extends BasePage {
+	@ApiModelProperty(value = "类型名称")
+	private String name;
+	@ApiModelProperty(value = "公司名称")
+	private String company;
+	@ApiModelProperty(value = "开票方式(1=人工,2=自动)")
+	private Integer method;
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java
index 5a58a01..7b0cb82 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java
@@ -1,6 +1,8 @@
 package com.ruoyi.other.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 
@@ -21,4 +23,13 @@
      * @return
      */
     List<TEvaluationTagVO> getTagList();
+    
+    
+    /**
+     * 获取列表页数据
+     * @param name
+     * @param basePage
+     * @return
+     */
+    PageInfo<TEvaluationTag> pageList(String name, BasePage basePage);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java
index 2f3502e..057ef7b 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java
@@ -1,7 +1,9 @@
 package com.ruoyi.other.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TInvoiceType;
+import com.ruoyi.other.query.InvoiceTypePageList;
 
 /**
  * <p>
@@ -12,5 +14,11 @@
  * @since 2024-08-06
  */
 public interface TInvoiceTypeService extends IService<TInvoiceType> {
-
+	
+	/**
+	 * 获取发票类型列表数据
+	 * @param pageList
+	 * @return
+	 */
+	PageInfo<TInvoiceType> pageList(InvoiceTypePageList pageList);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java
index 6b03b9b..f6448d9 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java
@@ -1,5 +1,7 @@
 package com.ruoyi.other.service.impl;
 
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
 import com.ruoyi.other.mapper.TEvaluationTagMapper;
@@ -21,7 +23,21 @@
 public class TEvaluationTagServiceImpl extends ServiceImpl<TEvaluationTagMapper, TEvaluationTag> implements TEvaluationTagService {
 
     @Override
-    public List<TEvaluationTagVO> getTagCount() {
+    public List<TEvaluationTagVO> getTagList() {
         return this.baseMapper.getTagList();
     }
+    
+    
+    /**
+     * 获取列表数据
+     * @param name
+     * @param basePage
+     * @return
+     */
+    @Override
+    public PageInfo<TEvaluationTag> pageList(String name, BasePage basePage) {
+        PageInfo<TEvaluationTag> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize());
+        List<TEvaluationTag> list = this.baseMapper.pageList(pageInfo, name);
+        return pageInfo.setRecords(list);
+    }
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java
index f96a0aa..d519cff 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java
@@ -1,10 +1,14 @@
 package com.ruoyi.other.service.impl;
 
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TInvoiceType;
 import com.ruoyi.other.mapper.TInvoiceTypeMapper;
+import com.ruoyi.other.query.InvoiceTypePageList;
 import com.ruoyi.other.service.TInvoiceTypeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +20,18 @@
  */
 @Service
 public class TInvoiceTypeServiceImpl extends ServiceImpl<TInvoiceTypeMapper, TInvoiceType> implements TInvoiceTypeService {
-
+	
+	
+	/**
+	 * 获取发票类型列表数据
+	 * @param pageList
+	 * @return
+	 */
+	@Override
+	public PageInfo<TInvoiceType> pageList(InvoiceTypePageList pageList) {
+		PageInfo<TInvoiceType> pageInfo = new PageInfo<>(pageList.getPageCurr(), pageList.getPageSize());
+		List<TInvoiceType> list = this.baseMapper.pageList(pageInfo, pageList);
+		pageInfo.setRecords(list);
+		return pageInfo;
+	}
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml
index 96c8e5f..ec534eb 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml
@@ -20,4 +20,13 @@
         from t_evaluation_tag where del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} ORDER BY `type`
     </select>
 
+    
+    
+    <select id="pageList" resultMap="BaseResultMap">
+        select * from t_evaluation_tag where del_flag = 0
+        <if test="null != name and '' != name">
+            and name like CONCAT('%', #{name}, '%')
+        </if>
+        order by create_time desc
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml
index 2688cdd..c7e7c76 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml
@@ -20,4 +20,18 @@
         id, name, invoicing_company, invoicing_method, electricity_tariff, service_tariff, added_service_tariff, del_flag, create_time
     </sql>
 
+    
+    <select id="pageList" resultMap="BaseResultMap">
+        select * from t_invoice_type where del_flag = 0
+        <if test="null != req.name and '' != req.name">
+            and name like CONCAT('%', #{req.name}, '%')
+        </if>
+        <if test="null != req.company and '' != req.company">
+            and invoicing_company like CONCAT('%', #{req.company}, '%')
+        </if>
+        <if test="null != req.method">
+            and invoicing_method = #{req.method}
+        </if>
+        order by create_time desc
+    </select>
 </mapper>

--
Gitblit v1.7.1