Commit 386f003b by 宋振民

feat:审计日志新增登录时长

parent 365c8769
...@@ -2,4 +2,5 @@ package com.hs.admin.common; ...@@ -2,4 +2,5 @@ package com.hs.admin.common;
public interface Constants { public interface Constants {
String TOKEN_KEY = "Authorization"; String TOKEN_KEY = "Authorization";
String DEFAULT_ONLINE_TIME = "0小时0分钟";
} }
package com.hs.admin.common.configurations;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.text.SimpleDateFormat;
@Configuration
public class WebMvcConfig {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
converter.setObjectMapper(mapper);
return converter;
}
}
\ No newline at end of file
package com.hs.admin.mapper; package com.hs.admin.mapper;
import com.hs.admin.model.AuditLog; import com.hs.admin.model.AuditLog;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import java.util.Date;
import java.util.List; import java.util.List;
@Mapper @Mapper
...@@ -10,5 +12,7 @@ public interface AuditLogMapper { ...@@ -10,5 +12,7 @@ public interface AuditLogMapper {
int insert(AuditLog auditLog); int insert(AuditLog auditLog);
List<AuditLog> getAllAuditLogs(); List<AuditLog> getAllAuditLogs(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
List<AuditLog> getAllTokens(String token);
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import lombok.Setter; ...@@ -5,6 +5,7 @@ import lombok.Setter;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@Component @Component
......
...@@ -6,6 +6,7 @@ import lombok.Data; ...@@ -6,6 +6,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
...@@ -18,4 +19,10 @@ public class AuditLogReq { ...@@ -18,4 +19,10 @@ public class AuditLogReq {
@NotBlank(message = "用户名") @NotBlank(message = "用户名")
private String userName; private String userName;
@ApiModelProperty(value = "开始时间", required = false)
private Date startDate;
@ApiModelProperty(value = "结束时间", required = false)
private Date endDate;
} }
...@@ -2,6 +2,7 @@ package com.hs.admin.service.impl; ...@@ -2,6 +2,7 @@ package com.hs.admin.service.impl;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.hs.admin.common.Constants;
import com.hs.admin.common.base.PageRequest; import com.hs.admin.common.base.PageRequest;
import com.hs.admin.common.base.PageResult; import com.hs.admin.common.base.PageResult;
import com.hs.admin.common.utils.DateUtils; import com.hs.admin.common.utils.DateUtils;
...@@ -37,52 +38,42 @@ public class AuditLogServiceImpl implements AuditLogService { ...@@ -37,52 +38,42 @@ public class AuditLogServiceImpl implements AuditLogService {
public PageResult<AuditLog> getAllAuditLog(AuditLogReq req) { public PageResult<AuditLog> getAllAuditLog(AuditLogReq req) {
PageRequest page = req.getPage(); PageRequest page = req.getPage();
PageHelper.startPage(page.getPageNum(), page.getPageSize()); PageHelper.startPage(page.getPageNum(), page.getPageSize());
List<AuditLog> allAuditLogs = auditLogMapper.getAllAuditLogs(); List<AuditLog> allAuditLogs = auditLogMapper.getAllAuditLogs(req.getStartDate(), req.getEndDate());
PageResult pageResult = PageUtil.getPageResult(page, new PageInfo<AuditLog>(allAuditLogs)); PageResult pageResult = PageUtil.getPageResult(page, new PageInfo<AuditLog>(allAuditLogs));
getOnlineTime(pageResult.getContent()); getOnlineTime(pageResult.getContent());
return pageResult; return pageResult;
} }
private void getOnlineTime(List<AuditLog> auditLogs) { private void getOnlineTime(List<AuditLog> auditLogs) {
Map<String,String> onlineTimeMap = new HashMap<>(); for(AuditLog auditLog: auditLogs) {
Map<String, List<AuditLog>> map = auditLogs.stream() List<AuditLog> tokenList = auditLogMapper.getAllTokens(auditLog.getToken());
.collect(groupingBy(AuditLog::getToken));
for (String token : map.keySet()) {
List<AuditLog> auditLogList = map.get(token);
Date loginTime = null; Date loginTime = null;
Date logoutTime = null; Date logoutTime = null;
Date lastRefreshTIme = null; Date lastRefreshTIme = null;
System.out.println("token=" + token);
for(AuditLog auditLog: auditLogList) { for(AuditLog tokenAuditLog: tokenList) {
Date createDate = auditLog.getCreateDate(); Date createDate = tokenAuditLog.getCreateDate();
if(auditLog.getOperateType().equals("login")) { if(tokenAuditLog.getOperateType().equals("login")) {
loginTime= createDate; loginTime = createDate;
}else if(auditLog.getOperateType().equals("logout")) { }else if(tokenAuditLog.getOperateType().equals("logout")) {
logoutTime=createDate; logoutTime = createDate;
}else if(auditLog.getOperateType().equals("refresh")) { }else if(tokenAuditLog.getOperateType().equals("refresh")) {
if(lastRefreshTIme==null || createDate.getTime()>lastRefreshTIme.getTime()) { if(lastRefreshTIme==null || createDate.getTime()>lastRefreshTIme.getTime()) {
lastRefreshTIme=createDate; lastRefreshTIme = createDate;
} }
} }
} }
//有登录、退出时间的 //有登录、退出时间的
if(loginTime!=null && logoutTime!=null) { if(loginTime!=null && logoutTime!=null) {
String dateMinus = DateUtils.dateDiff(loginTime, logoutTime); String dateMinus = DateUtils.dateDiff(loginTime, logoutTime);
System.out.println("时间差为:" + dateMinus); auditLog.setOnlineTime(dateMinus);
onlineTimeMap.put(token, dateMinus);
}else if(loginTime!=null && logoutTime==null && lastRefreshTIme!=null) { }else if(loginTime!=null && logoutTime==null && lastRefreshTIme!=null) {
String dateMinus = DateUtils.dateDiff(loginTime, lastRefreshTIme); String dateMinus = DateUtils.dateDiff(loginTime, lastRefreshTIme);
System.out.println("时间差为:" + dateMinus); auditLog.setOnlineTime(dateMinus);
onlineTimeMap.put(token, dateMinus);
}else{ }else{
onlineTimeMap.put(token,"0分钟"); auditLog.setOnlineTime(Constants.DEFAULT_ONLINE_TIME);
} }
} }
System.out.println(onlineTimeMap);
for(AuditLog auditLog: auditLogs) {
auditLog.setOnlineTime(onlineTimeMap.get(auditLog.getToken()));
}
} }
......
...@@ -36,7 +36,21 @@ ...@@ -36,7 +36,21 @@
WHERE WHERE
al.state = 1 and al.operate_type in ('login','logout') al.state = 1 and al.operate_type in ('login','logout')
and al.token is not null and al.token<![CDATA[ <> ]]>"" and al.token is not null and al.token<![CDATA[ <> ]]>""
<if test="startDate!=null">
and al.create_date<![CDATA[ >= ]]> #{startDate}
</if >
<if test="endDate!=null">
and al.create_date<![CDATA[ <= ]]>#{endDate}
</if >
ORDER BY ORDER BY
al.create_date DESC al.create_date DESC
</select> </select>
<select id="getAllTokens" resultMap="BaseResultMap">
SELECT
al.*
FROM
audit_log al
WHERE
al.state = 1 and al.token=#{token}
</select>
</mapper> </mapper>
\ No newline at end of file
package com.hs.admin; package com.hs.admin;
import com.hs.admin.common.base.PageRequest;
import com.hs.admin.common.base.PageResult;
import com.hs.admin.model.AuditLog;
import com.hs.admin.model.reqmodel.AuditLogReq;
import com.hs.admin.model.reqmodel.UserReq;
import com.hs.admin.service.AuditLogService; import com.hs.admin.service.AuditLogService;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -7,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -7,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = HsAdminApplicationTests.class) @SpringBootTest(classes = HsAdminApplicationTests.class)
public class AuditLogServiceTest { public class AuditLogServiceTest {
...@@ -14,17 +24,19 @@ public class AuditLogServiceTest { ...@@ -14,17 +24,19 @@ public class AuditLogServiceTest {
private AuditLogService auditLogService; private AuditLogService auditLogService;
@Test @Test
public void testInfo() { public void testInfo() throws ParseException {
/*List<AuditLog> list = auditLogService.getAllAuditLog(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(list); Date startDate = sf.parse("2021-03-22 16:08:44");
UserReq.GetUserReq userReq = new UserReq.GetUserReq(); Date endDate = sf.parse("2021-03-22 17:50:52");
PageRequest page = new PageRequest(); AuditLogReq req = new AuditLogReq();
page.setPageNum(1); PageRequest pageRequest = new PageRequest();
page.setPageSize(10); pageRequest.setPageNum(1);
userReq.setUserName("hospital"); pageRequest.setPageSize(14);
userReq.setPage(page); req.setStartDate(startDate);
PageResult all = userService.getAllByPage(userReq); req.setEndDate(endDate);
System.out.println(all);*/ req.setPage(pageRequest);
PageResult allAuditLog = auditLogService.getAllAuditLog(req);
System.out.println(allAuditLog.getContent().size());
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment