From 3957f6234f6afa30fd9db20cbc3c9d5a93b93699 Mon Sep 17 00:00:00 2001 From: xia Date: Thu, 11 Aug 2022 16:00:50 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=97=A8=E7=A6=81=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archives/service/ArchivesTagService.java | 3 + .../service/impl/ArchivesTagServiceImpl.java | 8 ++ .../java/com/storeroom/utils/ExcelUtil.java | 89 +++++++++++++++++++ .../controller/SecurityDoorController.java | 69 ++++++++++++-- .../storeroom3d/domain/SecurityDoor.java | 21 +++-- .../repository/SecurityDoorRepository.java | 41 +++++++++ .../service/SecurityDoorService.java | 6 ++ .../service/impl/SecurityDoorServiceImpl.java | 36 ++++++++ 8 files changed, 262 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/com/storeroom/utils/ExcelUtil.java diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesTagService.java b/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesTagService.java index 36d03ed..e4ea52f 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesTagService.java +++ b/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); //初始化标签日志列表 diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesTagServiceImpl.java b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesTagServiceImpl.java index c76f3a6..f5b67b3 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesTagServiceImpl.java +++ b/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 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; diff --git a/common/src/main/java/com/storeroom/utils/ExcelUtil.java b/common/src/main/java/com/storeroom/utils/ExcelUtil.java new file mode 100644 index 0000000..39f8abd --- /dev/null +++ b/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 findAll() { - return ApiResponse.success(securityDoorService.queryStoreroom()); } + + @ApiOperation("门禁日志") + @AnonymousGetMapping("initSecurityDoorLog") + public ApiResponse 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> logs = securityDoorService.initSecurityDoorLog(roomName,deviceName,startTime,endTime); + String[] Etitle = {"序号","状态","库房","设备名称","档案信息","档号","事件","用户","警情描述","报警时间"}; + String [][] content = new String[logs.size()][]; + for(int i = 0;i 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(); + } + } } diff --git a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java index 13223ca..5c17ed9 100644 --- a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java +++ b/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; diff --git a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java index 25299de..75cd7b1 100644 --- a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java +++ b/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, JpaSpecificationExecutor { @@ -15,4 +19,41 @@ public interface SecurityDoorRepository extends JpaRepository findByStoreroomId(String storeroomId); + + @Query(nativeQuery = true, + value = "select * from archives_tag where tid = ?1") + Map findTagById(String tid); + + @Query(nativeQuery = true, + value = "select * from archives_summary where archives_id = ?1") + Map 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> 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> initSecurityDoorLog(String roomName, String deviceName, String startTime, String endTime); } diff --git a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java index 6f7035b..660c8bf 100644 --- a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java +++ b/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 queryStoreroom(); + + //门禁日志记录 + Object initSecurityDoorLog(String roomName, String deviceName,String startTime,String endTime, Pageable page); + List> initSecurityDoorLog(String roomName, String deviceName,String startTime,String endTime); } diff --git a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java b/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java index d98bbfc..b7ca16d 100644 --- a/storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java +++ b/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 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 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 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> 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); + } }