Browse Source

1.新增门禁日志模块

master
xia 3 years ago
parent
commit
3957f6234f
  1. 3
      archives/src/main/java/com/storeroom/modules/archives/service/ArchivesTagService.java
  2. 8
      archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesTagServiceImpl.java
  3. 89
      common/src/main/java/com/storeroom/utils/ExcelUtil.java
  4. 69
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/SecurityDoorController.java
  5. 21
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java
  6. 41
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java
  7. 6
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java
  8. 36
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java

3
archives/src/main/java/com/storeroom/modules/archives/service/ArchivesTagService.java

@ -1,5 +1,6 @@
package com.storeroom.modules.archives.service;
import com.storeroom.modules.archives.domain.ArchivesTag;
import com.storeroom.modules.archives.domain.ArchivesTagLog;
import com.storeroom.modules.archives.service.dto.CaseDTO;
import org.springframework.data.domain.Pageable;
@ -8,6 +9,8 @@ import java.util.List;
public interface ArchivesTagService {
//根据tid获取基本信息
ArchivesTag findTagById(String tid);
//初始化标签列表
Object initTagList(String tid, String query,Integer isType, Pageable page);
//初始化标签日志列表

8
archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesTagServiceImpl.java

@ -37,6 +37,14 @@ public class ArchivesTagServiceImpl implements ArchivesTagService {
@PersistenceContext
EntityManager entityManager;
@Override
public ArchivesTag findTagById(String tid) {
Optional<ArchivesTag> optional = archivesTagRepository.findById(tid);
if(optional.isPresent())
return optional.get();
return null;
}
@Override
public Object initTagList(String tid, String query, Integer isType, Pageable page) {
tid = null != tid ? "%"+tid+"%" : null;

89
common/src/main/java/com/storeroom/utils/ExcelUtil.java

@ -0,0 +1,89 @@
package com.storeroom.utils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class ExcelUtil {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
/**
* 导出Excel
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @param wb HSSFWorkbook对象
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){
// 第一步创建一个HSSFWorkbook对应一个Excel文件
if(wb == null){
wb = new HSSFWorkbook();
}
// 第二步在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第四步创建单元格并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
style.setVerticalAlignment(VerticalAlignment.CENTER);
//声明列对象
HSSFCell cell = null;
//创建标题
for(int i=0;i<title.length;i++){
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//创建内容
for(int i=0;i<values.length;i++){
row = sheet.createRow(i + 1);
for(int j=0;j<values[i].length;j++){
HSSFCell newCell = row.createCell(j);
//将内容按顺序赋给对应的列对象
newCell.setCellValue(values[i][j]);
newCell.setCellStyle(style);
}
}
return wb;
}
//发送响应流方法
public static void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName,"utf-8")+".xls");
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

69
storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/SecurityDoorController.java

@ -1,22 +1,33 @@
package com.storeroom.modules.storeroom3d.controller;
import com.storeroom.annotaion.rest.AnonymousGetMapping;
import com.storeroom.annotaion.rest.AnonymousPostMapping;
import com.storeroom.exception.BaseException;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import com.storeroom.modules.storeroom3d.service.SecurityDoorService;
import com.storeroom.utils.ApiResponse;
import com.storeroom.utils.ExcelUtil;
import com.storeroom.utils.StringUtils;
import com.storeroom.utils.enums.ResponseStatus;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.data.domain.Pageable;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api/securitydoor/")
@ -25,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
public class SecurityDoorController {
private final SecurityDoorService securityDoorService;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@ApiOperation("创建记录")
@AnonymousPostMapping("create")
@ -43,7 +55,52 @@ public class SecurityDoorController {
@ApiOperation("通过库房id查询门禁")
@AnonymousGetMapping("storeroom")
public ApiResponse<Object> findAll() {
return ApiResponse.success(securityDoorService.queryStoreroom());
}
@ApiOperation("门禁日志")
@AnonymousGetMapping("initSecurityDoorLog")
public ApiResponse<Object> initSecurityDoorLog(
String roomName, String deviceName,String startTime,String endTime, Pageable page
) {
return ApiResponse.success(securityDoorService.initSecurityDoorLog(roomName,deviceName,startTime,endTime,page));
}
@ApiOperation("导出门禁日志")
@AnonymousGetMapping("/exportSecurityDoorLogList")
@ResponseBody
public void exportSecurityDoorLogList(
HttpServletResponse response,
String roomName, String deviceName,String startTime,String endTime
){
List<Map<String,Object>> logs = securityDoorService.initSecurityDoorLog(roomName,deviceName,startTime,endTime);
String[] Etitle = {"序号","状态","库房","设备名称","档案信息","档号","事件","用户","警情描述","报警时间"};
String [][] content = new String[logs.size()][];
for(int i = 0;i<logs.size();i++){
content[i] = new String[Etitle.length];
Map<String,Object> map = logs.get(i);
content[i][0] = i+1+"";
Integer alarmLevel = Integer.parseInt(map.get("alarmLevel")==null?"0":map.get("alarmLevel")+"");
content[i][1] = alarmLevel ==0?"异常":"正常";
content[i][2] = map.get("roomName")+"";
content[i][3] = map.get("deviceName")+"";
content[i][4] = map.get("maintitle")+"";
content[i][5] = map.get("archiveNo")+"";
Integer alarmEvent = Integer.parseInt(map.get("alarmEvent")==null?"0":map.get("alarmEvent")+"");
content[i][6] = alarmEvent==0?"出":"进";
content[i][7] = map.get("borrowerName")+"";
content[i][8] = map.get("alarmMsg")+"";
content[i][9] = map.get("createTime")+"";
}
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("sheet",Etitle,content,null);
try {
ExcelUtil.setResponseHeader(response, "门禁日志"+format.format(new Date()));
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

21
storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java

@ -35,6 +35,22 @@ public class SecurityDoor extends BaseEntity implements Serializable {
@ApiModelProperty(value = "标签id")
private String tid;
@Column(name = "storeroom_id")
@ApiModelProperty(value = "库房id")
private String storeroomId;
@Column(name = "archives_id")
@ApiModelProperty(value = "档案id")
private String archivesId;
@Column(name = "maintitle")
@ApiModelProperty(value = "题名")
private String maintitle;
@Column(name = "archive_no")
@ApiModelProperty(value = "档号")
private String archiveNo;
@Column(name = "alarm_event")
@ApiModelProperty(value = "0:出门;1:进门")
private Integer alarmEvent;
@ -43,7 +59,6 @@ public class SecurityDoor extends BaseEntity implements Serializable {
@ApiModelProperty(value = "用户id")
private String userId;
@Column(name = "alarm_level")
@ApiModelProperty(value = "0:异常;1:正常")
private Integer alarmLevel;
@ -52,10 +67,6 @@ public class SecurityDoor extends BaseEntity implements Serializable {
@ApiModelProperty(value = "描述")
private String alarmMsg;
@Column(name = "storeroom_id")
@ApiModelProperty(value = "库房id")
private String storeroomId;
@Override
public boolean equals(Object o) {
if (this == o) return true;

41
storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java

@ -2,10 +2,14 @@ package com.storeroom.modules.storeroom3d.repository;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Map;
public interface SecurityDoorRepository extends JpaRepository<SecurityDoor, String>, JpaSpecificationExecutor<SecurityDoor> {
@ -15,4 +19,41 @@ public interface SecurityDoorRepository extends JpaRepository<SecurityDoor, Stri
* @return
*/
List<SecurityDoor> findByStoreroomId(String storeroomId);
@Query(nativeQuery = true,
value = "select * from archives_tag where tid = ?1")
Map<String,Object> findTagById(String tid);
@Query(nativeQuery = true,
value = "select * from archives_summary where archives_id = ?1")
Map<String,String> findArchivesById(String archivesId);
@Query(nativeQuery = true,
countQuery = "select count(1) " +
"from security_door sdr inner join device_info di on sdr.device_id = di.id " +
"inner join storeroom room on sdr.storeroom_id = room.id left join borrower br on sdr.user_id = br.id " +
"where if(?1 is null,1=1,room.name like ?1) " +
"and if(?2 is null,1=1,di.device_name like ?2) " +
"and if(?3 is null,1=1,sdr.create_time >= ?3) " +
"and if(?4 is null,1=1,sdr.create_time <= ?4) ",
value = "select sdr.id as id,sdr.alarm_level as alarmLevel,room.name as roomName,di.device_name as deviceName,sdr.maintitle as maintitle," +
"sdr.archive_no as archiveNo,sdr.alarm_msg as alarmMsg,sdr.alarm_event as alarmEvent,br.borrower_name as borrowerName,sdr.create_time as createTime " +
"from security_door sdr inner join device_info di on sdr.device_id = di.id " +
"inner join storeroom room on sdr.storeroom_id = room.id left join borrower br on sdr.user_id = br.id " +
"where if(?1 is null,1=1,room.name like ?1) " +
"and if(?2 is null,1=1,di.device_name like ?2) " +
"and if(?3 is null,1=1,sdr.create_time >= ?3) " +
"and if(?4 is null,1=1,sdr.create_time <= ?4) order by sdr.create_time desc ")
Page<Map<String,Object>> initSecurityDoorLog(String roomName, String deviceName, String startTime, String endTime, Pageable page);
@Query(nativeQuery = true,
value = "select sdr.id as id,sdr.alarm_level as alarmLevel,room.name as roomName,di.device_name as deviceName,sdr.maintitle as maintitle," +
"sdr.archive_no as archiveNo,sdr.alarm_msg as alarmMsg,sdr.alarm_event as alarmEvent,br.borrower_name as borrowerName,sdr.create_time as createTime " +
"from security_door sdr inner join device_info di on sdr.device_id = di.id " +
"inner join storeroom room on sdr.storeroom_id = room.id left join borrower br on sdr.user_id = br.id " +
"where if(?1 is null,1=1,room.name like ?1) " +
"and if(?2 is null,1=1,di.device_name like ?2) " +
"and if(?3 is null,1=1,sdr.create_time >= ?3) " +
"and if(?4 is null,1=1,sdr.create_time <= ?4) order by sdr.create_time desc ")
List<Map<String,Object>> initSecurityDoorLog(String roomName, String deviceName, String startTime, String endTime);
}

6
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java

@ -1,12 +1,18 @@
package com.storeroom.modules.storeroom3d.service;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
public interface SecurityDoorService {
void create(SecurityDoor securityDoor);
List<SecurityDoor> queryStoreroom();
//门禁日志记录
Object initSecurityDoorLog(String roomName, String deviceName,String startTime,String endTime, Pageable page);
List<Map<String,Object>> initSecurityDoorLog(String roomName, String deviceName,String startTime,String endTime);
}

36
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java

@ -1,6 +1,10 @@
package com.storeroom.modules.storeroom3d.service.impl;
import com.alibaba.fastjson.JSONObject;
//import com.storeroom.modules.archives.domain.ArchivesSummary;
//import com.storeroom.modules.archives.domain.ArchivesTag;
//import com.storeroom.modules.archives.service.ArchivesService;
//import com.storeroom.modules.archives.service.ArchivesTagService;
import com.storeroom.modules.device.domain.Storeroom;
import com.storeroom.modules.device.repository.StoreroomRepository;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
@ -8,7 +12,10 @@ import com.storeroom.modules.storeroom3d.repository.SecurityDoorRepository;
import com.storeroom.modules.storeroom3d.service.SecurityDoorService;
import com.storeroom.utils.FastjsonUtils;
import com.storeroom.utils.NanoIdUtils;
import com.storeroom.utils.PageUtil;
import com.storeroom.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -28,6 +35,21 @@ public class SecurityDoorServiceImpl implements SecurityDoorService {
@Transactional(rollbackFor = Exception.class)
public void create(SecurityDoor securityDoor) {
securityDoor.setId(NanoIdUtils.randomNanoId());
//根据tid获取表现详细信息
Map<String,Object> tag = securityDoorRepository.findTagById(securityDoor.getTid());
//当能查到标签时
if(null != tag){
Integer isType = tag.get("is_type") == null? 0 : Integer.parseInt(tag.get("is_type").toString());
if(isType == 1){
Map<String,String> archives = securityDoorRepository.findArchivesById(tag.get("parents_id")+"");
if(null != archives){
securityDoor.setArchivesId(archives.get("archives_id"));
securityDoor.setArchiveNo(archives.get("archive_no"));
securityDoor.setMaintitle(archives.get("maintitle"));
}
}
}
PushServiceImpl pushService = new PushServiceImpl();
Object obj = JSONObject.toJSON(securityDoor);
@ -40,4 +62,18 @@ public class SecurityDoorServiceImpl implements SecurityDoorService {
public List<SecurityDoor> queryStoreroom() {
return securityDoorRepository.findAll();
}
@Override
public Object initSecurityDoorLog(String roomName, String deviceName, String startTime, String endTime, Pageable page) {
roomName = StringUtils.isEmpty(roomName) ? null : "%"+ roomName +"%";
deviceName = StringUtils.isEmpty(deviceName) ? null : "%"+ deviceName +"%";
return PageUtil.toPage(securityDoorRepository.initSecurityDoorLog(roomName,deviceName,startTime,endTime,page));
}
@Override
public List<Map<String, Object>> initSecurityDoorLog(String roomName, String deviceName, String startTime, String endTime) {
roomName = StringUtils.isEmpty(roomName) ? null : "%"+ roomName +"%";
deviceName = StringUtils.isEmpty(deviceName) ? null : "%"+ deviceName +"%";
return securityDoorRepository.initSecurityDoorLog(roomName,deviceName,startTime,endTime);
}
}
Loading…
Cancel
Save