diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-iris-acs/pom.xml b/casic-iris-acs/pom.xml index c13d0cf..173a3ef 100644 --- a/casic-iris-acs/pom.xml +++ b/casic-iris-acs/pom.xml @@ -10,7 +10,6 @@ casic-iris-acs - ${pro.version} jar casic-iris-acs 虹膜门禁系统 Access Control System @@ -20,39 +19,42 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + provided + ${office.version} com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 71b3a85..df051e9 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -51,57 +51,73 @@ - - - + + + com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} + + + com.casic + casic-file-support + ${extension.version} com.casic casic-admin-core - ${casic.version} + ${admin.version} com.casic casic-admin-area - ${casic.version} + ${admin.version} com.casic casic-admin-init - ${casic.version} - - - com.casic - casic-metadata-core - ${casic.version} + ${admin.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} + + + com.casic + casic-metadata-core + ${extension.version} + + + com.casic + casic-expands-office + ${office.version} + + + com.casic + casic-export-support + ${admin.version} com.casic casic-admin-export - ${casic.version} + ${admin.version} com.casic casic-file - ${casic.version} + ${extension.version} + com.casic casic-iris-support @@ -159,9 +175,9 @@ true - - - + + + com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 71b3a85..df051e9 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -51,57 +51,73 @@ - - - + + + com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} + + + com.casic + casic-file-support + ${extension.version} com.casic casic-admin-core - ${casic.version} + ${admin.version} com.casic casic-admin-area - ${casic.version} + ${admin.version} com.casic casic-admin-init - ${casic.version} - - - com.casic - casic-metadata-core - ${casic.version} + ${admin.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} + + + com.casic + casic-metadata-core + ${extension.version} + + + com.casic + casic-expands-office + ${office.version} + + + com.casic + casic-export-support + ${admin.version} com.casic casic-admin-export - ${casic.version} + ${admin.version} com.casic casic-file - ${casic.version} + ${extension.version} + com.casic casic-iris-support @@ -159,9 +175,9 @@ true - - - + + + com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 71b3a85..df051e9 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -51,57 +51,73 @@ - - - + + + com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} + + + com.casic + casic-file-support + ${extension.version} com.casic casic-admin-core - ${casic.version} + ${admin.version} com.casic casic-admin-area - ${casic.version} + ${admin.version} com.casic casic-admin-init - ${casic.version} - - - com.casic - casic-metadata-core - ${casic.version} + ${admin.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} + + + com.casic + casic-metadata-core + ${extension.version} + + + com.casic + casic-expands-office + ${office.version} + + + com.casic + casic-export-support + ${admin.version} com.casic casic-admin-export - ${casic.version} + ${admin.version} com.casic casic-file - ${casic.version} + ${extension.version} + com.casic casic-iris-support @@ -159,9 +175,9 @@ true - - - + + + com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 71b3a85..df051e9 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -51,57 +51,73 @@ - - - + + + com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} + + + com.casic + casic-file-support + ${extension.version} com.casic casic-admin-core - ${casic.version} + ${admin.version} com.casic casic-admin-area - ${casic.version} + ${admin.version} com.casic casic-admin-init - ${casic.version} - - - com.casic - casic-metadata-core - ${casic.version} + ${admin.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} + + + com.casic + casic-metadata-core + ${extension.version} + + + com.casic + casic-expands-office + ${office.version} + + + com.casic + casic-export-support + ${admin.version} com.casic casic-admin-export - ${casic.version} + ${admin.version} com.casic casic-file - ${casic.version} + ${extension.version} + com.casic casic-iris-support @@ -159,9 +175,9 @@ true - - - + + + com.casic casic-admin-support - ${casic.version} - - - com.casic - casic-iris-support - ${casic.version} + ${admin.version} com.casic casic-iris-device - ${casic.version} + provided + ${pro.version} + + + com.casic + casic-iris-support + ${pro.version} + + + com.casic + casic-export-support + ${admin.version} + compile diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java index c13f119..513e616 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/RecognitionRecordsController.java @@ -80,10 +80,10 @@ */ @RequestMapping(value = "/listRecord") @ResponseBody - public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime){ + public Object listRecord(String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime, String deviceType){ Page> page = new PageFactory>().defaultPage(); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); page.setRecords(list); return ResponseData.success(super.packForBT(page)); @@ -94,13 +94,13 @@ */ @RequestMapping(value = "/exportRecord") @ResponseBody - public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime) throws IOException { + public void exportRecord(HttpServletResponse response,String keyword,Long personDeptId,String doorCode,String devCode,String isAbnormal,String beginTime,String endTime,String deviceType) throws IOException { Page> page = new PageFactory>().defaultPage(); page.setCurrent(1); page.setSearchCount(false); page.setSize(Integer.MAX_VALUE); DataScope dataScope = permissionService.getCurrUserDataScope(); - List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime); + List> list = recordsService.selectRecordScopePage(dataScope,page,keyword,personDeptId,doorCode,devCode,isAbnormal,beginTime,endTime,deviceType); new RecognitionRecordsWarpper(list).warp(); super.exportExcel(AcsExportEnum.RECORDS_EXPORT, list, response); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java new file mode 100644 index 0000000..ec90990 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/controller/StatisticController.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.Map; + +@Controller +public class StatisticController { + + @Autowired + private IStatisticService statisticService; + + @RequestMapping("/device/countByType") + @ResponseBody + public Object countDeviceByType() { + Map map = statisticService.countDeviceByType(); + return ResponseData.success(map); + } + + @RequestMapping("/statistic/peopleCountByDevice") + @ResponseBody + public Object peopelCountByDevice(String startTime,String endTime) { + List list = statisticService.peopleCountByDevice(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByDept") + @ResponseBody + public Object peopelCountByDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/peopleCountByParentDept") + @ResponseBody + public Object peopleCountByParentDept(String startTime,String endTime) { + List> list = statisticService.peopleCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + /** + * 按部门统计打印 + */ + @Deprecated + @RequestMapping("/statistic/printCountByDept") + @ResponseBody + public Object printCountByDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,false); + return ResponseData.success(list); + } + + /** + * 按部门统计打印(不需要了) + */ + @Deprecated + @RequestMapping("/statistic/printCountByParentDept") + @ResponseBody + public Object printCountByParentDept(String startTime,String endTime) { + List> list = statisticService.printCountByDept(startTime, endTime,true); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/canteenCountByDept") + @ResponseBody + public Object canteenCountByDept(String startTime,String endTime) { + List> list = statisticService.canteenCountByDept(startTime, endTime); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyTime") + @ResponseBody + public Object countbyTime(String startDate, String endDate){ + List> list = statisticService.countByTime(startDate,endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyDay") + @ResponseBody + public Object countbyDay(String startDate, String endDate){ + List> list = statisticService.countByDate(startDate, endDate); + return ResponseData.success(list); + } + + @RequestMapping("/statistic/countbyLocation") + @ResponseBody + public Object countbyLocation(String startTime,String endTime) { + List> list = statisticService.countByLocation(startTime, endTime); + return ResponseData.success(list); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java index d593676..707d627 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/RecognitionRecordsMapper.java @@ -22,7 +22,7 @@ List> selectStaffDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); List> selectVisitorDataScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("doorCode")String doorCode, @Param("devCode")String devCode, @Param("beginTime")String beginTime, @Param("endTime")String endTime); - List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime); + List> selectRecordScopePage(@Param("dataScope")DataScope dataScope, @Param("page")Page page, @Param("keyword")String keyword, @Param("personDeptId")Long personDeptId, @Param("doorCode")String doorCode, @Param("devCode")String devCode,@Param("isAbnormal") String isAbnormal, @Param("beginTime")String beginTime, @Param("endTime")String endTime, @Param("deviceType")String deviceType); List> statisticByDept(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("inoutType") String inoutType); Integer statisticByPerson(@Param("doorCode") String doorCode,@Param("deptIds")String deptIds, @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("deptId")Long deptId,@Param("personId")Long personId,@Param("inoutType") String inoutType); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..82ebe7d --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface StatisticMapper { + + Map countDeviceByType(); + + List peopleCountByDevice(@Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + + List> peopleCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> peopleCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> printCountByParentDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> canteenCountByDept(@Param("deptIds")List deptIds,@Param("startTime")String startTime,@Param("endTime")String endTime); + + List> countByTime(@Param("deptIds")List deptIds,@Param("startDate")String startDate, @Param("endDate")String endDate); + + List selectByDay(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("deptIds")List deptIds); + + Map countByDevcodes(@Param("devCodes")String[] devcodes, @Param("deptIds")List deptIds, @Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml index 18e1925..4f5b121 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/AcsPermissionMapper.xml @@ -29,7 +29,7 @@ FROM acs_door door LEFT JOIN acs_permission per ON per.DOOR_CODE = door.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID WHERE p.DELFLAG = '0' OR p.DELFLAG IS NULL GROUP BY door.DOOR_CODE @@ -49,7 +49,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '1' @@ -76,7 +76,7 @@ per.ID AS permissionId FROM acs_permission per LEFT JOIN acs_door door ON door.DOOR_CODE = per.DOOR_CODE - LEFT JOIN person_ext_view p ON per.PERSON_ID = p.ID + LEFT JOIN sys_person p ON per.PERSON_ID = p.ID LEFT JOIN acs_strategy stra ON per.STRATEGY_ID = stra.ID WHERE per.DOOR_CODE = #{doorCode} AND p.PERSON_TYPE = '0' @@ -100,7 +100,7 @@ ID_CARD_NO as idCard, REMARKS as remarks, PERSON_CODE AS personCode - FROM person_ext_view + FROM sys_person WHERE ID NOT IN (SELECT PERSON_ID FROM acs_permission WHERE DOOR_CODE = #{doorCode}) AND PERSON_TYPE = #{personType} AND DELFLAG = '0' diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml index 2f928ef..df33fc6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dao/mapping/RecognitionRecordsMapper.xml @@ -118,8 +118,9 @@ FROM `recognition_records` re LEFT JOIN acs_door door ON door.DOOR_CODE = re.DOOR_CODE - LEFT JOIN person_ext_view p ON p.ID = re.PERSON_ID - WHERE p.PERSON_TYPE = 1 + LEFT JOIN sys_person p ON p.ID = re.PERSON_ID + LEFT JOIN bus_device device ON device.DEV_CODE = re.DEV_CODE + WHERE 1 = 1 AND ( p.NAME LIKE CONCAT('%',#{keyword},'%') OR p.ID_CARD_NO LIKE CONCAT('%',#{keyword},'%')) @@ -149,6 +150,9 @@ AND re.DATETIME #{endTime} + + AND device.DEV_TYPE LIKE CONCAT('%',#{deviceType},'%') + + SELECT + count(*) AS total, + SUM(case when DEV_TYPE like '%3%' then 1 else 0 end) as temp, + SUM(case when DEV_TYPE like '%1%' then 1 else 0 end) as door, + SUM(case when DEV_TYPE like '%4%' then 1 else 0 end) as print + FROM bus_device + + + + + + + + + + + + + + + + + + + + + + diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java new file mode 100644 index 0000000..0765d4a --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/dto/DeviceStatisticDTO.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceStatisticDTO { + private String deviceName; + private String deviceCode; + private int count; + private int temp1; + private int temp2; + private int temp3; + private int temp4; + + public DeviceStatisticDTO(String deviceName) { + this.deviceName = deviceName; + this.count = 0; + this.temp1 = 0; + this.temp2 = 0; + this.temp3 = 0; + this.temp4 = 0; + } + + public DeviceStatisticDTO(String deviceName, String deviceCode, BigDecimal count, BigDecimal temp1, BigDecimal temp2, BigDecimal temp3, BigDecimal temp4) { + this.deviceName = deviceName; + this.deviceCode = deviceCode; + this.count = count.intValue(); + this.temp1 = temp1.intValue(); + this.temp2 = temp2.intValue(); + this.temp3 = temp3.intValue(); + this.temp4 = temp4.intValue(); + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java index 3811ebd..940acb6 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IRecognitionRecordsService.java @@ -20,7 +20,7 @@ List> selectStaffDataScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); List> selectVisitorDataScopePage(DataScope dataScope, Page page, String keyword, String doorCode, String devCode, String beginTime, String endTime); - List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime); + List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType); List> statisticByDept(String doorCode,String beginTime, String endTime,String inoutType); List> statisticByPerson(String doorCode,String beginTime, String endTime,Long deptId, Long personId); diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java new file mode 100644 index 0000000..4bab8ca --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/IStatisticService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; + +import java.util.List; +import java.util.Map; + +public interface IStatisticService { + + Map countDeviceByType(); + + List peopleCountByDevice(String startTime, String endTime); + + List> peopleCountByDept(String startTime, String endTime, boolean parent); + + List> printCountByDept(String startTime, String endTime, boolean parent); + + List> canteenCountByDept(String startTime, String endTime); + + List> countByTime(String startDate, String endDate); + + List> countByDate(String startDate, String endDate); + + List> countByLocation(String startTime, String endTime); + + +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java index 47cea35..f217cb0 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/RecognitionRecordsServiceImpl.java @@ -76,8 +76,8 @@ } @Override - public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime) { - List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime); + public List> selectRecordScopePage(DataScope dataScope, Page page, String keyword, Long personDeptId, String doorCode, String devCode, String isAbnormal, String beginTime, String endTime,String deviceType) { + List> list = this.baseMapper.selectRecordScopePage(dataScope, page, keyword, personDeptId, doorCode, devCode, isAbnormal, beginTime, endTime,deviceType); for (Map res : list) { if(ToolUtil.isNotEmpty(res.get("personDeptId"))) { Long deptid = Long.valueOf(String.valueOf(res.get("personDeptId"))); @@ -295,6 +295,7 @@ record.setDoorCode(rs.getString("DOOR_CODE")); record.setInoutType(rs.getString("INOUT_TYPE")); record.setTemperature(rs.getString("TEMPERATURE")); + record.setSyncTime(new Date()); record.setDevIp(ip); recordsList.add(record); } diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..f1ed1c6 --- /dev/null +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,369 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.shiro.ShiroUser; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.dto.DeviceStatisticDTO; +import com.casic.missiles.modular.system.model.RecognitionRecords; +import com.casic.missiles.modular.system.service.IStatisticService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class StatisticServiceImpl implements IStatisticService { + @Resource + private StatisticMapper statisticMapper; + @Autowired + private ICommonPermissionService permissionService; + + @Override + public Map countDeviceByType() { + return statisticMapper.countDeviceByType(); + } + + @Override + public List peopleCountByDevice(String startTime,String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List devList = this.statisticMapper.peopleCountByDevice(deptIds,startTime,endTime); + List resList = new ArrayList<>(); + // 几个固定需要合并的 + DeviceStatisticDTO _99Garage = new DeviceStatisticDTO("99号楼负一层车库"); + DeviceStatisticDTO _99Canteen = new DeviceStatisticDTO("99号楼负一层食堂"); + DeviceStatisticDTO _99Gate = new DeviceStatisticDTO("99号楼一层正门"); + DeviceStatisticDTO _99Floor_1 = new DeviceStatisticDTO("99号楼负一层闸机"); + DeviceStatisticDTO _99Floor1 = new DeviceStatisticDTO("99号楼一层机房"); + DeviceStatisticDTO _99Floor2 = new DeviceStatisticDTO("99号楼二层机房"); + DeviceStatisticDTO _99Floor4 = new DeviceStatisticDTO("99号楼四层"); + + for (DeviceStatisticDTO statisticDTO : devList) { + switch (statisticDTO.getDeviceCode()){ + // 99号楼负一层自行车库 + case "782020040003": + case "782020020014": + addDeviceStatisticDTO(_99Garage,statisticDTO); + break; + // 99号楼负一层食堂 + case "782020020004": + case "782020070003": + addDeviceStatisticDTO(_99Canteen,statisticDTO); + break; + // 99号楼一层正门 + case "782020040004": + case "782020040005": + addDeviceStatisticDTO(_99Gate,statisticDTO); + break; + // 99号楼负一层闸机 + case "782020070004": + case "782020030001": + addDeviceStatisticDTO(_99Floor_1,statisticDTO); + break; + // 99号楼一层机房 + case "752020010003": + case "752020010004": + addDeviceStatisticDTO(_99Floor1,statisticDTO); + break; + // 99号楼二层机房 + case "752020020003": + case "752020020002": + case "752020020001": + addDeviceStatisticDTO(_99Floor2,statisticDTO); + break; + // 99号楼四层 + case "752020010002": + case "752020010005": + addDeviceStatisticDTO(_99Floor4,statisticDTO); + break; + default: + resList.add(statisticDTO); + break; + } + } + resList.add(_99Garage); + resList.add(_99Canteen); + resList.add(_99Gate); + resList.add(_99Floor_1); + resList.add(_99Floor1); + resList.add(_99Floor2); + resList.add(_99Floor4); + return resList; + } + + private void addDeviceStatisticDTO(DeviceStatisticDTO sum,DeviceStatisticDTO tmp){ + sum.setCount(sum.getCount() + tmp.getCount()); + sum.setTemp1(sum.getTemp1() + tmp.getTemp1()); + sum.setTemp2(sum.getTemp2() + tmp.getTemp2()); + sum.setTemp3(sum.getTemp3() + tmp.getTemp3()); + sum.setTemp4(sum.getTemp4() + tmp.getTemp4()); + } + + @Override + public List> peopleCountByDept(String startTime, String endTime,boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.peopleCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.peopleCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> printCountByDept(String startTime, String endTime, boolean parent) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = new ArrayList<>(); + if(parent){ + list = this.statisticMapper.printCountByParentDept(deptIds,startTime,endTime); + }else{ + list = this.statisticMapper.printCountByDept(deptIds,startTime,endTime); + } + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> canteenCountByDept(String startTime, String endTime) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + List> list = statisticMapper.canteenCountByDept(deptIds,startTime,endTime); + convDeptName(list); + processEmptyList(list); + return list; + } + + @Override + public List> countByTime(String startDate, String endDate) { + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + + if(ToolUtil.isEmpty(startDate)){ + startDate = DateUtil.getDay(); + } + if(ToolUtil.isEmpty(endDate)){ + endDate = DateUtil.getDay(); + } + List> list = this.statisticMapper.countByTime(deptIds,startDate,endDate); + for (Map map : list) { + map.replace("time",map.get("time").toString()+"时"); + } + return list; + } + + @Override + public List> countByDate(String startDate, String endDate) { + long time1 = System.currentTimeMillis(); + // 默认7天 + if(ToolUtil.isEmpty(startDate)){ + startDate = get7DaysAgo(); + } + if(ToolUtil.isEmpty(endDate)) { + endDate = DateUtil.getDay(); + } + List dates = getDateRange(startDate, endDate); + List> res = new ArrayList<>(); + Map> resMap = new HashMap<>(); + // 每个日期生成一个map + for (String date : dates) { + Map map = new HashMap<>(); + map.put("date",date); + map.put("total",0); + map.put("temp",0); + res.add(map); + resMap.put(date,map); + } + long time2 = System.currentTimeMillis(); + System.out.println("-------------------程序运行时间1-2:"+ (time2 - time1) + "ms"); + List deptIds = permissionService.getCurrUserDataScope().getDeptIds(); + // 获取日期内的识别记录 + List records = statisticMapper.selectByDay(startDate,endDate,deptIds); + long time3 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间2-3:"+ (time3 - time2) + "ms"); + for (RecognitionRecords record : records) { + String date = DateUtil.formatDate(record.getDatetime(),"yyyy-MM-dd"); + if(ToolUtil.isNotEmpty(record.getInoutType()) || "782020040004".equals(record.getDevCode()) || "782020040005".equals(record.getDevCode())){ + Map dateMap = resMap.get(date); + dateMap.replace("total",Integer.valueOf(dateMap.get("total").toString()) + 1); + } + if(ToolUtil.isNotEmpty(record.getTemperature())){ + Map dateMap = resMap.get(date); + dateMap.replace("temp",Integer.valueOf(dateMap.get("temp").toString()) + 1); + } + } + long time4 = System.currentTimeMillis(); + System.out.println("---------------------程序运行时间3-4:"+ (time4 - time3) + "ms"); + return res; + } + + @Override + public List> countByLocation(String startTime, String endTime) { + List> res = new ArrayList<>(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + if(ToolUtil.isEmpty(startTime)){ + startTime = getZeroTime(); + } + if(ToolUtil.isEmpty(endTime)) { + endTime = getTwelveTime(); + } + + // 99号楼负一层食堂 + String[] devocdes1 = new String[]{"782020020004","782020070003"}; + Map map1 = statisticMapper.countByDevcodes(devocdes1,dataScope.getDeptIds(),startTime,endTime); + Map res1 = new HashMap<>(); + res1.put("temp",map1.get("temp").toString()); + res1.put("normal",map1.get("normal").toString()); + res1.put("abnormal",map1.get("abnormal").toString()); + res.add(res1); + // 99号楼负一层闸机 + String[] devocdes2 = new String[]{"782020070004","782020030001"}; + Map map2 = statisticMapper.countByDevcodes(devocdes2,dataScope.getDeptIds(),startTime,endTime); + Map res2 = new HashMap<>(); + res2.put("count",map2.get("count").toString()); + res2.put("normal",map2.get("normal").toString()); + res2.put("abnormal",map2.get("abnormal").toString()); + res.add(res2); + // 99号楼一层正门 + String[] devocdes3 = new String[]{"782020040004","782020040005"}; + Map map3 = statisticMapper.countByDevcodes(devocdes3,dataScope.getDeptIds(),startTime,endTime); + Map res3 = new HashMap<>(); + res3.put("count",map3.get("count").toString()); + res3.put("normal",map3.get("normal").toString()); + res3.put("abnormal",map3.get("abnormal").toString()); + res.add(res3); + // 99号楼一层货梯 + String[] devocdes4 = new String[]{"782020020005"}; + Map map4 = statisticMapper.countByDevcodes(devocdes4,dataScope.getDeptIds(),startTime,endTime); + Map res4 = new HashMap<>(); + res4.put("temp",map4.get("temp").toString()); + res4.put("normal",map4.get("normal").toString()); + res4.put("abnormal",map4.get("abnormal").toString()); + res.add(res4); + // 99号楼四层西 + String[] devocdes5 = new String[]{"752020010002"}; + Map map5 = statisticMapper.countByDevcodes(devocdes5,dataScope.getDeptIds(),startTime,endTime); + Map res5 = new HashMap<>(); + res5.put("count",map5.get("count").toString()); + res.add(res5); + // 99号楼四层东 + String[] devocdes6 = new String[]{"752020010005"}; + Map map6 = statisticMapper.countByDevcodes(devocdes6,dataScope.getDeptIds(),startTime,endTime); + Map res6 = new HashMap<>(); + res6.put("count",map6.get("count").toString()); + res.add(res6); + // 院机关八层打印室 + String[] devocdes7 = new String[]{"752020010001"}; + Map map7 = statisticMapper.countByDevcodes(devocdes7,dataScope.getDeptIds(),startTime,endTime); + Map res7 = new HashMap<>(); + res7.put("print",map7.get("print").toString()); + res.add(res7); + return res; + } + + /** + * 获取当天0点时间 + * @return + */ + private String getZeroTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return DateUtil.getTime(zero); + } + + private String get7DaysAgo(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH,-7); + return DateUtil.getDay(calendar.getTime()); + } + + /** + * 获取当天24点时间 + * @return + */ + private String getTwelveTime() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date twelve = calendar.getTime(); + return DateUtil.getTime(twelve); + } + + private List getDateRange(String startDate, String endDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = DateUtil.parseDate(startDate); + Date d2 = DateUtil.parseDate(endDate); + //定义日期实例 + Calendar cal = Calendar.getInstance(); + //设置日期起始时间 + cal.setTime(d1); + List dates = new ArrayList<>(); + //判断是否到结束日期 + while(cal.getTime().before(d2)){ + String str = sdf.format(cal.getTime()); + dates.add(str); + //进行当前日期月份加1 + cal.add(Calendar.DAY_OF_MONTH, 1); + } + dates.add(sdf.format(d2.getTime())); + return dates; + } + + + private void convDeptName(List> list) { + for (Map map : list) { + if(ToolUtil.isNotEmpty(map.get("deptId"))){ + String deptId = String.valueOf(map.get("deptId")); + String deptName = permissionService.getDeptName(deptId); + map.put("deptName",deptName); + } + } + } + + private void processEmptyList(List> list) { + if(ToolUtil.isEmpty(list)){ + Map emptyResult = new HashMap<>(); + ShiroUser currentUser = permissionService.getCurrLoginUser(); + emptyResult.put("deptId",currentUser.getDeptId()); + emptyResult.put("deptName",currentUser.getDeptName()); + emptyResult.put("count",0); + list.add(emptyResult); + } + } +} diff --git a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java index 7039478..0cbb418 100644 --- a/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java +++ b/casic-iris-acs/src/main/java/com/casic/missiles/modular/system/task/RecordTask.java @@ -9,10 +9,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Component @@ -23,15 +27,24 @@ private IDeviceService deviceService; @Autowired private IRecognitionRecordsService recordsService; + @Value("${casic.iris.sync.interval}") + private Integer interval; @Scheduled(cron = "${casic.iris.sync.cron}") public void job(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + String endTime = sdf.format(calendar.getTime()); + calendar.add(Calendar.MINUTE,0-interval); + String startTime = sdf.format(calendar.getTime()); + System.out.println(sdf.format(new Date()) + ":" + startTime + " " + endTime); + List deviceList = deviceService.selectList(null); List deviceIds = new ArrayList<>(); for (Device device : deviceList) { deviceIds.add(Long.valueOf(device.getId())); } - List errorCode = recordsService.syncRecords(deviceIds,null,null); + List errorCode = recordsService.syncRecords(deviceIds,startTime,endTime); if(ToolUtil.isNotEmpty(errorCode)){ logger.info("scheuled job, error:" + StringUtils.join(errorCode,",")); }else { diff --git a/casic-iris-atd/pom.xml b/casic-iris-atd/pom.xml index 511129e..fc075a6 100644 --- a/casic-iris-atd/pom.xml +++ b/casic-iris-atd/pom.xml @@ -8,9 +8,7 @@ 1.0.0-SNAPSHOT ../pom.xml - casic-iris-atd - ${pro.version} jar casic-iris-atd 虹膜考勤系统 Attendance System @@ -20,39 +18,39 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-expands-office - 1.0.0-SNAPSHOT + ${office.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-device/pom.xml b/casic-iris-device/pom.xml index 60207ce..e2c1c35 100644 --- a/casic-iris-device/pom.xml +++ b/casic-iris-device/pom.xml @@ -10,7 +10,6 @@ casic-iris-device - ${pro.version} jar casic-iris-device 设备管理 @@ -21,14 +20,14 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml index 007d778..a265222 100644 --- a/casic-iris-register/pom.xml +++ b/casic-iris-register/pom.xml @@ -10,7 +10,6 @@ casic-iris-register - ${pro.version} jar casic-iris-register 虹膜注册 @@ -21,28 +20,28 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-metadata-support - ${casic.version} + ${extension.version} com.casic casic-export-support - ${casic.version} + ${admin.version} com.casic casic-file-support - ${casic.version} + ${extension.version} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java new file mode 100644 index 0000000..bb379bc --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -0,0 +1,196 @@ +package com.casic.missiles.modular.register.controller; + +import com.baomidou.mybatisplus.toolkit.IdWorker; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; +import java.util.*; + +@Controller +public class IrisOfflineController { + @Autowired + private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; + + @RequestMapping("/dept/listAll") + @ResponseBody + public Object deptListAll(){ + List depts = deptService.getDeptByTips(null); + List deptDTOS = new ArrayList<>(); + for (Dept dept : depts) { + deptDTOS.add(DeptDTO.convDeptToDTO(dept)); + } + return ResponseData.success(deptDTOS); + } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java new file mode 100644 index 0000000..449b7ca --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/DeptDTO.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.register.dto; + +import com.casic.missiles.modular.system.model.Dept; +import lombok.Data; + +@Data +public class DeptDTO { + private Long id; + private Integer num; + private Long pid; + private String pids; + private String simplename; + private String fullname; + private String tips; + private Integer version; + + public static DeptDTO convDeptToDTO(Dept dept){ + DeptDTO deptDTO = new DeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setNum(dept.getNum()); + deptDTO.setPid(dept.getPid()); + deptDTO.setPids(dept.getPids()); + deptDTO.setSimplename(dept.getSimplename()); + deptDTO.setFullname(dept.getFullname()); + deptDTO.setTips(dept.getTips()); + deptDTO.setVersion(dept.getVersion()); + return deptDTO; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java index 105479d..e384542 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java index 03b88a1..71ba6a8 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream(); + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput(); + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + } diff --git a/casic-iris-support/pom.xml b/casic-iris-support/pom.xml index 5732dfd..0796b62 100644 --- a/casic-iris-support/pom.xml +++ b/casic-iris-support/pom.xml @@ -20,13 +20,13 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 71b3a85..df051e9 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -51,57 +51,73 @@ - - - + + + com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} + + + com.casic + casic-file-support + ${extension.version} com.casic casic-admin-core - ${casic.version} + ${admin.version} com.casic casic-admin-area - ${casic.version} + ${admin.version} com.casic casic-admin-init - ${casic.version} - - - com.casic - casic-metadata-core - ${casic.version} + ${admin.version} com.casic casic-export-support - 1.0.0-SNAPSHOT + ${admin.version} + + + com.casic + casic-metadata-core + ${extension.version} + + + com.casic + casic-expands-office + ${office.version} + + + com.casic + casic-export-support + ${admin.version} com.casic casic-admin-export - ${casic.version} + ${admin.version} com.casic casic-file - ${casic.version} + ${extension.version} + com.casic casic-iris-support @@ -159,9 +175,9 @@ true - - - + + + + 1.0.0.alpha + + + 1.0.0.alpha + + 1.0.0.alpha + 1.0.0.alpha 1.0.5 1.4.0 2.1.8 @@ -46,10 +53,8 @@ 4.0.0 ojdbc6-11.1.0.7.0 - - org.springframework.boot spring-boot-dependencies @@ -61,42 +66,38 @@ com.casic casic-core - ${casic.version} + ${core.version} com.casic casic-admin-support - ${casic.version} + ${admin.version} - - - - com.casic casic-iris-acs - ${casic.version} + ${pro.version} com.casic casic-iris-device - ${casic.version} + ${pro.version} com.casic casic-iris-support - ${casic.version} + ${pro.version} com.casic casic-iris-register - ${casic.version} + ${pro.version} com.casic casic-iris-atd - ${casic.version} + ${pro.version} @@ -222,12 +223,14 @@ ${java.version} ${java.version} + org.springframework.boot spring-boot-maven-plugin 1.5.9.RELEASE +